我一直在尝试定义一个宏create_array
表现得如此
create_array(1, {7, 2, 10, 32})
将扩展为:
uint8_t my_entries1 [] =
{7, 2, 10, 32} ;
或create_array(2, {7, 2, 10, 32})
:
uint8_t my_entries2 [] =
{7, 2, 10, 32} ;
我的尝试是以下代码:
#include <inttypes.h>
#define create_array(the_test_nb, initial_arr_values) \
uint8_t my_entries ## the_test_nb [] = \
initial_arr_values ;
int main()
{
create_array(1, {0x22, 0x2A, 0x2B, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00});
}
遗憾的是,魔法没有发生,我在编译时遇到错误:
simonlbc@simonlbc-ThinkPad-T440s:~/workspace/CCode/os$ gcc reproducible.c
reproducible.c: In function ‘main’:
reproducible.c:9:186: error: macro "create_array" passed 33 arguments, but takes just 2
0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00});
^
reproducible.c:9:5: error: ‘create_array’ undeclared (first use in this function)
create_array(1, {0x22, 0x2A, 0x2B, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
^
reproducible.c:9:5: note: each undeclared identifier is reported only once for each function it appears in
我怎样才能定义我的宏,以便我可以像
一样调用它create_array(1, {0x22, 0x2A, 0x2B, ...,0x00,0x00});
并继续编写更少的代码?