- 1
- 2
- 3
- 4
- 5
- 6
struct Foo {
};
struct Bar {
int x[0];
};
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
struct Foo {
};
struct Bar {
int x[0];
};
https://ideone.com/upuoOg
Какая консистентность )))
bormand # 0
guest # 0 ⇈
а пустой эррей это небось вообще какое-нить убе, и компилятор его выпилил?
ASD_77 # 0 ⇈
[ <size>, <element 1>, <element 2> ... ]
3.14159265 # 0
Зачем блядь, говно-то? Ну почему опять говно? Почему, блядь, говно-то? Почему, бляди, зачем говно-то, а? Ну как так-то, а?
bormand # 0 ⇈
3.14159265 # 0 ⇈
bormand # 0 ⇈
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.
guest # 0 ⇈
Так что тут у нас UB равно по размеру UB
bormand # 0 ⇈
Охуенно...
3.14159265 # 0 ⇈
Ну кроме /s/%d/%lu/g
bormand # 0 ⇈
bormand # 0 ⇈
Кстати, а эта хуйня делает хоть что-то полезное помимо ругательства на // крестовые комменты?
3.14159265 # 0 ⇈
bormand # 0 ⇈
В доке вообще написано, что оно просто убирает несколько кейвордов (asm, typeof) чтобы проги написанные согласно стандарту могли собраться не спотыкаясь об расширения.
3.14159265 # 0 ⇈
>проги написанные согласно стандарту могли собраться
Я эту херь добавил чтобы она отловила гццизм с int x[0].
bormand # 0 ⇈
Поэтому его ловит только педантик.
3.14159265 # 0 ⇈
То есть толк есть.
bormand # 0 ⇈
Не особо. Педантик эту хуйню и так ловит если у тебя стандарт ниже С99. А анси, судя по доке, одним из сайд-эффектов за каким-то хером врубает С90 (из-за restrict поди?).
guest # 0 ⇈
..чем делает твой код переносимым на все существующие в мире компиляторы
годно же?
bormand # 0 ⇈
Неа. Дух опции -ansi заключается в том, чтобы древнее говнище, юзающее restrict, asm и typeof в качестве переменных начало собираться. Всё. На этом годнота заканчивается.
-ansi без -pedantic не будет ругаться на гццизмы и они проберутся в твой код.
Иными словами:
-ansi: я хочу собрать вот это говно, которое у меня работало лет 30 назад
-pedantic: я хочу, чтобы моё говно собиралось любым компилером, который умеет соотв. стандарт
guest # 0 ⇈
bormand # 0 ⇈
Ну, граница между C90 и C99 на это намекает. Оно ещё триграфы включает, кстати.
guest # 0 ⇈
ABryCTOBCKuu_nemyx # 0 ⇈
В «Borland C» ещё наверняка много чего не поддерживается. Возможно, ещё в «LCC» всё плохо.
На удивление в «Pelles C», «TCC», «Open Watcom», «IBM Visual Age», «Digital Mars» поддержку «C99» завезли.
3.14159265 # 0 ⇈
Бывший LCC (пришлось погуглить)
> TCC
Фабрис Беллард
> Open Watcom
> Digital Mars
Известное старьё.
ABryCTOBCKuu_nemyx # 0 ⇈
«Open Watcom» — свободное продолжение коммерческого «Watcom C». Сейчас развивается слабо.
ABryCTOBCKuu_nemyx # 0 ⇈
https://bellard.org/jslinux/
Вот тут предыстория:
https://bellard.org/jslinux/tech.html
3.14159265 # 0 ⇈
> https://govnokod.ru/23821#comment402754
> https://govnokod.ru/15663#comment225475
У него на сайте много всяких чудес.
QEMU, FFmpeg, tcc выросли в отдельные проекты.
ABryCTOBCKuu_nemyx # 0 ⇈
https://bellard.org/textsynth/
3.14159265 # 0 ⇈
Я переводчиком получал разные иероглифы, а потом разжимал из них всякую питушню.
Edit: вот тред https://govnokod.ru/19675#comment558492
3.14159265 # 0 ⇈
guest # 0 ⇈
Там вроде C89 был, а был ли там стандрат С++ я не помню. Скорее всего это были достандартные времена, хотя какие-то зайчатки Степанова там были.
Есть такая книжка "Редкая профессия" человека по фамилии Зуев
Там описывается, как питухи в весёлые 90-е пилили компилятор С++.
В ней очень много смешных багров, рекомендую ))
CHayT # 0 ⇈
mittorn # 0 ⇈
bormand # 0 ⇈
Если отбросить препроцессор, в сишке не было специальной обработки переноса строки. Это обычный пробел.
guest # 0 ⇈
ABryCTOBCKuu_nemyx # 0 ⇈
Вроде внутри блока asm в некоторых реализациях переносы строк учитываются, но он вообще вне стандарта и в каждом компиляторе реализован по-своему.
j123123 # 0 ⇈
guest # 0 ⇈
И у Борманда тоже
Только другое
huestinho # 0 ⇈
guest # 0 ⇈
Пустой array это UB в С и С++, но не в GCC
ABryCTOBCKuu_nemyx # 0 ⇈
guest # 0 ⇈
ABryCTOBCKuu_nemyx # 0 ⇈
guest # 0 ⇈
(Ага, знаю, сейчас налетят питухи и скажут кококо)
JloJle4Ka # 0 ⇈
guest # 0 ⇈
C обратно совместим с C++. Другими словами - подмножество языка. Программа, написанная на C будет компилироваться компилятором C++ и работать.
guest # 0 ⇈
bormand # 0 ⇈
Какое-то (большое) подмножество программ действительно собирается и там и там. Но даже банальные class или virtual в качестве переменных всё ломают.
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
Неужели ты не в курсе?
guest # 0 ⇈
j123123 # 0 ⇈
j123123 # 0 ⇈
> Одну текущую задачу сначала показали «плюсовику», спросив, сколько займёт её решение. Он сказал: «Здесь нужно писать могучий движок. Короче говоря, это проект на полгода». Его коллега-«сишник» поинтересовался: «А зачем?» Ведь поставленная задача укладывается в сотню строк кода! Ответ был ошеломляющим: «Ну и что, мы так и будем по сотне строк кода писать для решения частных задач, каждый раз, как они возникают? Нетушки, задачи надо решать раз и навсегда!».
> По моему глубокому личному убеждению, проблемы нужно решать по мере их возникновения. Писать программы на вырост с избыточным универсализмом нужно лишь очень хорошо предварительно подумав, ибо это из серии «Почему сегодня не делают корабли, летающие к звёздам?» Ответ прост: потому что корабль, построенный завтра, прибудет быстрее, а корабль, построенный послезавтра, еще быстрее. И их обоих обгонит корабль, построенный лет через пятьдесят, но когда он вернётся обратно, то обнаружит, что у человечества совсем другие проблемы».
bormand # 0 ⇈
Сишники юзали эту философию когда она ещё не была мейнстримом.
3.14159265 # 0 ⇈
>> Нетушки
Программисты .NET
guest # 0 ⇈
ABryCTOBCKuu_nemyx # 0 ⇈
Хорошо это или плохо — вопрос другой. Крис как битолюб считает, что преждевременное обобщение — это плохо.
guest # 0 ⇈
это же не вджаве примитив на генерик заменить
ABryCTOBCKuu_nemyx # 0 ⇈
Кстати, в «C11» тоже есть «бесплатное обобщение»:
https://en.cppreference.com/w/c/language/generic
Но поскольку оно появилось поздно, традицией сишников оно не стало.
guest # 0 ⇈
от инвоквирчуал ни файнал, ни прайват не спасают
guest # 0 ⇈
guest # 0 ⇈
ASD_77 # 0 ⇈
int x[1];
} Bar;
вроде так нада.. не?
bormand # 0 ⇈
huestinho # 0
Какой багор )))
guest # 0
https://twitter.com/Semenov/status/1430993298072686603
guest # 0 ⇈
guest # 0 ⇈
guest # 0
ABryCTOBCKuu_nemyx # 0 ⇈
guest # 0 ⇈
PolinaAksenova # 0
Имення поэтому я за "C++".
guest # 0 ⇈
j123123 # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
ISO # 0 ⇈
guest # 0 ⇈
Твой линк указывает на коммент, а в нем еще один линк, а в нем еще один.. я блядь пол часа убил
ISO # 0 ⇈
ABryCTOBCKuu_nemyx # 0 ⇈
ABryCTOBCKuu_nemyx # 0 ⇈
Переходишь по ссылке на страницу /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 # 0 ⇈
Переходишь по ссылке на страницу /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 # 0 ⇈
JleHuBblu_nemyx # 0 ⇈
bormand # 0 ⇈
Раскрываешь ссылки только когда они реально понадобятся?