【问题标题】:How to figure out what value MSVC is using for a preprocessor macro如何确定 MSVC 用于预处理器宏的值
【发布时间】:2010-11-23 10:50:14
【问题描述】:

我试图在 MSVC6 上使用 /D 编译器选项来定义字符串,但是在它周围使用双引号有些奇怪。为了调试这个问题,能够看到预处理器实际上在宏展开的代码中替换了什么值对我来说非常有帮助。有什么办法可以做到这一点吗?我尝试使用“程序集和源代码”创建一个列表文件,但源代码包含原始宏名称,而 ASM 在该行是一些难以理解的乱码。有没有办法在编译时获取宏值?

如果做不到这一点(或者可能更有用),如何使用 /D 选项指定字符串?它需要用双引号代替我的源代码,因为我将它用作字符串文字。

【问题讨论】:

    标签: c++ macros c-preprocessor visual-c++-6


    【解决方案1】:

    有一个选项可以传递给编译器 (/P),它会将预处理器输出写入my_cpp_file.i,您可以在其中查看它。

    【讨论】:

      【解决方案2】:

      MSVC 有一个编译器标志,可让您查看已扩展的所有宏、删除了 cmets 等的预处理源文件 - 就将编译的实际代码而言,整个翻译单元。预处理输出应为您提供您正在寻找的有关宏扩展的洞察力。更多信息here

      【讨论】:

        【解决方案3】:

        对 CL.exe 尝试以下选项之一:

        /E preprocess to stdout
        /P preprocess to file
        

        如果您在 Visual Studio 中构建,您可以在项目属性对话框之一中指定自定义命令行选项。

        【讨论】:

        • /P 完成了这项工作。我想知道为什么这很难用谷歌搜索...此外,对于任何对未来感兴趣的人,似乎(通过反复试验)您可以使用反斜杠转义 /D 字符串中的引号。
        猜你喜欢
        • 1970-01-01
        • 2015-04-17
        • 1970-01-01
        • 1970-01-01
        • 2011-12-14
        • 2011-02-12
        • 2019-10-17
        • 2011-03-16
        • 2011-01-26
        相关资源
        最近更新 更多