【发布时间】:2016-05-13 01:03:10
【问题描述】:
我不小心写了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
【问题讨论】:
-
那是什么编译器?
-
我不使用
_Complex号码。在阅读了一些标准和提供的链接之后,我认为@iharob 的回答是正确的。 -
@Olaf 西方的fastet傅里叶变换fftw使用
_Complex类型。我在为我的论文编写数据处理软件时发现了这一点(实际上是物理学,而不是计算机科学或类似的科学)-(我必须应用低通滤波器,所以卷积所以快速傅里叶变换,所以fftw)。 -
@iharob:嗯,这比 ffte 快吗?如果不是,如果我住在西部,但在你的东部,我可以使用更快的吗? ;-) 说真的:感谢您提供的信息。看起来,C 标准甚至不支持与 C11 类似的简单表示法。
-
一个很好的例子“......不是'Eureka'而是'这很有趣......'”!