Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化C中计数器的原始代码需要更好的解决方案_C - Fatal编程技术网

优化C中计数器的原始代码需要更好的解决方案

优化C中计数器的原始代码需要更好的解决方案,c,C,我在代码中为系统中的一个进程使用了三个计数器c1、c2和c3。在某些点,我需要触发每个计数器,并在特定点结束它(targetc1、targetc2、targetc3)。因此,我使用三个标志cf1、cf2和cf3来检查每当触发进程时计数器标志是否设置为打开,然后检查计数器目标是否达到终点。有没有比使用三个标志更好的方法?我可能需要在我的代码中使用更多的计数器,但我认为不应该超过6个计数器。 下面给出了p1进程的代码片段来解释我的问题 /*P1 process variables*/ static

我在代码中为系统中的一个进程使用了三个计数器c1、c2和c3。在某些点,我需要触发每个计数器,并在特定点结束它(targetc1、targetc2、targetc3)。因此,我使用三个标志cf1、cf2和cf3来检查每当触发进程时计数器标志是否设置为打开,然后检查计数器目标是否达到终点。有没有比使用三个标志更好的方法?我可能需要在我的代码中使用更多的计数器,但我认为不应该超过6个计数器。 下面给出了p1进程的代码片段来解释我的问题

/*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];