我有这样一段代码在C:为什么这个表单在C中是正确的?
void f(void *x) {
printf(">>> %p\n", x);
}
int main() {
f NULL;
return 0;
}
我认为是NULL的定义,但我想解释澄清我的疑问。
我有这样一段代码在C:为什么这个表单在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)
,这是适当的函数调用。在编译过程中,任何非括号的代码都会出错。
我倒下了,并且在注意到它是一个“星期一上午”的时刻后取消了我的downvote ...... –
@ JohannesSchaub-litb啊,好的。我懂了。 – 2013-05-31 08:17:30
非常感谢您的解释。 – Kyrol
在C NULL
通常被定义如下:
#if !defined(NULL)
#define NULL ((void*)0)
#endif
如果是这种情况,那么NULL
只是一个特殊的指针,例如你的作品。
你究竟在这里不喜欢什么? –
iirc NULL是一个#define到((void *)0),所以当它复制到你有f((void *)0)作为函数 – Daboyzuk
的参数是我第一次看到这个有种形式'f NULL'。 – Kyrol