標籤:

如何在#define里使用"#"?

諸位,一個問題沒解決,我又有新問題,如何在#define里使用#號本身.

如下,是我想要的.

#define IfC11(s) #if __cplusplus&>=201103L

s

#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 |