C++ 中的宏以后缀增量中断

Macros in C++ breaks with postfix increments

我需要一个有效的 MAX 宏(没有(!)声明 main 函数)它分配 'r' 数字 'a' 和 'b' 的最大值。此代码在编译中中断。如何修复?

#define MAX(x, y, r) ((x) > (y) ? (r = x) : (r = y))

int x = 10;
int y = 20;
int r;

MAX(x, y, r);

感谢收看!

UPD:一些修改以清除完整任务:

#import <iostream>
#define MAX(x, y, r) ((x) > (y) ? (r = x) : (r = y))

int x = 1;
int y = 1;
int r = 1;

int main()
{
    MAX(x++, y, r);
    std::cout << r;
    return 0;
}

这段代码的结果是 1,需要是 2。所以我的宏中需要另一个逻辑来考虑所有后缀增量

您不能在函数外部使用此宏,因为它是一个任意表达式,这就是您收到错误的原因。

只需将宏的调用移动到函数范围内即可:

#define MAX(x, y, r) ((x) > (y) ? (r = x) : (r = y))

int x = 10;
int y = 20;
int r;

int main()
{
    MAX(x, y, r);
}

然而,在这种情况下使用宏是不必要的(除非这只是学习宏用法的练习);使 max 成为一个函数(或者,更好的是,使用 std::max)将是一种更好且不易出错的方法。

它不起作用,因为您不能在文件范围内放置任意表达式。我有几个建议:

  • 不要使用全局变量,除非你真的、真的必须这样做。它们只会让你痛苦。

  • 不要使用宏,除非你真的、真的必须这样做。它们只会让你痛苦。

我会这样做:

int main()
{
    int x = 10;
    int y = 20;
    int r = std::max(x, y);
    //pass x, y and r as arguments to functions rather than using globals
}