1 .最简单且最常见的define用法
#define N 100
编译器在预处理程序时,会将程序中所有的N用100来替换,换言之,不同于const常量,define其实本质上对文本内容的替换。
下面是define和const的区别:
- define是宏定义,程序在预处理阶段将用define定义的内容进行了 替换 。因此在程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。
而const定义的常量,在程序运行时,存在常量表中,且系统为它分配内存。 - define定义的常量,预处理时只是直接进行了替换,因此在编译时不能进行数据类型检验。
而const定义的常量,在编译时进行严格的类型检验,可以避免出错。 - define定义表达式时要注意“边缘效应”。
例如:
#define N 1+2 float a = N/2.0; /* 按照常规做法,可能会认为结果是3/2 = 1.5 但是实际上,结果应该为1+2/2.0 = 2.0 若想要实现3/2,则#define N (1+2) 即为避免边缘效应,一定要加!括!号! */
2 .用define定义函数
举个例子:
#include
#define PI 3.14 #define S(r) PI*r*r int main(void) { printf("area = %f", S(1+2)); rerturn 0; }
重要的事情再说一遍:宏其实就是一个简单的文本替换!
3 .不常用的define用法
#define Conn(x,y) xy #define ToChar(x) #@x #define ToString(x) #x
做个越界试验 char a = ToChar(123);结果是a=’3’; 但是如果参数超过四个字符,编译器就会报错!
至于#x,就是给x加上双引号
- 比如:char* str = ToString();
- 结果:str=””;
4 .定义宏和取消宏
定义宏使用#define
取消宏定义使用#undef
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199419.html原文链接:https://javaforall.net
