我有一个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];
const int x
在关闭之前是可见的。 要在该点之后引用const int x
,您可以使用限定标识符 :
::x
当然这引出了一个问题,为什么不只是使用不同的名称而不必处理这些边缘情况?
C
C99标准草案中的等效引号来自第6.2.1
节标识符的范围 ( 强调我的 ):
结构,联合和枚举标记具有在声明标记的类型说明符中标记出现之后开始的范围。 每个枚举常量都具有在枚举器列表中定义枚举器出现之后开始的范围。 任何其他标识符的范围都在其声明者完成之后开始。
和:
[…]在内部范围内,标识符指定在内部范围内声明的实体; 在外部作用域中声明的实体在内部作用域内是隐藏的(并且不可见)。
没有办法使外部范围中的x
在C中可见。
以上就是c/c++开发分享具有相同名称的变量和常量相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/559669.html