define定義的宏中,能否帶有預編譯指令,可否帶有#號[轉]

define定義的宏中,能否帶有預編譯指令,可否帶有#號

define定義的宏中,能否帶有預編譯指令,可否帶有#號

咱們項目每一個TUXEDO服務前都要有個
[code]#if defined(__STDC__) || defined(__cplusplus)
SVCBILLCYCLE(TPSVCINFO *rqst)
#else
SVCBILLCYCLE(rqst)
TPSVCINFO *rqst;
#endif[/code]

想用個宏來替換
[code]#define FUNCTION_D(x) void \
#if defined(__STDC__) || defined(__cplusplus)\
SVCBILLCYCLE(TPSVCINFO *rqst) \
#else \
SVCBILLCYCLE(rqst) \
TPSVCINFO *rqst; \
#endif\[/code]

編譯時出錯
-->

由於C語言中"#"和"##"都已經有意義,因此會出錯。

那在#define中,怎麼才能帶有"#"字符?
define定義的宏中,能否帶有預編譯指令,可否帶有#號

還有怎樣才能顯示雙引號?
例如
#define foo(bar) "bar"
我想獲得變量名所表示的字符串常量
foo(hi) -->; "hi"
foo(i) -->; "i"
define定義的宏中,能否帶有預編譯指令,可否帶有#號

"\"bar\""
這樣應該能夠.
define定義的宏中,能否帶有預編譯指令,可否帶有#號

SVCBILLCYCLE(TPSVCINFO *rqst)後面加個;試試
define定義的宏中,能否帶有預編譯指令,可否帶有#號

2樓的:
#define foo(bar) "\"bar\""
define定義的宏中,能否帶有預編譯指令,可否帶有#號

樓上說的不行
個人意思是由變量的名字產生一個字符串

例如
int hi;
char *hello;

foo(hi) 輸出是   "hi"
foo(hello) 輸出是 "hello"
define定義的宏中,能否帶有預編譯指令,可否帶有#號

那你只能在編譯的時候 -D 實現了.

知道什麼叫宏定義嗎? 編譯的時候就替換了..你想動態的替換那就用函數.別用宏
define定義的宏中,能否帶有預編譯指令,可否帶有#號

-->

你樓上說的很對,除非你本身表達得不對。
難道是這個?#define foo(x) ##x
foo(woodhead)輸出woodhead
define定義的宏中,能否帶有預編譯指令,可否帶有#號

-->

gcc編譯錯誤
'##' cannot appear at either end of a macro expansion

gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-81)


個人意思就是foo(x)被替換成"x"  
:em06:   :em06: :em06:   :em06:   :em06:
define定義的宏中,能否帶有預編譯指令,可否帶有#號

#define fo(x)          \
   "\""##x##"\""
define定義的宏中,能否帶有預編譯指令,可否帶有#號 樓上的 warning: pasting ""\""" and "x" does not give a valid preprocessing token 試了一下,應該是 #define foo(x) #x 謝謝各位的解答!
相關文章
相關標籤/搜索