我的编译器(VC++ 6.0 sp6)显然已经疯了.在某些代码中,我看到' bool mybool = true;
'评估并指定错误,反之亦然.将true/false关键字更改为1/0可以使其正常工作.相同的代码在不改变true/false关键字的情况下编译得很好.
有什么可能导致这种情况?我的第一个想法是RAM或磁盘损坏,但所有检查都很好.我不远没有重新格式化我的驱动器并重新安装所有东西,但我很害怕我仍然会看到同样的错误行为.
从某种程度上说宏观或链接库在技术上是否可能搞砸了' true
'和' false
' 的含义?
更新:神秘解决了.我机器上的环境变量标志设置为'false',并且由一些预处理器代码插入的方式重新定义了关键字.
Log*_*ldo 13
预处理器宏当然可以做到,尽管这会非常令人惊讶.检查是否是这种情况的一种方法是
#ifdef true
# error "true is defined as a macro"
#endif
#ifdef false
# error "false is defined as a macro"
#endif
Run Code Online (Sandbox Code Playgroud)
回复评论:
找到一个非标题文件,您可以在其中看到此行为,最好是少数#includes.
在包含列表的中间,放入#ifdef #error指令.
如果错误绊倒,你知道它是在包含的前半部分,如果它不是在下半部分.将一半分成两半并重复.当您将其缩小到一个标题时,打开该标题.如果该标头包含任何标头,则重复其包含的标头列表的过程.最终你应该能够找到#defines.单调乏味,我同意.
如果在调试器中检查变量值时遇到此问题,并且您正在运行发布版本,则它可能只是调试系统的工件.检查这个的最简单方法是添加一些代码:
if (mybool)
printf("mybool is true\n");
else
printf("mybool is false\n");
Run Code Online (Sandbox Code Playgroud)
您将能够快速识别调试器是否准确.