当我使用C++编译时,这一行代码可以通过编译,但是在C中不行:
gmtime(&(*(time_t *)alloca(sizeof(time_t)) = time(NULL))); //使用alloca创建一个左值
我对这种差异感到惊讶。甚至在C++中也没有警告。
当我指定gcc -x c
时,会出现以下消息:
playground.cpp:25:8: error: lvalue required as unary '&' operand
gmtime(&(*(time_t *)alloca(sizeof(time_t)) = time(NULL)));
^
这里的 &
不仅是一个取地址符,为什么在 C 和 C++ 中会有所不同?
虽然我可以在 C 中使用复合字面量,但是否有可能修改我的语法使其在 C 和 C++ 中都能工作?
&
,似乎在于(*(time_t *)alloca(sizeof(time_t)) = time(NULL))
是否为左值。 - user253751time_t t = time(NULL); gmtime(&t);
- user253751time_t
值仅被使用一次)。我发现C语言中的复合字面量非常方便,但是在C++中我无法使用它。 - cshu