ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
420472
abivan (27.06.2013 13:02 - 15:08, просмотров: 2862)
никогда не задумывался делал по кернигану. А тут сделал по другому и компиляторы не поправили. Есть 2 модуля в одном объявляю массив int rgiVar[10]; в другом пишу extern int rgiVar[10]; почему компилятор пропускает(разрешает) размер массива с extern? а дальше начинаются чудеса(объяснимые, конечно) и sizeof работает в двух модулях и типы разные и размеры разные можно для переменной rgiVar задать. ясно что для extern правильно написать так extern int rgiVar[]; тогда хоть предупреждение вылазит при sizeof. компиляторы microsoftC 90г и HiTech STD обычно делаю так в файле any.h пишу #define SIZE_RGVAR 10 #ifdef DEF_EXTERN int rgiVar[SIZE_RGVAR]; #else extern int rgiVar[]; #endif а тут чегото написал #ifdef DEF_EXTERN #define External #else #define External extern #endif #define SIZE_RGVAR 10 External int rgiVar[SIZE_RGVAR]; и прокатило. так может и оставить так? Ведь описание и определение в одном месте и тип и размер совпадают. Поэтому безопасно. Зато начинает работать sizeof и макрос arrsize