尝试从宏函数中的三级运算符获取结构初始值设定项不起作用
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 }
不是表达式。
尝试从宏函数中的三级运算符获取结构初始值设定项不起作用,它会产生一堆错误,正确的方法应该是:
#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 }
不是表达式。