为什么以下代码会编译?
#include <stdio.h>
int main(void) {
getchar;
}
答案 0 :(得分:28)
因为函数名是函数指针的别名,这些函数本身的值与整数非常相似。这在语义上非常类似于
#include <stdio.h>
int main(void) {
42;
}
这是有效但毫无意义。
答案 1 :(得分:13)
1;
编译的原因相同,getchar
只是函数的地址。评估结果,然后丢弃。在语言规范中,它被称为“表达式声明”;
答案 2 :(得分:2)
C很奇怪,这段代码也编译,但它是段错误 记录中,它是C中最小的段错误 历史。
main;