【发布时间】:2013-03-05 06:12:15
【问题描述】:
我有关注structs:
typedef struct stack {
void* ss_sp;
size_t ss_size;
// ...
} stack_t;
typedef struct ucontext {
ucontext_t* uc_link;
stack_t uc_stack;
// ...
} ucontext_t;
typedef struct mythread_type {
ucontext_t context;
int ID;
int status;
} mythread_t;
现在我有一个数组如下:
mythread_t mythreads[100];
我想避免使用
mythreads[0].context.uc_stack.ss_size
出于可读性原因。
现在我想知道以下两个代码块是否等效:
-
区块 1
ucontext_t c=mythreads[0].context; getcontext(&c); c.uc_stack.ss_size=1024; c.uc_stack.ss_sp=malloc(1024); -
第 2 块
ucontext_t* c=&(mythreads[0].context); getcontext(c); (c->uc_stack).ss_size=1024; (c->uc_stack).ss_sp=malloc(1024);
我想要的是 mythreads[0] 堆栈的上下文来分配 1024 个字节。
【问题讨论】:
-
对不起,我累了,很快就回复了。这些是不等价的。
-
我不明白你为什么不使用 mythreads[0].context.uc_stack.ss_size .....出于可读性的原因,它更好
-
@KinjalPatel 我刚刚发现由于某种原因 mythreads[0].context.uc_stack.ss_size 也给出了编译器错误。在 C99 中是否合法?
-
它完全有效....错误是什么?