為什麼C C 的預處理指令 include不自動讓所包含的檔案只包含一次?

時間 2021-06-02 08:36:34

1樓:coderm

目前include的功能很簡單,就是在該位置將檔案替換展開。如果要實現include_once需要做什麼呢?需要維護乙個列表,每展開乙個新檔案,就要去查一遍這個列表。

這對於預處理器來說有點太難了——預處理命令都是一些很弱的功能,做做簡單的文字替換,它們本來就是被設計成了不理解程式更不理解工程的,否則會對語言本身形成干涉。(——當然後來大家大量用巨集替換來實現功能,我只能說呵呵了。)

2樓:nul nul

yu xia 說的對.

舉個例子, 你需要在多個函式中使用乙個點陣字, 而又不想把它放到全域性變數那裡, 假設這個點陣字是這樣的

// 漢

0x20,0x00,

0x10,0x00,

0x17,0xFC,

0x02,0x08,

0x82,0x08,

0x49,0x10,

0x49,0x10,

0x11,0x10,

0x10,0xA0,

0x20,0xA0,

0xE0,0x40,

0x20,0xA0,

0x21,0x18,

0x26,0x0E,

0x28,0x04,

0x00,0x00,

可以把上面這個點陣字儲存在 han.data 裡面, 在需要使用這個點陣字的函式裡面, 這樣使用:

char han = ;

這樣, 你在乙個檔案裡面就可能需要多次 include 這個 "han.data" 檔案.

要是你讓預處理器自動處理使得乙個檔案只包含另乙個檔案一次, 喔哦~ 為什麼要那樣做呢?

3樓:下愚

有需要重複include同乙個檔案多次的情況,完全取決於你的需要。簡單的說,為了實現只include乙個檔案一次,你增加了預處理的實現邏輯反而減少了功能,為什麼要這麼做呢?

機器學習資料預處理的目的是什麼?

深藍遠景 採集來的資料有時候不一定完整,比如醫療資料,有時候沒錄上,有時候隨便寫個數字,也有乙個特徵有資料其他全部為0的資料,這些資料在訓練的時候會影響模型的效率和結果,所以需要預處理 花月正春風 你要知道這樣一句話,機器學習的上限取決於資料特徵本身,也就是說,機器學習的天花板就是由好的資料特徵決定...

我為什麼會在《我的世界》指令裡遇到了問題?

MineCommander 0.打好基礎 Minecraft命令全教程 以下為正文 1.看命令裡還有部分語法錯誤 比如座標間沒有空格 如果你是把原命令認真照搬過來的話要仔細檢查一下 2.我只知道je版怎麼做,但可能會用到1.13 的excute和nbt等基岩版沒有的功能,大致邏輯是這樣 檢查魚勾 0...

回合制 RPG 裡的 防禦 指令為什麼沒被刪除?

亂碼君 補充一種情況 有一類rpg,防禦就是為了不攻擊 不攻擊就是為了輸 輸了就可以看戰敗cg 後來這種遊戲系統上增加了開局自動輸的方法 alpho 防禦這個指令在atb裡極為有用。就拿閃軌做例子,如果敵方正在蓄力,而我方無法迴避或者打斷,那麼防禦就是最好的選擇。並且防禦 等待 的delay一般會設...