|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
в с++ от перемены мест слогаемых сумма не меняется -- пример выдает две единицы. на сишарпе - меняется, такой пример выдает 0 и 1 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
они (сишарписты) почему-то, считают, что другой компилятор выдаст 0 и 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 18:11 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Формально p++ возвращает p а затем происходит ++. ИМХО правильно работает в C#. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 18:38 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Скорее всего связано с тем что в C# стековая арифметика. В первом случае сначала пушаем на стек 0, вычисляем результат функции (0) и пушаем на стек, суммируем два значения на вершине стека: 0 + 0 = 0 Во втором сначала пушаем на стек результат функции (0), потом занчение i (которое поменялось из-за ++ на 1),уммируем два значения на вершине стека: 0 + 1 = 1. ms с++ в обоих случаях берет значение непосредственно из ячейки памяти видимо, поэтому результат один и тот же. авторони (сишарписты) почему-то, считают, что другой компилятор выдаст 0 и 1 Может и выдаст, а мож и не выдаст. Это ж UB. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 18:58 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Dima TФормально p++ возвращает p а затем происходит ++. ИМХО правильно работает в C#. а в си++ чтоли не правильно? функция возращает 0, но она должна выполнится до сложения, её приоритет выше. i= i + f(i); это 1 (f уже применили) + 0 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 19:27 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
clihlt, сенкс ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 19:29 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
tchingizфункция возращает 0, но она должна выполнится до сложения, её приоритет выше. но никто не не запрещает получить значения других аргументов до вызова функции. Я не большой спец в С++, подожди, пусть спецы скажут почему оно именно так считается. Возможно UB, а может и регламентировано где-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 20:07 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Dima TВозможно UB, а может и регламентировано где-то. UB: https://en.cppreference.com/w/cpp/language/eval_order Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 20:22 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
tchingizDima TФормально p++ возвращает p а затем происходит ++. ИМХО правильно работает в C#. а в си++ чтоли не правильно? функция возращает 0, но она должна выполнится до сложения, её приоритет выше. i= i + f(i); это 1 (f уже применили) + 0 объяснение аннулируется. Жук доработал пример Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
получается 3 и 2. я бы ожидал 3 и 3 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 20:49 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
tchingizполучается 3 и 2. я бы ожидал 3 и 3 5 и 100500 тоже правильные ответы потому что UB 21722924 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 20:52 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
tchingiz, пардон 2 и 3 (а не 3 и 2) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 20:58 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Dima Ttchingizполучается 3 и 2. я бы ожидал 3 и 3 5 и 100500 тоже правильные ответы потому что UB 21722924 вы слишком широко трактуете UB в плане порядка вічисления функций. диапазон дозволенных вариантов решений не так велик. UB - только порядок вычислений, который может дать всего несколько разных вариантов результата. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 21:06 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
блин, я ассоциативность за порядок вычислений понимал. Dimitry Sibiryakov, автор This is not to be confused with left-to-right and right-to-left associativity of operators: the expression f1() + f2() + f3() is parsed as (f1() + f2()) + f3() due to left-to-right associativity of operator+, but the function call to f3 may be evaluated first, last, or between f1() or f2() at run time то есть, в любом порядке вычислятся f1, f2 и f3, а, потом, сложение результатов идет слева - направо? (f1() + f2()) + f3() ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 21:20 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
tchingizблин, я ассоциативность за порядок вычислений понимал. Dimitry Sibiryakov, автор This is not to be confused with left-to-right and right-to-left associativity of operators: the expression f1() + f2() + f3() is parsed as (f1() + f2()) + f3() due to left-to-right associativity of operator+, but the function call to f3 may be evaluated first, last, or between f1() or f2() at run time то есть, в любом порядке вычислятся f1, f2 и f3, а, потом, сложение результатов идет слева - направо? (f1() + f2()) + f3() если переписать выражения используя операторы то всё обьясняется. Исполнение начинается с самой внутренней функции Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 21:45 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
OoCcесли переписать выражения используя операторы то всё обьясняется. Исполнение начинается с самой внутренней функции Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Хмм.. чушь написал ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 22:27 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
OoCc, Через указатели на си тоже 2 и 3. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
лично меня расстраивает, что теперь одним предложением нельзя объяснить, что такое ассоциативность В Болски я понимал, что написано - вызвать все функции и складывать слева направо, а теперь надо неделю разбираться ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 10:38 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Dima TФормально p++ возвращает p а затем происходит ++. ИМХО правильно работает в C#. +1 Оператор ++ (справочник по C#) Оператор инкремента (++) увеличивает операнд на 1. Оператор инкремента может находиться перед своим операндом или после него: ++variable и variable++. Примечания Первый случай — это операция префиксного инкремента. Результатом операции является значение операнда после его увеличения. Второй случай — это операция постфиксного инкремента. Результатом операции является значение операнда до его увеличения . ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 12:01 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
tchingizлично меня расстраивает, что теперь одним предложением нельзя объяснить, Можно. Просто не нужно ассоциативности ждать там, где используются функции с побочным эффектом. Которые по определению и функциями то не являются. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 12:21 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Тут UB же ... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2018, 21:33 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
tchingiz, https://en.cppreference.com/w/cpp/language/ub https://en.cppreference.com/w/cpp/language/eval_order ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2018, 21:49 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Кэп, тебе не надоело повторять чужие посты двухдневной давности?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2018, 22:00 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
похоже дошло, что такое ассоциативность. авторthis is not to be confused with left-to-right and right-to-left associativity of operators: the expression f1() + f2() + f3() is parsed as (f1() + f2()) + f3() Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
i + f(&i) вычисляет 1, к которой прибавляет единица от второго вызова f(&i); f(&i) + f(&i) вычисляет 1, к которой прибавляется двойка от i после двух вызовов f и никакого UB другой компилятор cpp вычислит то же самое. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 12:19 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
А теперь прочитай-таки следующую строчку. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 13:57 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovА теперь прочитай-таки следующую строчку. слушаюсь авторbut the function call to f3 may be evaluated first, last, or between f1() or f2() at run time. ты намекаешь, что Код: plaintext 1.
может таки вернуть 2, а не 1? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 14:04 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Dima TФормально p++ возвращает p а затем происходит ++. ИМХО правильно работает в C#. не может в MS работать правильно, т.к. она берёт мировые стандарты и переиначивает на свой лад аля "а давайте сделаем тоже самое, но по-своему" ну и поскольку это армия индусов MS, то результат немного предсказуем - получаем перекошенный новый стандарт т.о. она никак не может сделать что-то лучше из того, что уже вылизано и стандартизировано. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 14:04 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
это попользовать? чтобы увидеть другой результат? автор/Gd использовать соглашение о вызовах __cdecl /Gr использовать соглашение о вызовах __fastcall /Gz использовать соглашение о вызовах __stdcall ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 14:07 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
видимо всё дело в этом:автор"sequenced-before" is an asymmetric, transitive, pair-wise relationship between evaluations within the same thread. т.е. выставлять порядок это усложнение надо руками ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 14:11 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
tchingizэто попользовать? чтобы увидеть другой результат? Никак, обломись. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 14:11 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
полудухвидимо всё дело в этом:автор"sequenced-before" is an asymmetric, transitive, pair-wise relationship between evaluations within the same thread. т.е. выставлять порядок это усложнение надо руками и это правильно, т.к. у нас может быть 1+2+3, где порядок нафиг не нужен а мб: 1-2+3, где порядок важен тоже самое f1()+f2()+f3() - сами функции возвращают UB (могут отдать +, а могут -), так что это именно нам решать про порядок C++ всё делает правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 14:15 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
полудуху нас может быть 1+2+3, где порядок нафиг не нужен а мб: 1-2+3, где порядок важен А если 1+(-2)+3 то какова важность порядка? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 14:51 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Dima T, такая же, имхо кстати, в пхп ещё такое есть: авторAND is not the same like && for example: <?php $a && $b || $c; ?> is not the same like <?php $a AND $b || $c; ?> the first thing is (a and b) or c the second a and (b or c) 'cause || has got a higher priority than and, but less than && of course, using always [ && and || ] or [ AND and OR ] would be okay, but than you should at least respect the following: <?php $a = $b && $c; ?> <?php $a = $b AND $c; ?> the first code will set $a to the result of the comparison $b with $c, both have to be true, while the second code line will set $a like $b and THAN - after that - compare the success of this with the value of $c ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 15:44 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Dima T, там имеется ввиду, что 1 - (2+3) != (1 - 2) +3 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 17:35 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
полудухкстати, в пхп ещё такое есть: ИМХО PHP проектировали знатные извращенцы. Логическое И, оно же AND, оно же &&, оно же логическое умножение. Логическое ИЛИ, оно же OR, оно же ||, оно же логическое сложение. А дальше обычно так же как учили в третьем классе: сначала умножение, затем сложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 18:17 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Dima TИМХО PHP проектировали знатные извращенцы. евреи ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 18:48 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Dima TИМХО PHP проектировали знатные извращенцы.PHP не проектировали. Он просто возник как набор скриптов на Перле для своего персонального сайта и допиливался по мере необходимости. Перл, кстати, тоже не проектировали - оно само получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 21:18 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
tchingiz, порядок вызовов функций в С недетерминирован. просто хотя бы потому, что оптимизатором вызовы могут быть (и будут в 90% простых случаев) выкинуты совсем ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 23:10 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
tchingizэто попользовать? чтобы увидеть другой результат? автор/Gd использовать соглашение о вызовах __cdecl /Gr использовать соглашение о вызовах __fastcall /Gz использовать соглашение о вызовах __stdcall А есть IDE свободное для c у MS? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 01:40 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
конечно Вася, всякие экпресс и коммунити едишны ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 23:39 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Siemarglпорядок вызовов функций в С недетерминирован. просто хотя бы потому, что оптимизатором вызовы могут быть (и будут в 90% простых случаев) выкинуты совсем Даже при сборке в дебаге небольшое оптимизаторство есть Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2018, 08:06 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
это нормально, что на примере Код: plaintext 1. 2. 3.
g++ выдает 0, а ms 19 года выдает 1? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2021, 00:44 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
tchingiz это нормально, что на примере Код: plaintext 1. 2. 3.
g++ выдает 0, а ms 19 года выдает 1? авторBecause of the side-effects involved, built-in increment and decrement operators must be used with care to avoid undefined behavior due to violations of sequencing rules. так что просто не надо такой код писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2021, 00:51 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
ZyK_BotaN так что просто не надо такой код писать. это я догадываюсь. Я полазил по ссылкам Зива нашел авторi = i++ + 1; // undefined behavior мой пример проще, решил переспросить. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2021, 00:57 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Сорри, ссылки Сибирякова ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2021, 01:02 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
tchingiz это нормально, что на примере Код: plaintext 1. 2. 3.
g++ выдает 0, а ms 19 года выдает 1? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2021, 08:53 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
ZyK_BotaN tchingiz это нормально, что на примере Код: plaintext 1. 2. 3.
g++ выдает 0, а ms 19 года выдает 1? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2021, 08:54 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
a guest tchingiz это нормально, что на примере Код: plaintext 1. 2. 3.
g++ выдает 0, а ms 19 года выдает 1? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Код: plaintext 1. 2.
https://overcoder.net/q/135824/предопределенный-макрос-c-11 g++ (GCC) 11.1.0 Copyright (C) 2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2021, 23:46 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
tchingiz 201703 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 08:23 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
ZyK_BotaN tchingiz это нормально, что на примере Код: plaintext 1. 2. 3.
g++ выдает 0, а ms 19 года выдает 1? Ваше слово, товарищ маузер! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 10:13 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
tchingizВаше слово, товарищ маузер! "ms 19-го года" не поддерживает стандарт С++17. Сурпрайз?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 13:29 |
|
выполнить пример с инкрементом не на компиляторе MS ++
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov tchingizВаше слово, товарищ маузер! "ms 19-го года" не поддерживает стандарт С++17. Сурпрайз?.. последние 25 лет мне кажется, что когда ms шото поддерживает, то это странно и подозрительно ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2021, 23:54 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017157]: |
0ms |
get settings: |
12ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
823ms |
get tp. blocked users: |
1ms |
others: | 388ms |
total: | 1294ms |
0 / 0 |