С89:Нужно объявлять функции перед обращением к ним?
Вопрос
Я новичок в C89, и кажется, что вы должны объявить функцию перед ее вызовом.Итак, это недопустимо:
void foo() {
bar();
}
void bar() {
// do stuff
}
Потому что bar()
определяется после foo()
в файле.Есть ли способ обойти это?Нужен ли мне заголовочный файл?
Решение
Добавьте прототип:
void bar(); // prototype for function bar() which is implemented later
void foo() {
bar();
}
void bar() {
// do stuff
}
Для проектов с несколькими файлами исходного кода прототипы обычно помещаются в файлы заголовков и включаются в несколько файлов исходного кода;реализацию необходимо указать только в одном исходном файле.Компилятору просто нужен прототип, чтобы иметь возможность выполнять правильную проверку типов и т. д.
Другие советы
Кроме того, если функции не нужно вызывать извне файла (т. е. если функции можно сделать «статическими»), то часто можно просто упорядочить функции в файле так, чтобы компилятор видел определение функции. перед использованием функции.