【发布时间】:2015-07-07 04:57:56
【问题描述】:
我的目标是初始化一个本地静态 int 变量。 我想用等于结构成员偏移值的值初始化我的变量。
我的结构定义
struct member{
int ID;
char *NAME;
int NO;
};
全局结构声明
struct member FirstMember={.ID = 123, .NAME ="John", .NO=7382737};
struct member SecondMember={.ID = 120, .NAME ="Bill", .NO=454545};
函数和局部静态变量声明
void foo()
{
static int offset = (int)(&FirstMember.NO - &SecondMember.ID );
}
Compiler output: Error[Pe028]: expression must have a constant value..
据我所知,静态局部变量必须用 const 值初始化。编译器还知道结构及其成员的地址值。因此编译器能够计算成员地址之间的差异。但它返回一条错误消息。
但是这个初始化工作
void foo()
{
static int offset = (int)(&FirstMember.NO - &FirstMember.ID );
}
能否解释一下我遗漏的要点?
【问题讨论】:
标签: static initialization local