(1) В
Conversion as if by assignment to the type of the function is required
если возвращаемое выражение имеет
другой тип, чем функция, но
нет, если возвращаемое выражение имеет
более широкое значение только из-за широкого
оценка.
Что такое "широкая оценка"? Что значит
это пытаться сказать?
Если вы объявите байтовую переменную или константу, она может быть сохранена как DWORD на 32-битной платформе. Байтовая арифметика также может быть реализована как 32-битная арифметика (широкая оценка). Это не вызывает проблем для целочисленных типов.
(2) в примере
float f (float x) {return x *
0.1f; }
float g (float x) {return x * 0.1;
}
Почему "функция f может возвращать
значение шире, чем float, но функция g
(который использует более широкую константу)
не "?
Это то, что говорит текущий стандарт C: 0,1f может храниться в более широком формате (чем с плавающей запятой), x * 0,1f также может оцениваться в более широком формате, и оператор return не требуется для выполнения преобразования в float и может вернуть результат "как есть". С помощью функции g оператор возврата должен выполнять преобразование из double в float.
В f () x и 0.1f имеют тип float
так что я думаю x * 0.1f тоже float
тип? В g () вероятно рассматривается 0,1
как двойной, так что х * 0,1 является двойной?
Да, это верно для всех 32-битных компиляторов (по крайней мере, я так думаю :)). Но статья посвящена проблеме в целом.
(3) Какая мораль
статья
Стандарт C труден для изучения:)