C++预处理指令#define #ifdef #endif ....

看Karto-slam的源码经常遇到C++预处理指令,以前遇到C++预处理指令,都是遇到一次查找一次(无语)

常见C++预处理指令

1.#空指令,无任何效果

2. #include包含一个源代码文件

3. #define定义宏

4. #undef取消已定义的宏

5. #if如果给定条件为真,则编译下面代码

6. #ifdef如果宏已经定义,则编译下面代码

7. #ifndef如果宏没有定义,则编译下面代码

8. #elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码(类似一个if...else...)

9. #endif结束一个#if……#else条件编译块

10. #error停止编译并显示错误信息

注意:多见到这个是下面的一个预编译指令组合

#ifdef

(语句)

#endif

(1) #define定义宏

定义宏表示特定内容的标识符。预处理过程会把源代码中出现的宏标识符替换成宏定义时的值。记住仅仅是进行标识符的替换。

在C++中,"宁可以编译器替换预处理器"强调使用const来定义常量

#define ASPECT_RATIO 1.653  (前者代表后者)

const double AspectRatio=1.653; ///首先考虑这个

#include <stdio.h>
#define MAX(x,y) (((x)>(y))?(x):(y))
#define MIN(x,y) (((x)<(y))?(x):(y))
int main(void)
{
#ifdef MAX    //判断这个宏是否被定义
    printf("3 and 5 the max is:%d\n",MAX(3,5));
#endif
#ifdef MIN
    printf("3 and 5 the min is:%d\n",MIN(3,5));
#endif
    return 0;
}

/*
 * (1)三元运算符要比if,else效率高
 * (2)宏的使用一定要细心,需要把参数小心的用括号括起来,
 * 因为宏只是简单的文本替换,不注意,容易引起歧义错误。
*/

(2)#ifdef,#ifndef,#endif...的使用

以上这些预编译指令,都是条件编译指令.将决定那些代码被编译,那些代码不被编译.

#include <stdio.h>
#define DEBUG
main()
{
#ifdef DEBUG   //判断DEBUG是否被定义了
    printf("yes ");
#endif

#ifndef DEBUG
    printf("no ");
#endif
}

/*#endif用于终止#if预处理指令。*/
//#ifdefined等价于#ifdef;
//#if!defined等价于#ifndef

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Maccy37

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值