每日一博 | 避免这 7 个误区,才能让【宏】削铁如泥
关注、星标公众号 ,直达精彩内容 ID:技术让梦想更伟大 作者:李肖遥 语法错误 当使用参数调用宏时,会将参数替换为宏主体,并与其他输入文件一起检查结果,以进行更多的宏调用,可以将部分来自宏主体和部分自变量的宏调用组合在一起。例如, #definetwice(x)(2*(x))#definecall_with_1(x)x(1)call_with_1(twice)//x=1→twice(1)→(2*(1)) 宏定义不必带有括号,通过在宏主体中编写不平衡的开放括号,可以创建一个从宏主体内部开始但在宏主体外部结束的宏调用。例如, #definestrange(file)fprintf(file,"%s%d",…strange(stderr)p,35)→fprintf(stderr,"%s%d",p,35) 组合宏调用的功能可能会很有用,但是在宏主体中使用不平衡的开放括号只会造成混淆,应该避免。 运算符优先级问题 在大多数宏定义示例中,每次出现的宏参数名称都带有括号,并且另一对括号通常会包围整个宏定义,这是编写宏最好的方式。举个例子 #defineceil_div(x,y)(x+y-1)/y ...