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

 更新时间:2016年05月07日 15:51:14   作者:灵犀  
这篇文章主要介绍了C语言中宏的定义与使用,是C语言入门学习中的基础知识,需要的朋友可以参考下

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

定义:

#define 宏名 内容

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

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

例如:

#define PI 3.1415926

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

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

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

float area = 3.1415926 * r * r;

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

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

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

使用方法:

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

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

#define MUL(A, B) ((A) * (B))

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

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

相关文章

  • C++实现逆波兰表达式的例题详解

    C++实现逆波兰表达式的例题详解

    逆波兰表达式由波兰的逻辑学家卢卡西维兹提出,它的特点是:没有括号,运算符总是放在和它相关的操作数之后。本文将通过例题讲讲如何利用C++实现逆波兰表达式,需要的可以参考一下
    2022-12-12
  • OpenCV通过透视变换实现矫正图像详解

    OpenCV通过透视变换实现矫正图像详解

    这篇文章主要为大家详细介绍了OpenCV如何通过透视变换实现将一张折射的图片给矫正过来,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-02-02
  • C++初识类和对象

    C++初识类和对象

    类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数
    2021-10-10
  • 基于QT实现本地音乐播放器

    基于QT实现本地音乐播放器

    这篇文章主要为大家详细介绍了如何基于QT实现简单的本地音乐播放器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • VC++ 使用 _access函数判断文件或文件夹是否存在

    VC++ 使用 _access函数判断文件或文件夹是否存在

    这篇文章主要介绍了VC++ 使用 _access函数判断文件或文件夹是否存在的相关资料,需要的朋友可以参考下
    2015-10-10
  • C++实现LeetCode(62.不同的路径)

    C++实现LeetCode(62.不同的路径)

    这篇文章主要介绍了C++实现LeetCode(62.不同的路径),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C 语言的弱符号与弱引用你了解吗

    C 语言的弱符号与弱引用你了解吗

    这篇文章主要为大家详细介绍了C 语言弱符号与弱引用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 用C语言实现计算器功能

    用C语言实现计算器功能

    这篇文章主要为大家详细介绍了用C语言实现计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • 解析使用C++编写无错代码的方法技巧

    解析使用C++编写无错代码的方法技巧

    本篇文章是对使用C++编写无错代码的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言的变量与常量 字符字符串与转义字符详解

    C语言的变量与常量 字符字符串与转义字符详解

    这篇文章主要介绍了详解C语言的变量与常量 字符字符串与转义字符,包括其之间的区别是C语言入门学习中的基础知识,需要的朋友可以参考下
    2021-10-10

最新评论