Можно ли получить определенное состояние ошибки, когда поток C++ открывает сбои?

Похоже, причина вашей проблемы в обновленном тексте вопроса:

ОБНОВЛЕНИЕ : этот фрагмент кода является частью гораздо большего проекта, и нет смысла в разработке проекта. У меня есть пользовательский Makefile с опцией LDFLAG

"-mfloat-abi=hard -mfpu=fpv4-sp-d16 -u _printf_float".

Предполагая, что эти параметры являются изменениями по сравнению со значениями по умолчанию, вы говорите компилятору сгенерировать код для другого ABI из экосистемы библиотеки вашего набора инструментов , Код, сгенерированный для main, ожидает результата atof в регистре с плавающей запятой, но atof использует стандартный ABI, который передает аргументы с плавающей запятой и возвращаемые значения в регистрах общего назначения. Таким образом, main просто читает все ненужное, оставленное в регистрах с плавающей запятой, используемых для возвращаемых значений.

Посмотрите, исчезнет ли ваша проблема, если вы удалите -mfloat-abi=hard. Если это так, вы, вероятно, нашли свою проблему. Вам нужно либо создать набор инструментов и библиотек для ABI на жестком диске, либо придерживаться принятого по умолчанию соглашения о вызовах не на жестком диске.

13
задан Joe Ganley 20 November 2008 в 00:28
поделиться

2 ответа

Можно посмотреть на флаги iOS (badbit, eofbit, failbit, goodbit) по общим причинам. Тестирование желания является более легким использованием iOS:: плохо (), iOS:: сбой (), iOS:: eof (), или iOS:: хороший (). Поток может также быть установлен генерировать исключения на ошибке, с помощью iOS:: исключения ().

Подробное Сообщение об ошибке ввода-вывода может быть доступным в некоторых реализациях, как Вы указываете для GCC. Вам, вероятно, придется полагаться на это поведение для различных компиляторов. Если существует шанс для нескольких компиляторов, удостоверьтесь, что протестировали и вероятно включали операторы препроцессора для проверки текущего компилятора и т.д.
Насколько я знаю, единственное другое место, оно обсуждено, находится в предложенных дополнениях TR2.

4
ответ дан 2 December 2019 в 02:11
поделиться

В Visual Studio fopen и т.п. устанавливает значение последнего кода ошибки. Это может быть получено с GetLastError (). Результатом будет одно из этих значений.

0
ответ дан 2 December 2019 в 02:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: