相关疑难解决方法(0)

`({...})`如何返回一个值?

我最近发现了这个GCC宏:

#define max(a,b) \
   ({ typeof (a) _a = (a); \
       typeof (b) _b = (b); \
     _a > _b ? _a : _b; })
Run Code Online (Sandbox Code Playgroud)

在我看到这段代码之前我没有意识到,一段代码{...}可以某种方式在C中返回值
.1)你能给我一个暗示它是如何工作的吗?

虽然,我通常可以通过滥用逗号运算符来实现相同的结果:

#define max(a,b) \
    (typeof (a) _a = (a), \
     typeof (b) _b = (b), \
     (_a > _b ? _a : _b)) 
Run Code Online (Sandbox Code Playgroud)

或者如果只是为了副作用,我会使用 do { ... } while(0)

2)这样做的首选方式是什么?

c gcc

11
推荐指数
2
解决办法
397
查看次数

像返回值的宏一样的函数

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

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

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

c macros

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

c ×2

gcc ×1

macros ×1