面试题总结
宏定义
#define 标识符 字符串
- 2019年面试题
下面代码段的输出结果是什么?输出该结果的原因是?
#define X a + b
int main(int argc, char *argv[])
{
int a = 1, b = 1;
printf("%d\n", X * X);
return 0;
}
代码相当于
int main(int argc, char *argv[])
{
int a = 1, b = 1;
printf("%d\n", (a + b) * (a + b));
return 0;
}
输出结果为: 4
在宏体中,如果宏参数前加个#,那么在宏体扩展的时候,宏参数会被扩展成字符串的形式。
- 2018年面试题
分析以下代码段,解释输出的结果。
#define YEAR 2018
#define LEVELONE(x) "XiyouLinux "#x"\n"
#define LEVELTWO(x) LEVELONE(x)
#define MULTIPLY(x,y) x*y
int main(int argc, char *argv[])
{
int x = MULTIPLY(1 + 2, 3);
printf("%d\n", x);
printf(LEVELONE(YEAR));
printf(LEVELTWO(YEAR));
}
代码相当于:
#define YEAR 2018
#define LEVELONE(x) "XiyouLinux "#x"\n"
#define LEVELTWO(x) LEVELONE(