- 1
if (!done && (done = true)) setlocale(LC_CTYPE, "");
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1013
if (!done && (done = true)) setlocale(LC_CTYPE, "");
из свежих ворнингов компилера.
Dummy00001 14.02.2012 17:00 # +5
похоже у какого-то тима стратегические запасы фигурных скобок иссякли.
defecate-plusplus 14.02.2012 17:34 # +2
Dummy00001 14.02.2012 17:40 # +7
6E3BY3HuK 26.09.2021 13:13 # 0
vistefan 14.02.2012 19:59 # −1
Dummy00001 14.02.2012 20:22 # +1
как по мне - неопределенность, потому что значение переменной в том же самом условии и проверяется и меняется.
но по старым традициям С, условия проверяются/исполняются строго слева на право и останавливаются когда результат условия становится известен.
поэтому оба условия работают: до присвоения исполнение не дойдет пока первая часть "&&" условия false.
unu-foja 15.02.2012 00:21 # +2
А можно пример языка, в котором порядок вычисления операндов "&&" неопределен?
Dummy00001 15.02.2012 00:31 # 0
с другой стороны. многие языки просто по семантике такое не позволяют. в С это работает за счет "side effects": у присвоения тоже есть результат. некоторые языки (например функциональные) стремятся искоренять эти побочные эффекты и просто исключают возможность смешивания присвоений и проверок. поэтому как бы проблемы в принципе и не существует.
еще из классики жанра: MS Visual Basic. там как такого була нету и выражения всегда вычисляются полностью и результат проверяется на true-ness. хотя даже в VB я слышал спец операторы были введены что бы только часть выражения вычислялась, а не все целиком.
3.14159265 15.02.2012 15:00 # 0
Не слышал об таком.
Все т.н. "спец-операторы" в версиях до .NET сводились к:
замене
if (cond1 and cond2) then
на
if (cond1) then
if (cond2) then
А всё оттого, что у MS VB был мудацкий компилятор.
Dummy00001 15.02.2012 15:16 # 0
SmackMyBitchUp 15.02.2012 15:47 # +2
AndAlso -> &&
OrElse -> || ?
3.14159265 15.02.2012 16:20 # 0
>OrElse -> ||
Да. В VB.NET добавили много сишных и жавовских фич (try - catch for example) дабы сделать его максимально близким к шарпам.
3.14159265 15.02.2012 16:18 # +2
>VB.NET Operators
>в версиях до .NET сводились к:
>до .NET
VB <> VB.NET
absolut 15.02.2012 20:17 # 0
wvxvw 15.02.2012 01:25 # 0
6E3BY3HuK 26.09.2021 13:14 # +1
Мало кого ебёт что там в Erlang
CBuHOKYP 26.09.2021 23:19 # 0
TheCalligrapher 15.02.2012 01:28 # +4
Порядок вычисления встроенных операторов '&&' и '||' (и свойство из "сокращенного вычисления") жестко закреплены стандартами этих языков, а не является какой-то произвольной данью "старым традициям".
Dummy00001 15.02.2012 01:36 # 0
"точка следования" это официальный перевод на русский?
TheCalligrapher 15.02.2012 02:24 # 0
Говногость 15.02.2012 09:42 # 0
Только вот в C++11 их отменили.
Dummy00001 15.02.2012 14:25 # 0
С++ в этих вещах ссылается на С, так как стандарты (с С++11 полностью) гармонизированы.
С стандарты - что С99 что С11 определяют sequence point'ы.
gegMOPO4 15.02.2012 14:53 # 0
Dummy00001 15.02.2012 15:13 # 0
во-первых. 1.1, #2 - генеральное заявление, что С++ не противоречит С где это не оговорено. норматив ISO для надстроек над существующими стандартами. переиспользуемые стандарты перечислеными в 1.2 - включая С99.
во-вторых. n2239, "A finer-grained alternative to sequence points" - они просто переименовали "sequence points" в "sequenced before". и blimey последние апдейты к С11 тоже переименовали это дело в С стандарте.
gegMOPO4 15.02.2012 15:36 # 0
Dummy00001 15.02.2012 16:35 # 0
не отменили - просто переименовали.
и расширили - т.к. многопотчность впервые попала официально в стандарт.
ну да называй как тебе это нравится. мне имена по барабану, если я знаю о чем ты говоришь ;)
3.14159265 15.02.2012 20:34 # 0
И был бы прав.
TarasB 15.02.2012 20:43 # +2
TheCalligrapher 18.02.2012 22:20 # −1
Например, наличие точек следования автоматически подразумевает возможность partitioning-а, т.е. разделение всего множества событий на две четкие группы: одна группа происходит до точки следования другая - после (аналогично partitioning-у в алгоритме quicksort).
Идея же порядка, основанного на "sequenced before" (без каких либо дополнительных ограничений), задает лишь частичный порядок, который в общем случае не допускает однозначного partitioning-а.
Проблема точек следования как раз таки и заключалась во многом в том, что они превносили в язык чрезмерно жесткое требование partitioning-а. Во времена исключитально последовательного программирования это не мешало, но в современно программировании мы уже начали упираться в чрезмерную жесткость этого требования. Поэтому его и ослабили.
Это принципиальное изменение, а не какое-то "переименование".
Говногость 19.02.2012 00:30 # 0
Говногость 19.02.2012 10:59 # 0
TheCalligrapher 19.02.2012 22:30 # 0
Говногость 20.02.2012 01:09 # 0
TheCalligrapher 20.02.2012 18:52 # 0
Во-вторых, именно эту идею, на самом деле, пытались реализовать изначально при помощи "точек следования", но тогда выбрали чрезмерно жесткий механизм, т.е. точки следования.
В-третих, формальное обоснование потребудет анализа пол-стандарта. Поля этого форума, так сказать, слишком узки... К тому же, я думаю, это уже было сделано. Читайте труды комитета.
Dummy00001 20.02.2012 20:22 # 0
теперь я думаю ты тоже готов назвать это "переименовали" и пойти заниматься чем-нибудь полезным.
Говногость 21.02.2012 11:57 # 0
Не заметил. Код старого стандарта не компилируется в новом:
1)Старое auto перестало работать, хоть это и не страшно.
2)Перекрывающие виртуальные методы во всех используемых библиотеках (в том числе и чужих) и во всем коде программы приходится помечать override или final иначе ошибка компиляции. А вот это уже очень напряжно.
Какие несовместимости ещё забыл?
TheCalligrapher 15.02.2012 01:24 # 0
lucidfoxGovno 15.02.2012 08:51 # −8
3.14159265 15.02.2012 18:51 # +2
Снова "итт-илитный" (ц) юмор?!
А я тут для тебя картинку сделал. Вернее про тебя.
http://rghost.ru/36535887
Govnocoder#0xFF 17.02.2012 16:47 # 0
zloirock 15.02.2012 10:34 # −2
_jokz 16.02.2012 03:46 # −1
absolut 16.02.2012 09:59 # +2
roman-kashitsyn 16.02.2012 10:52 # 0