IAR Embedded Workbench: stdarg.h 未预处理

IAR Embedded Workbench: stdarg.h isn't preprocessed

我正在构建一个 c 语言应用程序,使用 IAR Embedded Workbench for ARM 7.40
我正在使用 libclang 来获取我的 C 代码的 AST(抽象语法树)表示。 为此,我正在预处理我的源代码。
问题出在 #include <stdarg.h> - 它没有展开

原始代码片段:

int before_stdarg = 1;
#include <stdarg.h>
int after_stdarg = 2;
va_list args;
#include "func1.h"
...

预处理代码段:

#line 1 "source\App\func1.c"
int before_stdarg = 1;
#include <stdarg.h>
int after_stdarg = 2;
va_list args;
#line 1 "C:\testAppC\source\App\func1.h"
...

正在查看stdarg.h:

#ifdef __ICCARM__
#error "Reading built-in header-file. If you used upper case, try #include <stdarg.h>"
#endif

第二个问题:va_list定义在哪里?
注释掉 #include <stdarg.h> 会导致编译错误:Error[Pe020]: identifier "va_list" is undefined

我错过了什么?

更新,由于评论:
Q 不适用于 IAR EWARM 新手,因为标记的答案可以暗示。
该问题发生在任何最小的 hello-world 示例中,只需添加 #include <stdarg.h>,甚至不使用它!
预处理命令是常规构建命令的复制粘贴,添加 --preprocess=l PATH_TO_PREPROCESSED_OUTPUT_FILE

PS C:\testAppC> iccarm.exe source\App\func1.c -DSTM32L476xx -DUSE_HAL_DRIVER -I"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.2\arm\CMSIS\Include" -I"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.2\arm\inc\c" -I"source\App" -I"source\Device" --char_is_signed --cpu=Cortex-M4 --debug --dlib_config  "C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.2\arm\INC\c\DLib_Config_Normal.h" --endian=little --fpu=None --no_clustering --no_code_motion --no_cse --no_inline --no_scheduling --no_tbaa --no_unroll -On -e -o testAppC\Obj --preprocess=l C:\testAppC\.aurora\tmp\func1.c.i

在 iccarm 7.40 中,文件系统中的 stdarg.h 只是一个存根文件。可变参数机制内置于编译器中并由 #include <stdarg.h> 指令激活。这也是为什么在使用 --preprocess 命令行选项时不扩展此 include 指令的原因。这是最近更改的,从 iccarm 8.40 开始,编译器使用文件系统中的 stdarg.h

一般来说,<...> 中指定的 headers 不需要是磁盘上的单独文件,但可以内置到编译器中,并且只需要在编译的预处理阶段扩展 就好像 它们是代码粘贴在 #include 指令的位置。

事实上,标准说 other include 形式 "..." includes source files,所以标准本身甚至根本不使用术语 "header file" - 只有 headerssource files.