You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C89标准下,向C函数传参时第16行的写法是否合规?

问题解答

核心结论

在C89标准中,第16行ShowAlpha((Alpha){1,2,3});的传参方式是不可接受的,因为这种写法依赖C99才引入的特性。

详细解释

  1. 复合字面量的标准支持
    (Alpha){1,2,3}属于复合字面量(compound literal),这是C99标准新增的语法特性,用于直接创建临时的结构体、数组等对象并初始化。C89标准完全没有定义该语法,严格遵循C89的编译器会将其视为语法错误。

  2. GCC编译的特殊情况
    GCC自带很多超出标准的扩展特性,即使你指定-std=c89或-ansi参数编译,默认也会允许复合字面量这种C99特性。但如果加上-pedantic参数强制严格遵循C89标准,GCC就会抛出明确警告:

    warning: ISO C90 does not support compound literals
    

C89下的替代写法

如果要在C89环境中实现相同逻辑,必须先显式定义结构体变量并初始化,再将变量传入函数:

int main(int argc, char **argv)
{
    Alpha temp = {1, 2, 3};
    ShowAlpha(temp);
    return 0;
}

内容的提问来源于stack exchange,提问作者damorin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 16:12:32