Fedora Linux の gcc と clang の最近のバージョンでは、次のプログラムがエラーなしでコンパイルされます。
#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;
}
これは gcc 4.7.2 と clang 3.0 で発生します。対照的に、私の Mac では、予想どおり、gcc 4.2.1 と Apple clang 4.1 の両方が、"if islower(c)" 行に括弧がないことを訴えます。いずれの場合も、"-std=c99" を指定してコンパイラを実行しました。
これは gcc と clang の最近のバージョンのバグですか、C 言語の癖ですか、それとも何か他のものですか? C99 標準 ( http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf p. 133) では、すべての場合に if 式を括弧で囲むことが義務付けられているようです。