C 与 C++ 中的 Clang -Wunused-const-variable

Clang -Wunused-const-variable in C vs. C++

一个只有 const 声明的文件,像这样:

const int genericRC = 0;

当使用 clang 编译时,C++ 前端会警告这个未使用的变量。然而clang C前端对此却只字未提:

$ cat x.sh
clang   -c src/x.c   -Wall -std=c11
clang++ -c src/t.cpp -Wall -std=c++11

$ ./x.sh
src/t.cpp:1:11: warning: unused variable 'genericRC' [-Wunused-const-variable]
const int genericRC = 0;
          ^
          1 warning generated.

C 与 C++ const 对于此类 const 静态范围变量是否有任何根本区别,或者这只是一个警告,恰好在 clang C++ 前端实现,而不是在 C 前端实现.

在 C++ 中,它具有内部链接,因此编译器可以知道它未被使用。在 C 中,它具有外部链接,因此它可能会被另一个翻译单元使用,因此发出警告还为时过早。