当前位置: 首页> 游戏> 单机 > 莱芜定制网站建设公司_文库百度登录入口_购买链接怎么买_做网站公司

莱芜定制网站建设公司_文库百度登录入口_购买链接怎么买_做网站公司

时间:2025/7/15 15:49:03来源:https://blog.csdn.net/weixin_45778713/article/details/144855739 浏览次数:1次
莱芜定制网站建设公司_文库百度登录入口_购买链接怎么买_做网站公司

程序代码如下

#include <iostream>#ifdef PR_DEBUG
#define  LOG(x) \
std::cout << (x) <<std::endl
#else
#define LOG(x)
#endif#define num 10#include <deque>#define zsize(z) int64_t((z).size())int main()
{LOG("hello");#if numstd::cout << "第一部分" << std::endl;
#else std::cout << "第二部分" << std::endl;#endifstd::deque <int> q;q.push_back(123);//下面语句输出为1,因为C++中无符号和有符号比较时,有符号会自动转换成无符号,// 所以-1会变成一个很大的正数std::cout << (-1 > q.size()) << std::endl;//下面语句输出为0,因为在宏里面对其已经进行过强制转换了。std::cout << (-1 >zsize(q)) << std::endl;return 0;
}

 代码段一:

#ifdef PR_DEBUG
#define  LOG(x) \
std::cout << (x) <<std::endl
#else
#define LOG(x)
#endif

        上面这段代码中实现了在DEBUG模式下使用LOG输出日志,RELEASE模式下不输出日志。
因为宏定义的时候后面的代码要放在一行,所以上面使用了\将其连接起来,注意\后面不要添加空格。
        然后如果定义了PR_DEBUG则执行LOG后面的std::cout,如果没有定义则执行LOG后面没有输出内容,所以在发布软件时,只要去掉PR_DEBUG的定义就实现了内容的关闭输出。
       

代码段二:
 

#define num 10#if numstd::cout << "第一部分" << std::endl;
#else std::cout << "第二部分" << std::endl;#endif

分析:宏定义是预处理器指令的一种,通常在编译之前由预处理器执行。
所以上面使用#if进行判断时,num要在前面使用宏定义初始化,如果直接使用代码初始化会导致使用这个num在初始化这个num之前。

代码段三:
 


#define zsize(z) int64_t((z).size())std::deque <int> q;
q.push_back(123);//下面语句输出为1,因为C++中无符号和有符号比较时,有符号会自动转换成无符号,
// 所以-1会变成一个很大的正数
std::cout << (-1 > q.size()) << std::endl;//下面语句输出为0,因为在宏里面对其已经进行过强制转换了。
std::cout << (-1 >zsize(q)) << std::endl;

 因为size()函数返回的是一个无符号整型,当无符号的和有符号的比较时,有符号的会转换成无符号的,比如这里-1转换为补码形式,即最大值。所以为了避免自己代码中出现这种问题,可以通过宏的方式在宏里面将无符号整型的size()强制转换为有符号的。
这一块观看的哔哩哔哩🔗C++中的宏【入门】_哔哩哔哩_bilibili,(感谢UP的创作,已三连)
 

还有一点补充,就是宏定义里面的传参,参考代码段1

关键字:莱芜定制网站建设公司_文库百度登录入口_购买链接怎么买_做网站公司

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: