2012-04-26 56 views
3

我有以下代码:成员引用的基本类型“诠释”不是一个结构或联合

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 

} 

的这个错误是什么意思你知道吗?

+1

什么是'jbuf'? – 2012-04-26 15:22:28

+2

如果你认为它是安全的和/或可移植的,像堆栈指针(SP)或程序计数器(PC)一样,你需要再考虑一次。 – 2012-04-26 15:46:56

+0

这篇文章似乎相关: http://stackoverflow.com/questions/6683451 – culurienneldoreth 2013-06-18 19:50:55

回答

3

sigjmp_buf(这是什么sigsetjmp()作为第一个参数)的类型是不透明的—这不是你的代码期望它在这种情况下。显然,这里是一个简单的int,而不是指向结构体的指针。

如果您想仔细研究sigjmp_buf的内部,您需要了解它是如何在特定平台上实现的(显然代码不可移植)。

相关问题