代码之家  ›  专栏  ›  技术社区  ›  Filip Frącz

如何使用预处理器在编译时计算和存储哈希值?

  •  1
  • Filip Frącz  · 技术社区  · 16 年前

    我有一个本地C++程序,它使用“事件队列”来执行不同线程上的函数。我在堆上分配了一个“event”类,并将它放在我的一个线程队列中执行。

    这一切都很好,但很难追溯这些“事件”的起源。我希望每个“事件”存储一些有关它的来源的信息。现在我用的是内在的 _ReturnAddress()

    当然,我不想为拥有这些弦付出代价。

    有没有办法让预处理器建立并转储到文件的映射

    或者计算一个非常短的文件名散列,这样我就可以在运行时使用它了?

    欢迎有任何想法。

    3 回复  |  直到 9 年前
        1
  •  4
  •   Michael    16 年前

    你可以用的身份证 __COUNTER__.

    http://msdn.microsoft.com/en-us/library/b0084kay(VS.80).aspx :

    展开为以0开头的整数 每次递增1

    __FILE__ __LINE__ 可用于跟踪事件的分配位置。

        2
  •  3
  •   ralphtheninja    16 年前

    编写自己的预处理器。

    不必那么难,只需解析.cpp文件并搜索您自己定义的一些语法。找到它时,将文件名和行(预处理器必须计算新行数)追加到某个日志文件中。不过,它必须将自己的宏扩展到c++中。将所有内容写入临时文件,然后将其传递给“真正的”编译器。

    干杯!

        3
  •  1
  •   jwfearn    16 年前

    Boost.Preprocessor . 这是一组只用于头文件的宏,用于使用标准C预处理器执行功能强大的任务。

    这是相当复杂的(我不声称理解它),但我认为它可以做你想做的。文件 here here