C 从函数返回一组值的最佳方法
我有一个计数器列表,我在每个时钟中断时检查每个计数器。每当计数器过期时,我需要将所有过期的计数器返回到调用代码,以便知道哪个计数器过期。做同样的事情,最优雅的方式是什么? 我正在考虑在数组中设置每个标志并进行检查。但我发现这是在检查柜台到期时进行的又一轮检查 每当时钟滴答声过期时,就会调用函数CheckCounterExpire。下面不处理返回,因为这是我的查询C 从函数返回一组值的最佳方法,c,C,我有一个计数器列表,我在每个时钟中断时检查每个计数器。每当计数器过期时,我需要将所有过期的计数器返回到调用代码,以便知道哪个计数器过期。做同样的事情,最优雅的方式是什么? 我正在考虑在数组中设置每个标志并进行检查。但我发现这是在检查柜台到期时进行的又一轮检查 每当时钟滴答声过期时,就会调用函数CheckCounterExpire。下面不处理返回,因为这是我的查询 void CheckCounterExpiry() { Node *prev, *temp; if (head == NULL) {
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我只是开玩笑。这是漫长的一天。:)@西格温尼安·索雷特:)