2014-01-31 2 views
4

В исходном коде я видел, что min и max не определены. Что может быть причиной этого?Undefining min и max macro

// remove stupid MSVC min/max macro definitions 
#ifdef WIN32 
    #undef min 
    #undef max 
#endif 
+0

Возможно, автору необходимо было переопределить их? Или они мешали действительным функциям min/max, созданным автором. – bblincoe

+7

Возможно, им захотелось удалить глупые макросы MSVC для min и max ;-) – dasblinkenlight

+2

@bblincoe: Или вмешательство в действительные функции min/max, объявленные стандартными заголовками библиотек. –

ответ

7

Некоторые заголовок MSVC имеет препроцессора макросы для определения min и max. Это плохо по многим причинам. Во-первых, они не являются зарезервированными именами, во-вторых, существуют стандартные библиотечные функции с одинаковыми именами.

Так что MSVC или что-то нарушало правила и код, определяя min и max как макросы, а использование undef - это обход, чтобы исправить эту проблему.

См. this related question, в котором показано, как определять может нарушить код.