C语言中define的用法
2018-01-05 15:41
204 查看
1 .最简单且最常见的define用法
编译器在预处理程序时,会将程序中所有的N用100来替换,换言之,不同于const常量,define其实本质上对文本内容的替换。
下面是define和const的区别:
define是宏定义,程序在预处理阶段将用define定义的内容进行了 替换 。因此在程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。
而const定义的常量,在程序运行时,存在常量表中,且系统为它分配内存。
define定义的常量,预处理时只是直接进行了替换,因此在编译时不能进行数据类型检验。
而const定义的常量,在编译时进行严格的类型检验,可以避免出错。
define定义表达式时要注意“边缘效应”。
例如:
2 .用define定义函数
举个例子:
结果:
3.14*1+2*1+2 = 3.14+2+2 = 7.14
重要的事情再说一遍:宏其实就是一个简单的文本替换!
3 .不常用的define用法
x##y表示x连接y
- 比如: int n = Conn(123,456);
- 结果: n=123456;
- char* str = Conn(“asdf”, “adf”);
- 结果: str = “asdfadf”;
而#@x,其实就是给x加上单引号,结果返回一个const char。
- 比如:char a = ToChar(1);
- 结果:a=’1’;
做个越界试验 char a = ToChar(123);结果是a=’3’; 但是如果参数超过四个字符,编译器就会报错!
至于#x,就是给x加上双引号
比如:char* str = ToString(123132);
结果:str=”123132”;
4 .定义宏和取消宏
定义宏使用#define
取消宏定义使用#undef
#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<stdio.h> #define PI 3.14 #define S(r) PI*r*r int main(void) { printf("area = %f", S(1+2)); rerturn 0; }
结果:
3.14*1+2*1+2 = 3.14+2+2 = 7.14
重要的事情再说一遍:宏其实就是一个简单的文本替换!
3 .不常用的define用法
#define Conn(x,y) x##y #define ToChar(x) #@x #define ToString(x) #x
x##y表示x连接y
- 比如: int n = Conn(123,456);
- 结果: n=123456;
- char* str = Conn(“asdf”, “adf”);
- 结果: str = “asdfadf”;
而#@x,其实就是给x加上单引号,结果返回一个const char。
- 比如:char a = ToChar(1);
- 结果:a=’1’;
做个越界试验 char a = ToChar(123);结果是a=’3’; 但是如果参数超过四个字符,编译器就会报错!
至于#x,就是给x加上双引号
比如:char* str = ToString(123132);
结果:str=”123132”;
4 .定义宏和取消宏
定义宏使用#define
取消宏定义使用#undef
相关文章推荐
- C语言之define用法总结(转)
- C语言中define的用法总结
- C语言之define用法总结
- C语言中define的用法
- 【C语言】语法-typedef用法及与define的区别
- C语言中define的用法
- c语言define中##用法---ffmpeg
- C语言define用法详解(转)
- C语言中typedef和define的用法
- C语言中define的用法
- c语言define的用法
- C语言中define与inline的一些小区别和用法
- C语言中define的用法
- C语言中少见的用法(一):define
- C语言中define的用法
- C语言中define的用法
- C语言中少见的用法(二):define
- C语言中define的用法
- C语言中常用库函数及其用法-memest()
- 浅谈c语言中转义字符的用法及注意事项