整个程序执行过程中是否真的存在静态变量?我知道这个代码片段没有任何意义,但我问自己,因为我理解 c99 标准,当我进入 If 语句的范围时,这意味着我从未在对象的生命周期中取消引用. 因为幸运的是我取消了静态对象所在的地址。那么,就 if 语句为真而言,这不是一个未定义的行为吗?还是静态对象的生命周期只是从它的第一次出现开始?
#define UTHOPICALMATCH (int *) 0xBCAA1400
int *foo (void);
int main(int argc, char** argv)
{
int * iPtr = UTHOPICALMATCH;
*iPtr = 5;
if (foo() == UTHOPICALMATCH)
{
printf ("It's still defined behavior!!!\r\n"); // is this true?
/*...*/
return 0;
}
return -1;
}
int *foo (void)
{
static int si;
return &si;
}
编辑:在 6.2.4->3 的 c99 中,它说:
使用外部或内部链接或存储类说明符 static 声明其标识符的对象具有静态存储持续时间。它的生命周期是程序的整个执行过程,它的存储值只在程序启动之前初始化一次。
所以我不是在问,它在调用 foo() 之后的生命周期,我问我自己,这是否意味着它甚至在调用 foo() 之前就有效?