不是緊急情況,因為代碼仍然有效,我主要只是好奇。
我正在使用 raylib 制作 RPG。我寫了一個函式,根據玩家最后移動的方向改變顯示的旋轉精靈。如果您不熟悉 raylib,紋理是一種變數型別,必須使用函式初始化LoadTexture(const char *fileName)。這是由我撰寫的另一個函式在程式啟動時處理的。出于某種原因,g 警告我這些變數是未使用的,即使它們顯然是,因為精靈正在被渲染。
這是我在 draw.h 中的宣告:
// Sprite variables
static Texture pUp; // Player facing up
static Texture pDown; // Player facing down
static Texture pLeft; // Player facing left
static Texture pRight; // Player facing right
我使用了一個函式PSetSprite(Dir pDir),它將玩家的當前方向作為引數并回傳正確的旋轉精靈。
Texture PSetSprite(Dir pDir) {
static Texture pSprite = pDown;
switch (pDir) {
case UP:
pSprite = pUp;
break;
case DOWN:
pSprite = pDown;
break;
case LEFT:
pSprite = pLeft;
break;
case RIGHT:
pSprite = pRight;
break;
case UP_LEFT:
pSprite = pLeft;
break;
case UP_RIGHT:
pSprite = pRight;
break;
case DOWN_LEFT:
pSprite = pLeft;
break;
case DOWN_RIGHT:
pSprite = pRight;
break;
default:
break;
}
return pSprite;
}
然后將其傳遞給玩家物件player.Draw(const Texture pSprite)并繪制到螢屏上。洗掉變數顯然會破壞我的程式,那么給出了什么?
對于那些詢問的人,我使用的是 g 12.2.0 版,具體錯誤是“'pUp' 已定義但未使用”,每個旋轉精靈的 x4。
uj5u.com熱心網友回復:
將命名空間范圍內的變數標記為static給定是內部鏈接,這意味著在包括宣告在內的每個翻譯單元(即.cpp包括標題的每個檔案)中將有一個相同名稱和型別的不同變數。
所以編譯器可能會警告您,您沒有在某些翻譯單元中使用變數,您還包括標題但不訪問它們。由于每個翻譯單元都有一組獨立的這些變數,編譯器正確地警告您您沒有使用這些變數的實體。
如果這些變數只應該在一個翻譯單元中使用,那么它們不應該在與其他翻譯單元共享的標頭中宣告,而是在.cpp直接或特定于那個的單獨標頭中宣告.cpp。
如果打算從多個翻譯單元訪問變數,則不能宣告它們static。而不是可以使用static關鍵字inline,這會給它們外部鏈接,使它們在每個翻譯單元中都是相同的變數,同時inline關鍵字允許變數的定義包含在多個翻譯單元中(通常,沒有inline,您需要在標頭中宣告它們,extern然后僅在一個翻譯單元中定義它們),假設每個定義都是相同的(例如,包含在同一個標??頭中)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/515293.html
標籤:C 雷库
上一篇:從R中的一個單詞的句子中匹配一個關鍵字與2個或更多單詞
下一篇:無法將數字添加到陣列中的現有索引
