在C ++(gcc,VS)中,NULL被认为与False相同。或者更重要的是,如果在逻辑语句中,NULL评估为什么。还有许多其他问题,但C ++没有具体问题。
由于某种原因,使用NULL控件循环(;;)只是冻结程序,指示在;;之间放置了除NULL之外的东西。请注意,此代码是我们的教授认为包含NULL值的代码。
答案 0 :(得分:27)
我认为NULL通常定义为0,当用作布尔表达式时,巧合地计算为false。
答案 1 :(得分:6)
在C ++中,NULL
为#defined
为0(因此计算结果为false)。在C中,它是void*
,它的计算结果为false,但其类型不是数字类型。在标准库中(至少在GCC上):
#ifndef __cplusplus
#define NULL ((void *)0)
#else /* C++ */
#define NULL 0
#endif /* C++ */
答案 2 :(得分:2)
您似乎正在考虑以下代码:
for (;;) { }
这将永远循环,因为条件术语是空的。您可能想要将其称为 null条件以表示没有条件存在,但是当您和其他阅读过您的问题的人都可以证明时,这是一个令人困惑的短语,因为它不与此相同:
for ( ; NULL; ) { }
以上内容根本不会循环。它使用宏NULL
,它等于整数常量零,布尔上下文中的零被视为false。这不是“空条件”,因为 是一个条件 - 一个总是错误的条件。
如果你是从你的教授那里得到这个,并且他正在用C ++教课,那么我怀疑你误解了他,因为这不是我希望教授弄错的东西,所以去请他填写你笔记中的洞。如果他不是C ++教授,那么他可能只是尝试使用C ++示例来说明其他主题。你可能希望给他一个关于它的说明,这样他就可以在未来的讲座中澄清并展示一些不同的例子。
答案 3 :(得分:0)
某些平台(Mac)上的gcc上的NULL要复杂得多。它试图从下一个cxx rev开始使用nullptr thingy。即便如此,它仍应在布尔上下文中评估为false