使用 clang 强制执行 ANSI C89
Enforcing ANSI C89 with clang
我试图让 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
命令完成时没有任何警告。我在这里缺少命令选项吗?
似乎这个特定的警告不是由 clang 发出的,但显然 -std=c89
确实切换了 ANSI C89 语法检查。
例如:
inline int foo(int* restrict p)
{
return *p;
}
将拒绝编译 -std=c89 -pedantic -Wall
:
t.c:1:1: error: unknown type name 'inline'
t.c:1:23: error: expected ')'
int foo(int* restrict p)
但使用 -std=c99
编译时不会出错。
非标准预定义标识符警告是在 GCC 5 (https://gcc.gnu.org/gcc-5/porting_to.html) 中引入的,显然 clang 没有适应它。
我试图让 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
命令完成时没有任何警告。我在这里缺少命令选项吗?
似乎这个特定的警告不是由 clang 发出的,但显然 -std=c89
确实切换了 ANSI C89 语法检查。
例如:
inline int foo(int* restrict p)
{
return *p;
}
将拒绝编译 -std=c89 -pedantic -Wall
:
t.c:1:1: error: unknown type name 'inline'
t.c:1:23: error: expected ')'
int foo(int* restrict p)
但使用 -std=c99
编译时不会出错。
非标准预定义标识符警告是在 GCC 5 (https://gcc.gnu.org/gcc-5/porting_to.html) 中引入的,显然 clang 没有适应它。