1. ホーム
  2. c

[解決済み] 2i;" という文はなぜコンパイラーエラーにならないのでしょうか?

2023-08-12 04:29:49

質問

代わりに 2*i の代わりに、私は不注意にも 2i :

int foo(int i)
{
    2i;
    return 2i;
}

私はコンパイラがエラーをキャッチすることを期待しました。しかし、それはしませんでした。ということは 2i はC言語では有効な文なのでしょうか?もしそうなら、それは何をするものなのでしょうか?困りましたね。

gcc version 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 拡張機能 そして 2i は虚数定数 . というように、複素数を書くことができるのです。

#include <complex.h>

_Complex x = 4 + 5i;