簡體   English   中英

GCC奇怪的編譯器錯誤(代碼塊)

[英]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 因此,錯誤。 ##稱為標記粘貼操作者 ,這兩個標記粘貼 i2一起,並且變得i2

##連接其操作數。 因此,對於A(i,j) ,您得到i##2-y ,其在串聯后變為i2-y 而且,正如您說的那樣,由於您沒有在代碼中的任何地方定義變量i2 ,因此您正確地得到一個錯誤,即i2不存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM