我知道这可能不适用于声明变量,但我很好奇它是否有可能
#define paste(front,back) front ## back
int main(int argc,int *argv[]){
int i=0;
for(i=0;i<10;i++){
int paste(var,i) = i;
}
return 0;
}
我知道阵列,但正如我所说,我很好奇:)
答案 0 :(得分:2)
你有两个误解。
宏只是做文字替换,没什么神奇之处。在您的情况下,带宏的行将按字面意思int vari = i;
。因此,您始终可以预测其效果。
声明变量是一个编译时动作,for
循环执行是在运行时。使用for
循环声明多个变量是不可能的。
答案 1 :(得分:1)
这个宏确实会声明一个变量,但是使用固定名称vari
,因为宏被计算为编译的第一步,并且在运行时不存在。它将在循环的每次迭代中被销毁,因为它会立即超出范围。
在运行时声明变量是不可能的,因为C是一种编译语言,而变量(和宏)只存在于源代码中。可以编写一个可以扩展为多个变量的奇特宏,但它们的名称和计数在编译时仍然是固定的。