Wie Typen bei "incompatible assignment" ausgeben lassen?
-
Hi,
ich durfte eben 30min über Warnungen wegen "incompatible pointer assignment" brüten weil GCC zu doof ist mir die Type mitanzugeben (und ich somit nicht gesehen habe, dass ich einmal fälschlicherweiße ein struct vor einen typedef identifier geschrieben habe).
Andere Compiler können das doch auch (zumundest clang und comeau), wie bekomm ich den GCC dazu das auch zu tun?
Danke!
-
GCC-Zwangsuser schrieb:
... dass ich einmal fälschlicherweiße ein struct vor einen typedef identifier geschrieben habe)...
Mir ist das noch nie passiert... zeige doch mal bitte relevanten Code-Ausschnitt und ungefähr die Zeilen, wo die Warnung ausgegeben wird. Vielleicht kann es der eine oder der andere hier bei sich nachvollziehen und dir viellleicht sogar helfen. Sonst kriegst du gleich zwanzig Antworten mit "habe meine Glaskugel vergessen" o.ä.
-
Freut mich ja für dich, aber inwiefern ist das für meine Frage relevant?
Ich will ganz einfach wissen ob und falls ja wie man GCC in solchen Warnungen dazu bekommt statt einfach nur "incompatible type assignment" auszugeben noch zusätzlich sowas wie "variable a is of type pointer to A and variable b is of type pointer to B" auszugeben.
Falls es dich so sehr interessiert wie es dazu kam, will ich mal nicht so sein, es tritt bei sowas auf:
typedef unsigned foo; void func(foo *p) { struct foo *pp; pp = p; }
-
GCC-Zwangsuser schrieb:
Freut mich ja für dich, aber inwiefern ist das für meine Frage relevant?
Ich will ganz einfach wissen ob und falls ja wie man GCC in solchen Warnungen dazu bekommt statt einfach nur "incompatible type assignment" auszugeben noch zusätzlich sowas wie "variable a is of type pointer to A and variable b is of type pointer to B" auszugeben.
Falls es dich so sehr interessiert wie es dazu kam, will ich mal nicht so sein, es trat bei sowas auf:
typedef unsigned foo; void func(foo *p) { struct foo *pp; pp = p; }
-
Nein, für so was gibt es leider keinen Switch (oder ich kenne ihn noch nicht). Ich würde dir empfehlen, -Werror zu benutzen, damit alle Warnungen als Fehler behandelt werden und man auf solche Sachen so früh es geht aufmerksam wird...
PS: Für mehr Warnungen könnte man noch die aus diesem Thread verwenden (siehe meine Kommentare): http://www.c-plusplus.net/forum/256461-full
-
abc.w schrieb:
Nein, für so was gibt es leider keinen Switch (oder ich kenne ihn noch nicht). Ich würde dir empfehlen, -Werror zu benutzen, damit alle Warnungen als Fehler behandelt werden und man auf solche Sachen so früh es geht aufmerksam wird...
PS: Für mehr Warnungen könnte man noch die aus diesem Thread verwenden (siehe meine Kommentare): http://www.c-plusplus.net/forum/256461-full
Danke. Du hättest mir das aber schon im ersten Posting verraten können
Ich weiß zwar nicht wie du darauf kommst, dass ich keine Flags verwende, aber all die Flags aus dem Thread helfen hierbei auch nicht:
cc -W -Werror -Wall -Wextra -Wabi -Wformat-nonliteral -Wformat-security -Wformat=2 -Winit-self -Wuninitialized -Wmissing-include-dirs -Wswitch -Wswitch-default -Wswitch-enum -Wunused-parameter -Wunused -Wunknown-pragmas -Wstrict-overflow -Wstrict-overflow=1 -Wstrict-overflow=2 -Wstrict-overflow=3 -Wstrict-overflow=4 -Wstrict-overflow=5 -Wfloat-equal -Wundef -Wshadow -Wunsafe-loop-optimizations -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wsign-conversion -Wlogical-op -Waggregate-return -Wmissing-field-initializers -Wpacked -Wpadded -Wredundant-decls -Wvolatile-register-var -Winvalid-pch -Wnormalized=nfkc -Wsequence-point test.c -o test
cc1: warnings being treated as errors
test.c: In function ‘func’:
test.c:7:8: error: assignment from incompatible pointer type