本帖最后由 过路人1024 于 2019-12-17 11:30 编辑
其实我主要是搞不懂为什么这个函数能让编译器报这个警告:Warning[Pe224]: the format string requires additional arguments C:\Users\Administrator\Documents\IAR_Project\stdarg_test\main.c 7
我知道这个警告什么意思、是什么原因导致的。
--------------------------------------------------------------------------------------
#include <stdio.h>
void main(void)
{
printf("test%d");
while(1);
}
--------------------------------------------------------------------------------------
按理说函数printf第二个参数之后都是可变参数,根据语法规则完全可以不加的吧。但是它为什么能凭借%d来判断没有第二个参数是有问题的呢?(甚至能判断有没有可变参数)这个在预处理阶段还是编译阶段发现的?编译器给出的警告或错误应该都是根据C语法规则判断的吧,理论上printf("test%d")也是符合语法的吧?
我知道可变参数的用法,但是据我所知C库stdarg并不能判断可变参数的数量,然而printf感觉不仅能判断,还能给出警告。所以这到底怎么实现的呢?
|