我不小心写了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是虚数常量c - 为什么 “2i;”语句不会导致编译器错误?-LMLPHP。因此,您可以这样写一个复数:

#include <complex.h>

_Complex x = 4 + 5i;

关于c - 为什么 “2i;”语句不会导致编译器错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35183722/

10-11 17:28