C/C++int值,这不是一个号码吗?
题
可这个不会发生?3称,其中一个应当启动。
int nr = perform_calc();
assert( nr == 0);
assert( nr > 0);
assert( nr < 0);
可以有以下情况时的程序没有激活称在克++3.4.4.
没有我没有的可能性,以改变中的代码,以印刷的数量在情况下的断言不要激活。
任何想法?
编辑:在阅读几点意见,我被迫编辑。显示代码?你为什么要这样愚蠢的事情吗?我不相信!在那里使用它?从我的问题,它应该已经很明显,我不会发布/修改的代码,因为几个可能原因:
- 我是个初学者和被羞愧的代码(没有犯罪的存在,确保它使得回答这个问题更加容易,如果我没有贴)
- 我被要求帮助一个朋友,只有很少的信息(而且没有我没有问他为什么你不能检查的数量返回,或者为什么不能他只是添加一个断点).
- 我在写我的代码中emacs没有任何编译器和被发送到远程服务器上编译,运行它只能返回失败的断言,如果出现错误。
如果你认为我做了一个恶作剧或是一个骗局你应该投票赞成一个封闭的线来代替。我已经完全没有。但是,增加不必要的意见一样,这只让我想一个"态度"标志来实施的。
我要感谢其他人对他们的意见和答复,实际上试图解释和回答我的问题。
解决方案
正如我已经见过这么丑陋的东西在我的生命,它可以是解释如果perform_calc()有一个缓冲区溢出,复盖所返回的地址。当功能结束,复盖的地址是回收从堆,并设置的电脑,导致一个跳的,也许在另一个领域的程序,显然是过去的断言的呼吁。
虽然这是一个非常遥远的可能性,因此它是什么你都出现了。
另一个可能性是有人做了一个丑陋的宏伎俩。如果你有喜欢的东西
#define assert
或者一些同事把这样的事情在头部,而你在上厕所
#define < ==
#define > ==
如建议在另一个答复,检查与海湾合作委员会-E看到什么样的代码实际上是编制。
其他提示
assert
被选中如果宏 NDEBUG
定义。确保你 #undef NDEBUG
在编写本翻译单元。
你可以调用与海湾合作委员会 -E
切换到验证你的断言发言的是仍然在代码。
它看起来并不像那个代码是正确的,放在第一位。如果调试是在(调试和/或_DEBUG设和NDEBUG是取消):
assert( nr == 0);
上述行会call exit()如果nr!= 0.因此,如果该线穿,第二主张将执行:
assert( nr > 0);
...和call exit()因为nr==0。(nr>0).
assert( nr < 0);
这第三行,将永远不会有。
什么确切的说是点这个代码?为什么,如果这些指称可以加入,你能不能代替增加一个printf()?
这是码多线程的?也许你有一个 比赛的状况.
没有我没有的可能性 变化中的代码,以印刷的 数。
奇怪的。你显然有能力以插入assert()发言,因为如果他们实际上在现实代码你无法触摸,代码,不可能的工作。所以为什么你不能打印的价值assert()电话测试?
我怀疑你不小心消除该问题,同时消毒的代码碎片。有更多的代码(和nr是越来越变化之间的断言)或它实际上没看起来那样的(或者,每rlbond,你没有主张变)。
试图发布一个较消毒码段,并让我们看看如果我们不能工作。
可能它被一个 NaN?在这种情况下,以下断言会失败:
assert( nr == nr );