具有相同名称的变量和常量

Variable and constant with same name

本文关键字:变量 常量      更新时间:2023-10-16

我有一个C代码片段,如下所示:

const int x = 5;
void main()
{
    int x[x];
    int y = sizeof(x) / sizeof(int);
    printf("%d",y);
}

代码片段将被正确编译和运行。但我不明白如何区分x"variable"和x"const"。

对于C++,这在C++标准草案3.3.2声明点:中有介绍

名称的声明点紧接在其完成之后声明符(第8条)及其初始值设定项(如有)之前,除非如下所述。[示例:

int x = 12;
{ int x = x; }

这里,第二个x是用它自己的(不确定的)值初始化的。--结束示例]

和:

[注意:外部范围中的名称直到隐藏它的名称声明。[示例:

const int i = 2;
{ int i[i]; }

声明一个由两个整数组成的块范围数组--结束示例]--结束注释]

所以在你的情况下:

int x[x];

常量intx]关闭之前一直可见。要在该点之后引用const-intx,可以使用合格的标识符:

::x

当然,这就引出了一个问题,为什么不使用不同的名称,而不必处理这些边缘案例呢?

C

C99标准草案的等效报价来自第6.2.1节标识符范围emphasis mine):

结构、并集和枚举标记的作用域仅从在声明标签每个枚举常量的作用域都在其定义枚举器在枚举器列表中的外观任何其他标识符的作用域在其声明人

和:

[…]在内部范围内,标识符指定实体在内部范围中声明;外部范围中声明的实体为隐藏(且不可见)在内部范围内。

无法使外部范围内的CCD_ 6在C.中可见