同名的变量和常量

2024-04-04

我有一个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++ 标准草案 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf部分3.3.2 申报点:

名称的声明点是在其完成之后立即 声明符(第 8 条)及其初始化程序(如果有)之前,除非 下面注明。 [ 例子:

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

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

and:

[ 注意:外部作用域中的名称在以下时刻之前仍然可见 隐藏它的名称的声明。[示例:

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

声明一个包含两个整数的块范围数组。 —结束示例] —结束注释 ]

所以在你的情况下:

int x[x];

The 常量整型 x直到关闭为止都可见]。可供参考常量整型 x之后你可以使用合格标识符 http://en.cppreference.com/w/cpp/language/identifiers:

::x

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

C

等效的引号形成C99标准草案 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf将来自部分6.2.1 标识符的范围 (强调我的):

结构、联合和枚举标签的范围从 在声明类型说明符中的标签出现之后 标签。每个枚举常量的作用域都从该常量之后开始 其定义枚举数在枚举数列表中的外观。任何 其他标识符的作用域在完成后立即开始 它的声明者。

and:

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

没有办法使x在 C 中可见的外部范围内。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

同名的变量和常量 的相关文章

随机推荐

  • TypeScript - 是否可以根据模式匹配甚至长度来验证字符串类型?

    考虑以下组件 它使用一个名为的库styled components创建一个预样式Text成分 const StyledText styled Text font family Roboto color props ITextProps gt
  • 通过 os.system('') 激活 VT100?

    在 Win10 conhost 获得 VT100 支持后 我尝试了一下它 最终我发现os system 激活Python中的支持并得到以下结果 import os print 033 36mTest 033 0m os system pri
  • 将逗号分隔的记录放入字符串数组中?

    我正在尝试读取一个 BufferedReader 它读取包含用逗号分隔的记录的文件 我想将每个字符串 或记录 拆分在两个逗号之间 去掉双引号 然后将每个字符串放入字符串数组的索引中 例如 假设我的文件中有这一行 0001 00203 824
  • 是否有用于带有数据 uri 的链接下载的 Polyfill?

    我有一些代码应该由服务器生成 a href teszt a 它适用于当前的 chrome firefox opera 我希望它支持 MSIE11 AFAIKmsSaveBlob是解决方案 是否有我可以使用的现有 js polyfill 或者
  • 处理 wicket 中 AutoCompleteTextField 的 onchange 事件

    我正在使用 Java 和 Wicket 为 Web 应用程序编写一个自动完成组件 当用户选择自动完成列表的选项之一时 有没有办法处理 onchange 事件来运行一些代码 我尝试在自动完成文本字段中执行此操作 setOutputMarkup
  • Jenkins 不等待 Docker 命令完成

    我试图让 Jenkins 在 Jenkins 从机上的 docker 中运行以下命令 docker run i v pwd opt myapp w opt myapp t mydockerimage bin bash c setup dev
  • MongoDB Atlas 搜索中多个文档具有相同的搜索分数

    有没有办法提高 Atlas 搜索中精确匹配的分数 我在获取 hi 从英语到法语的正确 最佳翻译时遇到问题 经过一番调试后 我发现从聚合返回的前三 3 个文档的得分相同 均为 2 362138271331787 我期望 hi 具有更高的分数
  • 如何在网页中打印适合纸张尺寸(A3、A4、A5 等)的图像?

    我目前正在使用 IE9 和媒体查询 我不需要在其他浏览器中使用此功能 我尝试使用一组规则 例如 page size auto margin 10mm 10mm 10mm 10mm 匹配所有 A 格式 A0 A1 A2 等 的毫米的规则 包括
  • 比较 LINQ-to-SQL 中的 byte[] 和使用模拟的单元测试

    我有以下方法 User IDataContext AuthenticateUser string userName string password byte hash PasswordHasher HashPassword userName
  • Solr 精确单词搜索

    我想配置我的 Solr 搜索引擎 以便获得与我输入的搜索词完全匹配的结果 例如 taxes 应该返回带有 taxes 的文档 而不是 tax taxation 等 任何帮助或提示将不胜感激 我假设您的字段是 TextField 默认情况下
  • PHPUnit:尝试@cover或@use不存在的方法

    我正在学习如何使用 PHPUnit 4 3 5 PHP 5 5 14 进行单元测试 一切都很顺利 直到我尝试获得代码覆盖率 我收到此错误 尝试获取代码覆盖率时尝试 cover 或 use 不存在的方法 MyClass construct 我
  • 使用 ASP.NET 4.5 发布配置文件时如何参数化部署?

    ASP NET 4 5 中的新 pubxml 文件绝对是朝着正确方向迈出的一步 我也喜欢msdeploy的支持parameters xml文件 尽管它们有时没有我想要的那么强大 现在 我该如何结合msdeploy的参数和 pubxml 文件
  • ARM 的启动过程是怎样的?

    我们知道 对于X86架构 按下电源按钮后 机器开始执行0xFFFFFFF0处的代码 然后开始执行BIOS中的代码以进行硬件初始化 BIOS 执行后 它使用引导加载程序将操作系统映像加载到内存中 最后 操作系统代码开始运行 对于ARM架构 使
  • Virtualenv 和 Anaconda 问题

    所以这个问题之前已经提出过 但我还没有找到合适的解决方案 我在Mac上 当我在终端中运行 python 时 我得到 Python 2 7 6 Anaconda 1 9 2 x86 64 default Jan 10 2014 11 23 1
  • 为什么建议在源文件末尾有空行?

    一些代码风格工具推荐这样做 我记得看到一些 unix 命令行工具警告缺少空行 多出一个空行的原因是什么 如果文本文件中的最后一行数据不是以换行符或回车符 换行符组合终止 许多旧工具会出现错误行为 他们忽略该行 因为它以 Z eof 结尾
  • python 字典难题

    在控制台上我输入 gt gt gt class S str pass gt gt gt a hello gt gt gt b S hello gt gt gt d a a b b gt gt gt d hello hello gt gt g
  • 如何创建反转的png图像?

    我正在创建绘制在我的底座上的png图像 从底座我可以保存一个png图像 供您参考 Graphics g e Graphics g DrawLine pen new Point x y new Point x1 y1 base OnPaint
  • Python 有与 java.lang.Math.nextUp 等效的东西吗? [复制]

    这个问题在这里已经有答案了 我有一个Pythonfloat 我想要floats 为 1ULP http en wikipedia org wiki Unit in the last place更大和更小 在Java中 我会这样做Math n
  • 在 CSS 中指定打印的细线粗细

    如果我有一个打印 CSS 样式元素 border 1px solid black or border 0 25pt solid black 打印时线条很粗 至少 1 磅 如果我尝试更小的值 例如 0 05pt 则该线根本不会出现 我怎样才能
  • 同名的变量和常量

    我有一个C代码片段如下 const int x 5 void main int x x int y sizeof x sizeof int printf d y 代码片段将被编译并正确运行 但我不明白如何区分 x variable 和 x