2014-01-21 2 views
-1

ЕслиIncrement-декремент с

void main() 
{ 
    int i=2,j=4; 
    i=+++i+j; //is not an error 
    i=---i+j; // is a L-value required error.. 
} 

может кто-нибудь, пожалуйста, объясните подробно концепцию позади нескольких приращений и уменьшений ..

+2

... Пожалуйста, объясните концепцию написания нечитаемого кода –

+0

Что вы намерены делать с этими несколькими приращениями и сокращениями? – ccozad

+0

жаль писать нечитаемый код ... но не могли бы вы объяснить мне в контексте этого вопроса .. –

ответ

0

Я думаю, что синтаксический анализатор не в состоянии разобрать его в формате он хочет это будет. Попробуйте использовать скобки, как показано ниже. Это сработает.

i = - (- i) + j;

+0

Вопрос в том, что отличается от оператора '-' и оператора' + ', который работает первым. – woolstar

+0

точно сэр .. Не могли бы вы объяснить мне, почему первый работает. –

+0

В обоих случаях программа демонстрирует неопределенное поведение, а выход может быть любым. 1. main должен возвращать int не пусто. В C return void - это расширение, которое не все компиляторы поддерживают, делая код не переносимым, в C++ это просто неопределенное поведение. 2. В обоих случаях разрыв части стандарта, который указывает переменную, может быть недоступен более одного раза между точками последовательности, где по крайней мере один из этих обращений должен изменить значение переменных. В стандарте указано, что в таком случае поведение будет неопределенным. Я предлагаю вам посмотреть точки последовательности и неопределенное поведение в Интернете. – Saurabh

Смежные вопросы