0

我在 C 中创建了一个示例 .h 文件,但由于某种原因它不起作用。文件如下:

标头.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);
}

标头.h:

#ifndef HEADER_H
#define HEADER_H

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

主.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 是未定义的。帮助!

4

3 回答 3

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
于 2015-07-30T20:02:06.307 回答
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++) { .. }
于 2015-07-30T20:02:46.230 回答
1

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

于 2015-07-30T20:02:56.447 回答