【问题标题】:Keyword enum starting a function definition in C++在 C++ 中启动函数定义的关键字枚举
【发布时间】:2015-01-26 13:51:44
【问题描述】:

我知道在 C 和 C++ 中,您都可以使用 enum 关键字枚举命名常量:

enum { RED, GREEN, BLUE };

如果您不为名称分配常量,编译器会以增量方式执行此操作,从 0 开始为每个新枚举。

现在让我们看看不同之处:

enum COLOR { RED, GREEN, BLUE };

在 C 中,COLOR 是所谓的“标签”。它不能直接用于变量或返回类型声明。相反,您必须在其前面加上 enum 关键字(或先为其创建一个 typedef):

enum COLOR someCFunction();

在 C++ 中,枚举名称是正确的类型名称,因此 enum 不是必需的。

但你仍然可以包含它,而且它在语法上似乎是正确且无害的:

enum COLOR someCppFunction();

我是否应该在 C++ 代码中的枚举名称之前保留 enum 关键字(“出于兼容性原因”)?

【问题讨论】:

  • 我认为您应该删除 C 标签,因为该问题仅适用于 C++。在 C 中,您必须使用 typedef 来“摆脱”类型前面的枚举。
  • 如果你不再使用 C,我不会这样做。
  • @DanielDaranas “兼容性原因”是个笑话。我会将多余的enum 视为错误,但我不想仅仅因为“感觉不好”而更改代码。
  • 如果“出于兼容性原因”是个玩笑,那么问题实际上有点不同。 “出于兼容性原因”,我不会将枚举放在那里,但我会犹豫从 C 更改旧的、经过测试的代码,只是为了让它更漂亮。

标签: c++ c syntax enums


【解决方案1】:

有什么好处?只有在不同项目中使用 C 和 C++ 编译器编译源代码时,才会有好处。因为你也可以在 C 中使用typedef,所以这仍然不是一个很大的好处,而且这样更简洁。

另一方面,如果您使用枚举,则必须记住您始终如一地执行此操作,否则您将同时拥有两个版本,这可能会导致混淆和(在最坏的情况下)意外的副作用,尤其是在与多个开发人员。

【讨论】:

  • 感谢您的回答,这最能表达我的“感受”。
  • 就个人而言,我认为您应该始终限制您必须记住的内容,因为其他人不会遵循它,您必须检查它是否被强制执行。仅当您认为它们对于更清晰的代码和/或易于遵循绝对必要时才执行此类操作。
  • 没错,这就是为什么我避免typedefing struct's 或enum's
【解决方案2】:

因为你可以在 c 中做到这一点

typedef enum Color Color;
enum Color {Red, Green, Blue, White, Black};

然后将Colorenums声明为

Color color;

那么,语言不是改变语法的正确标准,如果有的话,可能是故意让读者意识到这些变量是enums。

【讨论】:

  • 好点。但是今天,Artistic Style 2.05.1 未能格式化以enum 开头的函数,这就是我问的原因。
  • 谢谢提示,我去看看。顺便说一句,astyle 可以让我没有指定的内容保持不变:所以我可以逐步引入格式规则。
  • @Wolf uncrustify 有很多选项,以至于当我使用它时,我只是厌倦了调整它,并保留默认值。还有一个基于 Qt 的 GUI,所以多平台,我只是不记得它的名字了。
猜你喜欢
  • 2021-11-15
  • 2021-11-19
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多