Выходной прогноз - PullRequest
       7

Выходной прогноз

0 голосов
/ 17 августа 2011

что должно быть результатом: (и почему?)

printf("%d",2.37);

Очевидно, printf - это функция с переменным числом аргументов, и мы никогда не сможем узнать тип списка переменных аргументов.поэтому мы всегда должны указывать спецификаторы формата вручную.таким образом, 2.37 будет храниться как двойной в соответствии со стандартами IEEE, будет выбираться и печататься в целочисленном формате.Но вывод равен 0. В чем причина?

1 Ответ

3 голосов
/ 17 августа 2011

Это неопределенное поведение. Вы передаете аргумент double в функцию, которая ожидает получить int из своих макросов varargs, и нет никаких сведений о том, к чему это приведет. Теоретически, он может даже потерпеть крах (с соглашением о вызовах, которое определяет, что переменные аргументы разных типов передаются по-разному или в разных стеках).

...