C代码中经常用到#define定义一个标识符来表示一个常量,这种用法在C++中也可以使用。当然,在C++中更推荐的方法是使用关键字const来创建一个只读的符号常量。关于const在之后再讨论,本篇就#define的理解来进行一些说明和记录。
1.用#define定义常量的方法叫做宏定义,所定义的符号叫做宏。 定义的方式为#define 标识符 常量 注意在结尾不需要加分号。
2.#define定义的符号是不占用内存的,只是一个临时的符号,预编译后这个符号就不存在了。
3.#define和#include的写法是一样的,所以#define是一个预处理器编译指令,使用预处理器处理,预处理器遇到#define指令时会查找对应的标识符,然后将标识符替换成其所对应的常量。例如: #define MAX 123456 这里定义了一个符号常量MAX,其对应的常量值为123456,预处理器在之后的代码中遇到MAX时会将其替换成123456。
4.预处理器查找独立的标识,跳过嵌入的标识。例如: #define MAX 123456 在之后的代码中遇到了一个标识IMAXP,预处理器会跳过,而不会将其替换成I123456P。
5.在设计一个C和C++都可以使用的头文件中,必须使用#define,而不可以使用const。
6.宏定义 #define 一般都写在函数外面,与 #include 写在一起。当然,写在函数里面也没有语法错误,但通常不那么写。#define 的作用域为自 #define 那一行起到源程序结束。如果要终止其作用域可以使用 #undef 命令,格式为:undef 标识符。
以上为我对#define理解的一些简单梳理,其中3 4条关于#define的工作机制问题,6关于#define的作用域问题。