0
我的代码如下: int cread(int * xp) { return(xp?* xp:0); }如何使用条件数据传输创建函数?
使用gcc我得到没有条件数据传输的汇编代码,我知道这是因为它可能试图从空地址读取。所以,如何通过修改原始代码来使用条件数据传输来获取汇编代码?
我的代码如下: int cread(int * xp) { return(xp?* xp:0); }如何使用条件数据传输创建函数?
使用gcc我得到没有条件数据传输的汇编代码,我知道这是因为它可能试图从空地址读取。所以,如何通过修改原始代码来使用条件数据传输来获取汇编代码?
然后解除引用空指针的可能性。确保指针在解除引用前有效。例如:
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
非常感谢您! – Zhao 2014-10-11 12:12:21