C89标准下,向C函数传参时第16行的写法是否合规?
问题解答
核心结论
在C89标准中,第16行ShowAlpha((Alpha){1,2,3});的传参方式是不可接受的,因为这种写法依赖C99才引入的特性。
详细解释
复合字面量的标准支持
(Alpha){1,2,3}属于复合字面量(compound literal),这是C99标准新增的语法特性,用于直接创建临时的结构体、数组等对象并初始化。C89标准完全没有定义该语法,严格遵循C89的编译器会将其视为语法错误。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
相关产品推荐
相关产品推荐

