我试图使C编译器clang进入ANSI C89模式,但没有成功。
下面是一个示例会话:
$ cat t.c
#include <stdio.h>
int main(void)
{
puts(__FUNCTION__);
return 0;
}
$ gcc -pedantic -std=c89 -Wall t.c
t.c: In function ‘main’:
t.c:5:7: warning: ISO C does not support ‘__FUNCTION__’ predefined identifier [-Wpedantic]
puts(__FUNCTION__);
^~~~~~~~~~~~
$ clang -pedantic -std=c89 -Wall t.c
$ clang --version
clang version 3.8.1-24 (tags/RELEASE_381/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin如您所见,clang命令在没有警告的情况下完成。这里有我缺少的命令选项吗?
发布于 2017-11-29 19:41:47
似乎这个特定的警告不是由clang发出的,但是显然-std=c89确实会切换ANSI C89语法检查。
例如:
inline int foo(int* restrict p)
{
return *p;
}将拒绝使用-std=c89 -pedantic -Wall进行编译
t.c:1:1:错误:未知类型名称“内联” t.c:1:23:错误:预期')‘ int foo(int*限制p)
但使用-std=c99编译时不会出现错误。
GCC 5 (to.html)引入了非标准的预定义标识符警告,显然clang不适应它。
https://stackoverflow.com/questions/47559238
复制相似问题