Назад к вопросам
JuniorТеорияЧасто
Что выведет программа?
#include <iostream>
#define SQUARE(x) x * x
int main() {
int x = 3;
std::cout << SQUARE(x + 1) << '\n';
}7
- Ждать
16: макрос вставляет аргумент как текст, поэтомуSQUARE(x + 1)превращается вx + 1 * x + 1, а не в(x + 1) * (x + 1). - Ждать
13: после подстановки действует обычный приоритет операторов, поэтому сначала вычисляется1 * x, а3 + 3 + 1— это7.
- Как изменить
SQUARE, чтобыSQUARE(x + 1)давал16? - Чем опасен
SQUARE(++x), даже если в макросе расставлены все скобки?