预处理指令

是什么

编译前对源代码进行处理的指令

#define:用于定义宏变量。

#include:用于将指定的头文件包含到当前文件中。

#ifdef / #ifndef:用于条件编译,根据某个宏是否已经被定义来决定编译哪一段代码。

#if / #elif / #else:用于条件编译,根据某个表达式的真假来决定编译哪一段代码。

#pragma:用于控制编译器或预处理器的行为,比如关闭某些警告信息、优化代码等。

#error:用于输出错误信息并终止编译。

#line:用于改变当前的行号和文件名。

#undef:用于取消已定义的宏。

为什么

代码复用 平台无关 提高编译速度

怎么用

#define

宏定义 不用写 = , 文本替换机制, 预处理命令, 不用加 ;

#define PI 3.1415926
#define MAX(a, b) ((a) > (b) ? (a) : (b))

cout<<PI<<endl;
cout<<good_max(3,4)<<endl;

#define good_max(a,b)(a>b?a:b)	// 返回较大值 我的理解: 传入参数, "隐含"一个等号

#if / #elif / #else

//第一种写法, 似乎更加灵活
#if defined(DEBUG) && DEBUG == 1
   cout << "Debugging mode is enabled." << endl;
#endif

//第二种写法
#ifdef _WIN32
#include <direct.h>	//windows
#elif __linux__
#include <unistd.h>	//linux
#endif

#ifdef / #ifndef

避免变量/函数等重定义

#ifndef HH
#define HH

//头文件内容//

#endif

ps: #pragma once 明显更好用. 在特定的编译环境中,还是应该使用经典的 #ifndef 来确保代码的可移植性。

posted @ 2023-06-14 11:22  无形深空  阅读(18)  评论(0编辑  收藏  举报