Tout simplement parce que le langage cible de développement est C ++, il n'y a aucune raison de ne pas utiliser un autre langage. Pour vérifier l'état du code source que vous écrivez en C ++, vous pouvez le vérifier à l'aide d'un langage de script.
Si vous modifiez le code existant par essais et erreurs, il peut devenir un code étrange avant que vous ne le sachiez. Vous pouvez être dans une situation étrange lorsque vous coupez et collez un autre programme dans un ensemble pour améliorer ses fonctionnalités.
-Bien qu'elle soit définie dans le fichier d'en-tête, les constantes de macro et les fonctions de macro qui ne sont pas utilisées dans la portée du programme cible sont laissées sans surveillance. ・ Déclaration externe non utilisée -Existence de définition de macro avec le même nom
Si vous ne révisez pas complètement le code que vous avez écrit dans «Déplacez-le d'abord», vous vous retrouvez avec un code aussi étrange. Si le nombre de lignes de code est petit grep '#define' *.h *.cpp Ce sera en quelque sorte, mais Dans une situation où le nombre total de lignes du programme augmente et contient malheureusement beaucoup de macros, vous voulez un outil meilleur que grep.
La macro est #define DATA_SIZE (1000) #define square(x) ((x) * (x))
Il est décrit en étant séparé par des espaces et des tabulations tels que Il existe une règle selon laquelle le premier champ est "#define". En profitant de cela, l'outil de vérification de l'état mentionné ci-dessus peut être créé en créant les outils suivants.
-Split en champs sous forme de texte délimité par des espaces / tabulations sur les lignes contenant #define. -Lorsque le premier champ correspond à "#define", créez un dictionnaire avec le champ suivant comme mot-clé. La valeur du dictionnaire est une liste des noms de fichiers du code source de l'emplacement de l'occurrence. -Après avoir traité une série de code source de cette manière, si la valeur du dictionnaire contient les noms de fichiers de plusieurs codes source, affichez-les.
Un tel outil peut être facilement écrit dans un langage de script. Vivons une vie confortable en C ++ en utilisant le langage de script.
J'ai écrit un script de référence.
doubledMacro.py
# -*- coding: utf-8 -*-
#pylint: disable=C0103
import os
u"""
Un script qui trouve les macros en double dans le fichier d'en-tête
"""
def findDoubledMacro(wdir):
d = {}
for root, dirs, files in os.walk(wdir):
files = [p for p in files if os.path.splitext(p)[1] in ('.h', '.hpp')]
for p in files:
fullname = os.path.join(root, p)
for line in open(fullname, "rt"):
oline=line.replace("(", " ")
oline=oline.replace(")", " ")
oline=oline.replace(",", " ")
f = oline.strip().split()
if len(f) >= 2 and f[0] == "#define":
if not d.has_key(f[1]):
d[f[1]] = []
d[f[1]].append(p)
for k in d.keys():
if len(d[k]) > 1:
print k, d[k]
if __name__ == "__main__":
wdir = "."
findDoubledMacro(wdir)
Exemple de résultat d'exécution
python
max ['sourceA.h', 'sourceB.h']
_UNICODE ['sourceB.h', 'sourceC.h']
DATA_SIZE ['sourceA.h', 'sourceB.h']
Données d'entrée utilisées pour les résultats d'exécution
sourceA.h
#ifndef SOURCEB_H
#define SOURCEB_H
#define DATA_SIZE (100)
#define _UNICODE
#define DEBUG_VIEW
#define max(x,y) ((x) > (y) ? (x) : (y))
#endif
sourceB.h
#ifndef SOURCEB_H
#define SOURCEB_H
#define DATA_SIZE (100)
#define _UNICODE
#define DEBUG_VIEW
#define max(x,y) ((x) > (y) ? (x) : (y))
#endif
subDir/sourceC.h
#ifndef SOURCEC_H
#define SOURCEC_H
#define DATA_SIZEC (100)
#define _UNICODE
#define DEBUG_VIEW2
#endif
Post-scriptum:
[Utilisons un langage de script pour une vie C ++ confortable 2 Générer automatiquement une source C ++] (http://qiita.com/nonbiri15/items/3e5361613390a8ff516e)
Recommended Posts