abivan (27.06.2013 13:02 - 15:08, просмотров: 2878)
никогда не задумывался делал по кернигану. А тут сделал по другому и компиляторы не поправили. Есть 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