用clang强制执行A​​NSI C89

时间:2017-11-29 18:15:58

标签: c clang c89

我试图让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命令完成时没有任何警告。我在这里缺少一个命令选项吗?

1 个答案:

答案 0 :(得分:0)

似乎clang没有发出这个特定警告,但显然-std=c89切换了ANSI C89语法检查。

例如:

inline int foo(int* restrict p)
{
    return *p;
}

将拒绝使用-std=c89 -pedantic -Wall编译:

  

t.c:1:1:错误:未知类型名称'inline'

     

t.c:1:23:错误:预期')'
  int foo(int * restrict p)

但是使用-std=c99编译时会出错。

GCC 5(https://gcc.gnu.org/gcc-5/porting_to.html)引入了非标准预定义标识符警告,显然clang不适应它。