[英]Weird compiler error with GCC (codeblocks)
當我嘗試對此進行編譯時(我試圖了解##在這里所做的事情),我收到一條錯誤消息:“未聲明i2”。 我沒有那個名字的變量,這是我所有的代碼。
#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;
}
##
只是意味着從兩個表達式中組成一個新的預處理器常量(“一起粘貼”)。
您的宏將擴展為i##2-j
,與i2-j
相同。 您什么都沒有叫i2
,這是編譯器錯誤。
預處理后,此語句
printf("%d \n", A(i,j));
變成:
printf("%d \n", i2-j);
如您所見,代碼中沒有變量i2
。 因此,錯誤。 ##
稱為標記粘貼操作者 ,這兩個標記粘貼 i
和2
一起,並且變得i2
。
##
連接其操作數。 因此,對於A(i,j)
,您得到i##2-y
,其在串聯后變為i2-y
。 而且,正如您說的那樣,由於您沒有在代碼中的任何地方定義變量i2
,因此您正確地得到一個錯誤,即i2
不存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.