Der Code folgt keine Warnungen ausgeben, wenn sie mit beiden gcc
und clang
auf Linux x64
zusammengestellt:Sind mehrere identische Prototypen legal?
Alle Erklärungen, die Bezug zu nehmen:
#include <stdio.h> #include <stdlib.h> void foo(void); void foo(void); void foo(void); int main(void) { return 0; }
IMO, es die folgenden Auszüge aus C99 nach legal das gleiche Objekt oder die gleiche Funktion muss kompatiblen Typ haben; Andernfalls ist das Verhalten nicht definiert.
(...)
Für zwei Funktions Typen kompatibel zu sein, müssen beide kompatible Typen Rückkehr angeben
(...)
Darüber hinaus sind die Parameter Typenlisten, wenn beide vorhanden sind, sollen in der Anzahl der Parameter und in der Verwendung der Ellipse Terminator übereinstimmen; entsprechende Parameter müssen kompatible Typen haben.
(...)
Zwei Typen haben kompatible Typen, wenn ihre Typen gleich sind.
Bin ich richtig? Ich möchte sicherstellen, dass es nicht UB ist und dass mein Verständnis korrekt ist.
C-Standard ist C11. Verwenden Sie keine ungültigen veralteten Versionen des Standards für Diskussionen. – Olaf
Sie könnten es c99 anstelle von c taggen, wenn Sie wirklich c99 verwenden – bruceg
'wenn Sie wirklich c99 verwenden '- Ich habe gehört, dass die meisten Compiler noch nicht alle' C99' Features, geschweige denn 'C11' so implementiert habe ich frage mich, was du mit "wirklich mit C99" meinst – user1042840