Рассмотрим эти примеры:
static int a;
extern int a; //OK -- what linkage does the a have now?
static int a;
int a; //ERROR
extern int a;
static int a; //ERROR
int a;
static int a; //ERROR
extern int a;
int a; //OK as expected
int a;
extern int a; //OK as expected
Почему в первом примере все было в порядке, а во втором нет?
Что касается переменных файловой области (глобальной области), они имеют внешнюю связь и статическую продолжительность, если не указано ключевое слово.
Спасибо
Насколько мне известно, продолжительность связывания и хранения для функций немного отличается.
РЕДАКТИРОВАТЬ: я пытался скомпилировать с помощью gcc 4.5.2 -Wall -pedantic --std=c99
Подробнее: http://c-faq.com/decl/static.jd.html Вы видите, что 1-й пример тоже работает, а 2-й — нет. Однако я не понимаю, чем они так отличаются.