如何解决 C 标准头文件中的编译器内置类型

How to work around compiler built-in types in C standard header files

我正在开发 C 的静态分析工具。我需要通过 C 预处理器传递正在分析的代码,以便该工具可以看到库函数原型、类型定义等。不幸的是,两者都在 Mac OS Linux 发行版上的 X 和 gcc,一些标准头文件引用编译器内置类型,例如我的工具不知道的 __builtin_va_list。有没有人对如何解决这个问题有任何建议。一种可能性,如果它在某处可用,将是一组香草味的头文件,这些头文件生成严格符合标准的 C。头文件不必映射到任何 ABI,因为该工具不需要编译和 运行 代码:它们只需要提供 C 标准所承诺的 API。如有任何建议,我们将不胜感激。

无需查找一组 standard 标准头文件,您可以只使用一组具有预期名称的空文件,并通过编译器预处理器传递源代码-Idirectory 选项。您的语法分析工具应该能够处理剩余的符号。

除了 -dI 之外,还有一个预处理器选项会很有用,可以保留 #include 而不是 处理它们。

同时,您可以尝试使用我的 nolibc 存储库中的包含文件。