• ? code C
    Есть грамотные сишные кодеры? Мне непонятно, почему Керниган и Ричи используют op2, когда можно не использовать. Или тут читабельность важнее? Но она и не особенно портится. Вот код (раздел 3.4 в книге):
    
       #include <stdio.h>
       #include <stdlib.h>  /* for  atof() */
       #define MAXOP   100  /* max size of operand or operator */
       #define NUMBER  ’0’  /* signal that a number was found */
       int getop(char []);
       void push(double);
       double pop(void);
       /* reverse Polish calculator */
       main()
       {
           int type;
           double op2;
           char s[MAXOP];
           while ((type = getop(s)) != EOF) {
               switch (type) {
               case NUMBER:
                   push(atof(s));
    break;
               case ’+’:
                   push(pop() + pop());
                   break;
               case ’*’:
                   push(pop() * pop());
                   break;
               case ’-’: // - - - - - - - - ВЫЧИТАНИЕ
                   op2 = pop();
                   push(pop() - op2);
                   break;
               case ’/’: // - - - - - - - -  ДЕЛЕНИЕ
                   op2 = pop();
                   if (op2 != 0.0)
                       push(pop() / op2);
                   else
                       printf("error: zero divisor\n");
                   break;
               case ’\n’:
                   printf("\t%.8g\n", pop());
                   break;
               default:
                   printf("error: unknown command %s\n", s);
    break; }
    }
    return 0; }
    
    В книге сказано, что первый pop() надо сохранять в отдельную переменную, чтобы сохранить правильный порядок операндов. Окей, но ведь можно вычитание и деление написать так (соответственно):
    
    - pop() + pop() 
    и 
    1/pop() * pop()
    и порядок будет в норме без лишней переменной. Или деление с дополнительным умножением получится дороже, чем присваивание op2?

Replies (2)

  • @pupoque, Тебе в делении нужно проверить на равенство нулю, как ты это сделаешь без промежуточной переменной?
  • @pupoque, деление конечно дороже.

    вообще экономить переменные — это хуйня полная. как будто результат вычисления, который ты не обозвал какой-то буковкой меньше жрет в памяти, ага