2010-11-19 25 views
1

Je viens de découvrir que certaines parties du code sur lequel je travaille n'utilisent pas correctement les données statiques inscriptibles où elles pourraient/devraient utiliser des données constantes. À moins de faire une recherche stupide et de remplacer «statique» -> «statique const», est-il possible d'empêcher toute écriture de données «statiques», tout comme la façon dont les données de chaîne constante peuvent être explicitement créées inscriptible? J'utilise la chaîne d'outils GCC, la cible de développement est x86.Détecter les données statiques inscriptibles

+0

Il est probablement préférable de simplement corriger votre code plutôt que d'essayer d'utiliser un hack laid comme celui-ci. –

+0

Eh bien, l'intention est de dériver rapidement quels champs/réellement/doivent être inscriptibles, et non d'en faire une exigence de construction. – Christoffer

Répondre

1

Il existe probablement des données statiques en écriture dans certaines des bibliothèques que vous utilisez. (Telles que les bibliothèques standard C et C++). Faire ce const serait mauvais.

Il est probablement préférable de passer en revue votre code et de changer les choses manuellement. Vous pouvez utiliser nm pour obtenir une liste de symboles dans vos fichiers .o. Dans la sortie nm, la première colonne indique le type de symbole; les lettres B, C, D, G ou S indiquent des données inscriptibles. La dernière colonne donne le nom de la variable (mutée). Il est possible d'écrire un petit script pour analyser la sortie nm et de les rechercher.

+0

Ah, bien sûr. En utilisant 'nm | grep -i "[BCDGS]" 'me donne une liste de symboles qui ne sont pas dans des sections en lecture seule. Merci d'avoir vu mon problème et de ne pas avoir répondu à la question littérale :-) – Christoffer

0

Je suppose que le meilleur moyen est d'ajouter le "const" à toutes les variables que vous avez. Vous pouvez utiliser un "#define static static const" (notez qu'il se casse partout où vous l'avez déjà modifié) mais je ne le recommande pas (cela rendra votre code beaucoup moins lisible et cassera peut-être certaines choses, et vous l'aurez gagné ' t être capable de déclarer des fonctions statiques).