【发布时间】:2015-03-15 00:08:05
【问题描述】:
我在 ACE Radius 库的 v0.9.2 中找到了以下声明:
// Types of attribute data
typedef enum AttributeFormat_e
{
E_ATTR_FORMAT_INTEGER,
E_ATTR_FORMAT_IP_ADDRESS,
E_ATTR_FORMAT_STRING,
E_ATTR_FORMAT_VENDOR_SPECIFIC,
E_ATTR_FORMAT_USER_PASSWORD,
E_ATTR_FORMAT_CHAP_PASSWORD
};
前面的typedef 完全没有意义,不应该出现。
事实上,GCC 会发出以下诊断信息:
/usr/include/ace-radius/RadiusAttribute.h:597:警告:此声明中忽略了“typedef”
现在,这最终是无害的,尽管这是文件中的一种奇怪的半有意义的半 C 声明,否则只能被解析为 C++(该声明在 class 中被发现为 private 成员)。
但纯粹出于好奇,我想知道这是否严格合规,或严格不规范,并且无法完全从标准中分辨出来。
这是领先的typedef 合法吗?还是 GCC 允许?
【问题讨论】:
-
C向后兼容性。 -
@al-Acme:不,仔细看。这不是
typedef enum E {} name;...这是typedef enum E {}; -
这对我来说似乎不是重复的,OP 似乎知道 C 中
typedef enum的含义。 -
也是“C”而不是“
C”。
标签: c++ c++11 language-lawyer c++14 c++03