• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 简单讲解C语言中宏的定义与使用

简单讲解C语言中宏的定义与使用

作者:灵犀 字体:[增加 减小] 来源:互联网 时间:2017-05-28

灵犀 通过本文主要向大家介绍了c语言中宏的定义,c语言中宏是什么,c语言中宏,c语言中宏的用法,c语言中宏是什么意思等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

宏定义是预编译功能的一种, 预编译又称为预处理, 是为编译做的预备工作的阶段。处理#开头的指令, 比如拷贝 #include 包含的文件代码,#define宏定义的替换,条件编译等。
使用宏定义的好处:使用宏定义的好处:可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如 π 这个常量,我们有时候会在程序的多个地方使用,如果每次使用都重新定义,一来比较麻烦,二来容易出错,所以我们可以把 π 做成宏定义来使用。
 
语法说明:
(1)宏名一般用大写
(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义
(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。
(4)宏定义末尾不加分号;
(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。
(6)可以用#undef命令终止宏定义的作用域
(7)宏定义可以嵌套
(8)字符串" "中永远不包含宏
(9)宏定义不分配内存,变量定义分配内存。

定义:

#define 宏名 内容

#define kArrLen 10 // OC驼峰命名法:首字符为k,其他单词首字符大写

#define ARR_LEN 10 // C语言中的宏命名规范:所有字母大写,单词用下划线分隔

</div>

例如:

#define PI 3.1415926

</div>

我们就可以使用 PI 来代替 3.1415926 即可:

float r = 0.5;
float area = PI * r * r;
printf("area = %f\n", area);
</div>

在程序预编译阶段会把 PI 替换成 3.1415926:

float area = 3.1415926 * r * r;
</div>

宏定义内容很简单,也很好理解,但是有几个如下的注意事项:

1、因为宏定义只是简单的替换,如果宏定义的内容有运算的时候,要把每个变量加上括号,以免影响运算的优先级

比如:#define MUL(A, B) (A * B)

使用方法:

MUL(3 + 5, 5 + 6) //会替换成 3 + 5 * 5 + 6 = 34
</div>

我们希望(3 + 5) * (5 + 6),所以定义宏定义的时候应该:

#define MUL(A, B) ((A) * (B))
</div>

2、注意宏定义后面没有分号(;),它不是一条语句

3、宏定义是在程序编译前期进行替换,此时程序还没有编译

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 简单讲解C语言中宏的定义与使用

相关文章

  • 2017-05-28非常经典的C语言趣味题目
  • 2017-05-28使用UART与PC通信实现msp430g2553单片机超声波测距示例
  • 2017-05-28Objective-C 消息传递机制详解
  • 2017-05-28C++发送HTTP请求的实现代码
  • 2017-05-28详解散列表算法与其相关的C语言实现
  • 2017-05-28C语言数据结构 链表与归并排序实例详解
  • 2022-04-30C语言位运算(按位与运算、或运算、异或运算、左移运算、右移运算)
  • 2017-05-28C++使用ADO实现存取图片的方法
  • 2017-05-28Objective-C的内省(Introspection)用法小结
  • 2017-05-28linux C++ 获取文件绝对路径的实例代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 详解C++的JSON静态链接库JsonCpp的使用方法
    • C语言中使用快速排序算法对元素排序的实例详解
    • c语言合并两个已排序数组的示例(c语言数组排序)
    • 浅谈C++中replace()方法
    • Win32应用程序(SDK)设计原理详解
    • C语言 设计模式之访问者模式
    • 用32位int型变量表示单引号括起来的四个字符的深入探讨
    • 浅析char 指针变量char *=p 这个语句的输出问题
    • 双缓冲解决VC++绘图时屏幕闪烁
    • C++设计模式编程中的迭代器模式应用解析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有