2013-02-21 6 views
2

У меня есть несколько строк кода, для которого я could't понять причину этого вывода ..Причина выхода следующего кода:

int main() 
{ 
int a=5; 
float b=10.5,c=11.0; 
printf("%d",b); 
printf("\n%d",c); 
printf("\n%f",a); 
return 0; 
} 

O/P в Visual C++: - 0, 0, 0,000000

компиляторов GCC: - 0,0, 11,000000

ответ

10

Когда вы вызываете переменную функцию, такую ​​как printf, float s проходит продвижение по службе до double. int s передаются как есть. printf поэтому ожидает double, когда вы пишете %f, и int, когда вы пишете %d.

Не давая ему double, но int, поэтому неопределенное поведение. Аналогичным образом, передача double, когда функция ожидает, что int также не определена.

Как обычно, неопределенное поведение означает «что-либо может случиться». Никогда, никогда не полагайтесь на неопределенное поведение.

+0

Отличное объяснение, спасибо. Не было бы лучшего объяснения, чем этот .. :) – user1606191

4

Вы играете с неопределенным или неопределенного поведения. Не уверен, какой из них он есть. На моем Debian с gcc 4.7.2 я получаю -780714744, 4195886, 11.000000 на выходе.

+1

+1, Все они не определены. (a) отправка поплавка в спецификацию формата, ожидающую int, (b) то же самое, что и (a), и, наконец, (c) отправка 'int' в ожидающую спецификацию' float'. Они все ошибаются и UB. – WhozCraig

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