va_arg 字符故障

Jan*_*roň 1 c variables parameter-passing

我尝试使用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);  
}
Run Code Online (Sandbox Code Playgroud)

测试:

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

test1('n', n); // prints 42
test1('c', c); // prints nothing!
Run Code Online (Sandbox Code Playgroud)

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

sup*_*cat 6

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