2013-07-19 2 views
-1
#include<stdio.h> 
int main() 
{ 
int i=2; 
printf("%d %d\n",++i,++i); 
return 0; 
} 

Выходной сигнал 4 4 на gcc. Пожалуйста, объясните этот выводНеопределенный выход с префиксным оператором в C

+5

Вы сами писали, что это «неопределенный» в названии. Что еще нужно объяснить? – Paulpro

+0

так каждый раз ответы на такие вопросы были бы непредсказуемыми? – user2492165

+0

@ user2492165 да, вы можете сказать, что .. – VoidPointer

ответ

2

Это неопределенное поведение. Порядок оценки параметров функции не определен стандартом C.

Соответствующие разделы: C99 Раздел 6.5.2.2 Пункт 10

Порядок оценки функционального назначения, фактические аргументы, и подвыражения в пределах фактических аргументов не определено, но есть точка последовательности перед фактическим вызовом.

также в разделе C99 6.5.2.2 Пункта 10

Существует точка последовательности после оценки функции целеуказателя и фактических аргументов, но до фактического вызова. Каждая оценка в вызывающей функции (включая другие вызовы функций) , которая иначе не секретируется отдельно до или после . Выполнение тела вызываемой функции является неопределенным , упорядоченное относительно выполнения вызываемой функции.94)

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