2017-01-21 7 views
-1

У меня есть три файла, которые я пытаюсь связать. Это дидактический пример, я пробовал разные комбинации, компилируя три файла, но я не знаю, что не так. Даже если что-то с этим тривиальным кодом неверно.Проблемы с компиляцией файлов C

То, что я пытаюсь понять, состоит в том, как разделить в разных файлах декларацию функции, чтобы включить ее из файла заголовка в главном. Или, по крайней мере, это то, что я понял. Мой учитель установить пример для того, чтобы иметь .h файл и два .c файлов: Вот они ...

foo.c

int foo(int x){ 
return x==42 ? 1 : 0; 
} 

foo.h

extern int foo(int); 

использования -foo.c

#include <stdio.h> 
#include "foo.h" 
int main(){ 
printf("foo(42) == %d \n", foo(42)); 
getchar(); 
return 0; 
} 

Я надеюсь, что кто-то может направлять мою через это, мне не нужно другое решение, пожалуйста, помогите мне с этими 3 только файлы BECA использование цели учителя было именно этим.

+0

скомпилируйте с gcc -Wall use-foo.c foo.c, чтобы получить a.out и выполнить его с ./a.out, но убедитесь, что foo.h находится в текущем каталоге, где вы вызываете gcc. –

+0

Вам не нужен extern int foo (int); функции в C являются автоматическими внешними, просто сделайте это int foo (int); –

+2

'gcc use-foo.c foo.c' или' gcc -c foo.c -o foo.o', тогда 'gcc use-foo.c foo.o' – BLUEPIXY

ответ

0

Вы можете скомпилировать его с помощью команды:

gcc -o use-foo use-foo.c foo.c 

Тогда вы будете иметь возможность запустить его с помощью команды:

./use-foo 

Просто быть уверенным, что все файлы находятся в одной каталог, который вы называете gcc из этого каталога и что gcc установлен в вашей системе.

Еще пара советов о включении файлов, а также кросс-компиляция: Всех ваших файлы заголовки (например, foo.h) должна включать в себя охрану, как этого

#ifndef __FOO__ 
#define __FOO__ 

int foo (int); 

#endif 

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

Другим советом является включение foo.h в ваш код foo.c.

+1

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

Смежные вопросы