Я только что прочитал этот часто задаваемый вопрос SO C ++ о неопределенном поведении и точках последовательности и экспериментировал немного. В следующем коде gcc-4.5.2
выдает предупреждение только в строке, упомянутой в комментарии к коду, хотя одна строка перед этим также показывает неопределенное поведение, не так ли? Вы не можете сказать, какой операнд сложения выполняется первым (поскольку +
не является точкой последовательности). Почему gcc не выводит мне предупреждение и в этой строке?
int i=0;
int j=0;
int foo(void) {
i=1;
return i;
}
int main(void) {
i = i + foo();
j = j + (j=1); //Here is a rightly warning
return 0;
}
Спасибо за помощь.