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

    −3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    #include <iostream>
    using namespace std;
    
    void wtf() {
     return 0;
    }
    int main() {
     return wtf();
     cout << wtf();
    }

    Решил нопейсать ватафак-код.
    Классика жанра. Ретурн в воидовской функции. Плюс действие после ретурна.

    Запостил: shite, 03 Августа 2018

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

    • > Решил нопейсать ватафак-код.

      Спасибо. Теперь у нас на 1 говнокод больше.
      Ответить
    • Ретурн в воидовской функции, и ретурн воид в интовской.
      Ответить
    • Пьэрьэвьэди на J, йа тьэбьа ньэ понимайу.
      Ответить
    • Ты совершенно не понимаешь сути /gk/.
      Ответить
    • Даже не знаю каким надо пользоваться компилятором чтобы он тебе варнингов не нагенерил
      Ответить
      • WATCOM посыпал эррорами:
        a.cpp(5): Error! E056: col(9) not expecting a return value
        Это он про return 0 для void-функции.
        a.cpp(8): Error! E324: col(12) conversion of return value is impossible
        a.cpp(8): Note! N630: col(12) source conversion type is 'void'
        a.cpp(8): Note! N631: col(12) target conversion type is 'int'
        Это он про return wtf().
        a.cpp(9): Error! E157: col(7) left expression must be integral
        a.cpp(9): Note! N717: col(7) left operand type is 'std::ostream __watcall (lvalue)'
        a.cpp(9): Note! N718: col(7) right operand type is 'void'
        Это он про cout << wtf().

        a.cpp(9): Error! E157: col(7) left expression must be integral
        a.cpp(9): Note! N717: col(7) left operand type is 'std::ostream __watcall (lvalue)'
        a.cpp(9): Note! N718: col(7) right operand type is 'void'
        Ответить
      • Borland тоже выдал эрроры:
        Error E2467 a.cpp 5: 'wtf()' cannot return a value in function wtf()
        Error E2468 a.cpp 8: Value of type void is not allowed in function main()
        Error E2094 a.cpp 9: 'operator<<' not implemented in type 'ostream' for arguments of type 'void' in function main()
        Ответить
      • Выхлоп gcc лучше не смотреть:
        a.cpp: In function `void wtf()':
        a.cpp:5: error: return-statement with a value, in function returning 'void'
        a.cpp: In function `int main()':
        a.cpp:8: error: void value not ignored as it ought to be
        a.cpp:9: error: no match for 'operator<<' in 'std::cout << wtf()'
        /usr/lib/gcc/i686-pc-msys/3.4.4/../../../../include/c++/3.4.4/bits/ostream.tcc:63: note: candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>&(*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
        ...

        Дальше 100500 кандидатов для перегруженного оператора <<, которые я цитировать не буду.
        Ответить
      • MSVC тоже послал подальше. Такой же список кандидатов, как у gcc:
        a.cpp(5) : error C2562: wtf: функция типа 'void', возвращающая значение
                a.cpp(4): см. объявление 'wtf'
        a.cpp(9) : error C2679: бинарный '<<': не найден оператор, принимающий правый операнд типа 'void' (или приемлемое преобразование отсутствует)
                C:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\ostream(653): может быть 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)'
                with
                [
                    _Elem=char,
                    _Traits=std::char_traits<char>
                ]
        ...
        Ответить
      • Шланг тоже засыпал кандидатами для перегрузки:
        a.cpp:5:2: error: void function 'wtf' should not return a value [-Wreturn-type]
         return 0;
         ^      ~
        a.cpp:8:9: error: cannot initialize return object of type 'int' with an rvalue of type 'void'
         return wtf();
                ^~~~~
        a.cpp:9:7: error: invalid operands to binary expression ('std::ostream' (aka 'basic_ostream<char>') and 'void')
         cout << wtf();
         ~~~~ ^  ~~~~~
        /usr/lib/gcc/i686-pc-cygwin/7.3.0/include/c++/ostream:108:7: note: candidate function not viable: cannot convert argument of incomplete type 'void' to 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(*)(std::basic_ostream<char, std::char_traits<char> >::__ostream_type &)' (aka 'basic_ostream<char, std::char_traits<char> > &(*)(basic_ostream<char, std::char_traits<char> > &)') for 1st argument
              operator<<(__ostream_type& (*__pf)(__ostream_type&))
              ^
        Ответить
      • Какой бы нестандартный компилятор поискать? Digital Mars не поддерживает неймс-пейсы, поэтому пришлось убрать упоминания std::. Однако, и он посыпался:
        return 0;
                 ^
        b.cpp(4) : Error: voids have no value; ctors, dtors and invariants have no return value
         return wtf();
                     ^
        b.cpp(7) : Error: illegal cast
        from: void 
        to  : int 
         cout << wtf();
                      ^
        b.cpp(8) : Error: illegal operand types
        Had: void *
        Ответить
        • > Digital Mars не поддерживает неймс-пейсы,
          Ты на dmc не пизди, всё он поддерживает, наверное, у тебя не стоит stlport(пошмотри на саите дигитал марс) и ещё надо конпелять с ключиком -I\dm\stlport\stlport.
          Ответить
          • Спасибо, метод работает. Только как оказалось, путь к stlport должен быть указан раньше, чем путь к стандартной директории include, иначе появляются неожиданные ошибки.
            Ответить
      • Вопрос придётся переформулировать.

        Каким надо пользоваться компилятором, чтобы он хоть как-нибудь это скомпилировал?
        Ответить
        • Поэтому я за "PHP" - там нет компилятора.
          Ответить
          • На самом деле "PHP" компилирует исходник в байт-код перед исполнением. Если в какой-нибудь строчке есть синтаксические ошибки, то программа не исполнится. Даже если начало программы корректное, а ошибки в конце, то ничего не выведется, кроме сообщения "Parse error".

            Толи дело BAT-файлы. Там настоящий интерпретатор. Файл будет исполняться до тех пор, пока интерпретатор не наткнётся на строчку с ошибкой.
            Ответить
          • Как можно пользоваться языком, к созданию которого приложили руку "евреи"?
            Ответить
      • Продолжим. Intel C++ Compiler:
        a.cpp
        a.cpp(5): error: return value type does not match the function type
           return 0;
                  ^
        
        a.cpp(8): error: return value type does not match the function type
           return wtf();
                  ^
        
        a.cpp(9): error: no operator "<<" matches these operands
                    operand types are: std::ostream << void
           cout << wtf();
                ^
        Ответить
      • Я НАШЁЛ КОМПИЛЯТОР, КОТОРЫЙ ЭТО ПРОГЛОТИЛ!

        Церновский CINT (на самом деле это интерпретатор, потому что он не генерирует бинарник, а тут же исполняет полученное внутреннее представление кода) полностью скомпилировал, только выдал один ворнинг:
        Warning: Return value of void wtf() ignored a.cpp(5)
        Ответить
      • Пробуем ещё один интерпретатор — Ch (SoftIntegration):
        ERROR: found int where void is expected
        ERROR: syntax error before or at line 5 in file 'a.cpp'
          ==>:  return 0;
          BUG:  return 0;<== ???
        ERROR: found void where int is expected
        ERROR: syntax error before or at line 8 in file 'a.cpp'
          ==>:  return wtf();
          BUG:  return wtf();<== ???
        ERROR: in expansion of macro 'cout'
        ERROR: cannot execute command 'a.cpp'
        Ответить
    • Автор, Вы работаете в ЦЕРНе? Только CINT смог переварить этот код.
      Ответить
      • Поэтому я за "PHP". Один единственный интерпретатор.
        Ответить
        • Вынужден вас разочаровать. Для "PHP" есть еще "HipHop for PHP", "HPHPi" и "HHVM" от фейсбука, "kPHP" от вконтакта, "Phalanger" и "Parrot" еще.
          Ответить
          • Интересно, сколько денег сэкономили бы чуваки выбери они изначально нормальный ЯП?
            Ответить
            • Они бы сэкономили кучу денег, если бы сразу выбрали нормальный интерпретатор "PHP" и не тратились на "HHVM" и "KPHP".

              Разработчики "Фейсбука" где-то писали, что компиляция "PHP" заметного прироста производительности не дала. Узким местом оказался не сам "PHP", а способ взаимодействия с базой данных.
              Ответить
              • База -- это где они MySQL одноколоночный используют, да, да?
                Ответить
                • А что, можно как-то по-другому?
                  Ответить
                  • Вероятно, можно не использовать реляционную СУБД для задач, для которых она не предназначена.

                    Заметь, я не обсираю MySQL тут, потому что использование Oracle или Postgres в качестве одноколоночной субд (bit storage) вряд-ли бы дало серьезный прирост производительности
                    Ответить
              • > Разработчики "Фейсбука" где-то писали

                На стене туалета? Ссылочку можно?
                Ответить

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