Форум — Development Запутался с define c, c++ 0 1 Привет всем есть обычный дефайн #define max(x,y) ((x)>(y) ? (x) : (y)) int x = y = 10; Почему при max(++x, y++) инкремент x происходит 2 раза ? Ссылка
((++x)>(y++))?(++x):(y++)) ((11)>(10)?(12):(11)) Belkrr ★ (11.04.12 13:02:22 MSK) Показать ответ Ссылка
Ответ на: комментарий от Belkrr 11.04.12 13:02:22 MSK да действительно туплю с утра Boy_from_Jungle ★★★★ (11.04.12 13:09:48 MSK) автор топика Ссылка
Тело сишного макроса подставляется в исходный код. Таким образом, при вызове макросаmax_value = max(++x, y++); после обработки препроцессором получимmax_value = ((++x)>(y++) ? (++x) : (y++)); и в зависимости от результата вычисления условного выражения тернарного оператора одна из переменных будет инкрементирована два раза.Поведение, которое ты ожидаешь, достигается с помощью функций. theNamelessOne ★★★★★ (11.04.12 13:10:55 MSK) Показать ответы Ссылка
Ответ на: комментарий от theNamelessOne 11.04.12 13:10:55 MSK И да, с сишными макросами в подобных выражениях есть вероятность наткнуться на нарушение точек следования (не в данном примере), так что надо быть осторожней с побочными эффектами ☺ theNamelessOne ★★★★★ (11.04.12 13:15:04 MSK) Ссылка
Ответ на: комментарий от theNamelessOne 11.04.12 13:10:55 MSK мне просто было интересно чего оно так, угу я сделал что-то типа template <class T> inline const T& max(const T& a, const T& b) { return a > b ? a : b; } за дефайн вообще забыл как он работает( Boy_from_Jungle ★★★★ (11.04.12 13:16:02 MSK) автор топика Показать ответ Ссылка
Ответ на: комментарий от Boy_from_Jungle 11.04.12 13:16:02 MSK max уже придумали за тебя theNamelessOne ★★★★★ (11.04.12 13:19:45 MSK) Ссылка