Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
воробьев
0 / 0 / 0
Регистрация: 26.02.2014
Сообщений: 67
#1

#define sqr(a) (a)*(a) - зачем так много скобок? - C++

19.03.2014, 20:19. Просмотров 735. Ответов 4
Метки нет (Все метки)

#define sqr(a) ((a)*(a))

такие вопросы:
1) Зачем ((a)*(a)) так много скобок? (если можно,объяснить доступным языком)
2) почему, если их убрать - то будет неправильно?
3) как работает этот #define ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2014, 20:19     #define sqr(a) (a)*(a) - зачем так много скобок?
Посмотрите здесь:

C++ часы на си=)) не бойтесь -много не спрошу, так ньюанс
ошибка номер...да их много. подскажите что не так. C++
Чем же макрос define так плох? C++
C++ что и зачем следует, а так же как работет
C++ Составить программу, которая решить cos(x)+sqr(x+1)=0
define не C++
define C++
#define работает не так, как ожидается C++
почему так много алгоритмов сортировок C++
C++ c++11 и $define
C++ Зачем преобразовывать itsVal в int, если эта переменная и так объявлена как тип int
C++ Зачем взятие адреса нулевого элемента массива, если сама переменная и так его содержит?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
recoder
130 / 130 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
19.03.2014, 20:25     #define sqr(a) (a)*(a) - зачем так много скобок? #2
Так, define вообще оператор препроцессора, обеспечивающий реализацию макросов. То, есть, если:

C++
1
#define SQR(x) x*x
То в коде любое вхождение a = SQR(2), компилятор просто заменит на a = 2 * 2;

Скобки нужны, что бы можно было делать вот так:

C++
1
a = SQR(2 + 2);
Somebody
2777 / 1591 / 142
Регистрация: 03.12.2007
Сообщений: 4,169
Завершенные тесты: 1
19.03.2014, 20:27     #define sqr(a) (a)*(a) - зачем так много скобок? #3
Цитата Сообщение от воробьев Посмотреть сообщение
3) как работает этот #define ?
Делает замену. Например:
C++
1
sqr(2)  =>  ((2)*(2))
Цитата Сообщение от воробьев Посмотреть сообщение
1) Зачем ((a)*(a)) так много скобок? (если можно,объяснить доступным языком)
2) почему, если их убрать - то будет неправильно?
Теперь с выражением посложнее:
C++
1
8 / sqr(2 + 2)  =>  8 / ((2 + 2)*(2 + 2))
Без скобок хотя синтаксически корректно, по смыслу уже не то.
kupnu4
26 / 26 / 9
Регистрация: 03.05.2013
Сообщений: 71
19.03.2014, 20:30     #define sqr(a) (a)*(a) - зачем так много скобок? #4
#define обрабатывается препроцессором. препроцессор - просто текстовый редактор. и он не думая о логике скопирует параметр из sqr в "тело". для этого и нужны скобки.
Пример:
sqr(a) заменится на a*a - то чего и хочется программисту, а sqr(a+1) даст в результате а+1*а+1. согласитесь, не совсем этого вы ожидали от этой операции. для того и нужны скобки и потому без них работает не так как хочется.
воробьев
0 / 0 / 0
Регистрация: 26.02.2014
Сообщений: 67
19.03.2014, 20:32  [ТС]     #define sqr(a) (a)*(a) - зачем так много скобок? #5
теперь мне понятно!

спасибо всем,кто ответил!
Yandex
Объявления
19.03.2014, 20:32     #define sqr(a) (a)*(a) - зачем так много скобок?
Ответ Создать тему
Опции темы

Текущее время: 09:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru