【发布时间】:2021-05-28 00:32:20
【问题描述】:
我正在寻找扩展我在 c 头文件中的宏,但到目前为止我还获得了一个标准库。我的 ~200 行文件扩展为 60k 行文件(其中 ~30k 行是空白),其中我只想使用扩展后的原始 ~200 行。
有没有允许我不扩展标准库的标志?
目前使用的命令:cl myHeader.h /E > __test.h
扩展到我处理的标头中的行引用示例(省略扩展代码):
#line 688 "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional\\VC\\Tools\\MSVC\\14.16.27023\\include\\string"
我的最终用例是解析扩展的标头,我相信(但不能确定)大多数宏都是简单的 #define FOO 42 类型扩展,用于填充数组大小。如果我无法让cl 停止插入标准库,我还有其他选择吗?
在最坏的情况下,我可以从底部向上工作并将文件剪辑到 #line <num> <path> 与我的文件路径不匹配,但这似乎很不雅。
在 Windows 上使用 MSVC。
【问题讨论】:
-
A) 向我们展示您正在谈论的文件或重现问题的最小版本。 B) 除非您
#include某些东西,否则您通常不会得到扩展,在这种情况下,您显然会有更多的行。 -
您是否尝试提供与标准库同名的空头文件并更改包含搜索路径列表?这听起来像是一个 hack,但你想要它,它只会用于此目的。要分离这些头文件,您应该将它们放在一个自己的目录中。
-
仅出于预处理目的,您可以简单地注释掉包含的库。或者至少这适用于许多其他编译器,不确定 MSVC。
-
@Lundin 你是对的,根本原因是
#include <string>。我没有想过取消它,认为它会导致错误。 (文件中的一个函数是使用std::string)。预处理器似乎根本不介意。谢谢,您应该/应该将其设置为答案而不是评论。
标签: c c-preprocessor