我正在尝试编写自定义 printf 函数。
void debug_print(const char *fmt, ...)
{
const char *p;
va_list argp;
int i;
double f;
char *s;
char fmtbuf[80];
va_start(argp, fmt);
for(p = fmt; *p != '\0'; p++)
{
if(*p != '%')
{
uart_putchar(*p);
continue;
}
switch(*++p)
{
case 'c':
...
break;
case 'f':
f = va_arg(argp, float); // ??????
s = dtostrf(f, 10, 6, fmtbuf);
uart_puts(s);
break;
...
// then in the main part of the program
debug_print("%f", 123.456);
当程序到达 f = va_arg(argp, float) 时,它永远不会从该行返回。如果我将其更改为 f = va_arg(argp, double) 它返回 0。
在设备(ATMega328P)和 Atmel Studio 6 模拟器上都试过,结果相同。
听起来像是与链接器选项有关?
更新:
现在只需要找出为什么va_arg(argp, double)
返回 0。