C89: Нужно объявить функции перед ссылкой на них? - PullRequest
0 голосов
/ 23 февраля 2010

Я новичок в C89, и кажется, что вы должны объявить функцию перед вызовом. Так что это недопустимо:

void foo() {
    bar();
}

void bar() {
    // do stuff
}

Поскольку bar() определяется после foo() в файле. Есть ли способ обойти это? Нужен ли заголовочный файл?

Ответы [ 2 ]

2 голосов
/ 23 февраля 2010

Добавить прототип:

void bar(); // prototype for function bar() which is implemented later

void foo() {
    bar();
}

void bar() {
    // do stuff
}

Для проектов с несколькими файлами исходного кода прототипы обычно помещаются в заголовочные файлы и включаются в несколько исходных файлов; реализация должна быть указана только в одном исходном файле. Компилятору нужен только прототип, чтобы он мог выполнять правильную проверку типов и т. Д.

0 голосов
/ 23 февраля 2010

Кроме того, если функции не нужно вызывать извне файла (т. Е. Если функции можно сделать «статическими»), то вы часто можете просто упорядочить функции в файле так, чтобы компилятор увидел определение функции до ее использования.

...