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?