Каково поведение при несовпадении типов между объявлением extern и определением?

Предположим, у меня есть два файла:

== File1 ==

extern char* foo;

== File2 ==

double foo;

Эти два файла, похоже, прекрасно компилируются и связываются как с g ++, так и clang ++, несмотря на несоответствие типов. Насколько я понимаю, рекомендуемая практика - помещать объявление extern в заголовок, который включает оба файла, чтобы File2 выдавал ошибку переопределения.

Мои вопросы:

Приводит ли это к неопределенному поведению в соответствии со стандартом c ++? Если не то, что входит вFoo в файле1?Могут ли линкеры улавливать такое несоответствие типов?

Ответы на вопрос(2)

Ваш ответ на вопрос