优化程序与专用于 what 命令的字符串之间的交互
Interaction between the optimizer and strings dedicated to the what command
命令"what"在我的项目中用于查询有关可执行文件的一些和平信息(编译日期,版本等)。我正在修复一个错误,即由于我们更改了 gcc 的版本,因此输出中缺少一行。该字符串是在本地范围内定义的:
char string_for_what = "@(#) Component comp1";
从未使用此字符串。我假设优化器已经删除了它。
我认为正常的更正应该是在全局范围内声明字符串。但是,如果不使用它,是什么阻止了未来的编译器对其进行优化?
我曾考虑过调用strlen("@(#) Component comp1")
以确保使用字符串,但似乎 clang 正在优化对常量字符串的调用。
我叫fopen("@(#) Component comp1")
?如果有人使用此名称创建文件,我可能会丢失一个文件描述符。这似乎有效,但似乎也有点矫枉过正。
将此声明移动到全局范围很容易导致违反一个定义规则。
您可以禁止使用关键字优化这些变量volatile
。
[C++11: 3.7.3:]
如果具有自动存储持续时间的变量具有初始化或 有副作用的析构函数,在结束前不得销毁 的块,也不应将其作为优化消除,即使它 似乎未使用,(...
和:
[C++11: 1.9.12:]
访问由易失性gl值(3.10)指定的对象,修改 对象,调用库 I/O 函数,或调用 这些操作中的任何一个都是副作用吗
相关文章:
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 两个字符串之间的数学运算
- 目标是找到两个 c 字符串之间的公共前缀(必须使用特定的函数标头)
- 我需要在C++的两个字符串之间找到共同的前缀
- 如何在没有映射的情况下在枚举和字符串之间进行转换?
- 正则表达式匹配字符串之间的数字
- 如何更有效地计算n个字符串之间的不匹配分数?
- 最接近的字符串:在字符串阵列中找到2个字符串之间的最小距离
- 在字符串之间插入字符
- STD :: cin和Scanf()应用于字符串之间的区别
- 使用 c++ 获取两个日期与时间字符串之间的差异(以秒为单位)
- 如何在C 中的字符串之间留出空间
- 在文本中的两个非唯一字符串之间获取子弦
- 假定相同的字符串之间的比较失败' == '比较
- C++提取两个字符串之间的数据
- C++ 和 pascal 字符串之间的区别
- 如何在C++中获取子字符串并在字符串之间添加字符
- 在C++代码中,如何让用户在2个文本字符串之间输入一个数字
- 如何在Visual C 中的BSTR和32位Unicode字符串之间进行转换