Member 14068986 Ответов: 4

Каков ответ программы , я получил разные ответы от turbo cpp и dev cpp


#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
    int R,S,n;
    R=45,n=45;
    S=(R--) + (++R);
    cout<<S;
    return 0;
}


Что я уже пробовал:

каков ответ программы, я получил разные ответы от turbo cpp и dev cpp

Mohibur Rashid

Turbo C++? Ты знаешь, сколько ему лет?

4 Ответов

Рейтинг:
2

Patrice T

Цитата:
Каков ответ программы , я получил разные ответы от turbo cpp и dev cpp

В этой программе нет правильного ответа, или все ответы верны.
Это серая зона.
S=(R--) + (++R);

Компилятор волен переписать этот код любым способом, который он считает нужным, независимо от того, как вы его читаете, понимаете, ожидаете. Поэтому каждый компилятор создает свою собственную истину.
Таким образом, множественные операции инкремента/декремента над одной и той же переменной делают код непредсказуемым от компилятора к другому.
Это одна из ловушек языка Си.


Рейтинг:
0

OriginalGriff

Они оба правы; они оба неправы! Видеть здесь: Почему x = ++x + x++ дает мне неправильный ответ?[^]


Рейтинг:
0

CPallini

Цитата:
я получил разные ответы от turbo cpp и dev cpp
Это подсказка, что вы не должны использовать такой код. Подробнее смотрите здесь: с++ неопределенное поведение и последовательность точек - переполнение стека [^].


Рейтинг:
0

KarstenK

потому что вы написали непонятный код в

S=(R--) + (++R);

в нем находятся 3 заявления
1. R--
2. ++R
3. подведите итоги 1. и 2.

Таким образом, компилятор может решить, что делать в первую очередь. Если вы оставили скобки, вы получите два дополнительных случая ребер.

попробуйте какой-нибудь более четкий код
R--;
S = R;
++R;
S += R
Это должно привести к одинаковому значению для всех компиляторов.