企业网站文案外包,网站开发职责,网站建设捌金手指下拉八,用fw做明星的网站学习宏编程 这里细节
#define 宏删括(T) 宏删括_ T
//如果T有括号,自动就删除了.
#define 宏删括_(...) __VA_ARGS__延时拼接:
#define 宏连(A,B) 宏连_(A,B)
//先展开
#define 宏连_(A,B) A##B
//再拼接.这样:
#define FOO(N) 宏连(foo_, N)
FOO(bar) // - foo_bar
…学习宏编程 这里细节
#define 宏删括(T) 宏删括_ T
//如果T有括号,自动就删除了.
#define 宏删括_(...) __VA_ARGS__延时拼接:
#define 宏连(A,B) 宏连_(A,B)
//先展开
#define 宏连_(A,B) A##B
//再拼接.这样:
#define FOO(N) 宏连(foo_, N)
FOO(bar) // - foo_bar
FOO(BAR()) // - foo_bar否则:
#define FOO(SYMBOL) foo_ ## SYMBOL
#define BAR() barFOO(bar) // - foo_bar
FOO(BAR()) // - foo_BAR()
//如果宏参数用于拼接标识符(或取字面量),则不会展开它.1,预扫描,展开参数. 2,展开时替换,再二次扫描,继续展开宏.
#define 宏逗如(N) 宏如(N,宏逗,宏空的)()
//先返回宏函数,再延迟调用.
#define 宏逗如(N) 宏如(N,宏逗(),宏空的())
//这样会错的,会立即调用出错参数错误.#__VA_ARGS__可取参数字面,且可为空. 可选:
#define log(format, ...) printf(LOG: format __VA_OPT__(,) __VA_ARGS__)
//最后逗号是可选的.变长为空,则不要逗号
宏取几(1,(foo,bar))//-bar
//可以取元组.要加上:
#define FOO(P, T) 宏如(P,宏取几1,宏取几0)TFOO(0, (foo, bar)) // - foo
FOO(1, (foo, bar)) // - bar
FOO(0, (baz)) // - baz