[PYTHON] Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben

Nur weil die Entwicklungszielsprache C ++ ist, gibt es keinen Grund, keine andere Sprache zu verwenden. Um den Zustand des Quellcodes zu überprüfen, den Sie in C ++ schreiben, können Sie ihn mithilfe einer Skriptsprache überprüfen.

Wenn Sie den vorhandenen Code durch Ausprobieren ändern, wird er möglicherweise zu einem seltsamen Code, bevor Sie ihn kennen. Möglicherweise befinden Sie sich in einer seltsamen Situation, wenn Sie ein anderes Programm ausschneiden und in einen Satz einfügen, um dessen Funktionalität zu verbessern.

Wenn Sie den Code, den Sie in "Move it first" geschrieben haben, nicht vollständig überprüfen, erhalten Sie einen so seltsamen Code. Wenn die Anzahl der Codezeilen gering ist grep '#define' *.h *.cpp Es wird irgendwie sein, aber In einer Situation, in der die Gesamtzahl der Zeilen in einem Programm zunimmt und leider viele Makros enthält, möchten Sie ein Tool, das besser als grep ist.

Makro ist #define DATA_SIZE  (1000) #define square(x) ((x) * (x))

Es wird als durch Leerzeichen und Tabulatoren getrennt beschrieben, wie z Es gibt eine Regel, dass das erste Feld "#define" ist. Aus diesem Grund kann das oben genannte Tool zur Integritätsprüfung erstellt werden, indem die folgenden Tools erstellt werden.

-Split in Felder als durch Leerzeichen / Tabulatoren getrennten Text in Zeilen, die #define enthalten. -Wenn das erste Feld mit "#define" übereinstimmt, erstellen Sie ein Wörterbuch mit dem nächsten Feld als Schlüsselwort. Der Wert des Wörterbuchs ist eine Liste der Dateinamen des Quellcodes des Auftrittsorts.

Ein solches Tool kann leicht in einer Skriptsprache geschrieben werden. Lassen Sie uns ein komfortables C ++ - Leben mit der Skriptsprache führen.

** Bonus: Skript zum Auffinden doppelter Makros in der Header-Datei **

Ich habe ein Referenzskript geschrieben.

doubledMacro.py


# -*- coding: utf-8 -*-
#pylint: disable=C0103
import os

u"""
Ein Skript, das doppelte Makros in der Header-Datei findet
"""

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)

Beispiel für das Ausführungsergebnis

python


max ['sourceA.h', 'sourceB.h']
_UNICODE ['sourceB.h', 'sourceC.h']
DATA_SIZE ['sourceA.h', 'sourceB.h']

Eingabedaten für Ausführungsergebnisse

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

Nachtrag:

[Verwenden wir eine Skriptsprache für ein komfortables C ++ - Leben. 2 Generieren Sie automatisch eine C ++ - Quelle.] (http://qiita.com/nonbiri15/items/3e5361613390a8ff516e)

Verwenden wir eine Skriptsprache für ein komfortables C ++ - Leben. 3 - Überlassen wir die Erstellung von Diagrammen matplotlib-

Verwenden wir die Skriptsprache für ein komfortables C ++ - Leben 4 - Verwenden wir die C ++ - eigene Bibliothek aus der Skriptsprache-

Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben. 5-Verwenden Sie die integrierte Spyder-Umgebung, um numerische Daten zu überprüfen.

Recommended Posts

Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben
Verwenden wir eine Skriptsprache für ein komfortables C ++ - Leben. 2 Generieren Sie automatisch eine C ++ - Quelle
Verwenden wir die Skriptsprache für ein komfortables C ++ - Leben. 4 - Verwenden wir die eigene C ++ - Bibliothek aus der Skriptsprache. -
Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben. 3-Überlassen Sie die grafische Darstellung matplotlib-
Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben - OpenCV-Port Python zu C ++ -
Verwenden wir nach Überprüfung mit Python eine Skriptsprache für eine komfortable C ++ - C ++ - Implementierung
Verwenden wir eine Skriptsprache für ein komfortables C ++ - Leben. 6-Wie wäre es mit der Entwicklung eines Programms als Bibliothek für Python?
Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben. 5 - Verwenden Sie die integrierte Spyder-Umgebung, um numerische Daten zu überprüfen.
Hinweise zum Einbetten der Skriptsprache in Bash-Skripte
Hinweis 2 zum Einbetten der Skriptsprache in ein Bash-Skript
Skriptsprache C - Wie wird eine Textdatei ohne Shebang ausgeführt?
Bereiten Sie eine Programmiersprachenumgebung für die Datenanalyse vor
Stummschalten Sie Twitter-Trends und haben Sie ein angenehmes Twitter-Leben! !!
Erstellen Sie eine Datei, die in der Skriptsprache ausgeführt werden kann
Erstellt ein Bibliotheksverwaltungstool nur für Header für C / C ++
Wickeln Sie C mit Cython für Python ein
Richten Sie einen UDP-Server in der Sprache C ein
Wrap C ++ mit Cython zur Verwendung von Python
[C] Verwenden Sie qsort ()
Erstellen Sie einen Datensatz mit Bildern, die für das Training verwendet werden sollen
Richten Sie eine Entwicklungsumgebung für die Verarbeitung natürlicher Sprache ein
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
[Einführung in Python] Hochgeschwindigkeits-Einführung in Python für vielbeschäftigte C ++ - Programmierer
Praktisch, um Matplotlib-Unterzeichnungen in for-Anweisungen zu verwenden