c语言中的.c文件和.h文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 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()函数

猜你喜欢

转载自blog.csdn.net/jiangzhiyuan123/article/details/84613848
今日推荐