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;
}
Run Code Online (Sandbox Code Playgroud)
这是使用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页)似乎在所有情况下都要求使用括号.