Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我在 C 中有这段代码:
void f(void *x) { printf(">>> %p\n", x); } int main() { f NULL; return 0; }
我认为是针对 NULL 的定义,但我想解释一下以澄清我的疑问。
如果NULL定义为((void *)0)or (0),那么这将扩展为f ((void *)0)or f (0),这是正确的函数调用。编译期间任何非括号内的代码都会出错。
NULL
((void *)0)
(0)
f ((void *)0)
f (0)
在 CNULL中通常定义如下:
#if !defined(NULL) #define NULL ((void*)0) #endif
如果是这种情况,那么NULL只是一个特殊的指针,并且您的示例有效。