如何在#define里使用"#"?
01-06
諸位,一個問題沒解決,我又有新問題,如何在#define里使用#號本身.
如下,是我想要的.#define IfC11(s) #if __cplusplus&>=201103Ls
#endif反正我試了很多種辦法,都沒有成功.感謝大家的回答,特別感謝"趙磊"的回答,宏展開在預編譯過程中只做一次,就是說,使用"#"是無解的.但是就我這個特定的問題,我還想出了個狡猾的辦法
#if __cplusplus&>=201103L #define IfC11(s) s#else #define IfC11(s)#endif
結貼!
無法使用,不要掙扎了。
宏展開在預編譯過程中只做一次,所以說不存在一個宏能展開成另一個宏然後再次展開的可能(所以能用#有什麼用呢.........)
如果你希望宏可以被充分展開,甚至圖靈完備,那為什麼不用Lisp呢=_=自己寫一個宏展開器就有了。
大概能猜出題主想幹啥,感覺題主可以用模板特化來解決這個問題
你這是想幹嘛。。。你是要寫跨平台的代碼么?如果是這樣為什麼不自動生成一個config.h,然後各種地方用用 #if defined(balabala)搞定呢。比如
#if defined(OS_MACOSX)
#if defined(OS_IOS)
#include &
#else
#include &
#endif
#include "base/mac/scoped_cftyperef.h"
#endif
代碼出處在這裡 https://code.google.com/p/chromium/codesearch#chromium/src/ui/gfx/blit.ccq=OS_MACsq=package:chromiumtype=csl=22
推薦閱讀:
※繼承模板類為什麼可以用this訪問基類?
※c++模板類拷貝構造函數的問題,有點疑惑?
※std::move(expr)和std::forward(expr)參數推導的疑問?
※C++ delete[] 是如何知道數組大小的?
※面向對象編程(oop)從誕生到現在理念上經歷了幾次怎樣大的變遷和轉化?
TAG:C |