代码之家  ›  专栏  ›  技术社区  ›  missingfaktor Kevin Wright

为什么要编译这个代码段?

c
  •  11
  • missingfaktor Kevin Wright  · 技术社区  · 16 年前

    为什么要编译下面的代码?

    #include <stdio.h>
    
    int main(void) {
        getchar;
    }
    
    3 回复  |  直到 16 年前
        1
  •  28
  •   Alex Brown    16 年前

    因为函数名是指向这些函数的函数指针的别名,这些函数本身就是非常类似于整数的值。。这在语义上与

    #include <stdio.h>
    
    int main(void) {
        42;
    }
    

    这是有效的,但毫无意义。

        2
  •  13
  •   eduffy    16 年前

    同样的原因 1; getchar 只是一个函数的地址。对结果进行评估,然后将其丢弃。在语言规范中,它被称为“表达式语句”;

        3
  •  2
  •   graphitemaster    15 年前

    C很奇怪,这段代码也可以编译,但它有错误 这是C语言中最小的segfault

    main;