具有相同名称的变量和常量
Variable and constant with same name
我有一个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.中可见
相关文章:
- 用C++中的一个变量定义一个常量
- 通过多个头文件使用常量变量
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 非常量变量只读位置的赋值
- 多个"常量引用"变量可以共享同一个内存吗?
- 使用大量已知常量变量的正确方法
- 常量成员函数中成员变量的类型
- 无法在具有常量变量大小的类中创建堆栈分配数组
- 错误:constexpr 变量'struct2Var'必须由常量表达式初始化
- 这些语句是否等效(静态变量、常量变量和泛型)
- 如何将变量内容常量转换为 std::array 的大小?
- 我应该使我的局部变量常量还是可移动的
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- 对全局变量的非常量引用的初始化无效
- 如何在 C++ 中的 wcstok 中使用常量 WCHAR* 变量?
- 将 static_cast<int>(-15) 分配给静态常量字符类型变量
- 全局变量/常量的替代方案
- 为什么首选 if( 常量 == 变量 ) 而不是 if ( 变量 == 常量 )
- 在c++中声明一个变量常量有什么意义