創作內容

3 GP

【c++練習】有關於巨集(macro)這個c++的附屬語言

作者:星白夜१ذ??؟¿ᷣᣎ│2024-02-05 12:07:00│巴幣:6│人氣:53
如果有特別去了解過這是什麼東西的話大概就知道它的本質是文本替換,也就是說在你編譯你的c++之前,它會自動根據你的巨集內容,換掉你的程式碼。它會持續這個過程,直到沒有東西可以換為止,聽起來很簡單對吧?

事實上如果自己用的話其實也不算難,例如:

#include <iostream>
#define HELLO_WORLD std::cout<<"Hello World!\n"
int main(){
    HELLO_WORLD;
    return 0;
}

這樣去編譯,就會在編譯前把最上面那行直接替換成「輸出Hello World!」的程式碼(當然如果你直接用滑鼠執行這個編譯完的exe它會輸出完馬上離開,很可能什麼都看不到,除非你用命令提示字元執行)

巨集除了直接替換字串之外,也可以拿來寫一點簡單的程式,例如:
#define EAT(x) eat_##x##_apples
#define STR(x) #x
#define XSTR(x) STR(x)

這樣以來如果你打出XSTR(EAT(3)),你程式碼在對應的位置,就會變成"eat_3_apples",之所以要用XSTR,是因為如果直接用STR,第一次代換就會直接變成"EAT(3)"然後就看不到了。

除了這些之外還有一些條件編譯的語法,但都不算太複雜,總而言之巨集算是個好玩又方便的東西

前提是你要搞懂你的c++文本裡面到底有哪些巨集,以及哪些是巨集(還有巨集之間如果有同名的東西好像很容易造成不兼容,例如LMMS跟VST3)

總而言之對於初學者來說,如果拿著某個sdk,照著網路上的教學練習,之後自己想小改看看的時候,這是個很容易搞錯的部分。因為巨集它是編譯前的文本替換,所以有些看起來像是函數但實際上是巨集的東西,如果照著寫程式的方法丟進去會出包。另外它其實不算好除錯,所以不能過於濫用。
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=5877508
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

3喜歡★shiroyoru 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:大創黏耳朵棒使用心得... 後一篇:【編程】巨集的濫用方法...

追蹤私訊切換新版閱覽

作品資料夾

yvonne40528歡迎來看小說ゝω・
🌠《星與銀河》|現代、校園、輕奇幻、喜劇看更多我要大聲說昨天20:33


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】