c语言使用预编译指令的正确姿势!

预编译指令防止头文件重复引用

为什么防止头文件重复引用?
头文件重复引用会报错吗?
其实头文件的重复引用大多数情况下不会出现错误。那什么情况会出错呢?
小二,直接上代码!
好嘞,客官您慢用!
5个文件分别是a.h,a.c,b.h,b.c和hello.c。在hello中为了使用a.c和b.c分别加入a.h和b.h的头文件。如下:

//a.h
int num=3;
void a();

//a.c
#include<stdio.h>
#include"a.h"
void a(){
printf("a\n");
}

//b.h
#include"a.h"
void b();

//b.c
#include<stdio.h>
#include"b.h"
void b(){
printf("b\n");
}

//hello.c
#include"a.h"
#include"b.h"
#include<stdio.h>
int main(){
printf("test\n");
a();
b();
} 	

通过gcc查看预处理的生成文件.i。

gcc main.c -E >main.i

在这里插入图片描述
可以看到num被定义了两次。所以当项目逐渐复杂,在.h中引入一些变量(什么变量,有必要吗?此处应该是链接)时会发生错误。这个地方值得一提的是,如果头文件并未定义变量,多次引用并不会发生错误。也就是说多次的声明不会报错,多次的定义相同变量会报错,而预编译指令真正预防的问题是防止多次定义相同变量。(老话就是:一个变量可以被声明多次但是不能被多次定义)
关于全局变量(此处应该是链接)
如果头文件只被声明一次,那么也就不存在被多次定义的问题了。预编译指令使每个头文件只被声明一次,避免了相同变量被多次定义的问题。使用方法:
在*.h中加入代码:

#ifndef A_H
#define A_H

#endif

预编译指令快速调试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值