c++头文件中 #ifndef的作用

避免文件重复处理、变量等重定义

//c1.hpp
#ifndef C1_HPP
#define C1_HPP
int a = 0;
#endif // LFU_CACHE_HPP
#include"c1.hpp"
#ifndef C2_HPP
#define C2_HPP
int b=1;
#endif
#include"c1.hpp"
#include"c2.hpp"
#include<iostream>
int main()
{
    std::cout<<"this";
}

如果上述三个文件,c1.hpp不写预处理指令,编译会出现redefinition variable a 的错误。就是因为c1.hpp被重复包含了。

当编译器第一次处理这个头文件时,#ifndef SOME_HEADER_FILE_H检查SOME_HEADER_FILE_H这个标识符是否未被定义。由于是第一次处理,这个标识符还未被定义,所以条件为真,编译器会继续处理#define SOME_HEADER_FILE_H这一行,定义了这个标识符。
然后编译器会处理头文件中的实际内容,如类定义、函数声明等。当同一个头文件在其他地方再次被包含时,#ifndef SOME_HEADER_FILE_H检查发现SOME_HEADER_FILE_H这个标识符已经被定义了,所以条件为假,编译器会直接跳过#define和头文件内容部分,直到#endif,这样就避免了头文件内容的重复处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值