我遇到了以下代码,它非常新且有趣。
u8 m_var = stptfunc()->mem;
以前从未见过这种初始化。代码编译并运行良好。 我只是好奇这是否是一种常见做法。
通常我会这样编码......
strtype *ptrfunc()
{
// statements
}
sttype *stvar = ptrfunc();
u8 var = stvar->mem;
示例代码:
typedef unsigned char u8;
typedef struct{
u8 mem;
}sttype;
sttype *stptfunc(void)
{
static sttype stvar;
stvar.mem = 255;
return &stvar;
}
int main()
{
u8 m_var = stptfunc()->mem;
printf("value of %d",m_var);
return 0;
}
stptfunc()->mem
表示 stptfunc
是一个返回指针的函数,该指针被取消引用以获取其 mem
字段。由于我们有整个程序,我们可以看到这个假设是成立的。
这可能是不好的做法。如果
stptfunc
返回 NULL
怎么办?不能保证不会。
在如此简单的程序中,这没什么大不了的,但这是一个不好的做法。
此外,根据注释,函数内的静态变量是确保变量在函数调用的生命周期中存活的有效方法,但与使用 malloc/free 相比,这可能是一个非常糟糕的做法。
sttype *stptfunc(void)
{
sttype *stvar = malloc(sizeof(sttype));
if (!stvar) return NULL;
stvar->mem = 255;
return stvar;
}
记住
free
此函数调用的结果。