Hallo.
Habe mir vorgenommen bestimmte Coding Rules für C++ zu prüfen.
Für diesen Zweck will paar Scripte in Phython schreiben, aber weil ich ziemlich neu in diesem GEbiet bin bitte um eure Hilfe und Ratschläge.
Also sag ma das folgende Beispiel:
Will ein kleines Script schreiben, der prüfen soll:
Alle VAriablen in einer Klasse müssen in dem Constriktor dekklariert sein.
Wie soll ich vorgehen.
Für Ratschläge oder vielleicht Beispielscode werde mich sehr freuen.
Danke im voraus.
Codingrules mit Python umsetzen..
Ne noch nicht.
Aber ich habe mir gedacht, dass ich hier paar Ideen bekomme.
Ich denke dass es mit 2 bis drei schleifen sich erledigen lässt.
was meinst du?
wie soll ich bei der erstellung eines Phython Programm für diese Aufgabe vorgehen. GEdankenmässig?
Danke im voraus.
Aber ich habe mir gedacht, dass ich hier paar Ideen bekomme.
Ich denke dass es mit 2 bis drei schleifen sich erledigen lässt.
was meinst du?
wie soll ich bei der erstellung eines Phython Programm für diese Aufgabe vorgehen. GEdankenmässig?
Danke im voraus.
Als erstes musst du ja aus einer gegeben C++-Datei (*.cpp) alle Klassen filtern können -> Funktion ``filter_cpp_classes`` schreiben, die einen Dateinamen als Parameter nimmt und alle gefundenen Klassen als Generator zurückgibt (itertools.ifilter).
Wenn du mit Variablen Instanzvariablen meinst, musst du anschießend innerhalb dieser Klasse über alle Methoden (außer den Konstruktor!) iterieren und alle Variablennamen, denen ein ``this->`` vorangestellt ist, in einer Liste speichern. Danach prüfst du, ob alle (built-in Funktion ``all(iterable)``) in der Liste gespeicherten Variablen auch im Konstruktor deklariert wurden.
So würde ich zumindest vorgehen.
Wenn du mit Variablen Instanzvariablen meinst, musst du anschießend innerhalb dieser Klasse über alle Methoden (außer den Konstruktor!) iterieren und alle Variablennamen, denen ein ``this->`` vorangestellt ist, in einer Liste speichern. Danach prüfst du, ob alle (built-in Funktion ``all(iterable)``) in der Liste gespeicherten Variablen auch im Konstruktor deklariert wurden.
So würde ich zumindest vorgehen.
Nur mal so als Anmerkung: Man kann im Konstruktor bei C++ nichts deklarieren, also ausser lokalen Variablen natürlich, aber die sind ja *lokal*. Ich nehme mal an, hier ist *initialisieren* gemeint!? Dann braucht man sich die ganzen Methoden aber nicht anzuschauen, sondern "bloss" die Felder in der Klasse, und den Code im Konstruktor.
Zum Parsen würde ich mir erst einmal das XML ansehen, welches der `gccxml` ausspuckt, bzw. erst einmal schauen, ob man sich das nicht sowieso schon als Warnung vom `g++` ausgeben lassen kann. Bevor man das Rad womöglich neu erfindet…
Zum Parsen würde ich mir erst einmal das XML ansehen, welches der `gccxml` ausspuckt, bzw. erst einmal schauen, ob man sich das nicht sowieso schon als Warnung vom `g++` ausgeben lassen kann. Bevor man das Rad womöglich neu erfindet…