Вместо 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