“复数浮点”和“浮点复数”是否都有效C?
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;
...
这些都意味着同样的事情。
是的。一般情况下, “请键入y字” 在声明的开头的顺序并不重要:
static const unsigned long int x = 42;
相同
long const int unsigned static x = 42;
参考:C99,6.7.2/2
类型说明符可能以任何顺序出现,可能与其他声明说明符混合使用 。
(两者float
和_Complex
是类型说明符。)
N1570表示*“在声明中声明 声明的开始处以外的存储类说明符的放置是一个过时的特性。”*,因此在其他位置使用'static'不是一个好主意。 – user694733
@ user694733但这只适用于存储类说明符。类似于'static long const int _Atomic long volatile unsigned * const volatile * _Atomic * const x;'在C中是完全正确的代码... – Lundin
由于'INT长无符号long'是有效的,它是有道理的,这两个订单是有效的。虽然我没有正式检查过。 –
http://port70.net/~nsz/c/c11/n1570.html#7.3.1p4:*宏 'complex' 扩展为'_Complex;'宏 _'Complex_I' 膨胀到常量表达式'const float _Complex',其中虚数单元的值为*。所以'float'在这里只是多余的。 –
@ EugeneSh。使用gcc复合函数以其自己的默认值加倍复杂。 – eleanora