首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要了解编译器如何解释&tcb ->上下文。

我需要了解编译器如何解释&tcb ->上下文。
EN

Stack Overflow用户
提问于 2015-03-11 08:41:42
回答 2查看 143关注 0票数 2

我在实现非抢占式调度时遇到了初始化TCB的代码。

代码语言:javascript
复制
typedef struct TCB_t {
    struct TCB_t     *next;
     struct TCB_t     *prev;
     ucontext_t      context;
} TCB_t;


void init_TCB (TCB_t *tcb, void *function, void *stackP, int stack_size)
{
    memset(tcb, '\0', sizeof(TCB_t));
    getcontext(&tcb->context);              
    tcb->context.uc_stack.ss_sp = stackP;
    tcb->context.uc_stack.ss_size = (size_t) stack_size;
    makecontext(&tcb->context, function, 0);  // context is now cooked
}

我知道上面代码中的get context带有一个指向context...but的指针,无法理解compiler...as &tcb -> context或&(tcb -> context)如何解释&tcb->context .....

EN

回答 2

Stack Overflow用户

发布于 2015-03-11 12:03:03

它被解释为&(tcp->context)->&具有更高的优先级。您可以找到运算符优先级列表here

票数 3
EN

Stack Overflow用户

发布于 2015-03-11 12:19:01

代码语言:javascript
复制
getcontext(&tcb->context);

使用您所展示的代码中的线索,您可以推断它只能被解释为&(tcb->context)

(&tcb)->context不会有任何意义。我们知道,在这个函数中,参数被声明为TCB_t *tcb,这意味着(&tcb)TCB_t **类型。只能在指向结构的指针上使用->,而不能在双指针上使用。

因此,必须将其解释为&(tcb->context)。使用getcontext的函数原型,您可以通过查看它接受一个ucontext_t *参数来确认这一点,该参数是您获取TCB_tcontext成员(&)的地址时获得的参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28976638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档