我们尝试在二进制对象中嵌入一个what字符串,以便我们可以查看已部署的可执行文件或共享库的版本号。通常情况下,我们在这个what字符串中嵌入标准的CVS Id信息。例如,我们可能会嵌入:
const char cvsid[] = "@(#)OUR_TEAM_staging_remap_$Revision: 1.30 $ $Name: $";
在C语言代码中。
从man(1) what命令得知:
what工具会为每个文件名搜索模式为@(#)的出现情况,该模式是SCCS get命令(参见sccs-get(1))替换的@(#) ID关键字,并打印其后跟随“,”,“>”,NEWLINE,“\”或NULL字符的内容。
这个变量只有一个实例,且从未被引用。有人建议编译器可能会对其进行优化。
我在C和C++中使用了这种技术多年,使用了各种编译器,但我从未看到过what字符串被优化掉。
有人有想法为什么它们不会被优化掉吗?