首页 > 解决方案 > char 的 va_arg 故障

问题描述

我尝试使用va_arg来检索函数中的下一个参数。它适用于所有类型(包括 char*),但 char:

void test1(char t,...) {
  va_list args;
  va_start(args, t);
  if(t=='c') Serial.println(va_arg(args, char));
  else if(t=='n') Serial.println(va_arg(args, int));
  va_end(args);  
}

测试:

int n = 42;
char c = '?';

test1('n', n); // prints 42
test1('c', c); // prints nothing!

你能验证/解释吗?代码在 9600 波特的 Arduino Uno 上运行。

标签: cvariablesparameter-passing

解决方案


小于的参数在传递给可变参数函数之前会被int提升int,因此此类函数应将参数检索为 type int


推荐阅读