Jul*_*val 3 c struct typedef return function
我已经开始学习C89,并且正在深入研究结构.我的问题最好通过一个例子来解释.
想象一下这段代码:
typedef struct {
int x, y, r;
} Circle;
Circle createCircle(int x, int y, int r){
Circle create = {x, y, r};
return create;
}
int main(void){
Circle coords = createCircle(3, 2, 1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我create在函数createCircle中创建一个变量,然后将其返回到main函数.我想知道是否存在某种形式的速记来省略这个中间步骤,例如:
Circle createCircle(int x, int y, int r){
return Circle {x, y, r};
}
Run Code Online (Sandbox Code Playgroud)
当然,上述方法不起作用,但它应该让您了解我想要实现的目标.这是可能的,还是我最好先创建一个变量?
谢谢!
tab*_*tab 10
您正在寻找的构造称为复合文字,其语法实际上与您的演示完全相同.只需在类型周围添加parens:
return (Circle){x, y, r};
Run Code Online (Sandbox Code Playgroud)
这是一个C99功能,用于为结构和数组等聚合创建文字(尽管它也可用于创建标量,有点反直觉),类似于整数和其他标量文字.除了前面的括号类型名称之外,语法与初始化类型实例时的语法相同.
与通常存在于数据段中的其他文字不同,复合文字被构造并驻留在创建它们的范围内的自动存储中(或者如果它们在全局范围内则是静态的.)换句话说,使用临时命名的Circle实际上是相同的在机器代码级别.