【发布时间】:2017-04-10 01:50:42
【问题描述】:
只有一个 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.
对于这种类型的 const 静态作用域变量,C 与 C++ const 是否有任何根本区别,或者这只是一个警告,恰好在 clang C++ 前端实现,而不是在 C 前端实现。
【问题讨论】:
-
C 和 C++ 是不同的语言。为什么你期望相同的语法意味着相同的语义?
const是限定符,而不是范围。 -
@Olaf:我在这里没有看到任何期望,只有一个完全合理且恰当的问题。
-
@Olaf。因为这个陈述是如此简单,我没想到会有任何语言特定的语义。我知道 const 是一个限定符。我是说这个变量是静态作用域的(MM 下面的答案表明这个作用域假设实际上是这种特殊差异的根源)。
-
@BoundaryImposition:这个问题显然源于假设 C 和 C++ 对于相同的功能表现相同。
-
@PeeterJoot:至少 C 标准中没有“静态范围”。答案没有使用这个术语是有充分理由的。链接与范围非常不同。我可以建议您使用完善的标准术语吗?