Описание тега sequence-points

Точки выполнения программы, в которых гарантировано, что все побочные эффекты предыдущих оценок будут выполнены, и побочные эффекты от последующих оценок еще не проявились.
2 ответа

c - Почему я = ++ я вызываю неопределенное поведение?

Я понимаю, что C использует понятие точек последовательности для определения неоднозначных вычислений, и что = Оператор не является точкой последовательности. Однако я не вижу никакой двусмысленности в выполнении заявления i = ++i Насколько я понима…
0 ответов

Неопределенное поведение и "точки последовательности" в C++17

На этот вопрос мы очень хорошо ответили. Какие новые возможности в C++17? Но я думаю, что эта конкретная тема может быть освещена специально, поскольку она сложна и такие вопросы (о i = i++;) все еще спрашивают каждый день (хотя это не рекомендуется…
10 янв '18 в 14:51
2 ответа

Точка последовательности после оператора возврата?

В своем ответе на вопрос я объяснил, что произошло, когда postfix ++ использовался для глобальной переменной в той же строке, что и return заявление. В информативном приложении C к C11 говорится, что сразу после return и ссылается на нормативную гла…
26 мар '13 в 12:58
3 ответа

Почему gcc не выдает предупреждение при неопределенном поведении в коде внутри?

Я только что прочитал этот FAQ по C++ о неопределенном поведении и точках последовательности и немного поэкспериментировал. В следующем коде gcc-4.5.2 выдает предупреждение только в строке, упомянутой в комментарии к коду, хотя предыдущая строка тож…
26 ноя '11 в 10:19
3 ответа

Обмен значениями двух переменных без использования третьей переменной в C?

Я нашел следующий фрагмент кода: #include <stdio.h> int main(void) { int x=10,y=15; x=x+y-(y=x); printf("x=%d y=%d",x,y); return 0; } Это на самом деле меняет местами переменные Кто-нибудь может объяснить мне, как код меняет местами переменную…
15 ответов

Why are these constructs using pre and post-increment undefined behavior?

#include <stdio.h> int main(void) { int i = 0; i = i++ + ++i; printf("%d\n", i); // 3 i = 1; i = (i++); printf("%d\n", i); // 2 Should be 1, no ? volatile int u = 0; u = u++ + ++u; printf("%d\n", u); // 1 u = 1; u = (u++); printf("%d\n", u); /…
2 ответа

C++ cout секвенирование побочных эффектов

Предположим, следующий фрагмент кода: #include <iostream> using namespace std; char one() { cout << "one\n"; return '1'; } char two() { cout << "two\n"; return '2'; } int main(int,char**) { // 1: cout << one() << '\n' &…
23 авг '14 в 20:52
4 ответа

Порядок этого оператора C хорошо определен?

Название немного расплывчато, так как я не знаю, как определить этот вопрос. Это связано со следующим кодом: for (match = root, m_matchBase = match->requestedBase, m_matchLength = match->length; match != NULL; match = match->next, m_matchBa…
17 янв '14 в 19:05
1 ответ

Перемещается дважды в одном полном выражении

Предположим, у кого-то есть функция со следующим прототипом template<typename T> std::unique_ptr<T> process_object(std::unique_ptr<T> ptr); Функция может возвращать (перемещенную версию) объект, который был передан ей, или совершен…
23 янв '15 в 14:18
1 ответ

Последовательность точек в Java

Существует ли гарантированная последовательность выполнения следующего кода Java: int i = getA() + getB(); Является getA() всегда выполняется раньше getB()как мог ожидать любой средний человек?
04 дек '10 в 09:54
6 ответов

Значение x*f(x) не определено, если f изменяет x?

Я посмотрел на кучу вопросов, касающихся точек последовательности, и не смог выяснить, если порядок оценки для x*f(x) гарантируется, если f модифицирует xи отличается ли это для f(x)*x, Рассмотрим этот код: #include <iostream> int fx(int &…
10 сен '15 в 14:22
1 ответ

Неопределенное поведение или: есть ли у Swift точки последовательности?

В C/C++ второе утверждение в int i = 0; int j = i++ + i++ + ++i; вызывает оба неуказанное поведение, потому что порядок вычисления операндов не определен, и неопределенное поведение, потому что побочные эффекты на тот же объект i не секвенированы от…
21 сен '15 в 22:11
1 ответ

Как этот код C может оцениваться как 0, а не 0 одновременно?

Я пробовал несколько конкурсов на запутывание кода (я знаю, что это не очень хорошая практика программирования, но это была проблема, с которой я и мой друг соревнуемся, поэтому нет необходимости указывать на очевидное), и, в одном из них, Я обнаруж…
26 фев '15 в 00:25
0 ответов

Разрушение порядка объектов после оптимизации

Я пытаюсь рассчитать несколько вызовов функций в моем программном обеспечении для сравнения различных реализаций. Чтобы получить желаемое время, я читаю регистр PCCNTR моего процессора ARM A9 в начале и конце функции, используя структуру RAII. Пробл…
02 ноя '12 в 10:32
2 ответа

* * ++ я вызываю неопределенное поведение в C++03?

В другом ответе было указано, что до C++11, где i является int, затем используйте выражение: *&++i вызвало неопределенное поведение. Это правда? На другом ответе было небольшое обсуждение в комментариях, но это кажется неубедительным.
1 ответ

Запрос новичка о программе на C, стек вызовов функций, точка последовательности (секвенирование)

Приведенный ниже код отображает разные результаты при компиляции и запуске на Code::Blocks. void sum(int a,int b){ printf("a=%d b=%d\n",a,b); } int main(){ int i=1; sum(i=5,++i); printf("i=%d\n\n",i); /***********************/ i=2; sum(i=5,i++); pri…
1 ответ

Заказ печати в С

int x=10; printf("%d %d %d\n",x,++x,x++); printf("%d %d %d",x,x+20,x+30); Это вывод на печать как 12 12 10 12 32 42 Почему порядок в первом printf находится в обратном порядке, а почему нет во втором операторе printf? я нашел в книге, что C использу…
14 апр '14 в 20:02
3 ответа

Неопределенное поведение в c/ C++: i++ + ++i vs ++i + i++

Представьте, что у нас есть код ниже: int i = 1; int j = i++ + ++i; Я знаю, что это неопределенное поведение, потому что перед точкой с запятой, которая является точкой последовательности, значение i был изменен более одного раза. Это означает, что …
1 ответ

Гарантирует ли стандарт C++11, что временный объект, переданный функции, будет уничтожен после завершения функции?

Как известно, этот стандарт C++11 гарантирует, что временный объект, переданный функции, будет создан до вызова функции: гарантирует ли стандарт C++11, что временный объект, переданный функции, будет создан до вызова функции? Но гарантирует ли станд…
7 ответов

Этот код хорошо определен?

Этот код взят из обсуждения, продолжающегося здесь. someInstance.Fun(++k).Gun(10).Sun(k).Tun(); Этот код хорошо определен? Является ++k в Fun() оценивалась раньше k на солнце ()? Что, если k пользовательский тип, а не встроенный? И чем вышеупомянуты…