优化C中计数器的原始代码需要更好的解决方案
我在代码中为系统中的一个进程使用了三个计数器c1、c2和c3。在某些点,我需要触发每个计数器,并在特定点结束它(targetc1、targetc2、targetc3)。因此,我使用三个标志cf1、cf2和cf3来检查每当触发进程时计数器标志是否设置为打开,然后检查计数器目标是否达到终点。有没有比使用三个标志更好的方法?我可能需要在我的代码中使用更多的计数器,但我认为不应该超过6个计数器。 下面给出了p1进程的代码片段来解释我的问题优化C中计数器的原始代码需要更好的解决方案,c,C,我在代码中为系统中的一个进程使用了三个计数器c1、c2和c3。在某些点,我需要触发每个计数器,并在特定点结束它(targetc1、targetc2、targetc3)。因此,我使用三个标志cf1、cf2和cf3来检查每当触发进程时计数器标志是否设置为打开,然后检查计数器目标是否达到终点。有没有比使用三个标志更好的方法?我可能需要在我的代码中使用更多的计数器,但我认为不应该超过6个计数器。 下面给出了p1进程的代码片段来解释我的问题 /*P1 process variables*/ static
/*P1 process variables*/
static int c1,c2,c3;
static int targetc1,targetc2,targetc3;
static int cf1,cf2,cf3;
p1startingfunction()
{
int a;
if(cf1 == 1)
{
c1++;
if(c1==targetc1)
/*counter reached do something*/
c1trigger();
}
if(cf2 == 1)
{
c2++;
if(c2==targetc2)
/*counter reached do something*/
c2trigger();
}
if(cf3 == 1)
{
c3++;
if(c3==targetc3)
/*counter reached do something*/
c3trigger();
}
}
这方面仍有很大的改进空间,但这个答案专门用于最小化代码重复 话虽如此,您可以使用阵列:
/*P1 process variables*/
static int c[3];
static int targetc[3];
static int cf[3];
static void (*ctrigger[3])(void);
p1startingfunction()
{
int a, i;
for (i = 0; i < 3; i++) {
if (cf[i] == 1) {
c[i]++;
if (c[i] == targetc[i]) {
/* counter reached do something */
ctrigger[i]();
}
}
}
}
然后创建一个结构数组
struct counter counters[3];
我猜想整数溢出是被忽略的,或者你没有考虑过吗?触发器重置计数器吗?如果是这样的话,那么将计数器初始化为目标值并减小它们,然后在它们达到0时调用触发器可能会有一些意义。不过,通过优化,最终可能不会有什么不同。然后按照下面答案中的建议将所有计数器放入一个数组中。。。
struct counter counters[3];