当前位置:  开发笔记 > 编程语言 > 正文

C语言中“复杂”的默认类型

如何解决《C语言中“复杂”的默认类型》经验,为你挑选了1个好方法。

根据该文档我读C99及更高版本支持float complexdouble complexlong double complex为复杂类型。但是,使用时,此代码会编译而不会发出警告gcc -Wall -Wextra

#include 
#include 

int main() {
    int a, b, c, d;
    float re, im;

    scanf("%d %d", &a, &b);
    complex matrix[a][b]; /* <------ */

    for(c=0; c

这是有效的C还是gcc的奇数?

什么类型complex matrix[a][b];给我们?


如果使用clang进行编译,则会得到:

main.c:9:5:警告:普通的'_Complex'需要类型说明符;假设为“ _Complex double”

请参阅clang输出。


现在在此链接报告了gcc错误。(不是我的。)



1> melpomene..:

根据C99(ISO 9899:1999):

complex是一个宏(在中定义),扩展为_Complex(7.3.1 / 2)。

_Complex是一种类型的说明符(就像intdoubleunsigned等)(6.7.2 / 1)。

6.7.2 / 2:

约束条件

在每个声明的声明说明符中,以及在每个struct声明和类型名称的说明符限定符列表中,至少应提供一个类型说明符。类型说明符的每个列表应为以下集合之一(当一行上有多个集合时,以逗号分隔);类型说明符可以以任何顺序出现,并且可能与其他声明说明符混合使用。

[...]

float _Complex

double _Complex

long double _Complex

这些是包含唯一类型说明符集_Complex,这意味着complex没有floatdouble或者long double是不允许的。

此外:

5.1.1.3诊断

1如果预处理翻译单元或翻译单元包含违反任何语法规则或约束的条件,即使该行为也被明确指定为未定义或实现,则符合标准的实现应产生至少一个诊断消息(以实现定义的方式标识) -定义。

由于单独使用complex全部都是违反约束的,因此需要编译器警告或错误。如果您没有收到的警告gcc -std=c99 -pedantic,则说明您在gcc中发现了一个错误。

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有