- 1
- 2
- 3
- 4
- 5
- 6
struct Foo {
};
struct Bar {
int x[0];
};
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+4
struct Foo {
};
struct Bar {
int x[0];
};
https://ideone.com/upuoOg
Какая консистентность )))
bormand 27.08.2021 18:55 # 0
guest6 27.08.2021 19:00 # +2
а пустой эррей это небось вообще какое-нить убе, и компилятор его выпилил?
ASD_77 28.08.2021 16:57 # 0
[ <size>, <element 1>, <element 2> ... ]
3.14159265 27.08.2021 19:04 # +2
Зачем блядь, говно-то? Ну почему опять говно? Почему, блядь, говно-то? Почему, бляди, зачем говно-то, а? Ну как так-то, а?
bormand 27.08.2021 19:05 # +1
3.14159265 27.08.2021 19:11 # 0
bormand 27.08.2021 19:12 # +2
6.2.5 Types
20 An array type describes a contiguously allocated nonempty set of objects with a particular member object type, called the element type.
Это gcc'изм:
6.18 Arrays of Length Zero
Declaring zero-length arrays is allowed in GNU C as an extension.
guest6 27.08.2021 19:14 # +2
Так что тут у нас UB равно по размеру UB
bormand 27.08.2021 19:18 # +1
Охуенно...
3.14159265 27.08.2021 19:21 # 0
Ну кроме /s/%d/%lu/g
bormand 27.08.2021 19:23 # +2
bormand 27.08.2021 19:25 # 0
Кстати, а эта хуйня делает хоть что-то полезное помимо ругательства на // крестовые комменты?
3.14159265 27.08.2021 19:30 # 0
bormand 27.08.2021 19:31 # +3
В доке вообще написано, что оно просто убирает несколько кейвордов (asm, typeof) чтобы проги написанные согласно стандарту могли собраться не спотыкаясь об расширения.
3.14159265 27.08.2021 19:34 # 0
>проги написанные согласно стандарту могли собраться
Я эту херь добавил чтобы она отловила гццизм с int x[0].
bormand 27.08.2021 19:37 # 0
Поэтому его ловит только педантик.
3.14159265 27.08.2021 19:37 # +1
То есть толк есть.
bormand 27.08.2021 19:39 # 0
Не особо. Педантик эту хуйню и так ловит если у тебя стандарт ниже С99. А анси, судя по доке, одним из сайд-эффектов за каким-то хером врубает С90 (из-за restrict поди?).
guest6 27.08.2021 19:42 # 0
..чем делает твой код переносимым на все существующие в мире компиляторы
годно же?
bormand 27.08.2021 19:45 # 0
Неа. Дух опции -ansi заключается в том, чтобы древнее говнище, юзающее restrict, asm и typeof в качестве переменных начало собираться. Всё. На этом годнота заканчивается.
-ansi без -pedantic не будет ругаться на гццизмы и они проберутся в твой код.
Иными словами:
-ansi: я хочу собрать вот это говно, которое у меня работало лет 30 назад
-pedantic: я хочу, чтобы моё говно собиралось любым компилером, который умеет соотв. стандарт
guest6 27.08.2021 22:10 # +1
bormand 27.08.2021 22:12 # 0
Ну, граница между C90 и C99 на это намекает. Оно ещё триграфы включает, кстати.
guest6 27.08.2021 22:15 # 0
ABryCTOBCKuu_nemyx 27.08.2021 19:49 # +1
В «Borland C» ещё наверняка много чего не поддерживается. Возможно, ещё в «LCC» всё плохо.
На удивление в «Pelles C», «TCC», «Open Watcom», «IBM Visual Age», «Digital Mars» поддержку «C99» завезли.
3.14159265 27.08.2021 19:56 # +1
Бывший LCC (пришлось погуглить)
> TCC
Фабрис Беллард
> Open Watcom
> Digital Mars
Известное старьё.
ABryCTOBCKuu_nemyx 27.08.2021 19:59 # 0
«Open Watcom» — свободное продолжение коммерческого «Watcom C». Сейчас развивается слабо.
ABryCTOBCKuu_nemyx 27.08.2021 20:01 # +1
https://bellard.org/jslinux/
Вот тут предыстория:
https://bellard.org/jslinux/tech.html
3.14159265 27.08.2021 20:02 # +1
> https://govnokod.ru/23821#comment402754
> https://govnokod.ru/15663#comment225475
У него на сайте много всяких чудес.
QEMU, FFmpeg, tcc выросли в отдельные проекты.
ABryCTOBCKuu_nemyx 27.08.2021 20:04 # 0
https://bellard.org/textsynth/
3.14159265 27.08.2021 20:05 # 0
Я переводчиком получал разные иероглифы, а потом разжимал из них всякую питушню.
Edit: вот тред https://govnokod.ru/19675#comment558492
3.14159265 27.08.2021 20:09 # +1
guest6 28.08.2021 01:58 # 0
Там вроде C89 был, а был ли там стандрат С++ я не помню. Скорее всего это были достандартные времена, хотя какие-то зайчатки Степанова там были.
Есть такая книжка "Редкая профессия" человека по фамилии Зуев
Там описывается, как питухи в весёлые 90-е пилили компилятор С++.
В ней очень много смешных багров, рекомендую ))
CHayT 27.08.2021 22:23 # 0
mittorn 22.09.2021 15:07 # 0
bormand 27.08.2021 22:14 # +1
Если отбросить препроцессор, в сишке не было специальной обработки переноса строки. Это обычный пробел.
guest6 27.08.2021 22:15 # 0
ABryCTOBCKuu_nemyx 28.08.2021 15:25 # 0
Вроде внутри блока asm в некоторых реализациях переносы строк учитываются, но он вообще вне стандарта и в каждом компиляторе реализован по-своему.
j123123 28.08.2021 15:27 # +3
guest6 27.08.2021 19:12 # 0
И у Борманда тоже
Только другое
huestinho 28.08.2021 00:29 # 0
guest6 28.08.2021 02:00 # +1
Пустой array это UB в С и С++, но не в GCC
ABryCTOBCKuu_nemyx 28.08.2021 00:11 # 0
guest6 28.08.2021 00:15 # 0
ABryCTOBCKuu_nemyx 28.08.2021 00:17 # 0
guest6 28.08.2021 00:23 # +1
(Ага, знаю, сейчас налетят питухи и скажут кококо)
JloJle4Ka 28.08.2021 02:41 # 0
guest6 28.08.2021 10:29 # 0
C обратно совместим с C++. Другими словами - подмножество языка. Программа, написанная на C будет компилироваться компилятором C++ и работать.
guest6 28.08.2021 10:32 # 0
bormand 28.08.2021 10:32 # +1
Какое-то (большое) подмножество программ действительно собирается и там и там. Но даже банальные class или virtual в качестве переменных всё ломают.
guest6 28.08.2021 10:34 # 0
bormand 28.08.2021 10:34 # +1
guest6 28.08.2021 14:14 # 0
Неужели ты не в курсе?
guest6 28.08.2021 10:33 # 0
j123123 28.08.2021 10:41 # 0
j123123 28.08.2021 10:49 # +3
> Одну текущую задачу сначала показали «плюсовику», спросив, сколько займёт её решение. Он сказал: «Здесь нужно писать могучий движок. Короче говоря, это проект на полгода». Его коллега-«сишник» поинтересовался: «А зачем?» Ведь поставленная задача укладывается в сотню строк кода! Ответ был ошеломляющим: «Ну и что, мы так и будем по сотне строк кода писать для решения частных задач, каждый раз, как они возникают? Нетушки, задачи надо решать раз и навсегда!».
> По моему глубокому личному убеждению, проблемы нужно решать по мере их возникновения. Писать программы на вырост с избыточным универсализмом нужно лишь очень хорошо предварительно подумав, ибо это из серии «Почему сегодня не делают корабли, летающие к звёздам?» Ответ прост: потому что корабль, построенный завтра, прибудет быстрее, а корабль, построенный послезавтра, еще быстрее. И их обоих обгонит корабль, построенный лет через пятьдесят, но когда он вернётся обратно, то обнаружит, что у человечества совсем другие проблемы».
bormand 28.08.2021 10:50 # +2
Сишники юзали эту философию когда она ещё не была мейнстримом.
3.14159265 28.08.2021 12:47 # +4
>> Нетушки
Программисты .NET
guest6 28.08.2021 14:35 # +1
ABryCTOBCKuu_nemyx 28.08.2021 14:57 # 0
Хорошо это или плохо — вопрос другой. Крис как битолюб считает, что преждевременное обобщение — это плохо.
guest6 28.08.2021 15:01 # 0
это же не вджаве примитив на генерик заменить
ABryCTOBCKuu_nemyx 28.08.2021 15:17 # 0
Кстати, в «C11» тоже есть «бесплатное обобщение»:
https://en.cppreference.com/w/c/language/generic
Но поскольку оно появилось поздно, традицией сишников оно не стало.
guest6 28.08.2021 15:21 # +1
от инвоквирчуал ни файнал, ни прайват не спасают
guest6 28.08.2021 15:15 # 0
guest6 28.08.2021 01:56 # +2
ASD_77 28.08.2021 16:58 # 0
int x[1];
} Bar;
вроде так нада.. не?
bormand 28.08.2021 18:13 # 0
huestinho 27.08.2021 23:52 # +1
Какой багор )))
guest6 28.08.2021 15:01 # 0
https://twitter.com/Semenov/status/1430993298072686603
guest6 28.08.2021 15:16 # 0
guest6 28.08.2021 15:23 # 0
guest6 28.08.2021 15:08 # 0
ABryCTOBCKuu_nemyx 28.08.2021 15:21 # 0
guest6 28.08.2021 15:22 # 0
PolinaAksenova 28.08.2021 15:24 # +2
Имення поэтому я за "C++".
guest6 28.08.2021 15:25 # 0
j123123 28.08.2021 15:26 # 0
guest6 28.08.2021 15:32 # 0
bormand 28.08.2021 16:03 # 0
guest6 28.08.2021 15:33 # 0
ISO 28.08.2021 16:23 # +1
guest6 28.08.2021 18:16 # +2
Твой линк указывает на коммент, а в нем еще один линк, а в нем еще один.. я блядь пол часа убил
ISO 28.08.2021 18:22 # 0
ABryCTOBCKuu_nemyx 28.08.2021 18:25 # 0
ABryCTOBCKuu_nemyx 28.08.2021 18:30 # +2
Переходишь по ссылке на страницу /1 , а там ссылка на /1/1 .
Переходишь по ссылке на страницу /1/1 , а там ссылка на /1/1/1 .
Переходишь по ссылке на страницу /1/1/1 , а там ссылка на /1/1/1/1 .
Переходишь по ссылке на страницу /1/1/1/1 , а там ссылка на /1/1/1/1/1 .
Переходишь по ссылке на страницу /1/1/1/1/1 , а там ссылка на /1/1/1/1/1/1 .
Переходишь по ссылке на страницу /1/1/1/1/1/1 , а там ссылка на /1/1/1/1/1/1/1 .
Переходишь по ссылке на страницу /1/1/1/1/1/1/1 , а там ссылка на /1/1/1/1/1/1/1/1 .
ISO 28.08.2021 18:51 # +1
Переходишь по ссылке на страницу /1/1/1/1/1/1/1/1/1 , а там ссылка на /1/1/1/1/1/1/1/1/1/1 .
Переходишь по ссылке на страницу /1/1/1/1/1/1/1/1/1/1 , а там ссылка на /1/1/1/1/1/1/1/1/1/1/1 .
ABryCTOBCKuu_nemyx 28.08.2021 19:21 # 0
JleHuBblu_nemyx 28.08.2021 19:30 # 0
bormand 28.08.2021 22:50 # +1
Раскрываешь ссылки только когда они реально понадобятся?