我可以在c预处理器中使用##在循环中声明多个变量吗?

时间:2018-03-16 08:30:55

标签: c c-preprocessor

我知道这可能不适用于声明变量,但我很好奇它是否有可能

#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;
}

我知道阵列,但正如我所说,我很好奇:)

2 个答案:

答案 0 :(得分:2)

你有两个误解。

  • 宏只是做文字替换,没什么神奇之处。在您的情况下,带宏的行将按字面意思int vari = i;。因此,您始终可以预测其效果。

  • 声明变量是一个编译时动作,for循环执行是在运行时。使用for循环声明多个变量是不可能的。

答案 1 :(得分:1)

这个宏确实会声明一个变量,但是使用固定名称vari,因为宏被计算为编译的第一步,并且在运行时不存在。它将在循环的每次迭代中被销毁,因为它会立即超出范围。

在运行时声明变量是不可能的,因为C是一种编译语言,而变量(和宏)只存在于源代码中。可以编写一个可以扩展为多个变量的奇特宏,但它们的名称和计数在编译时仍然是固定的。