我读到包含函数定义的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文件。通过命令行编译所有这些任务会更难吗?什么应该是我的approch来处理这些大项目。有多个C&amp;头文件?
答案 0 :(得分:0)
这是典型情景:
// functions.c
void check(void) {
// do stuff
}
注意:只是check的定义,没有别的。然后是标题:
// functions.h
extern void check(void);
只是声明。然后是主文件:
// main.c
#include "functions.h"
int main(int argc, char *argv[]) {
check();
}
答案 1 :(得分:0)
当在另一个文件中提供定义时,您必须使用extern
关键字指定:
functions.h
:
extern void check();
functions.c
:
void check()
{
printf("\nThis is a Test\n");
}