一道关于宏的面试题及解答 【题目】#include <stdio.h> #define SQR(X) X*X int main(int argc, char* argv[]) { int a = 10; int k = 2; int m = 1; a /= SQR(k+m)/SQR(k+m); printf( "%d/n ",a); return 0; } 这道题目的结果是什么? 【解答】典型错误1:SQR(k+m)/SQR(k+m) = 1;最后得到a = 10;原因:#define 只是定义而已,在编译前会将#define定义的内容进行替换,然后进行编译。这一点与函数大不相同。结果认为是10,很可能将SQR这个宏定义当作函数来用了。 典型错误2:进行宏替换,得:a /= (k+m)*(k+m)/(k+m)*(k+m); => a /= (k+m)*1*(k+m); => a = a/9; => a = 1; 原因:宏替换是按照宏定义进行的严格不变的替换,所以上面的