
Cplusplus-tutorial-in-hindi.jpg有关 c++ 中宏的定义以及使用是今天的重点内容。
C++ 的宏定义将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替。
其实宏就是在源码在编译前一个预解决指令,将代码中指定宏命令找到并以文本的形式进行替换而已。
宏命令可以减少开发者的工作,但是个人并不推荐过渡地使用宏,这样降低了代码的可读性。
#include <iostream>#include <string>#define WAIT std::cin.get()int main(int argc, char const *argv[]){ WAIT;}是通过#define定义宏的,这里WAIT等同于std::cin.get(),在预解决阶段会将WAIT替换为std::cin.get()后再进行编译。
大家可能注意到后门面的;````。由于定义WAIT的代码段包含;。所以我们需要在WAIT```后面补充上;。这表明这是一种纯文本的替换。
#define WAIT std::cin.get();int main(int argc, char const *argv[]){ WAIT}下面例子中我们用OPEN_CURY表示{。
#include <iostream>#include <string>#define OPEN_CURY {int main(int argc, char const *argv[]) OPEN_CURY std::cin.get();}以上的例子并不会出现在实际开发中,也没有什么具体意义仅是为了说明宏的使用方法,以及宏是如何工作的而已。
#define LOG(x) std::cout << x << std::endlint main(int argc, char const *argv[]){ LOG("hello"); std::cin.get();}通过我们会控制输出作为一个宏来使用,这样可以简化我们少量控制输出代码。
#include <iostream>#include <string>#define MAIN \ int main() \ { \ std::cin.get(); \ }MAIN我们通常在开发调试阶段需要输出少量信息供监控程序运行状况,而在实际发布到生成环境时候处于少量安全问题我们可能需要去掉这些输出,这个时候我们就会用到宏进行实现
#include <iostream>#include <string>#ifdef PR_DEBUG#define LOG(x) std::cout << x << std::endl#else#define LOG(x)#endifint main(int argc, char const *argv[]){ LOG("hello"); std::cin.get();}PR_DEBUG就将LOG(x) 定义为 std::cout << x << std::endl进行输出。否则定义为空不进行任何输出。g++ macro1.cpp -D PR_DEBUG -o marco1我们可以通过-D PR_DEBUG定义宏
#if PR_DEBUG == 1#define LOG(x) std::cout << x << std::endl#else#define LOG(x)#endif可以通过给自己设置宏PR_DEBUG传递参数来控制流程。
g++ macro1.cpp -D PR_DEBUG=1 -o marco1