我的问题很简单:
两者都是#34;复杂浮动"和"浮动复杂"有效的C?
两者似乎都被gcc接受,没有任何警告。
答案 0 :(得分:6)
complex
是complex.h中的一个宏,它扩展为类型说明符_Complex
。其行为与所有其他类型说明符相同,例如int, bool, double
。对于属于同一" group"的所有类型说明符,您可以按各种顺序组合它们。这由C11 6.7.2规定,强调我的:
声明中应至少提供一个类型说明符 每个声明中的说明符,以及说明符限定符列表中的说明符 每个结构声明和类型名称。每个类型说明符列表 应该是以下多个集合之一(逗号分隔,何时 每个项目有多个multiset); 类型说明符可以 以任何顺序发生,可能与其他声明混合 说明符。
然后是一个有效的类型说明符组列表,我们在其中找到
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;
...
这些都意味着同样的事情。
答案 1 :(得分:5)
是。一般来说,"类型词的顺序"在声明开头并不重要:
static const unsigned long int x = 42;
与
相同long const int unsigned static x = 42;
参考:C99,6.7.2 / 2
[...]类型说明符可能以任何顺序出现 与其他声明说明符混合。
(float
和_Complex
都是类型说明符。)