visual studio 2010-c ++项目中的预处理器

Yak*_*kov 6 c++ visual-studio-2010 c-preprocessor

在.cpp文件中我使用了一个宏mmData1.我在项目中搜索并看到这个宏是在几个文件中定义的.(即有几个.h文件有行#define mmData1)

我想知道VS10中是否有能力检查预处理器从哪个文件获取宏值

gwi*_*rrr 4

如果 Intellisense 不知道,则没有直接的方法。然而,还有一些间接的方法。假设你的宏名称是SOME_MACRO

  1. #define SOME_MACRO每次put实例之后#error Defined here,右键单击源文件并选择Compile。如果编译器返回错误,请删除引发错误的指令并再次编译。此错误的最后一个实例将尾随源中可见的定义。

  2. 让每个指令定义SOME_MACRO将其定义为其他内容,然后在源文件中,在所有包含之后添加以下行:

    #define STRINGIZE(x) STRINGIZE2(x)
    #define STRINGIZE2(x) #x
    #pragma message("SOME_MACRO is expanded as: " STRINGIZE(SOME_MACRO))
    
    Run Code Online (Sandbox Code Playgroud)

    编译源文件;您应该在构建日志中看到该值。

  3. 侵入性较小的方式:将这些行放在每个后面#define SOME_MACRO

    #pragma push_macro("STRINGIZE")
    #pragma push_macro("STRINGIZE2")
    #define STRINGIZE(x) STRINGIZE2(x)
    #define STRINGIZE2(x) #x
    #pragma message("Defining at " __FILE__ ":" STRINGIZE(__LINE__))
    #pragma pop_macro("STRINGIZE")
    #pragma pop_macro("STRINGIZE2")
    
    Run Code Online (Sandbox Code Playgroud)

    或者,如果您不需要行号:

    #pragma message("Defining at " __FILE__)
    
    Run Code Online (Sandbox Code Playgroud)

    编译文件。查看构建日志,您应该能够说出SOME_MACRO定义的顺序。