黑马程序员——c语言宏定义
来源:互联网 发布:淘宝店铺要交税吗 编辑:程序博客网 时间:2024/06/05 21:14
宏定义可以分为2种:不带参数的宏定义 和 带参数的宏定义。
下面就开始介绍一下宏定义:
1:不带参数的宏定义
1>宏定义的声明(后面不需要加逗号):
#define 宏名 字符串
eg: #define a 5
右边的字符串也可以省略,比如#define ABC
2>宏定义的使用:
1.宏定义是在编译预处理时,将源程序中所有"宏名"替换成右边的"字符串",常用来定义常量。
2.示例代码:
#define PI 3.14 #include "stdio.h" int main() { double r = 10.0 ; double circleArea = 2 * PI * r ; printf("circleArea is %d\n", circleArea); return 0; }
该代码定义了一个PI的宏,在编译预处理之后,第6行中的PI就会变成3.14。输出结果为:c is 62.8
3>注意点
1.宏名一般用大写字母,以便与变量名区别开来,
2.在编译预处理用字符串替换宏名时,不作语法检查,只是简单的字符串替换,只有在编译的时候才对已经展开宏名的源程序进行语法检查。
eg:#define NAME jackint main(){ int a = NAME ; return 0;}
在进行预编时不会检查语法,在int a = NAME,中会把NAME换为jack,当程序在编译的时候会报错。
3.宏定义可放在程序的任何地方,可以在不需要宏定义的时候使用#undef
eg:
#include <stdio.h>int main(){ char *name = "jack" ; #define COUNT 4 for( int i = 0 ; i < COUNT ; i++) { printf("%c" , name[i] ) ; } #undef }
4.宏定义的生命周期是从宏定义的声明到文件结束(若有#undef则是从宏定义开始到#undef)
2:带参的宏定义
1>带参的宏定义声明
#define 宏名(参数列表) 字符串
eg : #define PINGFANG( (a) ) ( a*a )
2>带参宏定义使用
eg:
#define PINGFANG( (a) ) (a*a)//定义一个参数的宏 #include "stdio.h" int main() { int c = PINGFANG(5);//该行会被替换成 int c = 5*5 ; printf("c is %d\n", c); return 0; }
3>使用注意:只作简单的字符和参数的替换,不进行任何计算操作。
1.定义宏时,一般用一个小括号括住字符串的参数。
eg:(不用括号括住)
#define pingfang(a) (a*a) #include "stdio.h" int main() { int c = pingfang(5+5); printf("c is %d\n", c); return 0; }
结果:
c is 35
分析:
由于宏定义只是对定义的宏进行替换,而不做运算
所以a会被替换成5+5,则执行宏运算为5+5*5+5
所以执行完c的结果为35
2.同理在宏名和参数列表之间不能有空格,否则空格后面的所有字符串都作为替换的字符串 0 0
- 黑马程序员——c语言宏定义
- 【黑马程序员】【C语言】宏定义
- 黑马程序员——C语言——宏定义、条件编译、文件包含等
- 黑马程序员——C语言日志——宏定义#define
- 黑马程序员——C语言基础篇---宏定义、数组、字符串和函数
- 黑马程序员-c语言宏定义以及外部变量
- 黑马-C语言-宏定义
- 【黑马程序员】iOS学习之路——C语言之宏定义、条件编译和条件包含及typedef
- 黑马程序员——C语言指针
- 黑马程序员——C语言基础
- 黑马程序员——C语言基础
- 黑马程序员—C语言—从零开始
- 黑马程序员—C语言—指针
- 黑马程序员——C语言数组
- 黑马程序员——C语言指针
- 黑马程序员——C语言指针
- 黑马程序员——C语言基础
- 黑马程序员——C语言总结
- 11.Eclipse安装了genymotion 没有图标显示?
- 分别修改Cube每个面的贴图UV(Unity3D开发之十八)
- [CF 297E]Mystic Carvings解题报告
- 平衡二叉树之一(基本性质、查询、添加)
- HDOJ 2899 Strange fuction(二分,求导。。)
- 黑马程序员——c语言宏定义
- GitLab 官方安装文档中文翻译
- RANSAC算法简介
- java exception 详解
- [2014-08-21 19:36:41 - Other] Warning: No instrumentation runner found for the launch, using a
- 题目8:找出这个1000位数字中连续13个数字乘积的最大值。
- j2me写的方块小游戏
- RequireJS 从陌生到掌握
- DayDayUP_Linux运维学习_sqlite3安装