是否始终保证局部变量的地址有效

时间:2014-10-01 15:25:14

标签: c pointers

我在编译器中遇到警告:"地址永远不会为NULL"
代码如下:

struct mydata * var = NULL;
/* some function which may modify var*/
if(NULL != &var) {
    // do something
}

实际警告(-Werror已标记):

error: the comparison will always evaluate as 'true' for the address of 'var' will never be NULL [-Werror=address]

这是否意味着局部变量的地址始终为非NULL?将它与&var进行比较是一个错字。

2 个答案:

答案 0 :(得分:8)

如果您使用它,它将始终具有有效地址。

如果您不使用它,它可能会被编译器优化或忽略。所以这个地址没有价值,但你永远不会知道。

答案 1 :(得分:1)

  

C 2011第6.3.2.3节第3段

     

值为0的整型常量表达式,或者类型为 void * 的表达式,称为空指针常量。如果将空指针常量转换为指针类型,则保证将结果指针(称为空指针)与不等于指向任何对象或函数的指针进行比较。

     

C 2011脚注66

     

NULL<stddef.h>(和其他标头)中定义为空指针常量

因此,空指针永远不会指向有效对象。