带有默认值参数的宏,其中默认值为上一个参数

时间:2018-01-29 10:39:53

标签: system-verilog

我有一个像这样定义的宏:

`define some_macro(ARG0, ARG1 = ARG0) \
  ...

我希望展开some_macro(2)扩展为some_macro(2, 2)。它扩展为some_macro(2, ARG0),因为在ARG1的默认值规范中使用了文本ARG0,而不是ARG0参数的值。

是否可以将第二个参数的默认值指定为ARG0的值?

1 个答案:

答案 0 :(得分:3)

Here's很好地总结了你可以用SV宏做些什么。

你可以通过两个宏来实现这一点,比如

`define M(A1) \
   `M2(A1, A1)

`define M2(A1, A2) \
   "A1 A2"

module m();

   initial begin
      $display("joined string %s", `M(bye));
      $finish;
   end
endmodule

不同之处在于,这需要使用M或M2,具体取决于参数的数量,而不仅仅是两种情况下的一个宏。