Jakie jest zachowanie w przypadku niezgodnych typów między deklaracją extern a definicją?

Załóżmy, że mam dwa pliki:

== Plik1 ==

extern char* foo;

== Plik2 ==

double foo;

Te dwa pliki wydają się kompilować i łączyć dobrze z g ++ i clang ++ pomimo niezgodności typów. Jak rozumiem, zalecaną praktyką jest umieszczenie deklaracji extern w nagłówku, który zawiera oba pliki, więc File2 rzuci błąd redefinicji.

Moje pytania to:

Czy powoduje to niezdefiniowane zachowanie zgodnie ze standardem c ++? Jeśli nie, to co się dziejebla w File1?Czy łączniki mogą złapać ten rodzaj niedopasowania?

questionAnswers(2)

yourAnswerToTheQuestion