Wie verhält es sich, wenn zwischen einer externen Deklaration und der Definition nicht übereinstimmende Typen vorliegen?
Angenommen, ich habe zwei Dateien:
== Datei1 ==
extern char* foo;
== File2 ==
double foo;
Diese beiden Dateien scheinen trotz der Typinkongruenz gut mit g ++ und clang ++ zu kompilieren und zu verknüpfen. Soweit ich weiß, wird empfohlen, die externe Deklaration in einen Header zu schreiben, der beide Dateien enthält, damit File2 einen Redefinitionsfehler ausgibt.
Meine Fragen sind:
Führt dies zu undefiniertem Verhalten gemäß dem c ++ - Standard? Wenn nicht was reinkommtfoo in Datei1?Können Linker diese Art von Typinkongruenz feststellen?