我正在处理具有多个c文件的项目。每个c文件都有自己的标头。现在,我想将所有c文件放在一起。 作为准备,我尝试了以下操作:
这是我的示例c代码(function.c):
#include <stdio.h>
#include "function.h"
void output()
{
printf("Thats a text\n");
}
多数民众赞成在关联的头文件(function.h):
//header function.h
#ifndef FUNCTION_H_
#define FUNCTION_H_
#endif // FUNCTION_H_
这就是我的main.c:
#include "function.h"
int main()
{
output();
return 0;
}
我希望获得以下输出:
“就是文本”
但是我只收到以下错误:
对“输出”的未定义引用
我在这里做错了什么?
非常感谢!
答案 0 :(得分:2)
您的标头中需要prototype for output
函数,以便在其他模块中可见。
//header function.h
#ifndef FUNCTION_H_
#define FUNCTION_H_
void output(void);
#endif // FUNCTION_H_
您需要link模块(源文件function.c
)才能实际提供主模块使用的output
的定义。
例如,您可以使用以下命令直接将其编译:
gcc main.c function.c -o my_out
您可能还想看看Makefiles。
答案 1 :(得分:1)
您的标题应该是
//header function.h
#ifndef FUNCTION_H_
#define FUNCTION_H_
void output();
#endif // FUNCTION_H_
像这样编译: (实际标志可能取决于所使用的编译器)
cc -c main.c
(创建main.o)
cc -c function.c
(创建function.o)
cc main.o function.o
(创建a.out或您的系统默认值)
...或其他人提到的:
cc main.c function.c
(全部完成)