为什么Linux上的C ++混乱不是唯一的

沙迦·谢麦什(Shachar Shemesh)

请考虑以下C ++程序:

int _Z5func2v;

void func2() {
}

当您尝试编译它时,它将失败:

$ g++ test.cpp -c
/tmp/cc1RDxpU.s: Assembler messages:
/tmp/cc1RDxpU.s:13: Error: symbol `_Z5func2v' is already defined
/tmp/cc1RDxpU.s: Error: .size expression for _Z5func2v does not evaluate to a constant

这是因为程序定义了一个全局变量,该全局变量具有与名称处理之后的函数相同的名称。

我可以想到许多解决方法,最简单的方法是在整齐的名称开头使用两个下划线(两个下划线保留给私有实现使用)。

问题是:为什么选择一种方案使之成为可能?

大卫·施瓦兹

以单个下划线后跟一个大写字母开头的名称的保留方式与保留两个下划线的名称相同。

例如,从2003 C ++标准的17.4.3.1.2节开始,“任何包含双下划线(__)或以下划线后跟大写字母(2.11)开头的名称都保留给实现以供任何使用。”

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

(gensym)总是唯一的,`(symb#)不是-为什么?

为什么在构建Navigator之后,初始路由不是堆栈上的唯一路由?

Rand()在C中不是唯一的

连接到Windows共享“网络上的名称不是唯一的”

为什么一个简单的C ++程序会生成这么多分支命令?在Linux上使用perf

为什么我的 R 代码中出现“中断不是唯一的”错误?

Django:重复键值违反了Postgresql的唯一约束而不是SQlite->为什么?

为什么我的查询返回所有行的总和而不是唯一匹配的行?

为什么JWT签名对于特定有效负载不是唯一的

为什么我的ThreadID在并行运行的10个任务中不是唯一的?

为什么 unordered_set 的元素对于自定义 equal_to 不是唯一的

为什么在MariaDB上使用CHECK语句可以在Windows而不是在Linux上运行?

为什么threadID是唯一的?

尝试将唯一索引添加到SQLite表时,为什么会出现“索引列不是唯一的”错误?

.NET Core - 为什么 AsyncLocal<> 参考构建在 Windows 上,而不是 Linux (netstandard2.0)

如何在每一行上给唯一的单词编号,而不是漏掉段落?

为什么Rails真实性令牌会话是持久性的,而不是每个提交都不唯一?

为什么违反唯一键约束而不是主键约束时,MySQL中会出现自动增量间隔?

为什么X服务器在Arch Linux上的TTY1而不是TTY7上运行?

为什么在Windows下,“ toml.load(f)”在此文件上失败(但在Linux上不是)?

为什么 linux 上的 aFile.toURI().toString() 有一个斜杠?

为什么Linux上的fallocate()空间不足时会创建一个非空文件?

为什么在Linux上的history命令的结果中有一个以“ *”开头的空行?

为什么/ proc不能成为Linux上的覆盖文件系统(overlayfs)的一层?

计算每行的唯一值(在索引轴上,而不是列方向)

#1066-不是唯一的表格/别名:我能做些什么?

paxos proposalId为什么需要唯一

在C#中,SQLite随机抛出“约束失败\ r \ nColumn ...不是唯一的”

为什么我的库无法在CocoaPods上扩展并显示为Objective-c,而不是Swift?