尝试从宏函数中的三级运算符获取结构初始值设定项不起作用

Trying to get an struct initializer from a tertiary operator in a macro function doesn't work

尝试从宏函数中的三级运算符获取结构初始值设定项不起作用,它会产生一堆错误,正确的方法应该是:

#define newVar(name, type, value) (( (type) == _STRING ) ? { name, type, (long)value }) : ({ name, type, (double)value } )

编辑: 抱歉,我写的是数组初始值设定项而不是结构初始值设定项

您不能在初始化中以这种方式使用三元(条件)运算符,因为该运算符需要三个表达式。然而这些建筑 { name, type, (long)value }{ name, type, (double)value } 不是表达式。它们是初始化列表。

例如你可以这样写

int x = { 10 };

但你可能不会写

int x = 1 ? { 10 } : { 20 };

因为在三元运算符中 { 10 }{ 20 } 不是表达式。