我想使用宏填充多维数组,以便使用它的人认为他们正在使用一个函数并只传递一个字符串.宏将使用此字符串并在编译时将其转换为使其显示为多维数组,如下所示:
make_array ("string1,{string2,{string3,{...,{stringN");
Run Code Online (Sandbox Code Playgroud)
因此宏将把这个函数替换为多维数组,并在遇到任何地方时剪切该字符串,{.上面的代码会变成这样的:
make_array = { "string1", "string2", "string3", ..., "stringN"};
Run Code Online (Sandbox Code Playgroud)
我正在使用GCC; 我怎么能做到这一点?
更新:我以为我可以使用宏来排除字符串的引号,所以我会有一个没有文本的字符串,我可以在宏中编辑字符串,但GCC不接受宏的声明来替换双引号(如图所示)下面).
#define macro_array ( "text") text
Run Code Online (Sandbox Code Playgroud)
因此,文本将出现没有双引号,我可以找到,{标记并剪切它,然后使用stringify将字符串转回.
您可以使用C99和宏中的变量参数得到适当的近似值:
#define make_array(name, dim1, dim2, ...) \
static char name[dim1][dim2] = { __VA_ARGS__ }
make_array(mine, 2, 2, "abc", "def", "ghi", "jkl");
Run Code Online (Sandbox Code Playgroud)
$: gcc -E xx.c
# 1 "xx.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "xx.c"
static char mine[2][2] = { "abc", "def", "ghi", "jkl" };
$
Run Code Online (Sandbox Code Playgroud)
但是,您无法按要求在预处理器中轻松拆分字符串 - 这只是作业的错误工具.
您不能使用宏进行字符串处理。
我不确定我确切地知道您想做什么,但这可能最好通过一个函数来实现。