Заголовок и реализация функции в разных файлах C - PullRequest
1 голос
/ 07 апреля 2011

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

Ответы [ 3 ]

5 голосов
/ 07 апреля 2011

Это лучше всего иллюстрируется на примере.

Скажем, мы хотим, чтобы функция нашла куб целого числа.

У вас будет определение (реализация), скажем, cube.c

int cube( int x ) {
  return x * x * x;
}

Затем мы поместим функцию объявление в другой файл. По соглашению это делается в заголовочном файле , в данном случае cube.h.

int cube( int x );

Теперь мы можем вызывать функцию откуда-то еще, например, driver.c, используя директиву #include (которая является частью препроцессора C).

#include "cube.h"

int main() {
  int c = cube( 10 );
  ...
}

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

Использование gcc , например

$ gcc -c cube.c                 #this produces a file named 'cube.o'
$ gcc -c driver.c               #idem for 'driver.o'
$ gcc -o driver driver.c cube.c #produces your executable, 'driver'
1 голос
/ 15 мая 2011

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

0 голосов
/ 07 апреля 2011

В C / C ++ не встроенные функции должны быть определены только один раз. Если вы поставили функцию определения в заголовочных файлах вы получите ошибку ссылки «множественное определение», если заголовочный файл включен более одного раза.

...