System verilog 带有带有默认值的参数的宏,其中默认值是前一个参数

System verilog 带有带有默认值的参数的宏,其中默认值是前一个参数,system-verilog,System Verilog,我有一个宏定义如下: `define some_macro(ARG0, ARG1 = ARG0) \ ... 我想将扩展名some\u macro(2)扩展到some\u macro(2,2)。它扩展到某些宏(2,ARG0),因为在ARG1的默认值规范中使用了文本ARG0,而不是ARG0参数的值 是否可以将第二个参数的默认值指定为ARG0的值?这是对SV宏的一个很好的总结 你可以用两个宏来实现这一点,比如 `define M(A1) \ `M2(A1, A1) `define M2

我有一个宏定义如下:

`define some_macro(ARG0, ARG1 = ARG0) \
  ...
我想将扩展名
some\u macro(2)
扩展到
some\u macro(2,2)
。它扩展到
某些宏(2,ARG0)
,因为在
ARG1
的默认值规范中使用了文本
ARG0
,而不是
ARG0
参数的值

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

这是对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,而不是两种情况下都使用一个宏。

这是一个很好的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,而不是两种情况下都使用一个宏。

我担心的是情况就是这样。我担心的是情况就是这样。