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 謝謝各位的解答!