这可能是一个愚蠢的问题。我正在修改由其他人开发的代码。我需要根据逻辑变量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
。感谢
答案 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
的类型为代价的,可能不是你想要的。