将数组初始值传递给C宏

时间:2016-05-25 15:45:11

标签: c c-preprocessor

我一直在尝试定义一个宏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});

并继续编写更少的代码?

0 个答案:

没有答案