【发布时间】:2016-08-17 10:42:47
【问题描述】:
在我的项目中使用命令“what”来查询有关可执行文件的一些信息(编译日期,版本,...)。 我正在修复一个错误,因为我们更改了 gcc 的版本,所以输出中缺少一行。该字符串是在本地范围内定义的:
char string_for_what = "@(#) Component comp1";
这个字符串从未被使用过。我假设优化器已将其删除。
我认为正常的更正应该是在全局范围内声明字符串。但是,如果不使用它,是什么阻止了未来的编译器对其进行优化呢?
我曾考虑调用strlen("@(#) Component comp1") 以确保使用该字符串,但似乎clang 正在优化此对常量字符串的调用。
我应该打电话给fopen("@(#) Component comp1") 吗?如果有人使用此名称创建文件,我可能会丢失一个文件描述符。这似乎有效,但似乎也有点矫枉过正。
【问题讨论】: