ich vor kurzem erfahren, dass es parameter-type-lists ist, die in C leer sein:Wie findet man die Verwendung von Parameter-Typ-Listen in einer C-Code-Basis?
int print();
int main() {
print("hallo"); // << valid but highly unintuitive
}
int print() {
}
In diesem Code jemand habe nur vergessen print(void)
(vielleicht einen C++ Entwickler) zu schreiben, aber jemand bietet sonst einen Parameter. Compilation zeigt keine Warnungen oder Fehler:
$ make test -Wstrict-prototypes -Wimplicit -Wimplicit-function-declaration -Wall
cc test.c -o test
Ich habe keinen Compiler-Flag finden, die über leere Parameter-Typ-Listen warnen, nur implizite Funktionsdeklaration.
Gibt es etwas, was ich tun kann, das mir hilft, alle Verwendungen von Parameter-Typ-Listen in einer gegebenen Codebasis zu finden?
z.
- letting a C++ compiler compile the C code as C++ und lösen Art Fragen (C++ erlaubt keine Argumente, wenn die Erklärung sie nicht aufführen)
- den Compiler Liste alle Funktionsdeklarationen lassen (weiß nicht, wenn möglich) und manuell für leere Klammern gesucht
grep
ing für Parameter-Typ-Listen (zu komplex für mich :))- deaktivieren Parameter-Typ-Listen über Compiler-Schalter (das fand jede nicht)
Sie können C-Code nicht mit einem C++ - Compiler kompilieren! C++ ist eine andere Sprache und identische Syntax impliziert keine identische Semantik. C++ ist ** nicht ** "C mit Klassen"! Und Parameter-Typ-Listen sind genau das, was Sie ** für korrekte C verwenden müssen. Alles andere ist seit 17 Jahren veraltet und veraltet. Nicht klar, was du erreichen willst. – Olaf
http://Stackoverflow.com/a/861556/1668622 – frans
Sie haben Recht, aber die Unterschiede zu gültigen C++ - Code sind genau das, was ich versuche zu finden - das Problem ist, ich werde viel mehr Probleme finden als beabsichtigt:) – frans