MST

星途 面试题库

面试题:C++中宏定义作用域相关问题

在C++中,宏定义的作用域是如何确定的?请举例说明不同位置定义的宏其作用域范围有何不同。
20.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 宏定义的作用域
    • 在C++中,宏定义的作用域从定义点开始,到所在文件末尾结束,除非用#undef指令提前终止其作用域。
  2. 不同位置定义宏的作用域示例
    • 全局定义
#include <iostream>
// 全局宏定义
#define PI 3.14159
int main() {
    std::cout << "PI value: " << PI << std::endl;
    return 0;
}
  • 在上述代码中,PI宏定义在文件开头,属于全局定义。其作用域从定义点开始,贯穿整个main函数,直到文件末尾。
  • 局部定义
#include <iostream>
int main() {
    // 局部宏定义
    #define LOCAL_VAL 10
    std::cout << "LOCAL_VAL value: " << LOCAL_VAL << std::endl;
    // 在这里LOCAL_VAL是有效的
    #undef LOCAL_VAL
    // 从这里开始LOCAL_VAL不再有效,如果尝试使用会报错
    // std::cout << "LOCAL_VAL value: " << LOCAL_VAL << std::endl; // 这行代码会导致编译错误
    return 0;
}
  • 在上述代码中,LOCAL_VAL宏定义在main函数内部,属于局部定义。其作用域从定义点开始,到使用#undef LOCAL_VAL终止。如果在#undef之后尝试使用LOCAL_VAL,会导致编译错误。