我刚刚发现我正在处理的代码的某些部分错误地使用了可写静态数据,它可以/应该使用常量数据。
没有对“static”->“static const”进行愚蠢的搜索和替换,有什么方法可以防止所有“静态”数据可写,就像如何使常量字符串数据显式可写一样?
我正在使用 GCC 工具链,开发目标是 x86。
您使用的某些库中可能有可写的静态数据。(例如标准的 C 和 C++ 库)。制作那个 const 会很糟糕。
最好通过您的代码并手动更改内容。
您可以使用nm
来获取.o
文件中的符号列表。在nm
输出中,第一列给出了符号的类型;字母B
、、、C
或D
表示G
可S
写数据。最后一列给出(损坏的)变量名称。可以编写一个小脚本来解析nm
输出并查找这些。
我想更好的方法是将“const”添加到您拥有的所有变量中。您可以使用“#define static static const”(请注意,它会在您更改它的任何地方中断)但我不建议这样做(会使您的代码可读性大大降低,并且可能会破坏一些东西,而且您不会不能声明静态函数)。