8

私はCでこのコードを持っています:

void f(void *x) {
    printf(">>> %p\n", x);
}

int main() {

  f NULL;
    return 0;
}

NULLの定義だと思いますが、私の疑問を明確にするための説明が欲しいです。

4

2 に答える 2

9

がまたはNULLとして定義されている場合、これは適切な関数呼び出しであるまたはに展開されます。コンパイル中に括弧で囲まれていないものについては、コードでエラーが発生します。((void *)0)(0)f ((void *)0)f (0)

于 2013-05-31T08:09:51.363 に答える
2

CNULLでは、次のように定義されることがよくあります。

#if !defined(NULL)
    #define NULL ((void*)0)
#endif

この場合は、NULL単なる特別なポインターであり、例は機能します。

于 2013-05-31T08:10:08.790 に答える