c++防卫式声明

今天听侯捷老师课时,说到写头文件时,基本要防卫式声明,突然感觉很陌生所以搜一些资料,整理一下方便以后自己查看。

头文件中防卫式声明分两种:宏定义和编译器指令

宏定义:

#ifndef __COMPLEX__

#define __COMPLEX__

//.......

#endif

编译器指令:

#pragma once   

(编译器指令这个因为vs写程序经常用,防止头文件重复包含)

//person.h头文件
class Person
{
public:
	Person();
	~Person();

private:

};

//student.h头文件
#include"person.h"
class Student
{
public:
	Student();
	~Student();

private:

};
//main.cpp文件
#include<iostream>
#include"person.h"
#include"student.h"
int main() {

	return 0;
}

在运行上边程序时编译器会报错:“Person”:“class”类型重定义   
因为编译器在编译时会把相应的头文件按顺序展开,这就导致类Person被定义了两次。
这时候就需要防卫式声明了,它能避免头文件被包含多而导致  一些内容的重复定义。 

 #ifndef依赖于宏定义名,当宏被定义时,#endif之前的代码会被忽略,但是呢要注意当你内容不同时宏的名字也要防止相同,不然内容可能第二次被过滤了。   

 #pragm once只能保证一个头文件不会被重复包含 ,但是不同的头文件含相同内容时,编译就会报错。

如果不使用vs编译器的话常用的还是宏形式的,这样可以使代码跨平台使用。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值