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