大家好我在Linux的内核中找到了这个函数:
inline task_t *context_switch(task_t *prev, task_t *next) {
...
switch_to(prev, next, prev);
return prev;
}
这个函数正在进行上下文切换,我的问题是为什么这个函数应该是内联而不是宏,例如,提前感谢...
答案 0 :(得分:4)
它可能不是一个宏,因为执行此操作的宏将评估prev和next两次,当它们可能是具有副作用的表达式时。此外,经过一些搜索后,我发现switch_to(在某些平台上)是一个宏,它是大括号中的一个语句,因此无法返回一个要在表达式中使用的值。
我在这里找到了一些信息:https://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:task_switching
答案 1 :(得分:2)
当C编译器不执行内联函数时,宏是一种生成内联函数的方法。与内联函数相反,宏不会进行编译时参数验证。因此内联功能更适合维护。