当前位置: 代码迷 >> 综合 >> error: lvalue required as unary ‘’ operand
  详细解决方案

error: lvalue required as unary ‘’ operand

热度:31   发布时间:2024-01-15 10:41:44.0

源码:

printf("Now time is:%s\n",asctime(gmtime(&time(NULL))));

提示错误:

error: lvalue required as unary ‘&’ operand


原因分析:

time(NULL)返回的是一个long型,为什么会出现这个错误,如果你深入汇编里,可以看到函数返回值一般存储在eax寄存器里,如果你写了这样的语句,像int a=f(),则调用完函数后的下一句就是mov 内存地址,eax,否则跟返回空值没什么区别,因此你上面这个&time(NULL)就相当于&void,因些会报需要左值
举例如下:

C/C++ code
?
1
2
3
4
5
6
7
8
9
10
int  f()
{
     return  2;
}
int  main()
{
     int  a=f();
     f();
     return  0;
}

关键的汇编代码如下:
C/C++ code
?
1
2
3
4
5
6
7
00401076   rep stos    dword ptr [edi]
11:        int  a=f();
00401078   call        @ILT+0(f) (00401005)
0040107D   mov         dword ptr [ebp-4],eax
12:       f();
00401080   call        @ILT+0(f) (00401005)
13:        return  0;

  相关解决方案