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

问题描述

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

#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 } 不是表达式。