С89:Нужно объявлять функции перед обращением к ним?

StackOverflow https://stackoverflow.com/questions/2315670

  •  22-09-2019
  •  | 
  •  

Вопрос

Я новичок в 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
}

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top