CPP宏:提供实例化/调用次数的计数器

Man*_*uel 2 c++ c-preprocessor

我想有一个C预处理器宏,它知道到目前为止该宏的实例化/宏调用的数量.例:

int main() {
  printf("%d\n", MACRO());
  printf("%d\n", MACRO());
}
Run Code Online (Sandbox Code Playgroud)

应该打印

0
1
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?

请注意,这是足够转发给一个函数如下建议.它应该在以下环境中工作:

// global variable
std::vector<bool> calls_hit;

#define OTHER_MACRO() \
{ \
    const int counter = MACRO(); \
    calls_hit.resize(std::max(calls_hit.size(), counter)); \
    calls_hit[counter] = true; \
}
Run Code Online (Sandbox Code Playgroud)

Kon*_*lph 5

为什么这必须是一个宏?无论如何,你可以在宏中用静态计数器包装一个函数:

int count_calls() {
    static count = 0;
    return count++;
}

#define MACRO() count_calls()
Run Code Online (Sandbox Code Playgroud)

  • @Manuel:无法用宏完成.模板元编程可能会有所帮助,但是您需要提供更多细节.特别是,我的解决方案仍然适用于您在问题中发布的新代码; 没有编译时知识是必要的. (2认同)