【问题标题】:Is there a difference in VOID and void, in c++?在 C++ 中,VOID 和 void 有区别吗?
【发布时间】:2013-06-26 13:55:37
【问题描述】:

我已经阅读了一些与此类似的其他问题,但我仍然不知道是否 “VOID”和“void”在用法上有区别。

在不知道与 void 的确切区别的情况下使用 VOID 感到不舒服。

非常感谢任何安慰性的建议。

【问题讨论】:

  • 这取决于VOID 是如何定义的。它不是标准语言或标准库的一部分。听起来像 Windows 的东西。
  • VOID 不是标准的东西。它必须是来自某个地方的 typedef。检查你从哪里得到它的文档。也许<windows.h>
  • 我去了在“winnt.h”中显示“#define VOID void”的定义。这是否意味着 VOID 与 void 完全一样?
  • @CodeDoctorJL - 不,这意味着预处理器将在编译步骤之前将代码中所有出现的VOID 替换为void

标签: c++ void difference


【解决方案1】:

区别在于void 是语言的一部分,而VOID 不是。如果您查看包含VOID 的源文件之一的预处理器的输出,您应该能够找到包含以下行的行:

typedef void VOID;

这应该会让你感觉更好。

编辑:我从您上面的评论中看到有一个#define VOID void 行。在这种情况下,您知道它们是相同的,但您可能不会在预处理器输出中看到任何 VOID。您看到的是,在您使用VOID 的代码中的任何地方,预处理输出都将改为void

【讨论】:

  • 谢谢你们!现在说得通了。
  • 这意味着您应该使用void,而不是VOID,因为第一个是标准,而后者不是。
【解决方案2】:

void 是语言保留的关键字,但VOID 不是。在“winnt.h”中定义如下:

#ifndef VOID
#define VOID void

所以它们本质上是相同的,可以互换使用。有时为了约定而使用一个代替另一个,但使用哪一个并不重要。无论如何,预处理器最终会在您的代码中将VOID 替换为void,因为#define 就是这样做的。

实际上很多关键字在 Windows 中都是“typedefed”的。我认为这只是为了确保 8 位、16 位和 32 位 Windows 之间的兼容性。为什么他们用void 这样做......这只是Windows 很奇怪。 (据我所知)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2012-07-16
    相关资源
    最近更新 更多