版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangzhiyuan123/article/details/84613848
大神的详细解读:传送门
记录下一点点自己对两个文件的理解
函数声明可以有多分,但函数定义只能有一份。所以一般不在头文件里面定义函数,因为同一个程序的多个代码文件可能都会包含这个头文件。
但c++中的inline函数是个例外,得定义在头文件中。为了能够扩展inline函数的内容,在每个调用点上,编译器都能取得其定义。这意味我们必须将inline函数的定义放在头文件中。
c++中在类的内部定义成员函数,会被自动视为inline函数。
在.h文件里面声明了函数后,编译器会到所有的.c文件里面寻找是否有.h文件里面声明的函数,所以.h文件可以不和.c文件同名。
我建立了test.h,testa.c,testb.c文件
test.h
#ifndef TEST_H
#define TEST_H
void print();
#endif // TEST_H
testa.c
#include <stdio.h>
void print()
{
printf("testa");
}
testb.c
#include <stdio.h>
void print()
{
printf("testb");
}
报错:
F:\CodeBlocks\Code\c++\testb.c|4|multiple definition of `print'|
此时去掉testb.c文件后,编译正确。
在.c文件中添加.h文件,相当于将.h文件中的全部内容(函数声明)放到了.c文件那里
main.c
#include "test.h"
int main()
{
print();
return 0;
}
去掉头文件后
F:\CodeBlocks\Code\c++\main.cpp|5|error: 'print' was not declared in this scope|
修改代码
//#include "test.h"
void print();
int main()
{
print();
return 0;
}
程序正常运行
此时编译器会到所有编译的.c文件里面查找print()函数