有铸造NULL来在C结构指针任何好处?
例如:
typedef struct List
{
....
} List;
List *listPtr = ((List *) NULL) ;
从PostgreSQL源代码实例:
#define NIL ((List *) NULL)
http://doxygen.postgresql.org/pg__list_8h_source.html
有铸造NULL来在C结构指针任何好处?
例如:
typedef struct List
{
....
} List;
List *listPtr = ((List *) NULL) ;
从PostgreSQL源代码实例:
#define NIL ((List *) NULL)
http://doxygen.postgresql.org/pg__list_8h_source.html
在分配例子中,明确投不作任何有用的意义。 然而,似乎你真正的问题是有关#define NIL ((List *) NULL)
宏,它的实用性超出分配。
一个地方,它可能是有意义的是,当你把它传递给一个可变参数函数或者没有原型声明的函数。 标准NULL
可以被定义为0
或0L
或((void *) 0)
或以某种其他方式,这意味着其可能在这种类型的无上下文有不同的解释。 显式类型转换将确保它被正确解释为指针。
例如,这是通常无效(行为未定义)
void foo();
int main() {
foo(NULL);
}
void foo(List *p) {
/* whatever */
}
在更换与呼叫
foo(NIL);
使得它有效。
没有空为空,这是因为空,你可以得到,你可能会认为零是相当空,但相较于零,这只是花生。
有铸造NULL来在C结构指针任何好处
有没有。 它应该是简单的:
List *listPtr = NULL;
此外,如果对象具有静态存储(比方说,就像一个全局变量),你甚至都不需要把它初始化为NULL。