私はCでこのコードを持っています:
void f(void *x) {
printf(">>> %p\n", x);
}
int main() {
f NULL;
return 0;
}
NULLの定義だと思いますが、私の疑問を明確にするための説明が欲しいです。
がまたはNULL
として定義されている場合、これは適切な関数呼び出しであるまたはに展開されます。コンパイル中に括弧で囲まれていないものについては、コードでエラーが発生します。((void *)0)
(0)
f ((void *)0)
f (0)
CNULL
では、次のように定義されることがよくあります。
#if !defined(NULL)
#define NULL ((void*)0)
#endif
この場合は、NULL
単なる特別なポインターであり、例は機能します。