C语言 GCC(代码块)的奇怪编译器错误



当我尝试编译它时(我试图理解##在这里做什么),我收到一个错误说:"i2 undedeclarationed"。我没有这个名字的变量,这是我拥有的所有代码。

#include <stdio.h>

#define A(x,y) x##2-y

int main()
{
    int i = -1;
    int j = -2;
    printf("%d n", A(i,j));
    return 0;
}

##简单地表示从两个表达式中形成一个新的预处理器常量("粘贴在一起")。

您的宏将扩展到与i2-j相同的i##2-j。您没有称为i2的内容,这是编译器错误。

经过预处理后,此语句

printf("%d n", A(i,j));

成为:

printf("%d n", i2-j);

如您所见,代码中没有变量i2。因此,错误。 ##称为令牌粘贴运算符,它将两个令牌粘贴i2在一起,它变得i2

##连接其操作数。所以对于A(i,j),你会得到i##2-y,在连接后变成i2-y。而且,正如您所说,您没有在代码中的任何位置定义变量i2,因此您正确地会得到一个i2不存在的错误。

相关内容

最新更新