[PYTHON] Utilisez un langage de script pour une vie confortable en C ++

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.

** Bonus: Script pour trouver les macros en double dans le fichier d'en-tête **

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)

Utilisons un langage de script pour une vie C ++ confortable 3-Laissons la création de graphes à matplotlib-

Utilisons le langage de script pour une vie confortable en C ++ 4-Utilisons la propre bibliothèque de C ++ à partir du langage de script-

Utilisez un langage de script pour une vie C ++ confortable 5-Utilisez l'environnement intégré de Spyder pour vérifier les données numériques-

Recommended Posts

Utilisez un langage de script pour une vie confortable en C ++
Utilisons un langage de script pour une vie C ++ confortable 2 Générer automatiquement une source C ++
Utilisons le langage de script pour une vie confortable en C ++ 4 - Utilisons la propre bibliothèque de C ++ à partir du langage de script -
Utilisez un langage de script pour une vie confortable en C ++ 3-Laissez le graphique à matplotlib-
Utilisez un langage de script pour une vie C ++ confortable-OpenCV-Port Python vers C ++ -
Utilisons un langage de script pour une implémentation C ++ confortable après vérification avec python
Utilisons un langage de script pour une vie confortable en C ++ 6-Que diriez-vous de développer un programme en tant que bibliothèque pour Python?
Utilisez un langage de script pour une vie C ++ confortable 5 - Utilisez l'environnement intégré de Spyder pour vérifier les données numériques -
Remarques sur l'intégration du langage de script dans les scripts bash
Remarque 2 pour intégrer le langage de script dans un script bash
Scripting Language C —— Comment un fichier texte sans shebang est exécuté
Préparer un environnement de langage de programmation pour l'analyse des données
Désactivez les tendances Twitter et ayez une vie confortable sur Twitter! !!
Créer un fichier qui peut être exécuté dans le langage de script
Création d'un outil de gestion de bibliothèque d'en-tête uniquement pour C / C ++
Envelopper C avec Cython pour une utilisation à partir de Python
Configurer un serveur UDP en langage C
Envelopper C ++ avec Cython pour une utilisation à partir de Python
[C] Utilisez qsort ()
Créer un ensemble de données d'images à utiliser pour la formation
Mettre en place un environnement de développement pour le traitement du langage naturel
Essayez de créer un module Python en langage C
[Introduction à python] Introduction rapide à Python pour les programmeurs C ++ occupés
Pratique pour utiliser les sous-graphiques matplotlib dans l'instruction for