これに対するコメントで私が言ったことを拡張したいだけです:
開始と終了の何が問題になっていますか? – ポール S 昨日
@PaulS: それから my_macro(1); end まで展開します。末尾のセミコロンは構文エラーです。そして、私のマクロを呼び出した人は、それが単一のステートメントか複数のステートメントかをどのようにして知るのでしょうか? (または、変更される可能性さえあります...) – 昨日のデイブ
UVM ライブラリでは、次のイディオムが広く使用されています。
`define uvm_info(ID,MSG,VERBOSITY) \
begin \
if (uvm_report_enabled(VERBOSITY,UVM_INFO,ID)) \
uvm_report_info (ID, MSG, VERBOSITY, `uvm_file, `uvm_line); \
end
マクロの末尾にセミコロンを付けたので、IES が構文エラーを報告したことは一度もありません。確かに、構文エラーであるかどうかは仕様でわかりませんが、null ステートメントとして解釈されると思います。
いずれにせよ、 ifmy_macro
が単一のステートメントである場合は、その;
. 次に、単一ステートメント マクロと複数ステートメント マクロが同じように機能します。