# define do_div(n, base) ({ \
unsigned int __base = (base); \
unsigned int __rem; \
__rem = ((unsigned long long)(n)) % __base; \
(n) = ((unsigned long long)(n)) / __base; \
__rem; \
})
.......
tmp[i++] = digits[do_div(num, base)];
...........
do_div(n,base)的值是_rem?
1
loveyu 2015-10-13 09:19:53 +08:00
这个只是宏定义而已,不是函数
|
2
wizardoz 2015-10-13 09:22:13 +08:00
可以的, C 语言的参考书中很容易找到说明。但是这种用法有点晦涩,而且感觉不是十分必要,所以我从来没有用过。
|
3
ooxxcc 2015-10-13 09:32:36 +08:00
楼上的没仔细看……
似乎返回的是最后一句的返回值? |
4
ooxxcc 2015-10-13 09:32:48 +08:00
楼上指一楼
|
5
thinkIn OP 找到资料了
http://stackoverflow.com/questions/7117427/c-block-becomes-expression-int-a-1-int-b-2-ab-equals-3 有评论说 ” This is a GCC extension called Statement Expressions. It's not standard C.“ 这不是标准 C 的语法。 |
7
firemiles 2015-10-13 10:50:15 +08:00
还以为可以像 ruby 一样,所有语句都有返回值,这样就能用宏写一些函数了
|
8
starp128 2015-10-13 12:33:01 +08:00
词法分析时由程序块的对应的规则决定它的值。
|
9
pright 2015-10-13 12:53:02 +08:00
嗯, GCC 的扩展语法,能实现出更像函数表现的宏
|