在 C++ 中你可以这样做
enum class Colors {black, blue, green, cyan, red, purple, yellow, white};
Colors mycolor;
mycolor = Colors::blue; // this is what I want to do
Run Code Online (Sandbox Code Playgroud)
在 中C,是否可以使用 来引用枚举EnumName::tag?
\n\n在 C 中,是否可以使用 EnumName::tag 引用枚举?
\n
不它不是。阅读C11标准,例如n1570草案(\xc2\xa76.7.2.2)
\n在实践中,C 程序员有很多约定,例如对某些enum.
例如,在GTK中,所有标签都以(按照人类惯例,通用前缀)enum GtkShadowType开头,例如和。这使得 C 代码对开发人员来说更具可读性,因为GTK有很多s 。GTK_SHADOW_GTK_SHADOW_INGTK_SHADOW_OUTenum
在某些情况下,您可以生成C 代码(使用SWIG或GNU bison等软件或您自己的软件)。然后,您的 C 代码生成器还应该记录并采用生成的 C 代码的命名约定(特别是帮助人类开发人员从手写的名称中轻松识别生成的 C 名称)。
\n在大型软件(例如Linux 内核)中,记录命名和编码约定非常重要。这有利于未来开发人员的工作。
\n好的源代码编辑器(例如GNU emacs)可以配置为通过很少的按键来输入长标识符,并且当前的 C 优化编译器在优化上花费的时间比在解析上花费的时间多得多,因此 2020 年之后,拥有长但可读的标识符在大型软件代码中非常重要基础(这不会显着影响编译时间或运行时)。
\n不要忘记,只要小心,您可以混合 C 和 C++ 代码,并创建一个用 C++ 编码、具有 C 接口和 API 的库。libgccjit是一个很好的例子(使用它,您可以嵌入优化的GCC在应用程序中请小心 C++ 异常:在从库返回之前应捕获所有异常。
\n