欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

ChernoC++P55C++的宏

时间:2023-06-02

YouTube视频链接

C++的宏

本文是ChernoP55视频的学习笔记。
  如下代码

#includeint main(){std::cin.get();}

  我们可以定义一个宏而不是每次都写std::cin.get(),先写上一个#define。

#include//发生在编译器的预处理阶段#define WAIT std::cin.get() //注意无需分号int main(){WAIT;}

  宏还可以发送参数,若不想写std::cout。

#include#define LOG(x) std::cout << x << std::endlint main(){LOG("Hello");std::cin.get();}

  在实际工作中,常常在release版本中去掉所有的日志代码,但是在debug版本中保留。我们可以通过宏做到这一点。首先要修改项目属性。
  增加如下代码

#ifdef PR_DEBUG#define LOG(x) std::cout << x << std::endl#else#define LOG(x) //替换成空#endif

  可以发现在Debug和Release模式下VS高亮显示的不同。

  运行代码发现Debug模式下打印日志,和Release模式下什么都不打印。


  这里的ifdef用的不好,我们可以让PR_DEBUG=1,给它定义一个实际的值来控制PR_DEBUG。

#include#define PR_DEBUG 0#if PR_DEBUG == 1#define LOG(x) std::cout << x << std::endl#else#define LOG(x)#endifint main(){LOG("Hello");std::cin.get();}

  也可以通过修改属性,在Debug模式下定义PR_DEBUG=1。

#include#if PR_DEBUG == 1#define LOG(x) std::cout << x << std::endl#else#define LOG(x)#endifint main(){LOG("Hello");std::cin.get();}

  因为我们定义了PR_RELEASE;,可以使用elif defined(PR_RELEASE)。

#include#if PR_DEBUG == 1#define LOG(x) std::cout << x << std::endl#elif defined(PR_RELEASE) //defined是检测函数,检测预定义是否存在#define LOG(x)#endifint main(){LOG("Hello");std::cin.get();}

  用#if 0 可以将整个代码块禁用。

#include#if 0#if PR_DEBUG == 1#define LOG(x) std::cout << x << std::endl#elif defined(PR_RELEASE)#define LOG(x)#endif#endifint main(){LOG("Hello");std::cin.get();}


  还可以使用反斜杠来写多行的宏,因为宏必须在同一行。

#include#define MAIN int main() { std::cin.get();}MAIN

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。