Каково поведение при несовпадении типов между объявлением extern и определением?
Предположим, у меня есть два файла:
== File1 ==
extern char* foo;
== File2 ==
double foo;
Эти два файла, похоже, прекрасно компилируются и связываются как с g ++, так и clang ++, несмотря на несоответствие типов. Насколько я понимаю, рекомендуемая практика - помещать объявление extern в заголовок, который включает оба файла, чтобы File2 выдавал ошибку переопределения.
Мои вопросы:
Приводит ли это к неопределенному поведению в соответствии со стандартом c ++? Если не то, что входит вFoo в файле1?Могут ли линкеры улавливать такое несоответствие типов?