简单讲解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语言中的结构体内嵌函数用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C语言代码实现简单2048游戏

    C语言代码实现简单2048游戏

    这篇文章主要为大家详细介绍了C语言实现2048游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 浅析C语言中strtol()函数与strtoul()函数的用法

    浅析C语言中strtol()函数与strtoul()函数的用法

    这篇文章主要介绍了浅析C语言中strtol()函数与strtoul()函数的用法,注意其将字符串转换成long型的区别,需要的朋友可以参考下
    2015-08-08
  • c++动态库调用的实现

    c++动态库调用的实现

    本文主要介绍了c++动态库调用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 用C++实现单向循环链表的解决方法

    用C++实现单向循环链表的解决方法

    本篇文章是对用C++实现单向循环链表的解决方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++实现选择排序(selectionSort)

    C++实现选择排序(selectionSort)

    这篇文章主要为大家详细介绍了C++实现选择排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 大数据情况下桶排序算法的运用与C++代码实现示例

    大数据情况下桶排序算法的运用与C++代码实现示例

    在排序元素很多的情况下,其实桶排序的性能并不是太高,这里我们配合单链表的直接插入排序,来看下一大数据情况下桶排序算法的运用与C++代码实现示例:
    2016-07-07
  • C++ 学习笔记实战写一个简单的线程池示例

    C++ 学习笔记实战写一个简单的线程池示例

    这篇文章主要为大家介绍了C++实现一个简单的线程池学习实战,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • OpenCV实现乱序碎片复原

    OpenCV实现乱序碎片复原

    这篇文章主要介绍了通过OpenCV 直方图相似度对比,实现将4张打乱顺序的碎片拼接复原并展示原图。文中的示例代码讲解详细,需要的朋友可以学习一下
    2021-12-12
  • 详解C++中的自动存储

    详解C++中的自动存储

    这篇文章主要介绍了详解C++中的自动存储,帮助大家更好的理解和学习C++,感兴趣的朋友可以了解下
    2020-09-09

最新评论