栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Cherno C++ P55 C++的宏

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Cherno C++ P55 C++的宏

YouTube视频链接

C++的宏

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

#include
int 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::endl

int 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)
#endif

int 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)
#endif

int 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)
#endif

int 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

#endif

int main()
{
	LOG("Hello");
	std::cin.get();
}


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

#include

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

MAIN
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/738420.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号