我读到包含函数定义的 C 文件应该与头文件同名。因此,我创建了两个文件:functions.h、functions.c 和最后的 main.c 文件,该文件调用在functions.c 文件内定义的函数。
//functions.h file
void check();
我已经在头文件中声明了check
函数
//functions.c file
#include <stdio.h>
#include "functions.h"
int main(void){
void check(){
printf("\nThis is a Test\n");
}
return 0;
}
该文件包含所有函数定义。但我想澄清的一件事是,我在 stackoverflow 上看到了另一个基本相同类型的问题,但在函数文件中他刚刚包含了头文件和函数定义,没有 main() 。 .c 文件不应该抛出错误吗?
//main.c file
#include "function.h"
#include <stdio.h>
int main(void)
{
check();
return 0;
}
当我打开终端并键入命令来编译代码时:
clang main.c
我收到错误:
Undefined symbols for architecture x86_64:
"_check", referenced from:
_main in heap-22db64.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
可能是我没有编译functions.c 文件,这就是我看到这个的原因。我正在编译 main.c。我不确定这个链接错误。如果我有 35 个 .c 文件。通过命令行编译所有这些会是更困难的任务吗?我应该如何处理这些大项目?有多个 C 和头文件?
最佳答案
这是典型的场景:
// functions.c
void check(void) {
// do stuff
}
注意:只是检查的定义,没有其他内容。然后是标题:
// functions.h
extern void check(void);
只是一个声明。然后是主文件:
// main.c
#include "functions.h"
int main(int argc, char *argv[]) {
check();
}
关于c - 编译期间无法处理多个c文件和头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26786825/