相关疑难解决方法(0)

如何使C++宏像函数一样?

让我们说由于某种原因你需要写一个宏:MACRO(X,Y). (我们假设您有一个很好的理由不能使用内联函数.) 您希望此宏模拟对没有返回值的函数的调用.


示例1:这应该按预期工作.

if (x > y)
  MACRO(x, y);
do_something();
Run Code Online (Sandbox Code Playgroud)

示例2:这不应导致编译器错误.

if (x > y)
  MACRO(x, y);
else
  MACRO(y - x, x - y);
Run Code Online (Sandbox Code Playgroud)

实施例3:这应该编译.

do_something();
MACRO(x, y)
do_something();
Run Code Online (Sandbox Code Playgroud)

编写宏的天真方式是这样的:

#define MACRO(X,Y)                       \
cout << "1st arg is:" << (X) << endl;    \
cout << "2nd arg is:" << (Y) << endl;    \
cout << "Sum is:" << ((X)+(Y)) << endl;
Run Code Online (Sandbox Code Playgroud)

这是一个非常糟糕的解决方案,它失败了所有三个例子,我不应该解释原因.

忽略宏实际上做的事情,这不是重点.


现在,我经常看到编写宏的方法是将它们用大括号括起来,如下所示:

#define MACRO(X,Y)                         \
{                                          \
  cout << "1st arg is:" << …
Run Code Online (Sandbox Code Playgroud)

c++ c-preprocessor

48
推荐指数
6
解决办法
10万
查看次数

标签 统计

c++ ×1

c-preprocessor ×1