簡體   English   中英

用clang強制執行A​​NSI 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進行編譯:

tc:1:1:錯誤:未知類型名稱'內聯'

tc:1:23:錯誤:預期')'
int foo(int * restrict p)

但是使用-std=c99將編譯沒有錯誤。

GCC 5( https://gcc.gnu.org/gcc-5/porting_to.html )引入了非標准的預定義標識符警告,顯然clang沒有適應它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM