Обнаружить записываемые статические данные - PullRequest
1 голос
/ 19 ноября 2010

Я только что обнаружил, что в некоторых частях кода, над которым я работаю, некорректно используются записываемые статические данные, где он может / должен использовать постоянные данные.

Если не делать глупого поиска и замены для "статического"-> "static const", есть ли способ предотвратить возможность записи всех «статических» данных, во многом как то, как постоянные строковые данные можно сделать явными для записи?

Я использую цепочку инструментов GCC, цель разработки -x86.

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

Вероятно, в некоторых из используемых вами библиотек есть доступные для записи статические данные.(Например, стандартные библиотеки C и C ++).Делать это const было бы плохо.

Возможно, лучше пройтись по коду и изменить вещи вручную.

Вы можете использовать nm, чтобы получить список символов в ваших .o файлах.,В выводе nm в первом столбце указан тип символа;буквы B, C, D, G или S указывают на доступные для записи данные.В последнем столбце указывается (искаженное) имя переменной.Можно написать небольшой скрипт для разбора вывода nm и поиска его.

0 голосов
/ 19 ноября 2010

Полагаю, лучше всего добавить «const» ко всем имеющимся у вас переменным.Вы можете использовать «#define static static const» (обратите внимание, что он будет ломаться везде, где вы его уже изменили), но я не рекомендую делать это (сделает ваш код намного менее читабельным и, возможно, сломает некоторые вещи, и вы выиграли »не может объявлять статические функции).

...