我正在编写硬件代码,需要创建一个用户可以传递不同参数的宏。 我的宏将确保每个参数都写在一些内存位置。
#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*
请在这里帮忙!
答案 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
类型,我猜这是可以安全的,假设您提供的示例。