Qual é o comportamento quando há tipos incompatíveis entre uma declaração externa e a definição?
Suponha que eu tenha dois arquivos:
== Arquivo1 ==
extern char* foo;
== Arquivo2 ==
double foo;
Esses dois arquivos parecem compilar e linkar bem com o g ++ e o clang ++, apesar da incompatibilidade de tipos. Pelo que entendi, a prática recomendada é colocar a declaração externa em um cabeçalho que ambos os arquivos incluem, então o File2 lançará um erro de redefinição.
Minhas perguntas são:
Isso resulta em comportamento indefinido de acordo com o padrão c ++? Se não é o que entrafoo no arquivo1?Os criadores de link podem pegar esse tipo de incompatibilidade de tipos?