gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:26 25 4
gpt4 key购买 nike

在 .cpp 文件中,我使用了一个宏 mmData1。我在项目中进行了搜索,发现这个宏在几个文件中定义。(即有几个 .h 文件具有 #define mmData1)

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

最佳答案

如果 Intellisense 不知道那么就没有直接的方法。但是,有间接的方法。假设您的宏名称是 SOME_MACRO

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

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

    #define STRINGIZE(x) STRINGIZE2(x)
    #define STRINGIZE2(x) #x
    #pragma message("SOME_MACRO is expanded as: " STRINGIZE(SOME_MACRO))

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

  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")

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

    #pragma message("Defining at " __FILE__)

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

关于c++ - visual studio 2010-c++ 项目中的预处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11729646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com