-
- У меня printf("%f", double) печатает правильное значение. printf("%f", float) не правильное. Как я понял, это из -за того, что va_arg(float) gcc рассматривает как va_arg(double). Gcc собирал сам. Как победить? - ++(16.12.2011 10:26)
- Я могу предположить, что libc и программа с разными опциями компилятора собирались. - fk0(16.12.2011 12:44)
- Должно быть va_arg(double). Компилятор, в соответствии со стандартом, должен привести float к double при вызове функции с переменным числом аргументов. Проц случайно не big-endian? Тогда va_arg(float) будет вынимать не ту половину от double. Сергей Борщ(13 знак., 16.12.2011 12:06)
- Проц big endian. Как собирать gcc-cross? При компиляции программы указывается опция -EB. - ++(16.12.2011 13:35)
- Замените _double = va_arg(arg, float); на _double = va_arg(arg, double); И все должно заработать. - Сергей Борщ(16.12.2011 15:08)
- Проц big endian. Как собирать gcc-cross? При компиляции программы указывается опция -EB. - ++(16.12.2011 13:35)
- У меня printf("%f", double) печатает правильное значение. printf("%f", float) не правильное. Как я понял, это из -за того, что va_arg(float) gcc рассматривает как va_arg(double). Gcc собирал сам. Как победить? - ++(16.12.2011 10:26)