/ 常規出牌,首先聊一聊 /
c語言中的#號確實用得挺多的,比如說最開始編程的時候,大家最喜歡的#include…,確實有了這個東西我們就可以調用了我們想調用的東西了,心里必定歡喜!一般代碼量,或者閱碼量不多的筒子們,可能熟悉的#還有宏定義#define,或者是預編譯#if 或者更進一步#ifndef等預編譯符號,應該大部分小伙伴不太用到#號的其他功能了!(哈哈,其實我也差不多吧!)所以最近也是學習總結了一些,可能以后也用不太上,可能水平還沒達到,不過對于以后閱讀各路大神的代碼,應該會幫助不少,同時跟大家首先說明一個非常重要的一點,大部分帶#的處理都是在預編譯階段,比如說宏定義,預編譯,包括后面說到的宏轉字符串,連接記號等!
/ 該出一些套路了 /
知識點1:將宏參數轉化為字符串
例如,#define BUG(a) #a 這樣我們使用BUG(123)表示的就是字符串123直接可以printf(BUG(123));打印出字符串123.
知識點2:將##前后的標記進行合并
例如,#define DEBUG(a) debug##a
這樣我們使用的時候int DEBUG(1)=5;其實這樣就定義了一個int類型的變量debug1=5;
注意點:對于#和##號,其作為#號的參數和作為##號的參數,即使是另外一個宏也不進行展開,而是作為一個整體以字符串輸出,例如,
#define debug(a,b) a##b;
#define var(c) #c
然后我們在程序中使用了var(debug(1,2)),這樣我們最終輸出的是debug(1,2)這個字符串表達式而不會輸出12,如果我們特別想過得12,那么多定義一個宏,#define temp(d) var(d),這樣就沒有參數debug(1,2)沒有直接對應#,最終結果就是12.
對于這兩種#號實際應用中的使用,主要是簡化代碼,也可以說是擴展了宏定義!
審核編輯:劉清
-
C語言
+關注
關注
180文章
7630瀏覽量
140361 -
字符串
+關注
關注
1文章
589瀏覽量
21109
發布評論請先 登錄
評論