Мне интересно, верен ли приведенный ниже фрагмент C, в котором определение f
не повторяет, что f
связано с static
:
static int f(int);
int f(int x) { return x; }
Clang не выдает никаких предупреждений об этом. Прочитал пункт 6.7.1 стандарта С11, не найдя ответа на свой вопрос.
Можно представить и другие вопросы в том же ключе, например, t1.c и t2.c ниже, и было бы хорошо, если бы ответ был достаточно общим, чтобы применить его к некоторым из них, но меня действительно беспокоит только первый пример выше.
~ $ cat t1.c
static int f(int);
int f(int);
int f(int x) { return x; }
~ $ clang -c -std=c99 -pedantic t1.c
~ $ nm t1.o
warning: /Applications/Xcode.app/…/bin/nm: no name list
~ $ cat t2.c
int f(int);
static int f(int);
int f(int x) { return x; }
~ $ clang -c -std=c99 -pedantic t2.c
t2.c:3:12: error: static declaration of 'f' follows non-static declaration
static int f(int);
^
t2.c:1:5: note: previous declaration is here
int f(int);
^
1 error generated.