我的问题很简单:
"complex float"one_answers"float complex"都是有效的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
都是类型说明符。)