1、利用宏定义 静态创建变量 1 #define VAR(id) var_##id
2
3 #define _TO_STR(var_name) #var_name
4 #define TO_STR(var_name) _TO_STR(var_name)
5
6 #define _DEF(def,var,val) def var = val
7 #define DEF(def,var,val) _DEF(def,VAR(var),val)
8 // #define AUTO_(def,var,val) def VAR(var) = val //影响可读性
9
10 // DEF(def,id,val) => def var_id = val
11 DEF(int, Gbits, 511768840);
12 printf("(%s = %d)\n", TO_STR(VAR(Gbits)),VAR(Gbits));
2、能否利用宏定义 动态创建变量
能否动态创建变量 var_1,var_2, ...,var_n?答案似乎是否定的。
因为宏是在编译期间解析的,因此,宏定义无法在运行期间完成该任务
例子如下:
1 for (int i = 1; i <=10; i++)
2 {
3 DEF(int, i, i);
4 printf("(%s = %d)\n", TO_STR(VAR(i)), VAR(i));
5 }
因为宏定义在编译期间解析,因此所定义的变量编程var_i,而非var_1,var_2,...var_n.