其他分享
首页 > 其他分享> > C编译时状态变量

C编译时状态变量

作者:互联网

我有兴趣做这样的事情:

 void ISR()
 {
    MEASURE_TIME(counters)
    do_something();
    MEASURE_TIME(counters)
    do_something_else();
    MEASURE_TIME(counters)
    do_another_thing();
    MEASURE_TIME(counters)
    do_one_last_thing();
    MEASURE_TIME(counters)
 }

这将以某种方式在编译时转换为:

 void ISR()
 {
    counters[0] = measure_time();
    do_something();
    counters[1] = measure_time();
    do_something_else();
    counters[2] = measure_time();
    do_another_thing();
    counters[3] = measure_time();
    do_one_last_thing();
    counters[4] = measure_time();
 }

有没有办法用预处理器(似乎不太可能)或模板来维护和增加整数状态?

我知道我可以这样做:

 void ISR()
 {
    int i = 0;
    counters[i++] = measure_time();
    do_something();
    counters[i++] = measure_time();
    do_something_else();
    counters[i++] = measure_time();
    do_another_thing();
    counters[i++] = measure_time();
    do_one_last_thing();
    counters[i++] = measure_time();
 }

但是有一个编译时索引还有一些额外的价值(这里很难解释为什么没有进入某些专有细节)

编辑:这是在嵌入式系统上,并且__COUNTER__不可用(我只是尝试过:__COUNTER__不是由我的编译器或预处理器定义的),我不确定我是否可以让Boost工作,至少不是整个.

解决方法:

__COUNTER__宏是你的朋友.

标签:c,templates,compile-time,c-preprocessor
来源: https://codeday.me/bug/20190729/1574319.html