C30 и void** че за на warning: dereferencing type-punned pointer will break strict-aliasing rules
на приведение (void**)
void func(void**p);
void main(){
char *p;
func((void**)&p); // warning
func((void*)&p); // все OK
}
func((void**)&p);
это проходит без предупреждения в keil, iar, MSQC2.5(90х)
а вот в gnucc pic30 нет.
далее в книге кернигана пример
http://www.intelst …6su/KR/ch5kr.html#p511
допускает приведение void**
#define MAXLINES 5000 /* максимальное число строк */
char *lineptr[MAXLINES]; /* указатели на строки текста */
void qsort(void *lineptr[], int left, int right,
int (*comp)(void *, void *));
int numcmp(char *, char *);
/* сортировка строк */
main(int argc, char *argv[])
{
int nlines; /* количество прочитанных строк */
int numeric = 0; /* 1, если сорт. по числ. знач. */
if (argc > 1 && strcmp(argv[1], "-n") == 0)
numeric = 1;
if ((nlines = readlines(lineptr, MAXLINES)) >= 0) {
qsort((void **) lineptr, 0, nlines-1,
(int (*)(void*,void*))(numeric ? numcmp : strcmp));
writelines(lineptr, nlines);
return 0;
} else {
printf("Bведено слишком много строк\n");
return 1;
}
}
вот еще упоминание про void**
http://www.prog-ga …u.visual.cpp/3366.html
так как же быть?