2015-07-30 2 views
0

Я создал образец файла .h в C, и по какой-то причине он не работал. Файлы являются следующие:Проблемы с файлами .h в C

header.c:

#include <stdio.h> 
#include "header.h" 
int add(int a, int b) { 
int tmp=a; 
int i; 
for(i=0, i==tmp, i++) { 
b++; 
} 
return(b); 
} 

header.h:

#ifndef HEADER_H 
#define HEADER_H 

int add(int a, int b); 
#endif 

main.c:

#include <stdio.h> 
#include "header.h" 
int main(void) { 
int foo=add(1, 2); 
printf("%i \n", foo); 
return(0); 
} 

Когда я пытаюсь скомпилировать главный. c с make и gcc говорит, что add не определено. Помогите!

+0

'gcc -std = C11 -Wall -Wextra -Werror -pedantic -o main main.c header.c' - теперь как выглядит ваш * ваш? – WhozCraig

+0

Шахта либо: – nkeck72

+0

Либо? Либо * что *? Я только написал одну командную строку. – WhozCraig

ответ

1

включая файл заголовка включает только прототип функции. Вы должны связать фактическое определение add() путем компиляции отдельных объектных файлов, или вы можете собрать их вместе в одной командной строке:

gcc -Wall -Wextra header.c main.c -o main 

Может быть, вы можете рассмотреть Makefiles для более крупных проектов.

Ваша add() функции имеет проблемы:

1) Полуприцепы двоеточие ; используется в для петель, а не запятые.
2) Условие должно быть i!=tmp для добавления.

Это:

for(i=0, i==tmp, i++) { .. } 

должен быть

for(i=0; i!=tmp; i++) { .. } 
2

Вы должны собрать как main.c и header.c в тот же исполняемый файл:

all: main 

main: main.o header.o 
    gcc -o main main.o header.o 

header.o: header.c header.h 
    gcc -c header.c 

main.o: main.c header.h 
    gcc -c main.c 

Или для однострочника без макияжа файла:

gcc -g -o main main.c header.c 
+0

Я бы ожидал, что шаг компиляции должен включать параметр '-I' ', чтобы сообщить gcc, где находится заголовочный файл пользователя tghe. – user3629249

1

Вам нужно добавить header.c на вызов компиляции. Вы не можете просто скомпилировать main.c.

+0

Спасибо y'all. Я буквально только что закончил обучение C и был потерян ... спасибо! – nkeck72

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