Сколько проходов выполняет компилятор c?

#c

#c

Вопрос:

 int main()
{
    int res;
    funcAdd(10,20);
}

int funcAdd(int a,int b)
{
    return a b;
}
 

В приведенной выше программе main не распознает функцию funcAdd(), поскольку она определена после main и в начале нет объявления. Если компилятор C выполнил 2 прохода программы, то это не должно быть проблемой, поскольку он будет знать, что функция funcAdd() будет определена на втором проходе. Означает ли это, что C является компилятором с одним проходом? Пожалуйста, проясните мои сомнения.

Комментарии:

1. это не имеет никакого отношения к действительности программы

2. Ошибочность подтверждения следствия. То, что однопроходный компилятор не может распознать funcAdd в точке вызова, не означает, что компилятор, который не распознает funcAdd в точке вызова, является однопроходным.

Ответ №1:

Язык C не определяет, сколько проходов должен выполнить компилятор. Однако в нем / указано /, что функции должны быть объявлены до их использования. Следовательно, ваш код недействителен, независимо от того, сколько проходов делает компилятор.

Ответ №2:

Ваши рассуждения неверны. Компилятор C может выполнить столько проходов, сколько захочет, но в этом случае он все равно должен возвращать ошибку, потому что так гласит стандарт.