Как я знаю, объекты в C имеют 3 типа связей: 1) внешние 2) внутренние и 3) нет, а объекты, объявленные в области блока, как внутри тела функции, не имеют связей, если не предшествует ключевое слово " extern "или" static ".В C, если объекты, объявленные в области блока, не имеют связи, почему работает декларация функции внутри main() без «extern»?
Но почему тогда объявление функции ниже может ссылаться на определение ниже функции main(), хотя я не использовал «extern» во время объявления? Пожалуйста, объясните это, поскольку это бросает мое понимание проблемы вверх дном. Спасибо.
#include<stdio.h>
int main()
{
int foo(); //working even though I've not used "extern"
printf("%d",foo());
}
int foo()
{
return 8;
}
РЕЗУЛЬТАТ ВЫШЕ ПРОГРАММЫ: 8
@sashoalm, "linkage" - это термин, определенный стандартом C, который ничего не говорит о линкерах. Это языковая функция. –
Поскольку вы вызываете эту функцию из 'main()' и 'main()' уже знает, что такое прототип этой функции. –
@ Don'tYouWorryChild, нет, это не так, функция не определена до окончания 'main', поэтому ничего не известно об этом до тех пор, пока она не будет объявлена в' main' –