1. C++ / Говнокод #21738

    −25

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    #define m 100 
    #define Um -2. 
    #define UM 2.
    
    double razb(int l)
    {
    	double h;
    	double X[m];
    
    	h = (UM - Um) / (double(m) - 1.);
    
    	for (int i = 0; i < m; i++)
    		X[i] = Um + i*h;
    
    	return X[l];
    }

    Запостил: tr_chayka, 28 Ноября 2016

    Комментарии (20) RSS

    • где тут C++?
      Ответить
    • Дочитав до 14 строки, хотел спросить: "а где же говнокод"? Потом увидел пятнадцатую.
      Ответить
      • Ну просто не очень безопасный код, что не так-то?
        Не предавай туда ничего больше m и ладно
        Ответить
        • До 15 строки ничто не предвещало беды.
          Ответить
          • а вдруг в документации к этой функции написано что нельзя сувать туда больше m?
            Ответить
    • Наверняка где-нибудь есть
      for (int l = 0; l < m; l++) {
        double r = razb(l);
        // do something with r
      }
      Ответить
      • А как вообще возвращаются даблы, если кол конвеншен велит вертать значение через регистр?
        неявно делается переменная на стеке и сцылка на неё пихает в функцию?
        Ответить
        • Да тупо в конвеншен вносится дополнительный пункт про дабл...
          Ответить
          • а как вертают структуру внутри который long foo[2000]; ?
            Ответить
            • По ссылке, как ты и писал.
              Ответить
              • по указателю

                в плейносишечке нет ссылок
                Ответить
                • По адресу. В ассемблере нет указателей.
                  Ответить
                  • а кл слово ptr ?;)
                    Ответить
                    • Masm'опроблемы? В том же nasm его нет, вместо dword ptr пишется просто dword :)
                      Ответить
                      • да я понимаю) процессору-то все равно откуда ты возьмешь адрес для очередного MOVа: Будет это константа/литерал или значение другого регистра (указатель)
                        Ответить
      • Внезапно, да

        for (int i = 0; i < m; i++)
        {
        	fprintf(fpo, " ");
        	X[i] = razb(i);
        	Y[i] = f(X[i]);
        	fprintf(fpo, "%e", Y[i]);
                //...
        }
        Ответить
        • Интересно, gcc смог заинлайнить razb и оптимизнуть это говно в нормальный код?
          Ответить
          • хз, я это дерьмище не компилировал, только посмотрел
            Ответить
            • Не, не справилось. То ли не может из-за массива соптимизировать, то ли пытается UB при l < 0 || l >= m сохранить...
              Ответить

    Добавить комментарий