大綱
- 頭文件的作用
- 驅動文件和頭文件中該存放什么內容
- 如何防止重復定義
- 頭文件使用案例
1.頭文件的作用
(1) 為其他驅動文件(.c)或者頭文件(.h)調用相關函數、結構體、數組、全局變量等
(2)最常用的就是調用API接口(openCV、QT中的相關模板)
2. 驅動文件和頭文件中該存放什么內容?
- 驅動文件(.h)存放對外調用的函數,數組、結構體、變量等申明(全局變量extern)
- 頭文件(.c)存放 定義函數、數組、結構體、變量的初始化等等,static函數或變量。
- 注:一般不要在頭文件中定義變量、函數、類,否者容易產生重復定義
3.如何防止重復定義
重復定義是調用別人的庫函數時變量被重新申明。
如: 在a.h 中申明變量 extern int a;
在b.h 中申明變量 extern int a;
這時候: 在c.c中調用 a.h 和 b.h , 就會出現 xxxx has been defined .
頭文件使用案例(1):不涉及重復定義
//a.c
//#include<stdio.h>
void print(void)
{
printf(“test\n”);
}
//a.h
extern void print(void);
//b.c
#include<a.h>
main()
{
print();
}
after compiled, print test.
頭文件使用案例(2):涉及重復定義
我們在使用頭文件定義時候,如定義結構體在頭文件中定義,在頭文件中申明全局
或者在驅動文件中定義,在頭文件中申明全局變量。
本案例定義結構體變量,然后初始化結構體,然后在主函數中調用結構體函數實現相應功能。
//1.struct.h
#ifndef __a_H_
#define __a_H_
typedef struct
{
unsigned char i;
unsigned char u;
unsigned char v;
} check;
#endif
//2. xxx.c
初始化結構體
#include<struct.h>
void initalstruct(check* AAA)
{
AAA->i =3;
AAA->u =4;
AAA->v =5;
}
// xxx.h
extern void initalstruct(check* AAA);
#include<stdio.h>
#include<struct.h> //定義結構體
#include<xxx.h> //調用結構體初始化函數
int main()
{
check check1;
initalstruct(&check1);
printf(“%d\n”,check1.i );
}
拖延讓你失去很多,並且那些是再也回不去的昨天。
初心 initial heart start in 2021 11 10
Date:2021-11-10
