C语言的宏运算符
这题还是MSC决赛的一题,原题题干已经交代得很清楚了(我懒……),直接搬过来好了 宏&宏函数简介 宏是 C 语言中极为强大,也极具魅力的一个功能。宏为极其贴近机器语言的 C 提供了一定程度上的元编程能力。程序员们能够利用宏来减少代码中的重复,或是解决一些条件编译之类的问题。 宏、或者说 C 预处理器,实际上干的事情就是进行字符串拼接和处理,其中比较简单的就是普通的字符串替换: #define abc efg #define one 1 #define INT int #define DENGYU INT abc DENGYU one; // -> int efg = 1; 为了防止替换的过程无法结束,通过这种方式定义的宏在它的(和它的递归)展开内容中是不会再对其本身进行替换 #define abc abc efg #define efg abc hij #define hij efg abc abc // (所有东西都可以被展开) -> abc efg // (abc 不会再被展开) -> abc abc hij // (abc efg 不会再被展开) -> abc abc efg abc 另一种则是宏函数,规则稍微复杂一些。宏函数首先会对它的参数进行宏展开,如果参数中存在 # 或者 ## (具体作用后面会提及), 那么不再对这个参数进行递归展开,然后再按照宏的定义将参数进行拼接,得到这一次展开的结果;之后对结果进行下一次展开。这次展开和之前说的展开规则类似,不再会对生成的结果中相同的宏函数进行展开。...