像返回值的宏一样的函数

pku*_*arn 4 c macros

最近遇到了以下示例,这些示例返回一个寄存器读取__ret但没有返回语句

#define READWORD(offset)       ({ \
                 unsigned short __ret=0;\
                 __ret = readw(offset);\
                 __ret; \
                 })
Run Code Online (Sandbox Code Playgroud)

谷歌是否同样发现像宏这样的功能可以返回值.假设最后一个语句"_ ret"等同于返回一个值是否安全?如果我在" _ret" 之后有另一个更改__ret值的声明怎么办?哪一个会被退回?

Jon*_*ler 8

这是使用名为Statement Expressions的GCC扩展.

您可以使用它,除非您需要移植到GCC(和Clang/LLVM)以外的编译器.