【发布时间】:2017-02-08 04:10:11
【问题描述】:
我正在尝试编写一些需要在 Visual Studio 和 linux (gcc) 环境中编译/运行的代码。当我尝试在 Windows 中编译我的文件时,我遇到了一个有点模棱两可的错误,我想知道是否有人可以指出我所缺少的...我有标准宏:
#define __MAX(a,b) \
({ __typeof__ (a) _a = (a); \
__typeof__ (b) _b = (b); \
_a > _b ? _a : _b; })
然后当我尝试调用它时:
int x = __MAX(0, 2);
我在 Visual Studio 中收到 expected an expression 错误,指向这条线。我是视觉工作室的新手,所以我不确定它不喜欢这个。谁能指出我做错了什么?
【问题讨论】:
-
没有回答问题,但为什么不使用 100% 便携的
std::min和std::max? -
@NathanOliver 不幸的是,
std::min和std::max在 Windows 中并不总是有效,因为<Windows.h>有用于min和max的宏,它们会与之发生冲突。是的,这很有趣。 IIRC,如果您在包含<Windows.h>之前定义它,则有一个宏可以禁用它们。无论哪种方式,它都很糟糕。 -
@NathanOliver No.
<Windows.h>定义了名为min和max的宏。所以他们会将宏替换为std::min并将其转换为std:: a < b ? a : b,这是一个语法错误。 (stackoverflow.com/questions/11544073/…) -
@Mysticial Oh c***。忘了那个。是的,在 MS 上完全是 BS。
-
在
#include <windows.h>之前只需#define NOMINMAX就可以了。
标签: c++ c visual-studio macros