编译时数组连接

时间:2011-09-01 15:14:03

标签: c

C支持在编译时连接常量字符串。我可以为任何常数阵列做同样的事情吗? (例如,连接两个char **数组。)

3 个答案:

答案 0 :(得分:3)

基本上没有,但您始终可以使用预处理器解决此问题。诀窍是定义没有花括号的数组:

#define ARRAY_ONE "test1", "test2", "test3"
#define ARRAY_TWO "testa", "testb", "testc"

现在,您可以使用逗号在编译时加入数组。 但是,要使用它们,您必须使用花括号来围绕它们或使用宏:

#define ARR(...) {__VA_ARGS__}

您现在可以使用单个数组或任何所需的连接,如下所示:

char *arr1[] = ARR(ARRAY_ONE);
char *arr2[] = ARR(ARRAY_TWO);
char *arrc1[] = ARR(ARRAY_ONE, ARRAY_TWO);
char *arrc2[] = ARR(ARRAY_ONE, ARRAY_TWO, ARRAY_ONE, ARRAY_ONE);

但是,使用宏来实现这样的结果是不好的做法。

答案 1 :(得分:2)

简短回答:不。

更短的答案:字符串文字确实是字符数组,但并非所有字符数组都是字符串文字。编译时连接仅适用于字符串文字。没有数组具有“功能”。

答案 2 :(得分:0)

No