当min
已被定义为宏时,我该如何拨打std::min
?当min被定义为宏时如何调用std :: min()?
31
A
回答
75
(std::min)(x,y)
各地min
括号防止宏扩展。这适用于所有功能宏。
6
在您的代码中使用#undef min
,在#include <>
指令之后。
#include <...> // bad header that defines `min` macro
#ifdef min
#undef min
#endif
// rest f code.
附录:如果你需要保持min
宏的值之后,可以暂时使用一些编译器非便携式解决方案禁用它的定义。例如,微软的C++编译器有一个push_macro
pragma,它似乎也是supported by GCC。
14
在Windows上,您需要在包含任何Windows标头之前定义NOMINMAX
,最好在预编译标头的开头。 More info here
4
您可能能够通过避免宏定义:
#undef
- 避免在首位的定义(或者通过配置如
#define NOMINMAX
或相似或避免包括违规报头)
如果这些选项不能使用或者你不想使用它们,你总是可以避免使用适当的parens来调用函数式宏:
#include <algorithm>
#include <stdio.h>
#define min(x,y) (((x) < (y)) ? (x) : (y))
int main()
{
printf("min is %d\n", (std::min)(3, 5)); // note: the macro version of `min` is avoided
}
这是便携式的,因为黑暗已先后C.
2
的初期,我发现了几个其他的方式来做到这一点:
方法1:
using std::min;
min(a, b); // uses either the macro or the function (don't add side effects!)
方法2:
#ifndef BOOST_PREVENT_MACRO_SUBSTITUTION
#define BOOST_PREVENT_MACRO_SUBSTITUTION
#endif
...
std::min BOOST_PREVENT_MACRO_SUBSTITUTION(a, b)
相关问题
- 1. 定义宏C语言为MIN 2号
- 2. MIN和MAX重新定义宏?
- 3. Linux内核`min`宏
- 4. .so:未定义引用'min'
- 5. 如何修复这些MIN,MAX宏?
- 6. 的std :: min的参数包
- 7. std :: min/std :: max与“内在样”
- 8. 使函数指针std :: min与std :: initializer_list
- 9. 为Random.nextInt()指定max和min?
- 10. HQL Min Max,如何
- 11. MySQL如何用MIN更新
- 12. T-SQL:如何使用MIN
- 13. 如何使用MIN()函数
- 14. std :: min/std :: max作为模板比较器
- 15. 时间min阵列
- 16. SQL使用Min()
- 17. 没有悬挂参考std :: min在libC++
- 18. double.Epsilon与std :: numeric_limits <double> :: min()
- 19. 如何删除python builtins? min()在某个函数被调用时消失
- 20. C++宏(min max)无法正常工作
- 21. 是否有可能使用std :: accumulate和std :: min?
- 22. 为任何类型的数组创建一个min()宏
- 23. 如何在emmet中指定min和max?
- 24. 为什么std :: priority_queue使用max heap而不是min heap?
- 25. Rand_Max *(max-min)+ min <<那是什么?
- 26. WKInterfaceLabel Min Scale如何工作?它被忽略,一旦设定值
- 27. min如果在VBA
- 28. C++是否在std :: min和std :: max下标准化std :: optional的行为?
- 29. 使用min函数
- 30. 使用MIN更新
无情地'#undef min'和去标准的设施。 –