LINUX.ORG.RU

История изменений

Исправление vzzo, (текущая версия) :

В старых си функция может не иметь declaration. Пример:

int main() {
    return f();
}

int f() {
    return 1;
}
Сгенерирует воргинг на c99/c11, и не сгенерирует ворнинг на c89. Соотсветственно, inline-функция в каком-нибудь header.h, который не был заинклюжен, не вызовет ошибки на этапе компиляции, а вызовет ошибку на этапе линковки.

[boris@mbp ~]$ gcc-4.8 -o test test.c
Undefined symbols for architecture x86_64:
  "_f", referenced from:
      _main in ccFFgr8T.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
[boris@mbp ~]$ cat test.c
int main() {
	return f();
}

Исходная версия vzzo, :

В старых си функция может не иметь declaration. Пример:

int main() {
    return f();
}

int f() {
    return 1;
}
Сгенерирует воргинг на c99/c11, и не сгенерирует ворнинг на c89. Соотсветственно, inline-функция в каком-нибудь header.h, который не был заинклюжен, не вызовет ошибки на этапе компиляции, а вызовет ошибку на этапе линковки.