当前位置: 代码迷 >> 综合 >> C++预处理指令#define #ifdef #endif ....
  详细解决方案

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

热度:100   发布时间:2023-11-20 11:12:27.0

看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 MINprintf("3 and 5 the min is:%d\n",MIN(3,5));
#endifreturn 0;
}/** (1)三元运算符要比if,else效率高* (2)宏的使用一定要细心,需要把参数小心的用括号括起来,* 因为宏只是简单的文本替换,不注意,容易引起歧义错误。
*/

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

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

#include <stdio.h>
#define DEBUG
main()
{
#ifdef DEBUG   //判断DEBUG是否被定义了printf("yes ");
#endif#ifndef DEBUGprintf("no ");
#endif
}/*#endif用于终止#if预处理指令。*/
//#ifdefined等价于#ifdef;
//#if!defined等价于#ifndef

 

  相关解决方案