我可以在ANSI C中的一行上返回初始化结构吗?

Joã*_*ves 14 c struct initialization return ansi

我只想知道我是否可以做那样的事......

typedef struct Result{
  int low, high, sum;
} Result;

Result test(){
  return {.low = 0, .high = 100, .sum = 150};
}
Run Code Online (Sandbox Code Playgroud)

我知道这是错误的方式,但我可以这样做,还是我需要创建一个局部变量来接收值然后返回它?

oua*_*uah 25

您可以使用复合文字来完成此操作:

Result test(void)
{
    return (Result) {.low = 0, .high = 100, .sum = 150};
}
Run Code Online (Sandbox Code Playgroud)

(){} 是复合文字运算符,复合文字是c99中引入的一个特性.

  • @ user3629249:但是这些可以优化并且是针对ABI的。在Linux / x86-64上,通常在两个寄存器中返回两个字段的“ struct”。 (2认同)