Блог пользователя BlackStar

Автор BlackStar, 11 лет назад, По-русски

Всем привет. Собственно вопрос в следующем, почему вот это работает корректно:

#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 или же проблема в другом? Заранее спасибо.

  • Проголосовать: нравится
  • -6
  • Проголосовать: не нравится

»
11 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится
#define M 5;

Потому что у вас в конце ; Нужно так:

#define M 5
»
11 лет назад, # |
  Проголосовать: нравится -14 Проголосовать: не нравится

Зачем использовать фичи языка, которые вы не понимаете, как работают?

  • »
    »
    11 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится

    Вы предлагаете не учиться ничему новому? Просто не понимаю к чему этот вопрос.

    UPD: Согласен, что топик может не стоило создавать, а для начала прочитать Тут

»
11 лет назад, # |
Rev. 2   Проголосовать: нравится +8 Проголосовать: не нравится

В таких случаях лучше определять константу без магии дефайнов. const int M = 5;

»
11 лет назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

Советую почитать Как не надо программировать на C++. 111 нерабочих и 3 рабочих программы, или Почему 2 + 2 = 5986?

вот код))

#include <stdio.h>
main() 
{
     int answer;
     answer = 2 + 2;
     printf("The answer is %d\n");
     return (0);
}
  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Книга второсортная, 99% примеров в ней банальны и попасть на большую часть граблей смогут только совсем уж новички. Конкретно в вашем примере багов нет, потому что вы не верно привели код из книги. В книге вместо

    printf("The answer is %d\n");
    

    Используется

    std::cout << "The answer is " << answer;
    

    А теперь внимание, бага: автор говорит, что вы забыли сделать перевод строки, поэтому в консольке у вас все будет не красиво.

    P.S. Сомневаюсь, что данная книга стоит прочтения. Может я и не прав, потому что прочитал только первые 40 страниц, но мне хватило.

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится

      А теперь берём, копипастим код в какую-нибудь IDE, запускаем и получаем...ну не обязательно 5986. У меня вот, к примеру, 4200112. Это как раз к слову о том, что баг есть и он не всегда виден с первого взгляда.

      Книгу прочесть стоит — может не вдумчиво, не особо внимательно, но пара примеров там вполне жизненны.