
# define do_div(n, base) ({ \ unsigned int __base = (base); \ unsigned nt __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 47jm9ozp 2015-10-13 09:32:36 +08:00 楼上的没仔细看…… 似乎返回的是最后一句的返回值? |
4 47jm9ozp 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 的扩展语法,能实现出更像函数表现的宏 |