如何在c宏特定情况下添加变量参数

时间:2014-01-21 13:13:05

标签: c macros

我正在编写硬件代码,需要创建一个用户可以传递不同参数的宏。 我的宏将确保每个参数都写在一些内存位置。

#define my_macro (.......) { \
   int *data1 = (int *) addr1 ; \  #if args1 is present
   int *data2 = (int *) addr2 ; \ #if args2 is presnet
   .
   .
   *data1 &= args1;
   *data2 &= args2;
   .
   .
}

ex1:my_macro(data1,data2); ex2:my_macro(data1,data2,data3,data4);

只有当args存在时,才应声明data1和data2。恩。如果args不存在my_macro(data1)那个案例*data1 &= args1;不应该被声明。

厌倦了使用__VA_ARGS__但不知道如何分离出不同的变量,所以我可以将每个参数分配给data*

请在这里帮忙!

1 个答案:

答案 0 :(得分:2)

您可以在此问题(第3个问题)中使用答案:Is it possible to iterate over arguments in variadic macros?

我会说:

#define my_macro (...) { \
do { \
    int i; \
    int _arr_args_[] = {__VA_ARGS__}; \
    for (i = 0; i < sizeof(_arr_args_)/sizeof(_arr_args_[0]); i++) \
        *(int *) addr_i &= _arr_args[i]; \
    } \
 } while(0)

这相当于你想要做的事情;唯一缺少的细节就是你如何得到addr_i - 你没有指明它的来源,所以我假设你只是有办法在你的代码中得到它。当然,这假设您将要传递的参数始终为int类型,我猜这是可以安全的,假设您提供的示例。