Цитата(vipvap @ Feb 17 2006, 13:09)

К сожалению, компилятор IAR не отслеживает ошибки с extern.
Кроме переменных, "можно" по-разному объявить внешние функции в разных файлах и опять же компилятор это пропустит, например, существующая функция
Код
void delay(unsigned [b]char[/b] ms);
в другом файле объявляется как:
Код
extern void delay(unsigned [b]short [/b]ms);
молчит...
Проверялось на IAR3.10c

Вы уверены, что это ошибка? А С++ включен?

Например, вот этот код тоже не вызывает у него возражений:
Код
void delay(byte x) { while(x) x--; }
void delay(word x) { while(x) x--; }
А потом пишем:
Код
byte aaa = 5;
word bbb = 5000;
...
delay(aaa);
delay(bbb);
И смотрим результат:
Код
delay(aaa);
??Exec_3:
delay(aaa);
.... LDI R30, LOW(bbb)
.... LDI R31, (bbb) >> 8
8102 LDD R16, Z+2
2300 TST R16
F011 BREQ ??main_0
??main_1:
950A DEC R16
F7F1 BRNE ??main_1
delay(bbb);
??main_0:
8180 LD R24, Z
8191 LDD R25, Z+1
2F08 MOV R16, R24
2B09 OR R16, R25
F011 BREQ ??main_2
??main_3:
9701 SBIW R25:R24, 1
F7F1 BRNE ??main_3
И видим, что все верно - каждый раз компилятор вызвал (точнее, тут он встроил, что есть хорошо и правильно) правильную функцию.
Эта С++ фича, когда можно использовать одно и то же имя для разных функций, различающихся типами аргументов (не типом возврата), называется перегрузкой функций.
А вот если мы захотим на С такое сделать, то получим:
void delay(word x) { while(x) x--; }
^
"D:\slon\IAR\AVR\!V4\03_Overload\slon.cpp",7 Error[Pe247]: function "delay"
has already been defined