-6i
这段代码中的含义是什么?
#include<stdio.h>
int main()
{
int i = 1234;
printf("%d",-6i);
}
要回答您的真正问题,-6i
是一个复杂的常量(GCC 扩展)。来自http://gcc.gnu.org/onlinedocs/gcc/Complex.html:
要编写具有复杂数据类型的常量,请使用后缀“i”或“j”(任何一个;它们是等效的)。例如,
2.5fi
有类型_Complex float
和3i
有类型_Complex int
。这样的常数总是有一个纯虚数,但你可以通过在一个实数常数上加一来形成任何你喜欢的复数值。这是一个 GNU 扩展;如果您有一个符合 ISO C99 的 C 库(例如 GNU libc),并且想要构建复杂的浮点类型常量,您应该包含<complex.h>
并使用宏I
或_Complex_I
代替。
因此i
in-6i
与变量无关i
,就像f
浮点常量中的 in-1.0f
与名为 的变量无关f
。
附带说明,printf("%d",-6i);
是未定义的行为,因为格式规范%d
不处理复杂的参数。GCC 没有对复杂类型的表示做出任何承诺(据我所知)。printf()
关于那会做什么,你不能说太多。
我认为要打印复杂值,您必须分别提取复杂值的每个组件(我认为 glibc 没有printf()
处理 GCC 复杂类型的格式规范扩展)。就像是:
printf("%d %d\n",__real__ -6i, __imag__ -6i);
printf("%f %f\n",__real__ -6.i, __imag__ -6.i);