c++ - 如何在 msvc 预处理器中打印宏?

标签 c++ gcc visual-c++ c-preprocessor

有没有办法使用 msvc 或 gcc 在预处理器文件中查看我的#defines?

这里有一些代码:

#include <iostream>

#define asdasdadda asdsad    

int main()
{
    #ifdef asdasdadda
        std::cout << "yes\n";
    #else
        std::cout << "no\n";
    #endif

    return 0;
}

我是这样用cl编译的:

$ cl main.cpp /C /P

这是预处理后的 main.i 的尾部:

#line 2 "main.cpp"




int main()
{

        std::cout << "yes\n";


#line 13 "main.cpp"

    return 0;
}

这是我期望的:

#line 2 "main.cpp"


#define asdasdadda asdsad

int main()
{

        std::cout << "yes\n";


#line 13 "main.cpp"

    return 0;
}

gcc 的行为是一样的...

最佳答案

有一个未记录的编译器开关,/d1PP,它将在预处理器输出中保留宏定义。如果您使用 /P/d1PP 编译 Rado 的示例,您将获得以下输出文件:

#line 1 "q.cpp"
#define BLAH 1

int main()
{

      cout << "BLAH defined" << endl;


#line 10 "q.cpp"
}

请注意,此开关未记录在案。因此,它不受官方支持。它可能随时被删除,或者它的行为可能随时被改变。它可能有错误。使用风险自负等等。

关于c++ - 如何在 msvc 预处理器中打印宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28554362/

相关文章:

在 Ubuntu 上针对 libusb-dev 进行编译

c++ - std::chrono 纳秒计时器适用于 MSVC,但不适用于 GCC

c++ - 在 Visual C++ 中使用 makefile 构建 hello_world 时遇到问题

c++ - 在C++上接收 “Error: expected an identifier”的 “==”

c++ - 抽象基类或派生类中的类变量?

c++ - 我怎样才能得到一个char&的地址?

c++ - 在抽象基类中重载运算符的正确方法是什么?

linux - 显示寄存器内容

c - 调试时没有错误或警告

c++ - 函数模板和 "normal"函数奇怪的不一致