Есть ли какая-то - на уровне стандарта - защита от некорректного использования объявлений extern в C? Например, пусть в одном файле есть
extern int global;
в другом -
double global = 3.1416;
Ведь mangling имен - это только в C++, который, конечно, в этой ситуации защитит (на уровне линковщика), в отличие от C, который должен скомпилировать и не поморщиться...
Получается, что в обычном C - только совесть программиста препятствие к некорректному использованию? никакого иного механизма нет (помимо вынести объявление extern в заголовочный файл и включать его во все файлы проекта)?
#define-#ifndef-#endif– nick_n_a Dec 12 '16 at 11:22#ifndef __global_def #define __global_def double global = 3.1416; #endif– nick_n_a Dec 12 '16 at 11:27externвоспринял как объявление и создал эту переменную? Разве это допустимо? VC++, например, при линковке сообщил об отсутствии такой переменной - и это, по-моему, верно. Что до вынесения в заголовочный файл - как бы это сформулировать... Если аккуратно ходить, то можно и как Пети, между небоскребами по канату бегать. Но лучше проложить дорогу и поставить перила :) Недаром же в языке, например, имеется типизация, или еще какие-то вещи, не позволяющие программисту делать глупости. Хотя можно было бы просто посоветовать - не создавай проблем :) – Harry Dec 12 '16 at 13:48COMMONв фортране. – avp Dec 13 '16 at 22:10