我的问题很简单:
"复杂浮动"和"浮动复杂"都是有效的C吗?
似乎两者都没有被gcc警告接受.
complex
是complex.h中的一个宏,它扩展为类型说明符_Complex
.例如,这表现为所有其他类型说明符int, bool, double
.对于属于同一"组"的所有类型说明符,您可以按各种顺序组合它们.这由C11 6.7.2规定,强调我的:
每个声明中的声明说明符中应至少给出一个类型说明符,并在每个结构声明和类型名称的说明符限定符列表中给出.每个类型说明符列表应为以下多个集合之一(以逗号分隔,每个项目有多个多集); 类型说明符可以按任何顺序出现,可能与其他声明说明符混合.
然后是我们找到的类型说明符的有效组列表
float _Complex
double _Complex
意味着同一组中的说明符的任何排列都很好.
再举一个例子,有一个小组
unsigned long long
, 要么unsigned long long int
这给了我们以下可能的组合:
unsigned long long x; long unsigned long y; long long unsigned z;
要么
unsigned long long int a; unsigned long int long b; unsigned int long long c; int unsigned long long d; long unsigned long int e; long long unsigned int f; long long int unsigned g; long unsigned int long h; ...
这些都意味着同样的事情.
是.一般而言,声明开头的"类型词"的顺序无关紧要:
static const unsigned long int x = 42;
是相同的
long const int unsigned static x = 42;
参考:C99,6.7.2/2
[...]类型说明符可以按任何顺序出现,可能与其他声明说明符混合.
(这两个float
和_Complex
是类型说明符).