"复杂浮动"和"浮动复杂"都是有效的C吗?

ele*_*ora 8 c

我的问题很简单:

"复杂浮动"和"浮动复杂"都是有效的C吗?

似乎两者都没有被gcc警告接受.

Lun*_*din 6

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;
Run Code Online (Sandbox Code Playgroud)

要么

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;
...
Run Code Online (Sandbox Code Playgroud)

这些都意味着同样的事情.

  • 如果您认为上述内容完全不合理,那么您是对的.C语言是为混淆而设计的.理智从来都不是优先事项. (4认同)
  • 或者"对于语言混淆C,设计是.优先理智从来都不是". (2认同)

mel*_*ene 5

是.一般而言,声明开头的"类型词"的顺序无关紧要:

static const unsigned long int x = 42;
Run Code Online (Sandbox Code Playgroud)

是相同的

long const int unsigned static x = 42;
Run Code Online (Sandbox Code Playgroud)

参考:C99,6.7.2/2

[...]类型说明符可以按任何顺序出现,可能与其他声明说明符混合.

(这两个float_Complex是类型说明符).

  • N1570说*"在声明中声明说明符开头之外的存储类说明符的放置是一个过时的功能."*,所以在开头的其他地方使用`static`是一个坏主意. (2认同)