Ich fange gerade an, C++ zu unterrichten, komme von einigen anderen Sprachen. Ich wünschte, es gäbe eine Möglichkeit, die API, die von einer (Studenten-) Datei erstellt wurde, regelmäßig zu überprüfen.Gesundheit der Header
Angenommen, ein Student trägt diese Datei:
// this is stu.cpp
#include <iostream>
using namespace std;
double x(int y) {return y+0.5;}
Eigentlich nehme ich den Schüler fragte eine andere Funktion int x (int) zu definieren. Ich möchte in der Lage sein, dies zu überprüfen, indem Sie diesen Code ausführen:
// this is stu.h
int x(int);
// this is gra.cpp
#include "stu.h"
#include <iostream>
using namespace std;
int main() {
cout << x(0); // test their code
}
So versuche ich zu sehen, ob die Umsetzung des Studenten die erforderliche Schnittstelle angepasst, und Testen auf 0. Eingang Ich habe dies würde gehofft würde nicht kompilieren. Aber wenn ich
g++ -Wall -Wconversion *.cpp -o gra
./gra
Es kompiliert und läuft ohne Absturz, Ausgabe geben 0. Dies bleibt wahr, auch wenn ich die beiden Dateien separat und verknüpfen sie nach kompilieren.
Ich weiß, dass nm
Rückgabetypen nicht auflistet. Ist das der gleiche Grund, warum wir zwei Dateien verknüpfen können, wenn die Rückgabewerte nicht übereinstimmen? Gibt es einen vernünftigen Weg, das zu testen? (Wie gibt es kompilierungszeit typeof Zusicherungen?)
Oder ist dies ein spezifischer Fehler wegen int und doppelt ineinander umwandelbar? Gibt es zusätzliche Compiler-Optionen, die dies erfassen könnten?
Sie erhalten einen Fehler, wenn 'stu.cpp'' stu.h' enthält. –
Yup, sollten Sie mit '-Wall -Werror -Wextra 'kompilieren, und geben Sie den Studenten die Header-Datei zu implementieren (was beinhaltet' # include'-ing). –
Sie könnten versuchen mit 'g ++ -flto -Wall -Wconversion * .cpp -o gra' –