问题描述
尝试从宏函数中的三级运算符获取结构初始化器不起作用,它会产生一堆错误,正确的方法应该是:
#define newVar(name,type,value) (( (type) == _STRING ) ? { name,(long)value }) : ({ name,(double)value } )
编辑: 抱歉,我写的是数组初始化器而不是结构初始化器
解决方法
您不能在初始化中以这种方式使用三元(条件)运算符,因为该运算符需要三个表达式。然而这些建筑
{ name,type,(long)value }
和 { name,(double)value }
不是表达式。它们是初始化列表。
例如你可以写
int x = { 10 };
但你可能不会写
int x = 1 ? { 10 } : { 20 };
因为在三元运算符中 { 10 }
和 { 20 }
不是表达式。