Похоже, причина вашей проблемы в обновленном тексте вопроса:
ОБНОВЛЕНИЕ : этот фрагмент кода является частью гораздо большего проекта, и нет смысла в разработке проекта. У меня есть пользовательский Makefile с опцией LDFLAG
blockquote>"-mfloat-abi=hard -mfpu=fpv4-sp-d16 -u _printf_float".
Предполагая, что эти параметры являются изменениями по сравнению со значениями по умолчанию, вы говорите компилятору сгенерировать код для другого ABI из экосистемы библиотеки вашего набора инструментов , Код, сгенерированный для
main
, ожидает результатаatof
в регистре с плавающей запятой, ноatof
использует стандартный ABI, который передает аргументы с плавающей запятой и возвращаемые значения в регистрах общего назначения. Таким образом,main
просто читает все ненужное, оставленное в регистрах с плавающей запятой, используемых для возвращаемых значений.Посмотрите, исчезнет ли ваша проблема, если вы удалите
-mfloat-abi=hard
. Если это так, вы, вероятно, нашли свою проблему. Вам нужно либо создать набор инструментов и библиотек для ABI на жестком диске, либо придерживаться принятого по умолчанию соглашения о вызовах не на жестком диске.
Можно посмотреть на флаги iOS (badbit, eofbit, failbit, goodbit) по общим причинам. Тестирование желания является более легким использованием iOS:: плохо (), iOS:: сбой (), iOS:: eof (), или iOS:: хороший (). Поток может также быть установлен генерировать исключения на ошибке, с помощью iOS:: исключения ().
Подробное Сообщение об ошибке ввода-вывода может быть доступным в некоторых реализациях, как Вы указываете для GCC. Вам, вероятно, придется полагаться на это поведение для различных компиляторов. Если существует шанс для нескольких компиляторов, удостоверьтесь, что протестировали и вероятно включали операторы препроцессора для проверки текущего компилятора и т.д.
Насколько я знаю, единственное другое место, оно обсуждено, находится в предложенных дополнениях TR2.
В Visual Studio fopen и т.п. устанавливает значение последнего кода ошибки. Это может быть получено с GetLastError (). Результатом будет одно из этих значений.