我在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是未定义的。救命啊!
答案 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。