成员参考基础类型'int'不是结构体或联合体。

4

I have the following code:

void setup()
{
address_t sp, pc;

sp = (address_t)stack1 + STACK_SIZE - sizeof(address_t);
pc = (address_t)f;


sigsetjmp(jbuf[0],1);
(jbuf[0]->__jmpbuf)[JB_SP] = translate_address(sp);<----ERROR
(jbuf[0]->__jmpbuf)[JB_PC] = translate_address(pc);<----ERROR
sigemptyset(&jbuf[0]->__saved_mask);<----ERROR     


sp = (address_t)stack2 + STACK_SIZE - sizeof(address_t);
pc = (address_t)g;

sigsetjmp(jbuf[1],1);
(jbuf[1]->__jmpbuf)[JB_SP] = translate_address(sp);<----ERROR
(jbuf[1]->__jmpbuf)[JB_PC] = translate_address(pc);<----ERROR
sigemptyset(&jbuf[1]->__saved_mask);<----ERROR

}

有什么想法可以解释这个错误的含义吗?

3
如果您认为随意更改堆栈指针(SP)或程序计数器(PC)是安全和/或可移植的,请重新考虑。请注意不要改变原来的意思,使内容更通俗易懂,但不要添加解释或其他内容。 - Jonathan Leffler
这篇帖子似乎与编程有关:https://dev59.com/OlnUa4cB1Zd3GeqPYTU_ - culurienneldoreth
1个回答

3
sigsetjmp()函数的第一个参数sigjmp_buf类型是不透明(opaque)的,也就是说,这里sigjmp_buf并非您的代码所期望的那种类型。在这种情况下,显然它只是一个简单的int,而不是指向结构体的指针。
如果您想要操作sigjmp_buf的内部细节,您需要了解该特定平台上实现的方式(显然,这段代码将不具备可移植性)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接