如何使用宏在C / C ++中定义名称中减少数字的变量?

时间:2014-11-25 07:05:23

标签: c macros

我有变量a1, a2...a32 那么如何使用宏定义它们呢?

我试过

#define Name(i) a##i
for(int i=1; i<32;i++)
{
   Name(i) = 1;
}

但实际上Name(i)给了我

 ai

而不是

a1 ... a32

PS:

我知道矢量。但是现在给出了变量名,所以我不能只写array[i]=1,我必须写a1=1; ...; a32=1等,这让我想用宏。

2 个答案:

答案 0 :(得分:3)

您应该使用类似数组的容器(std::arraystd::vector):

std::array<Type, 32> a;

和循环通过它:

for (auto element : a) { ... }

或使用任何标准算法。

如果你有一堆编号的变量,那通常是一个应该是数组的代码气味。

答案 1 :(得分:1)

在现实世界的编程中没有理由为什么你会被&#34;给予&#34;变量名。但如果你因为不明原因必须使用这些名字,那就把它们放在一个联盟中。

typedef struct
{
  int a1;
  int a2;

  ...

  int a32;
} variables;

typedef union
{
  variables var;
  int array [32];
} my_union;


my_union mu;

for(int i=0; i<32; i++)
{
  mu.array[i] = ...;
}