Funktionsaufruf in if-Anweisung ohne Klammern

7

Neueste Versionen von gcc und clam unter Fedora Linux kompilieren das folgende Programm ohne Fehler:

%Vor%

Dies ist mit gcc 4.7.2 und clang 3.0. Auf meinem Mac beschweren sich gcc 4.2.1 und Apple clang 4.1 dagegen wie erwartet über fehlende Klammern in der Zeile "if islower (c)". In allen Fällen habe ich die Compiler mit "-std = c99" ausgeführt.

Ist das ein Fehler in den letzten Versionen von gcc und clang, eine Eigenart in der C-Sprache oder etwas anderes? Der C99-Standard ( Ссылка S. 133) scheint runde Klammern zu enthalten wenn Ausdrücke in allen Fällen.

    
Jelle Zijlstra 02.10.2012, 15:05
quelle

2 Antworten

10

Ich habe gerade die ctype.h -Datei in /usr/include/ctype.h durchgesehen und die folgende Definition für islower gefunden:

%Vor%

Gehe zur Definition für __isctype() Ich finde:

%Vor%

So wird Ihr Code if islower(c) zu:

erweitert %Vor%

Bei der Abrundung wurde die Klammer während der Erweiterung hinzugefügt.

    
Ryan 02.10.2012, 15:28
quelle
13

Es ist wahrscheinlich, dass islower() ein Makro ist und dass die Erweiterung die Klammer hinzufügt.

Veröffentlichen Sie die vorbereitete Ausgabe von GCC, die Sie mit der Option -E kompilieren können.

    
unwind 02.10.2012 15:08
quelle

Tags und Links