您好,欢迎来到赴品旅游。
搜索
您的当前位置:首页H文件声明规则与变量作用域

H文件声明规则与变量作用域

来源:赴品旅游


.h文件的基本模板

#ifndef __ABC_H__

#define __ABC_H__

//以上是为了防止头文件被多次包含,递归包含,最好有,名字任意,保证唯一即可

//以下是宏定义,可有可无

#define MAX 100

#define MIN 0

//以下是结构声明,可有可无

typedef struct{

int a;

}ABC;

//以下是函数声明,可有可无

void abcfun(int a,int b);

...

#endif

问题1:a.c文件和main.c文件想共用一个基本类型变量x,如何声明?

答:在a.c文件里将该变量x声明,然后再main.c里再声明一遍变量x, 并在前面加上extern关键字。如果在a.h文件声明x里会出现重复的error,因为a.h会被main.c、a.c两个文件所包含。

注意不用在a.h文件写任何东西。

问题2:a.c文件和main.c文件想共同调用一个函数模块func,怎么办?

答:a.c文件中存放函数的定义,a.h文件存放函数的声明,main.c文件包含a.h文件

问题3:a.c文件和main.c文件想共用一个结构体类型变量x,如何声明?

答:假如这个结构体类型声明为

typedef struct{

int a;

}ABC;

a.c文件里声明一个ABC类型的结构体变量x;

a.h文件里存放结构体类型ABC的声明;

main.c包含头文件a.h,并且再声明一遍结构体变量x,并在前面加上extern关键字。

问题4:a.c文件和main.c文件想共用一个数组x,如何声明?

答:

1). a.c 声明 如: uint8_t USART_buff[10];

2). main.c 声明 如:extern uint8_t USART_buff[10];

注意不用在a.h文件写任何东西。

问题5:a.c文件和main.c文件里都声明了一个变量x,但不希望它们相关联,怎么办?

a.c文件中声明的x,和main.c里声明的x,在声明时,前面都加上static关键字。

问题6: 在a.c文件里定义了一个延时函数delay,但害怕其他文件里也会定义一个delay函数,这样就冲突了,怎么办?

在定义和声明delay函数的时候,加上static关键字

总结

1.H文件里一般只做函数声明、结构声明,宏定义、sbit定义,而不做变量声明。也就是只存放形式,而不存放以后会生成内存实体的东西。H文件也可以看作是一个接口,公开模块内想让别人调用的东西。

2. 如果要想用别的文件里定义过的变量,则要用extern声明,且声明的时候应当与定

义时的类型保持一致(类型要匹配)。被extern标记过变量不管声明多少次,位于几个源文件都表示来自同一个实体。

3.如果声明的变量只在本文件内起作用,可以使用static关键字对其进行标记。这个对函数也适用。

4.MDK编译器C语言中的伪重载关键字WEAK,这是一个编译器指令,ANSI C中不存在

凡是被WEAK标记过的函数,如果有文件外的新的定义,则以新的定义为准。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fupindai.com 版权所有 赣ICP备2024042792号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务