- 1
- 2
https://upload.wikimedia.org/wikipedia/commons/0/0e/Bjarne-stroustrup_%28cropped%29.jpg
https://cdn.jpg.wtf/futurico/cb/3e/1586622557-cb3e3c00a16ab8b849e9464c1e3037ea.jpeg
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
https://upload.wikimedia.org/wikipedia/commons/0/0e/Bjarne-stroustrup_%28cropped%29.jpg
https://cdn.jpg.wtf/futurico/cb/3e/1586622557-cb3e3c00a16ab8b849e9464c1e3037ea.jpeg
Шок! Рецепты защиты от коронавируса, от создателя языка C++. Надо всего лишь...
http://i.ytimg.com/vi/6lJwgA0bNCc/maxresdefault.jpg
Спирт можно и выпить, а дверные ручки опрыскивать из передней форсунки.
https://borodatiyvopros.com/wp-content/uploads/2020/03/8687_140895_5.jpg
Сначала возьмите человека, который программирование вообще нихуя не знает, обучите его языку Си. Можно конечно начать с какого-нибудь паскаля, а потом переучить на Си, то один хрен. Потом покажите ему язык очень высокоуровневый, например какой-нибудь диалект лиспа, ту же Scheme например. Пусть прорешает ченить из SICP. После этого, если такому человеку показать кресты, он просто будет блевать от них
На этом этапе фейл. Получим Тараса-сишкохейтера.
А что это в массивах нету размера?
А что это массив передаётся как укозатель?
А почему такой ублюдочный switch?
А сдвиг это тоже UB?
А почему в языке так много UB?
А почему enumы такое говно? В паскале как надо сделали.
А где тут нормальные строки? char*? Фу блядь.
А почему 010!=10?
итд.
Человек отчаивается, идёт учить С++.
С++ это в основе то же говно что и Си, только там сверху еще нового говна накидали, с новыми UB-ами, новыми способами отстрела ног и припизданутым стандартом, который ни один компилятор полностью не реализует. Так что учить крестоговно после сишки это как сказать "Ну вот навернул я этого собачьего дерьмища, но как-то неочень, надо б разбавить его свинным дерьмищем"
После сраной сишки, где деревянные игрушки и ничего нет из коробки, кресты кажутся образцом здравого смысла.
Именно поэтому я и написал, что на кресты надо смотреть после сишки и после какого-то намного более высокоуровневого языка. Тогда кресты будут выглядеть как кривой набор уродских костылей над сишкой, чем они и являются
А зачем в сишке столько неявных конверсий типов?
А что такое signed char unsigned char? Ээээ.
А в Паскале компилятор не давал мне спутать сравнение и присваивание if (a=5).
А что инкременты тоже возвращают значение?
while (*a++=*b++); это идиоматично?
А что выведет код i+= ++i + ++i?
UB?
Идите нахуй со своей сишкой.
... и чем от них отличается обычный char.
Что такое strict aliasing и как всё-таки посмотреть на биты во float'е?
Почему вместо модулей какая-то тупая фигня, которая ещё и тормозит?
Почему в функцию без аргументов их можно передать сколько угодно?
Зачем strcpy и strcat возвращают указатель на начало буфера?
Вроде как собираются прочистить всё это говно вилкой и выделить хедера, которым не нужен рантайм и операционка. Х.з. насколько это будет юзабельно.
Получается сишка с каким-то крестовым полурабочим огрызком
>The libgcc versions assume a Unix-like userspace, so we should define our own. If we’re trying to avoid dynamic memory allocation, a call to delete is probably a serious bug, and we should likely panic.
А в виртуальных деструкторах.
However, operator delete is required whenever we give a base class a virtual destructor—as is standard practice—even if we never heap-allocate an object of that class.
Пусть под микропердоллеры пишут какие-нибудь заедушные питушни, которым не хватило нормальной работы.
А в крестах это изменили?
> А в Паскале компилятор не давал мне спутать сравнение и присваивание if (a=5).
А в крестах это изменили?
> А что инкременты тоже возвращают значение?
А в крестах это изменили?
> А что выведет код i+= ++i + ++i?
А в крестах это изменили?
> UB?
А в крестах это изменили?
> Идите нахуй со своей сишкой.
И с крестоговном тоже нахуй идите
Зачем в сишном софте делают кококонфиги, хотя можно просто перекококонпелировать?
Ну разве что в Debug-версии не вкомпиливать параметры, а оставить подстановку в рантайме, чтобы можно было быстро скомпилировать и проверить.
Но вот если у тебя контроллер, то запихнуть компилятор или какое-то JiT-говно в него, которое б пересобирало прошивку в самом контроллере при изменении настроек - малость проблематично.
Мой любимый пример - когда класс-родитель параметризируется ребёнком.
Вообще, если подумать, можно вообще всё ООП в C++ очернить. Допустим, если класс не final, то он знает, какие методы будут у его детей.
Это как?
Какой «Curiously recurring template pattern» )))
Под любой примитивной абстракцией (будь-то bool, char, enum) скрывается обычный int. Который хуй пойми что и равен размеру регистра.
char сам по себе — особый пиздец.
https://stackoverflow.com/questions/2172943/size-of-character-a-in-c-c
В целом С++ гораздо более строготипизирован чем сишка.
В крестах пытались всё это дерьмо починить.
Хотели как лучше — получилось как обычно.
Угу, у крестов три разных чара (char, signed char и unsigned char - разные типы) а не два, как у сишки. Прогресс, блджад.
Ну и можно еще отличить например по наличию UB при знаковом переполнении
Его специально добавили, поскольку это не char. Хотя c другой стороны:
Прав был Царь — массив, единственно полезная структура данных.
Если мне настолько похуй на представление строки, то и utf-8 в обычных чарах сойдёт.
В общем-то эта свистопляска с wchar_t и отдельным "юникодным" API - огромный фейл, имхо. MS думало, что 16 бит хватит для всех и можно будет реально работать с элементами строки как с символами. Но юникод вырос и обосрал всю эту затею. А делать ещё одно API с 32-битными символами они уже не решились.
Юникод настолько засрали всякими композитными символами и комбо-смайликами, что без специальных либ с ним не поработать даже в char32_t. Т.е. представление строки для программиста не имеет никакого значения, лишь бы либы хавали.
А потом твою прогу купят какие-нибудь арабы...
Максимально переносим какой-нибудь QString, который полностью скрывает все детали своей реализации и может конвертиться хоть в wchar_t хоть в char в нужной кодировке. Ну и даёт доступ к символам кодепоинтам как QChar/char32_t (и то тут встаёт вопрос о нормализации всяких ё).
Ага, тогда в прыщах текст надо выводить через ncurses. Что, кстати, не лишено смысла - они умеют считать длину строки в соснольных знакоместах, емнип.
Для арифметики просто char может быть signed или unsigned, в зависимости от компилятора (или в зависимости от ключиков компилятора), но у него есть одно отличие и от signed, и от unsigned: он как-то по-другому работает с указателями.
Вообще-то нет. https://govnokod.ru/26318#comment519631
Эти вариации char работают с указателями совершенно одинаковым образом
Strict aliasing is the requirement from C99 that an object be accessed only by its own type or by char.
C99 6.5 7:
An object shall have its stored value accessed only by an lvalue expression that has one of the following types:
— a type compatible with the effective type of the object,
— a qualified version of a type compatible with the effective type of the object,
— a type that is the signed or unsigned type corresponding to the effective type of the object,
— a type that is the signed or unsigned type corresponding to a qualified version of the effective type of the object,
— an aggregate or union type that includes one of the aforementioned types among its members (including, recursively, a member of a subaggregate or contained union), or
— a character type.
Нет. Все эти три хуйни - character types
§ 6.2.5, 3
> The three types char, signed char, and unsigned char are collectively called the character types.
И у него char работает как надо, знаковые работают как надо без проблем при переполнении, при получении NaN программу пучит, сравнение чисел тоже работает.
> C++ Modules introduces an exciting new preprocessor directive! Bet you weren’t expecting that, eh? After all, Modules are supposed to negate some uses of the preprocessor, right?
Какой багор)))
> header-unit import
> lexical translation phases
> importable-headers
> Global Module Fragment
> module-declaration
> only preprocessor directives may appear in the global fragment
> decl-reachable
> dependent expression
> first phase of name-lookup
Сука, какого хуя? Ладно бы это были просто подробности для разработчиков компиляторов и любознательных людей, а обычные программисты могли писать «import zaebis_maker;» и течь — нет, хуй там плавал! Без знаний фаз, ебать их в сраку, лексической трансляции кода, определения отношения decl-reachable (оно, кстати, транзитивно!) и прочей хуйни невозможно узнать, почему простой, понятный и логичный код отваливается с невразумительной ошибкой:
Next step: weaponize it.
Неудивительно что «вореции» родились на крестофоруме.
https://ru.wikipedia.org/w/?curid=5269
«Iki-» похоже на префикс класса («венгерка»), как, например, «Ki-» в «Kiswahili» (самоназвание «суахили»).
Кикимора. Рикичик!
Бросаются в объятья друг другу.
Акулина Ивановна. Ишь-мышь?
Кикимора. Ишь-мышь-перемышь!
Катя. Невежливо говорить на иностранном языке, если другие не понимают!
Акулина Ивановна. Не перебивай, когда старшие разговаривают! (Кикиморе.) Чучурик?
Кикимора. Кочарыг!
Катя. Забирайте вашу книжку, а я пойду, если так!
Акулина Ивановна. Ты не обижайся. Это же моя родственница. Семиюродная сестра. Мы с тобой, Кики, сколько лет не видались?
Кикимора. Не то шестнадцать, не то триста пять. Точно не помню.
Акулина Ивановна. Василиса здесь?
Кикимора. А где ж ей быть? До чего заколдована, прямо не знаю, до чего! (Шепчет Акулине Ивановне на ухо. Та отвечает тоже шёпотом.)
Катя (совсем обиделась). Это нечестно. Я Василисину траву принесла, я волшебную книжку нашла, я вам помогаю, а вы нарочно шепчетесь, чтобы я не понимала! Как вам не стыдно!
Акулина Ивановна. Прости, пожалуйста. Триста лет не говорила по-тарабарски. Ну, сначала она про свой бант лопотала, потом про родных-знакомых. Она говорит: в чулане Василиса. А я говорю: во дворец как попасть?
Нина Гернет. Катя и чудеса.
Про «Катю и чудеса» я узнал благодаря фильму «Весёлое волшебство» (Киностудия им. М. Горького, 1969). Мне в том фильме понравился интерьер: школа в бывших монастырских постройках.
Тут же ночью она схватила сантиметр и нервно измерила длину комнаты. Ей пришлось выйти в коридор и уткнуться в его противоположную стенку, и то оказалось всего шесть метров семьдесят сантиметров.
— Значит, кончится тем, что он сломает стенку и всунет хвост в чужую квартиру! Согрели змею на своей груди… — горько сказала мама.
Всю ночь она не спала, а на утро потребовала, чтобы крокодила не было.
И хотя Митя с Бремом в руках доказывал, что сам ученый считает эту цифру — десять метров — преувеличенной, мама утверждала, что, если бы это была неправда, Брем об этом не писал бы.
Когда же Митя прочел вслух, что крокодил достигает таких размеров только через сто лет, мама заявила, что это дореволюционное издание и что Брем устарел.“