当前位置:网站首页>【genius_platform软件平台开发】第七十六讲:vs预处理器定义的牛逼写法!!!!(其他组牛逼conding人员告知这么配置来取消宏定义)
【genius_platform软件平台开发】第七十六讲:vs预处理器定义的牛逼写法!!!!(其他组牛逼conding人员告知这么配置来取消宏定义)
2022-08-05 01:56:00 【隨意的風】
vs预处理器定义的牛逼写法!!!!
1.问题概述
- 今天组内小伙伴在调试算法接口时,总是在算法接口崩溃,发现vs提示信息为vector too long…结果算法人员告诉设置预编译器定义
_HAS_ITERATOR_DEBUGGING=0
取消该宏定义。我擦,这是什么骚操作,还行这么玩,一看就感觉有问题,结果为了证明这样是取消不了该宏的定义的,特此进行了一下验证;
2. main.cpp源代码(vs2017环境,其他vs环境都可以):
#ifdef _HAS_ITERATOR_DEBUGGING
#define x_1 1
#pragma message ("#define x_1 1")
#endif
#ifdef _HAS_ITERATOR_DEBUGGING
#define y_1 1
#pragma message ("#define y_1 1")
#endif
#include <iostream>
int main()
{
//int x = 0;
#ifdef _HAS_ITERATOR_DEBUGGING
{
printf("#ifdef _HAS_ITERATOR_DEBUGGING\n");
printf("x_z = %d\n", _HAS_ITERATOR_DEBUGGING);
printf("x_1 = %d\n", x_1);
printf("y_1 = %d\n", y_1);
}
#endif
if (_HAS_ITERATOR_DEBUGGING == 0)
{
printf("if (_HAS_ITERATOR_DEBUGGING == 0)\n");
printf("x_z = %d\n", _HAS_ITERATOR_DEBUGGING);
printf("x_1 = %d\n", x_1);
printf("y_1 = %d\n", y_1);
}
if (_HAS_ITERATOR_DEBUGGING == 1)
{
printf("if (_HAS_ITERATOR_DEBUGGING == 1)\n");
printf("x_z = %d\n", _HAS_ITERATOR_DEBUGGING);
printf("x_1 = %d\n", x_1);
printf("y_1 = %d\n", y_1);
}
if (_HAS_ITERATOR_DEBUGGING == 2)
{
printf("if (_HAS_ITERATOR_DEBUGGING == 2)\n");
printf("x_z = %d\n", _HAS_ITERATOR_DEBUGGING);
printf("x_1 = %d\n", x_1);
printf("y_1 = %d\n", y_1);
}
// printf("%d\n", vtkBooleanMacro(x,=,1));
std::cout << "Hello World!\n";
getchar();
}
3. 预处理器定义为_HAS_ITERATOR_DEBUGGING=0
3.1 查看重新编译log
- 该宏被编辑器预定义
_HAS_ITERATOR_DEBUGGING 为 0
,但是该_HAS_ITERATOR_DEBUGGING
还是属于被预定义状态;
3.2 查看运行结果
#ifdef _HAS_ITERATOR_DEBUGGING
判断已经被预定义,或者使用if(_HAS_ITERATOR_DEBUGGING == 0/1)
这种骚操作很少,起不到取消该_HAS_ITERATOR_DEBUGGING
的定义
4. 预处理器定义为_HAS_ITERATOR_DEBUGGING=1
4.1 查看重新编译log
- 该宏被编辑器预定义
_HAS_ITERATOR_DEBUGGING 为 1
,但是该_HAS_ITERATOR_DEBUGGING
还是属于被预定义状态;
4.1 查看运行结果
5. 预处理器定义为_HAS_ITERATOR_DEBUGGING=2
5.1 查看重新编译log
- 编译阶段直接报错,如图;
6. 总结
- 只要在预处理器界面中定义了
_HAS_ITERATOR_DEBUGGING
宏,即编辑器在编辑阶段便会定义该宏。一般不会再对该宏执行=赋值操作
(应该是认知错误,想取消该宏的定义); - 如果真的想玩骚操作、乱七八糟非正常设置,那么也只能设置为0/1(很少有这么使用的);而且在程序中也只能使用
if(_HAS_ITERATOR_DEBUGGING == xxxx)
等形式进行判断,#ifdef _HAS_ITERATOR_DEBUGGING
永远都是有效的,被预定义的宏; - 想取消某个宏的设置,配置成
_HAS_ITERATOR_DEBUGGING=0
是起不到取消宏定义作用的;真的想取消还是要去除该宏的配置;
边栏推荐
- 手把手基于YOLOv5定制实现FacePose之《YOLO结构解读、YOLO数据格式转换、YOLO过程修改》
- 程序员失眠时的数羊列表 | 每日趣闻
- 如何看待自己的羞愧感
- 深度学习原理学习小结 - Self-Attention/Transformer
- Greenplum数据库故障分析——版本升级后gpstart -a为何返回失败
- Programmer's list of sheep counting when insomnia | Daily anecdote
- KingbaseES V8 GIS data migration solution (2. Introduction to the capabilities of Kingbase GIS)
- [How to smash wool according to the music the couple listens to during the Qixi Festival] Does the background music affect the couple's choice of wine?
- Object.defineProperty实时监听数据变化并更新页面
- Greenplum Database Fault Analysis - Why Does gpstart -a Return Failure After Version Upgrade?
猜你喜欢
汇编语言之源程序
开篇-开启全新的.NET现代应用开发体验
<开发>实用工具
迁移学习——Distant Domain Transfer Learning
KingbaseES V8 GIS data migration solution (2. Introduction to the capabilities of Kingbase GIS)
Method Overriding and Object Class
IJCAI2022 | DictBert:采用对比学习的字典描述知识增强的预训练语言模型
关于#sql shell#的问题,如何解决?
MySQL learning
迅睿cms网站搬迁换了服务器后网站不能正常显示
随机推荐
英特尔 XDC 2022 精彩回顾:共建开放生态,释放“基建”潜能
fragment可见性判断
亚马逊云科技 + 英特尔 + 中科创达为行业客户构建 AIoT 平台
iNFTnews | 对体育行业和球迷来说,NFT可以带来什么?
day14--postman interface test
《.NET物联网从零开始》系列
MySQL3
LPQ(局部相位量化)学习笔记
[Word] #() error occurs after Word formula is exported to PDF
"Configuration" is a double-edged sword, it will take you to understand various configuration methods
居民用水问题
Tree search (bintree)
[Redis] Redis installation under Linux
.Net C# Console Create a window using Win32 API
如何模拟后台API调用场景,很细!
详细全面的postman接口测试实战教程
如何基于OpenVINO POT工具简单实现对模型的量化压缩
新来个技术总监,把DDD落地的那叫一个高级,服气
高数_复习_第1章:函数、极限、连续
[How to smash wool according to the music the couple listens to during the Qixi Festival] Does the background music affect the couple's choice of wine?