是否可以使用三元运算符"?"用C / C ++填充数组列表?

时间:2015-05-01 03:18:45

标签: c++ c ternary-operator

这可能是一个愚蠢的问题。我正在修改由其他人开发的代码。我需要根据逻辑变量ThreeDim来详细说明某些字符数组的值。我试图这样做没有成功。

int         VarNumber  = ThreeDim==1 ? 3 : 2;
const char* VarList [] = ThreeDim==1 ? {"X","Y","Z"} : {"X","Y"};

但是编译器给了我像

这样的错误
error: expected ‘;’ before ‘}’ token
error: initializer fails to determine size of ‘VarList’
由于下游要求,

VarList需要为const char*。其大小应为VarNumber。感谢

2 个答案:

答案 0 :(得分:2)

您可以考虑使用预处理器#define THREE_DIM,然后使用#ifdef选择要编译的一个或另一个代码:

#define THREE_DIM

#ifdef THREE_DIM
int         VarNumber  = 3;
const char* VarList [] = {"X","Y","Z"};
#else
int         VarNumber  = 2;
const char* VarList [] = {"X","Y"};
#endif

答案 1 :(得分:1)

根据C11 6.7.9,数组未使用表达式进行初始化,但使用初始化列表;这些是两种不同的句法元素,不能混合。这是因为数组不可分配,并且将一个数据视为一个值(而不是一个衰减为指针的值),因此没有意义。由于它们不是值,因此无法创建绕过整个数组的合法表达式。

与您要求的最接近的直接类似物将是:

const char** VarList = ThreeDim==1 ? (const char*[]){"X","Y","Z"} : (const char*[]){"X","Y"};

...但这是以改变VarList的类型为代价的,可能不是你想要的。