Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.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,我有一个计数器列表,我在每个时钟中断时检查每个计数器。每当计数器过期时,我需要将所有过期的计数器返回到调用代码,以便知道哪个计数器过期。做同样的事情,最优雅的方式是什么? 我正在考虑在数组中设置每个标志并进行检查。但我发现这是在检查柜台到期时进行的又一轮检查 每当时钟滴答声过期时,就会调用函数CheckCounterExpire。下面不处理返回,因为这是我的查询 void CheckCounterExpiry() { Node *prev, *temp; if (head == NULL) {

我有一个计数器列表,我在每个时钟中断时检查每个计数器。每当计数器过期时,我需要将所有过期的计数器返回到调用代码,以便知道哪个计数器过期。做同样的事情,最优雅的方式是什么? 我正在考虑在数组中设置每个标志并进行检查。但我发现这是在检查柜台到期时进行的又一轮检查

每当时钟滴答声过期时,就会调用函数CheckCounterExpire。下面不处理返回,因为这是我的查询

void  CheckCounterExpiry()
{
Node *prev, *temp;
if (head == NULL)
{
    return;
}
else
{
    /*Check for counter and delete, return set of deleted id types as to signal            which got deleted*/
    prev = NULL;
    temp = head;        
    while (temp->next != NULL) 
    {
        if (clocktick== temp->target)
        {
            if (prev == NULL)
            {
                head = NULL;
            }
            /* I need to return the list of temp->counterId here. how to do it best?*/
            prev->next = temp->next;
            free(temp);

        }
        else
        {
            prev= temp;
            temp = temp->next;
        }

    }

  }

}

范式转变。不要收缩
CheckCounterExpiry()中的链接

由于您使用全局值
head
与您的ISR(中断服务例程
void CheckCounterExpiry()
)通信当前活动的时钟,我建议将另一个字段
bool active
添加到
节点
。在
CheckCounterExpiry()
中,当时钟过期时,将其设置为false

因此,
CheckCounterExpiry()
仅更新
Active
字段。让另一个例程,例如
节点*GetExpiredClock()
使用停用的时钟。它得到1个过期时钟(如果有),否则返回NULL。当
节点
完成时,它会将列表缩小1。如果需要,请多次致电。此例程可能需要中断保护,以确保未调用
checkcounterexpiration()

此外,内部
checkcounterexpiration()
更改如下。这可以防止错误的时钟滴答声干扰一切

// if (clocktick== temp->target)
if (clocktick >= temp->target)

优雅是C?我不知道这个问题的存在。看看《代码高尔夫》(code golf)的这个(封闭式)挑战:我只是在寻找答案。优雅可能是个错误的词。@C0D3R我只是开玩笑。这是漫长的一天。:)@西格温尼安·索雷特:)