gpt4 book ai didi

c - 为什么 gcc 接受 "int a = 3i;"作为有效语句?

转载 作者:行者123 更新时间:2023-12-05 01:22:23 28 4
gpt4 key购买 nike

当我写下面的C代码时,我发现(和我预想的相反),gcc可以接受这段代码并编译成功!我不知道为什么,因为它似乎是一个错误的陈述。

int main() {
int a = 1i;
return 0;
}

我猜它可能接受 1i 作为复数。然后 int a = 1i 表示 int a = 0+1i 并且 1i 不是有效整数,所以它只接受 0.

int main() {
int a = 1i*1i;
printf("%d\n",a);
return 0;
}

我试过上面的代码,发现它打印了-1。也许我的想法是正确的。但这是我第一次发现 C 编译器可以完成这项工作。我的猜测是否正确?

最佳答案

您的直觉是正确的。 gcc 允许复数常量作为扩展。

来自gcc documentation :

To write a constant with a complex data type, use the suffix i orj (either one; they are equivalent). For example, 2.5fi has type_Complex float and 3i has type _Complex int. Such a constant always has a pure imaginary value, but you can form any complex value youlike by adding one to a real constant. This is a GNU extension; if youhave an ISO C99 conforming C library (such as GNU libc), and want toconstruct complex constants of floating type, you should include<complex.h> and use the macros I or _Complex_I instead.

所以 1i 是复数 i。然后,当您将它分配给 a 时,复数部分被截断并分配实数部分(如果实数部分是浮点类型,则会转换为 int).

此转换在 C standard 的第 6.3.1.7p2 节中有详细说明。 :

When a value of complex type is converted to a real type, theimaginary part of the complex value is discarded and the value of thereal part is converted according to the conversion rules for thecorresponding real type.

关于c - 为什么 gcc 接受 "int a = 3i;"作为有效语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74226419/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com