Najnowsze wersje gcc i brzękiem na Fedora Linux skompilować następujący program bez błędów:Wywołanie funkcji w instrukcji if bez nawiasów
#include <ctype.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
char c = 'a';
if islower(c)
printf("%d", c);
else
printf("%c", c);
return 0;
}
To z gcc 4.7.2 i brzękiem 3.0. Na moim Macu, przeciwnie, zarówno gcc 4.2.1, jak i Apple clang 4.1 narzekają na brakujące nawiasy w linii "if islower (c)", zgodnie z oczekiwaniami. We wszystkich przypadkach uruchomiłem kompilatory za pomocą "-std = c99".
Czy to błąd w najnowszych wersjach gcc i clang, dziwactwo w języku C, czy coś innego? Standard C99 (http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf s. 133) wydaje się nawiązywać do nawiasów wokół wyrażenia we wszystkich przypadkach.
Czy skompiluje 'jeśli 42 printf (" 42! \ N ");'? Jeśli tak, jest to interesujące podejście do wyrażeń. Formalnie, jeśli zapomnimy o 'if',' 42' i '(42)' są identyczne. Ditto z 'islower (c)' and '(islower (c))'. –
Alexey, to nie do końca prawda, ponieważ gramatyka C wymaga nawiasów w tym konkretnym kontekście. Tak się składa, że nawiasy są tutaj dostarczane przez makro. –
Jelle, dlatego powiedziałem: "to ciekawe podejście do wyrażeń", ponieważ zgodnie z moją wiedzą, pareny są wymagane. –