巨集定義
巨集定義
名稱:預處理拼接符,或者稱其為巨集拼接符
作用:用於類似函式的巨集的替換部分,還可以用於類似物件的巨集的替換部分。
放在巨集的替換部分的前面,用於巨集展開(即巨集替換)後,立即將巨集中位於##右邊的巨集替換部分與該巨集中位於##左邊的部分相拼接至一個整體。
例子:
'' #define jni(NAME) com_dm_jni_##NAME();// jni(wineout)會呼叫com_dm_jni_wineout()
#
作用:巨集展開(即巨集替換)後,#可以立即把其後的巨集替換部分原封不動地進行字串化.
例子:
#define TEST(x) printf("square of " #x " is %d.\n",(x)*(x))
#include <stdio.h>
#define TEST(x) printf("square of " #x " is %d.\n",(x)*(x))
void main() {
int y =4;
// #x被替換成字串"y"
TEST(y);
// printf("square of " "y" " is %d.\n",(y)*(y))
// #x被替換成字串"6-3"
TEST(6-3);
// printf("square of " "6-3" " is %d.\n",(6-3)*(6-3))
// #x被替換成字串"y+3"
TEST(y+3);
// printf("square of " "y+3" " is %d.\n",(y+3)*(y+3))
}
輸出結果:
square of y is 16. square of 6-3 is 9. square of y+3 is 49.
有關...、VA_ARGS和##VA_ARGS的講解請看:
http://www.cnblogs.com/alexshi/archive/2012/03/09/2388453.html
VA_ARGS的前面加上##是為了用來支援出現0個可變引數的情況。
例子:
#define LOG(FORMAT,...) printf(##FORMAT,VA_ARGS);
我們就可以這樣列印 LOG("%s%d","str",89);
相關文章
- 巨集定義跟多個引數
- 0x03. 使用巨集定義事件事件
- C++中巨集定義#define的用法C++
- iOS-日常開發常用巨集定義iOS
- c 語言中巨集定義和定義全域性變數的區別變數
- 【C進階】21、巨集定義與使用分析
- 巨集定義裡面為什麼要加括號?
- gcc編譯階段列印巨集定義的內容GC編譯
- 記憶體對齊巨集定義的簡明解釋記憶體
- C語言中的標頭檔案中的巨集定義C語言
- libev中ev_loop結構體中巨集定義的理解OOP結構體
- C語言巨集定義中#define中的井號#的使用C語言
- C++中使用巨集定義來註釋掉所有的cout輸出C++
- C++ | VS2017 C++專案配置使用的常見巨集定義C++
- 關於malloc原始碼中的bin_at巨集定義的個人見解原始碼
- C語言零基礎教程之預處理和巨集定義篇C語言
- 提高程式碼逼格的利器:巨集定義-從入門到放棄
- object-c 常用判斷null的巨集定義,如果是null直接返回@””ObjectNull
- Superset SSO改造和自定義巨集命令
- C語言學習第18篇---巨集定義與使用 / 條件編譯使用分析C語言編譯
- Visual C++ MFC 中常用巨集的含義C++
- [sublime系列文章] sublime text 3如何設定巨集
- ARM巨集定義(轉自http://blog.sina.com.cn/s/blog_671dfeb101013n7s.html)HTTPHTML
- 需求定義
- Springbean定義SpringBean
- 定義製造業操作(定義 MES/MOM 系統)
- 育種定義
- 類的定義
- 類定義介面
- 成功的定義
- 程式的定義
- XML Schema定義XML
- Linus 定義 LinuxLinux
- 分散式監控系統之Zabbix巨集、模板和自定義item分散式
- SMART原則的定義和含義
- 設計模式定義設計模式
- 類定義(class definition)
- SOCKS代理的定義