gpt4 book ai didi

c++ - 如何使用 '#define'定义一个宏来执行多个方法?

转载 作者:行者123 更新时间:2023-11-28 01:24:37 30 4
gpt4 key购买 nike

我使用 C++ 开发了一个 Mac 应用程序。我想定义对应于两个方法调用的宏'logi',以便调用method1()method2()。所以我尝试了这个:

#define logi method1 method2

它不起作用。这种情况的标准写法是什么?非常感谢!

最佳答案

首先:如果可以,避免宏。如果是按顺序调用两个函数,最好定义一个内联函数:

inline void logi()
{
method1();
method2();
}

虽然 inline 只是对编译器的建议——它可能会选择不这样做——但对于这样简单的函数,你不会发现任何编译器不遵循这个建议(函数应该是即使没有关键字也是内联的)。

这种方法更安全——任何你做错的事情,编译器都会在函数定义处正确地告诉你。

如果你坚持使用宏:最好的做法是让它看起来像一个函数,如果它的行为像这样的话,就像你的情况一样:

#define logi() do { method1(); method2(); } while(false)

如果在代码中的某个地方像函数一样使用,循环环绕使这个宏健壮,想象一下它没有像那样使用:

if(someCondition)
logi();

猜猜,method2 会被无条件地调用(好吧,另一个例子说明了为什么最好总是在分支和循环体周围放置大括号...)。

冒号被故意跳过,因此用户被迫放置它,再次使宏表现得像一个普通函数。

请注意,对于宏,预处理器只做简单的文本替换。因此,无论您定义什么,它都必须是有效的 C++ 代码(准确地说:预处理器完成后的结果必须是有效代码)。如果您需要将参数传递给您的函数,宏会是什么样子?那么,您还需要将它们包含在宏定义中:

#define logi(A1, A2, B1, B2, B3) do { method1(A1, A2); method2(B1, B2, B3) } while(false)

关于c++ - 如何使用 '#define'定义一个宏来执行多个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54476388/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com