Gcc 检测可写静态数据

Gcc 检测可写静态数据,gcc,constants,c89,Gcc,Constants,C89,我刚刚发现,我正在处理的代码的某些部分错误地使用了可写静态数据,而它可以/应该使用常量数据 除了对“static”->“static const”进行哑搜索和替换之外,还有什么方法可以防止所有“static”数据都可写,就像常量字符串数据可以显式写一样 我使用的是GCC工具链,开发目标是x86 我想更好的方法是将“const”添加到所有变量中。您可以使用“#define static static const”(注意,无论您在哪里更改它,它都会中断),但我不建议这样做(这会使代码的可读性大大降低

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

除了对“static”->“static const”进行哑搜索和替换之外,还有什么方法可以防止所有“static”数据都可写,就像常量字符串数据可以显式写一样


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

我想更好的方法是将“const”添加到所有变量中。您可以使用“#define static static const”(注意,无论您在哪里更改它,它都会中断),但我不建议这样做(这会使代码的可读性大大降低,可能会中断某些内容,并且您将无法声明静态函数)。

我想更好的方法是将“const”添加到所有变量中。您可以使用“#define static static const”(注意,无论您在哪里更改它,它都会中断),但我不建议这样做(这会使代码的可读性大大降低,并且可能会中断某些内容,并且您将无法声明静态函数)。

您使用的某些库中可能有可写的静态数据。(如标准C和C++库)。做那个常数是不好的

可能最好检查代码并手动更改


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

您使用的一些库中可能有可写的静态数据。(如标准C和C++库)。做那个常数是不好的

可能最好检查代码并手动更改


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

可能最好只是修复代码,而不是尝试使用这样一个难看的黑客。目的是快速得出哪些字段/实际上/必须是可写的,不要将其作为构建要求。与其尝试使用这样丑陋的黑客,不如直接修复代码。目的是快速得出哪些字段/实际上/必须是可写的,而不是将其作为构建要求。啊,当然。使用
nm | grep-i“[BCDGS]”
为我提供了不在只读部分中的符号列表。谢谢你看到我的实际问题,而不仅仅是回答字面上的问题:-)啊,当然。使用
nm | grep-i“[BCDGS]”
为我提供了不在只读部分中的符号列表。感谢您看到我的实际问题,而不仅仅是回答字面上的问题:-)