Also z.B. sowas:
Code: Alles auswählen
expected ‘void **’ but argument is of type ‘char **’
Hintergrund: Ich habe relativ viele Funktionen, die mehr oder weniger Polymorph sind. Jedes mal auf void* zu casten macht das ganze eher unübersichtlicher.
Code: Alles auswählen
expected ‘void **’ but argument is of type ‘char **’
Nein. Der "fix" ist wie schon angemerkt schlicht alle Pointer explizite zu casten. Darauf habe ich aber keine Lust. Der code wird dadurch, dass er zu 50% aus casts besteht nicht übersichtlicher. Ich halte es durchaus für vernünftig das C Pointer implizit castet. Viele andere Programmirsprachen casten weit mehr implizit (z.B. muss in der Bash praktisch gar nichts gecastet werden) und der Code ist deswegen auch nicht falsch.Natureshadow hat geschrieben:Die Warnungen gibt es mit gutem Grund.
Code: Alles auswählen
#include <stdio.h>
#define foo(a, b) __foo((void *)(a), (void *)(b))
void __foo(void *bar, void *baz) {
printf("__foo(%p,%p)\n", bar, baz);
}
int main(void) {
char *bar = NULL;
char *baz = bar+1;
foo(bar, baz);
return 0;
}
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier