Всем привет. Собственно вопрос в следующем, почему вот это работает корректно:
#define M 5;
...
long long k = (2+2)%M;
...
И это работает корректно:
#define M 5;
...
long long k = (2%5+2%5)%5;
...
А вот это отказывается, просит скобку поставить:
#define M 5;
...
long long k = (2%M+2%M)%M;
...
Аналогичная проблема вот с этим:
#define M 5;
...
long long k = ((2)%M+(2)%M)%M;
...
Объясните, пожалуйста, с чем это связано? Что-то в этом defin'e или же проблема в другом? Заранее спасибо.
Потому что у вас в конце
;
Нужно так:Огромное спасибо! Ответ получен.
Зачем использовать фичи языка, которые вы не понимаете, как работают?
Вы предлагаете не учиться ничему новому? Просто не понимаю к чему этот вопрос.
UPD: Согласен, что топик может не стоило создавать, а для начала прочитать Тут
В таких случаях лучше определять константу без магии дефайнов.
const int M = 5;
Советую почитать Как не надо программировать на C++. 111 нерабочих и 3 рабочих программы, или Почему 2 + 2 = 5986?
вот код))
Книга второсортная, 99% примеров в ней банальны и попасть на большую часть граблей смогут только совсем уж новички. Конкретно в вашем примере багов нет, потому что вы не верно привели код из книги. В книге вместо
Используется
А теперь внимание, бага: автор говорит, что вы забыли сделать перевод строки, поэтому в консольке у вас все будет не красиво.
P.S. Сомневаюсь, что данная книга стоит прочтения. Может я и не прав, потому что прочитал только первые 40 страниц, но мне хватило.
А теперь берём, копипастим код в какую-нибудь IDE, запускаем и получаем...ну не обязательно 5986. У меня вот, к примеру, 4200112. Это как раз к слову о том, что баг есть и он не всегда виден с первого взгляда.
Книгу прочесть стоит — может не вдумчиво, не особо внимательно, но пара примеров там вполне жизненны.