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
}
我需要一个有效的 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
}