我不小心写了2*i
而不是2i
:
int foo(int i)
{
2i;
return 2i;
}
我希望编译器能够捕获该错误。但事实并非如此。那么
2i
在C语言中是否有效?如果是这样,它怎么办?困惑!我使用gcc版本5.3.0进行了编译,这是程序集的输出:
.file "strange.c"
.text
.globl foo
.type foo, @function
foo:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl %edi, -4(%rbp)
nop
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size foo, .-foo
.ident "GCC: (GNU) 5.3.0"
.section .note.GNU-stack,"",@progbits
最佳答案
这是gcc extension,而2i
是虚数常量。因此,您可以这样写一个复数:
#include <complex.h>
_Complex x = 4 + 5i;
关于c - 为什么 “2i;”语句不会导致编译器错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35183722/