检测可写静态数据

时间:2010-11-19 12:27:47

标签: gcc constants c89

我刚刚发现我正在处理的代码的某些部分错误地使用了可写/可以使用常量数据的可写静态数据。

没有为“静态”做一个愚蠢的搜索和替换 - > “static const”,有没有办法防止所有“静态”数据被写入,就像是如何使常量字符串数据可以显式写入一样?

我使用的是GCC工具链,开发目标是x86。

2 个答案:

答案 0 :(得分:1)

您使用的某些库中可能存在可写的静态数据。 (例如标准的C和C ++库)。制作那个常量会很糟糕。

最好通过代码并手动更改内容。

您可以使用nm获取.o个文件中的符号列表。在nm输出中,第一列给出了符号的类型;字母BCDGS表示可写数据。最后一列给出了(损坏的)变量名称。可以编写一个小脚本来解析nm输出并查找这些。

答案 1 :(得分:0)

我想更好的方法是将“const”添加到您拥有的所有变量中。你可以使用“#define static static const”(注意它会在你已经改变它的地方破坏)但我不建议这样做(会使你的代码更不易读,可能会破坏一些东西,你赢了'能够声明静态函数。)