【问题标题】:how to write a macro function which has multiple arguments [duplicate]如何编写具有多个参数的宏函数[重复]
【发布时间】:2018-03-21 14:43:53
【问题描述】:

我必须编写一个宏函数,它接受多个参数并打印它们。 例如,

int main(){
    int x,y;
    x=5;
    y=9;
    cout<<"value of x is::"<<x<<" "<<"value of y is:::"<<y<<endl;
    return 0;
}

我想编写一个宏,它以 x 和 y 作为参数并打印与上面相同。 像 debug_print(x,y)。

【问题讨论】:

  • 那么,是什么阻止您编写上述宏?注意:为什么是宏而不是函数?
  • 我的一般建议是:不要那样做。尽可能避免使用宏(然后再避免使用它们)。但是,如果这不可能,那么您必须告诉我们您尝试了什么,以及 id 是如何工作(或不工作)的。如果您知道如何创建单参数宏,那么推断和至少猜测双参数宏应该是怎样的应该不难。
  • 你有什么问题?你显然已经知道多参数宏的语法,你遇到了什么问题?
  • 不要那样做。只需write C++
  • 我写了宏函数#define debug_print(x,y)(cout

标签: c++


【解决方案1】:

如果您想要可变参数数,您想要查看的是variadic macros。使用这些,您可以定义这样的宏

#define debug_print(...) <your code here>

然后您可以在&lt;your code here&gt; 部分中使用__VA_ARGS__


如果你只想使用两个参数,你可以这样定义宏:

#define debug_print(x, y) (std::cout << "value of x is::" << x << " " << "value of y is:::" << y << std::endl)

并像使用它

int x = 5;
int y = 9;
debug_print(x, y);

正如其他人已经说过的,请不要使用这个宏,除非你绝对必须!例如。你看不到debug_print 需要iostream 才能工作,也看不到可以将哪些类型传递给它。

【讨论】:

  • "在&lt;your code here&gt; 部分中,您可以使用__VA_ARGS__" - 如果我可以这样说的话,您可能有点失礼了。如何完成&lt;your code here&gt; 一点也不明显,尤其是对于新手而言。
  • @StoryTeller 你在这一点上是非常正确的;就是这样 1.我自己并没有真正使用可变参数,所以我没有放置可能错误的代码,而是链接到一个教程和 2.&lt;your code here&gt; 部分很大程度上取决于 OP 想要做什么,特别是因为似乎他们只需要 2 个参数,所以可变参数无论如何都是多余的。感谢您的反馈:)
  • 感谢您的解决方案。它正在工作
  • @AnamikaKumari 很高兴听到它对你有用!
猜你喜欢
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多