![](/img/trans.png)
[英]z/OS Metal C assemble failing only when I use my own prolog/epilogs
[英]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.