2014-10-11 23 views
0

我的代码如下: int cread(int * xp) { return(xp?* xp:0); }如何使用条件数据传输创建函数?

使用gcc我得到没有条件数据传输的汇编代码,我知道这是因为它可能试图从空地址读取。所以,如何通过修改原始代码来使用条件数据传输来获取汇编代码?

回答

1

然后解除引用空指针的可能性。确保指针在解除引用前有效。例如:

int cread(int *xp) 
{ 
    static const int zero = 0; 
    return *(xp ? xp : &zero); 
} 

我的编译器生成以下代码(其他人可能会发生变化):

movl 4(%esp), %eax 
movl $zero.1723, %edx 
testl %eax, %eax 
cmove %edx, %eax 
movl (%eax), %eax 
ret 
+0

非常感谢您! – Zhao 2014-10-11 12:12:21

相关问题