GCC gibt beim Kompilieren von [duplicate] keine Warnung aus

8

Der folgende Code wird kompiliert und ausgeführt, aber ich erwarte eine Warnung beim Kompilieren:

%Vor%

GCC, von einem Online-Compiler mit Kommandozeilenargument

%Vor%

gibt die folgende Warnung aus, wenn

kompiliert wird %Vor%

weil ich keine (void*) Besetzung hinzugefügt habe bevor &x als %p erwartet ein Argument vom Typ void*  Aber wenn ich mit

kompiliere %Vor%

oder

%Vor%

oder

%Vor%

GCC (in meinem PC) gibt nicht eine Warnung aus, während ich (wieder in meinem PC) mit

kompiliere %Vor%

oder

%Vor%

oder

%Vor%

oder

%Vor%

Ich bekomme die oben erwähnte Warnung. Warum ist es so? Meine GCC-Version ist 4.8.1 und ich verwende Windows. Ich kompiliere von der Konsole aus, d. H.% Co_de%.

    
Cool Guy 03.01.2015, 13:26
quelle

2 Antworten

2
  

Warum ist das so?

Erstens kann ich diesen inkonsistenten Zustand auch mit mingw32 gcc 4.8.1 auf meinem Rechner reproduzieren.

Obwohl die Diagnose vom C-Standard nicht benötigt wird (keine Einschränkung der Beschränkung), gibt es keinen Grund, dass gcc die Diagnose mit -std=gnu11 und nicht mit -std=c11 absetzt.

Außerdem erscheint mit gcc 4.8.2 unter Linux auf meinem Rechner die Diagnose mit -std=c11 und -std=gnu11 .

Es sieht also aus wie ein Fehler in gcc (entweder in gcc 4.8.1 oder in mingw32 gcc 4.8.1).

    
ouah 03.01.2015, 13:55
quelle
0

Dokumentation für beide GNU libc und C99 libc (Seite 315 der pdf ) sagt ausdrücklich, dass die Argument für %p conversion "muss vom Typ void * " sein.

Die Tatsache, dass die Warnung nicht ausgegeben wird, sollte eine Besonderheit dessen sein, was Ihr Compiler über Cxx-Standards denkt. Ein Lager gcc 4.8.2 auf Ubuntu 14.04 gibt die Warnung für alle sechs in Ihrem Beitrag erwähnten Standards aus.

    
Konstantin Shemyak 03.01.2015 14:00
quelle

Tags und Links