根据我已阅读C99和更高版本支持float complex
,double complex
和long double complex
作为复杂类型的文档。但是,使用gcc -Wall -Wextra
时,此代码在没有警告的情况下编译。C中'复杂'的默认类型
#include <stdio.h>
#include <complex.h>
int main() {
int a, b, c, d;
float re, im;
scanf("%d %d", &a, &b);
complex matrix[a][b]; /* <------ */
for(c=0; c<a; c++) {
for(d=0; d<b; d++) {
scanf("%f%fi", &re, &im);
matrix[c][d] = re + im * I;
}
}
for(c=0; c<a; c++) {
for(d=0; d<b; d++) {
printf("%.2f%+.2fi ", creal(matrix[c][d]), cimag(matrix[c][d]));
}
printf("\n");
}
}
- 这是有效的C或者是一个GCC怪胎?
complex matrix[a][b];
给我们什么类型?
如果您有铿锵编译你:
的main.c:9:5:警告:纯 '_Complex' 需要类型说明符;假设'_Complex double'
查看clang output。
gcc bug现在在this link报告。 (不是由我。)
谢谢。你怎么能告诉gcc假设双重? – eleanora
使用GCC的[typeof](https://gcc.gnu.org/onlinedocs/gcc/Typeof.html)。 – usr
在这种情况下看起来像gcc中的错误。非常感谢。 – eleanora