簡體   English   中英

IBM z/OS Metal C - 我可以創建一個包含 #pragma 語句的 #define 宏嗎?

[英]IBM z/OS Metal C - Can I create a #define macro that includes #pragma statements?

-- 更新 20200114:#define Entry 宏的新版本和新結果

另一個新手問題。 我正在嘗試創建一個 #define 宏,我可以使用它來生成例程的入口以及 #pragma prolog() 和 #pragma epilog():

#pragma prolog(<entryname>," <prologasmstuff>")
#pragma epilog(<entryname>," <epilogasmstuff>")
functiontype entryname (<parameters>) {

我嘗試了以下幾種變體(這代表了今天的嘗試):

#define Entry(            \                           
           EntryType      \                           
          ,EntryName      \                           
          ,EntryVariables \                           
          ,PrologString   \                           
          ,EpilogString   \                           
          )               \                           
_Pragma("prolog(EntryName,\" PrologString\"")  \      
_Pragma("epilog(Entryname,\" EpilogString\"")  \      
EntryType EntryName (EntryVariables) {

預處理器似乎無法完成這項工作。 宏通過以下方式調用:

Entry(void,wto,char * MsgArea," CKKIP31P"," CKKEP31P")

編譯器會產生以下內容:

68       |Entry(void,wto,char * MsgArea," CKKIP31P"," CKKEP31P")                                            |   1005
68       +_Pragma("prolog(EntryName,\" PrologString\"") _Pragma("epilog(Entryname,\" EpilogString\"") void \+   1005
68       +wto (char * MsgArea) {                                                                            +   1005
69       |                                                                                                  |   1006

編譯器發出以下消息:

WARNING CCN3224 SSAF.METALC.C(TSTENTRY):68    Incorrect pragma ignored.
WARNING CCN3224 SSAF.METALC.C(TSTENTRY):68    Incorrect pragma ignored.

關於如何查看“已解決”#pragmas 的外觀或它們有什么問題的任何想法?

謝謝,斯科特·法根

這可能會做你想做的,試一試:

#define STRINGIZE(x) #x

#define Entry( \
  EntryType \
  ,EntryName \
  ,EntryVariables \
  ,PrologString \
  ,EpilogString \
  ) \
_Pragma( STRINGIZE( prolog(EntryName,PrologString) )); \
_Pragma( STRINGIZE( epilog(EntryName,EpilogString) )); \
EntryType EntryName( EntryVariables ) { }

Entry(void, wto, char * MsgArea, " CKKIP31P", " CKKIE31P")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM