宏替换只是简单的文本替换,将宏定义的内容展开到使用宏符号的地方,看看是否合乎语法,如果符合,则正确,如果不符合,则错误。这个宏这样写,就没问题:#define MAX(A,B,C) (((A)>(B)?(A):(B))>(C)?((A)>(B)?(A):(B)):(C))