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第 133 页)似乎在所有情况下都要求在 if 表达式周围加上括号。