ves*_*tol 7 c struct compound-literals
使用clang编译时没有警告.
typedef struct {
int option;
int value;
} someType;
someType *init(someType *ptr) {
*ptr = (someType) {
.option = ptr->option | ANOTHEROPT,
.value = 1
};
return ptr;
}
int main()
{
someType *typePtr = init( &(someType) {
.option = SOMEOPT
});
// do something else with typePtr
}
Run Code Online (Sandbox Code Playgroud)
这甚至是有效的C吗?
如果是这样的话:复合文字的生命周期是多少?
它是C99或以上的有效C.
C99§6.5.2.5 复合文字
复合文字的值是初始化列表初始化的未命名对象的值.如果复合文字出现在函数体外,则该对象具有静态存储持续时间; 否则,它具有与封闭块相关的自动存储持续时间.
在您的示例中,复合文字具有自动存储,这意味着它的生命周期在其块内,即main()它所在的函数.
来自@Shafik Yaghmour的推荐阅读: