C中的.h文件问题

时间:2015-07-30 19:56:38

标签: c custom-headers

我在C中创建了一个示例.h文件但由于某种原因它无法正常工作。文件如下:

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);
}

当我尝试使用make和gcc编译main.c时,它说add是未定义的。救命啊!

3 个答案:

答案 0 :(得分: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

或者没有make文件的单行:

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

答案 1 :(得分:1)

包含头文件只包含函数原型。您需要通过编译单独的目标文件来链接add()的实际定义,或者您可以在一个命令行中一起编译它们:

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

或许,您可能需要考虑Makefiles来处理更大的项目。

您的add()功能存在问题:

1)分号;用于for循环,而不是逗号 2)条件应为i!=tmp以便添加。

此:

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

应该是

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

答案 2 :(得分:1)

您需要将header.c添加到编译调用中。你不能只编译main.c。