Няшная / Говнокод #19835 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
#include <gtk/gtk.h>

int main(int argc, char *argv[], GtkWidget* vbox) {

	GtkWidget *window;

	gtk_init(&argc, &argv);

	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
	gtk_window_set_default_size(GTK_WINDOW(window), 450, 700);
	gtk_window_set_title(GTK_WINDOW(window), "Model Viewer (Version 36)");

	//test();

	menubar(window);
	opengl(window);

	gtk_widget_show_all(window);

	gtk_main();

	return 0;
}

https://www.linux.org.ru/forum/development/12523254

Запостил: mittorn mittorn, (Updated )

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

  • "Рановато вы за опенгл да с менюбарами взялись, с хелловорлдов обычно начинают."
    Ответить
    • поэтому, начиная c systemd версии 248, со встроенными wayland и gtk, все старые С/С++ программы не будут больше совместимы с Linux.
      Ответить
      • Linux вообще-то _start вызывает 🙂 А мостик между _start и main() влинкован в виде crt1.o или подобного.
        Так что подменить его и будет вам main() с желаемым прототипом.

        (да, я знаю про зеленый текст, просто я зануда)
        Ответить
        • Увеличу уровень занудности. При соглашении вызова cdecl лишний аргумент при вызове не помеха, потому что он будет молча проигнорирован, а стек очищен вызывающим модулем. Т. е. если crt1.o заталкивает в стек GtkWidget* vbox при вызове main'а, а main на это не рассчитан, то... ничего опасного не произойдёт.

          Хуже если наоборот, crt1.o вызывает main всего с двумя аргументами, а в нашей программе сигнатура main содержит GtkWidget* vbox. Тогда только Царь знает, куда указывает vbox.
          Ответить
          • На самом деле main в posix (или в линуксе) вызывается с int argc, char** argv, char** envp. Так что вполне понятно, куда он указыается.
            Ответить
            • > На самом деле

              на самом деле там в компилере/линк скриптах есть магия которая в зависимости от прототипа main() генерит его правильный вызов, с правильным количеством аргументов.

              по крайней мере раньше (pre C89?). потому что `void main()` было тоже разрешено, и компилер всовывал туда еще `exit(0)`, дефолтный код выхода. но похоже это больше не поддерживается, так как С стандарт больше `void main()` не разрешает.

              где-то и читал, и в прошлом `void main()` видел.
              Ответить
              • > void main()` не разрешает
                Зато он гораздо более ужасную вещь разрешает - int main() без return...
                Ответить
                • я к слову про это читал и это тестировал. читал что как и `void main()`, если нет `return`, то будет аналогично `exit(0)`.

                  то ли гцц это не умеет, то ли фиг его знает, но возврат из майна это результат последней операции. типа `int main() { printf("\n"); }` выйдет с кодом 1 (потому что printf() возвращает 1 потому что один символ выводит.)
                  Ответить
                  • > но возврат из майна это результат последней операции
                    Там, емнип, от -std= очень сильно зависит. На каких-то стандартах - 0, на каких-то - UB, как и в обычных функциях (та самая единичка, затесавшаяся в eax после printf).

                    Только вот с каким стандартом чо - не помню. Поэтому я всегда что-нибудь возвращаю, ибо нехуй...
                    Ответить
                    • Т.е. это ёбаное дерьмо - свежатинка. Как обычно узаконили какую-то бесполезную хуйню, вместо того, чтобы вменяемую диагностику добавить...
                      Ответить
                      • думаю что просто не стали сражаться с кучей древнего архаического софта.

                        ЗЫ да, версии стандарты я не догадался подёргать.
                        Ответить
                        • > древнего архаического софта
                          Который мирно жил с UB'ом десятилетиями, пока в C99 эту срань не узаконили...

                          Имхо, не та проблема, которая предвещает много сражений. При сборке говнософта достаточно было бы добавить одну строку в конец main'а. Всё.

                          Выпилили же в конце-концов говнофичу с мутабельными строковыми литералами, никто особо и не возмущался (хотя я своими глазами видел софт, который эту говнофичу абузил)...
                          Ответить
                          • софт до стандартизации работает "as is": код компилера есть стандарт.

                            если pre-ANSI конпилеры это обрабатывали - то оно не было UB. понятие UB появилось только после стандартизации.

                            я этой фишкой проникся на Perl5 vs Perl6. Perl6 это стандарт, а Perl5 - это реализация. Если в Перл5 что-то не работает/работает загадочно официальный ответ "смотреть в код". Для Перл6 - "смотри в стандарт, и открывай баги для твоей конкретное реализации."
                            Ответить
                                • я обожаю перл, кстати

                                  жалко что на нем сейчас 0 вакансий, 0 проектов и 0 человек им пользуется
                                  Ответить
                                    • да да, жив курилка
                                      жж написан на перле
                                      много всякой широкоиспользуемой или сложно-подменимой дряни типа otrs, bugzilla написано на перле
                                      Ответить
                                      • жж да, но это же наследие
                                        ну вон кое-что и на Коболе написано в бизнесе-то)

                                        а зачем багзила? Ишью треккеров сейчас как грязи же
                                        Ответить
                                        • ну сейчас у нас редмайн в этой роли
                                          сравнивая одно с другим, могу ответственно заявить - всё говно кроме мочи
                                          Ответить
                                          • redmine это вроде под .net?

                                            Я кушал Jira, кушал Mantis и Yourkit.
                                            Еще думал bugtrack попробовать.

                                            В общем я согласен с тем что все говно.
                                            Ответить
                                                • если учесть, что это изначально не багтрекер, то ничего
                                                  много кликать надо, чтобы состояние задачи изменить
                                                  групповое редактирование отсутствует

                                                  спасибо хоть есть интеграция с гитом, может иногда поллить хранилище и менять статус ошибок, когда встречает в коммитах ключевые слова (а иногда может виснуть к ебеням на этой операции)

                                                  вот всё времени нет в отделе автоматизировать перевод кучи задач (багов) из состояния в состояние при сдаче релиза в тестирование, а уж о том, чтобы бюрократизировать учет рабочего времени, или хотя бы ведение всех задач проекта в нём и речи нет - если инструмент тормозит рабочий процесс, то он просто не выживает
                                                  Ответить
                                                      • Ну а чо, по пунктам расписывать? Ну ок...
                                                        1. В редмайне есть контекстное меню, много кликать не надо, чтобы состояние задачи поменять. Кстати, это же и групповое редактирование. Если из самого таска, то есть плагины, вроде этого: https://www.redmine.org/plugins/issue_hot_buttons
                                                        2. У редмайна очень простая и понятная структура БД. Автоматизируется там всё, что угодно, и как угодно, такая банальность, как автоматический перевод из статуса в статус вообще за три минуты делается.
                                                        3. Любая бюрократия тормозит рабочий процесс. А уж делать из редмайна учёт рабочего времени... Мне кажется, что вы там упоролись... Впрочем, можно плагины поискать, вдруг уже кто-то до вас так же упоролся.
                                                        Ответить
                                                        • > Кстати, это же и групповое редактирование.
                                                          ну вот видишь, не спросил бы, и не узнал о таком
                                                          он даже кастомные поля умеет группой дрочить!
                                                          спасибо добрый человек

                                                          > А уж делать из редмайна учёт рабочего времени
                                                          был у нас один исполнительный директор
                                                          пытался заставить вести весь учет в редмайне, а также считать косты по кокомо, которого он переработал на предыдущей работе
                                                          но, как грицца, если коллектив плюнет в тебя, ты утонешь
                                                          Ответить
                                    • Да просто оно все либо тупое, либо туго конфигурированное

                                      под Jira надо много буков на джаве писать (вооюще не люблю атласин) под йоркит вообще на их собственном DSL:)
                                      Ответить
                              • а чо. удобная утилита. как язык - да, уже давно попахивает. но как утилита для решения повседневных задач - тем более настолько надежная - сложно найти альтенативу.
                                Ответить
                                • перл-то?
                                  ну да, однострочники писать когда седа и авка мало

                                  тащемто он для того и делался: чтобы логи парсить. Ларри не виноват что потом какие-то упыри начали на нем делать веб-приложения и писать сложную бизнес-логику
                                  Ответить
                                  • можно успешно и что-то большее писать. просто имо язык и синтакс в 21й век так окончательно и не пришли: ОО все еще тормозное и синтакс через ж, пропертисы у объектов так и не заработали.
                                    Ответить
                      • Зато хелловорлд на сишечке на 17% короче если return убрать 🙂
                        Ответить
                • не вижу проблемы. Было undefined, стало defined behavior. От этого как бы не может стать хуже.
                  Ответить
                  • А по-хорошему - надо было ошибку конпеляции узаконить, а не очередной бесполезный частный случай.

                    > не может стать хуже
                    От узаконенного говна лучше язык уж точно не стал.
                    Ответить
                    • к чему такая педантичность? Поведение программы же однозначно. Вообще считаю, что любая функция по завершению без return'a должна выдать default constructed value. Более того, я бы хотел такого поведения при вызове return'a без параметра.
                      Ответить
              • > потому что `void main()` было тоже разрешено
                > где-то и читал, и в прошлом `void main()` видел.

                Да, было такое. Очень давно. Вообще много всякой хрени было

                main()
                main(void)
                void main()
                void main(void)
                int main(void)

                Чего никогда не видел, так это:
                auto main(void)
                Ответить
                • auto main() -> int
                  да и вообще есть шанс что ребята, пришедшие из других яп будут делать что-то вроде
                  #define function auto
                  
                  function someFunc() -> int { // such syntax, much wow
                  Ответить
          • >При соглашении вызова cdecl
            Только в линуксах нифига не cdecl
            Ответить
        • > да, я знаю про зеленый текст

          ваша информация устарела. systemd заменит libc своей встроенной версией уже начиная с версии 244. bash - с версии 258. GNOME - с версии 268. само собой разумеется начиная с этой версии KDE/Qt/этц приложения больше не будут поддерживаться.
          Ответить
          • скоро все приложения под linux будут писаться на языке .ini файлов в виде юнитов .application и запускать их надо будет так

            systemctl launch postgres.applicatio
            Ответить
            • > скоро все приложения под linux будут писаться на языке .ini файлов в виде юнитов .application

              как только systemd дойдёт до поглощения gcc. sendmail.cf путь указал. писаться все будет на Valа и GCC будет это в набор .ini/.application переводить. зато секурити - потому что никаких тебе буффер оверфлоу. 😉
              Ответить
    • А вдруг это просто кресты и перегруженная функция?
      Ответить
  • я просто оставлю это здесь:
    int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow);
    Ответить
  • Блять. Почитал комменты и понял - конпеляторы правят миром.
    Если хочешь править миром - пиши конпеляторы, %abusername%. Чем больше конпеляторов напишешь - тем больше ты правишь миром.
    Я всё сказал, наверное.
    Ответить
    • Хуя ты молодец. Да, конечно, конпеляторы правят миром, программеры, которые пишут под эти конпеляторы ваще не в счёт...
      Ответить

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8