面试题答案
一键面试示例代码解决宏冲突
#include <stdio.h>
// 假设在头文件1中定义了宏FOO
#define FOO 10
// 这里模拟另一个头文件也定义了FOO宏,产生冲突
// #define FOO 20
// 使用#undef取消之前定义的FOO宏
#undef FOO
// 重新定义FOO宏以避免冲突
#define FOO 30
int main() {
printf("FOO的值为: %d\n", FOO);
return 0;
}
#undef工作原理
- #undef的作用:
#undef
预处理指令用于取消之前定义的宏。当编译器遇到#undef
后跟宏名时,它会从符号表中移除该宏定义。这样,后续代码中如果再次使用该宏名,编译器不会将其替换为之前定义的宏体。 - 解决宏冲突场景:在上述示例中,假设可能存在两个头文件都定义了
FOO
宏,导致冲突。通过#undef FOO
,可以先取消前面定义的FOO
宏,使得后续重新定义FOO
宏时不会与之前的定义冲突,从而确保程序使用的是期望的宏定义。