【问题标题】:Can I undefine EXIT_SUCCESS?我可以取消定义 EXIT_SUCCESS 吗?
【发布时间】:2011-03-30 00:53:17
【问题描述】:

我想定义我自己的枚举类型:ExitType。我是这样写的:

enum ExitType{
  EXIT_SUCCESS,
  EXIT_FAILURE,
  EXIT_OTHERTYPE
  };

我有一个返回 ExitType 的函数。在某些情况下,它会返回 EXIT_SUCCESS。但我收到错误消息,您无法将 int 转换为 ExitType。我可以为我的 IDE 取消定义 EXIT_SUCCESS,还是我卡在使用static_cast<int>(EXIT_SUCCESS)?好像介绍了他们的EXIT_SUCCESS会和我的EXIT_OTHERTYPE等对齐的可能性。

我将 Eclipse Helios 与 CDT、MinGW32 和 SDL 一起使用。所有 32 位和最新版本。

编辑:尝试使用预处理器取消定义 EXIT_SUCCESS。

#undef EXIT_SUCCESS
#undef EXIT_FAILURE

enum ExitType{
    EXIT_SUCCESS,
    EXIT_FAILURE,
    EXIT_OTHERTYPE,
    EXIT_NOEXIT
};

结果:
..\src\EventManager.cpp:12:7: 错误:从“int”到“ExitType”的无效转换

编辑 2:当我在包含 之后移动我的未定义时,错误消失了。但是,SDL 代码的 GREP 不会出现任何匹配 EXIT_SUCCESS 的内容。

【问题讨论】:

  • EXIT_SUCCESS 在 stdlib.h 中定义。不过,这似乎不是你的问题。您的错误表明您不能从 into 隐式转换为 ExitType (这是正确的,该转换需要显式转换)。从 ExitType 到 int 的转换可以隐式完成。
  • 请注意,如果由于与EXIT_SUCCESSEXIT_FAILURE 的冲突而无法将<stdlib.h> 与您的标头一起使用,您将无法让其他人使用您的代码。这在短期内可能对你很重要,也可能无关紧要,但不要养成习惯。或者,IOW,重新定义标准名称是个坏主意。

标签: eclipse enums mingw c-preprocessor


【解决方案1】:

#undef EXIT_SUCCESS 应该取消定义预处理器符号EXIT_SUCCESS,这是我假设在这里发生的事情。但只有当你确定这样做不会破坏任何东西时才这样做!

【讨论】:

  • 感谢您的建议!在我继续进行该项目时,我们会看看是否有任何问题。
  • 一般来说,似乎没有什么会破坏...因为 EXIT_SUCCESS 作为预处理器符号,最有可能被定义为 int "0"...并且枚举可以衰减为 int...并且您的 EXIT_SUCCESS 是您的枚举中的第一个值......这意味着它的整数值为 0......这意味着什么都不会真正改变!假设您使用 C++ 编程,您可以通过将枚举包装在命名空间中来避免这种情况
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 2017-10-28
  • 1970-01-01
相关资源
最近更新 更多