#ifndef 和#define 在C++中什么意思?

如题所述

#ifndef
xxx//如果没有定义xxx
#define
xxx//定义xxx
#endif
//结束如果
这个用法主要是在头文件中,主要是为了防止类重复的include,所以在类的头文件之前加上前面两个,用类名替代xxx,在最后加上最后一句。
--------------------------------------------------
另,谢谢楼下的补充,不过有一点要注意的是,在C++里面中,尽量不要使用#define定义常量。见:
5.1
为什么需要常量
如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?
(1)
程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示什么。
(2)
在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。
(3)
如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错。
l
【规则5-1-1】
尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串。
例如:
#define
MAX
100
/*
C语言的宏常量
*/
const
int
MAX
=
100;
//
C++
语言的const常量
const
float
PI
=
3.14159;
//
C++
语言的const常量
5.2
const

#define的比较
C++
语言可以用const来定义常量,也可以用
#define来定义常量。但是前者比后者有更多的优点:
(1)
const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。
(2)
有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。
l
【规则5-2-1】在C++
程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。
5.3
常量定义规则
l
【规则5-3-1】需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中。
l
【规则5-3-2】如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-04-26
C++中#ifdef、#else、#endif 都是预处理命令,称为条件编译命令。其中,#ifdef 后接一个标识符和程序段1,#else 后接程序段2和结束条件编译段的预处理命令 #endif。其中所有的预处理命令都必须换行写,且单独占一行。其意义为:如果标识符已经用宏定义命令进行过定义,编译程序段1,跳过程序段2;否则,跳过程序段1,编译程序段2。
相似回答