服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言详细分析宏定义的使用

C语言详细分析宏定义的使用

2022-11-13 14:17清风自在 流水潺潺 C/C++

宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的替换。字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查,如有错误,只能在编译已被宏展开后的源程序时发现

一、C语言中函数的“缺陷”

实参和形参之间仅仅是值传递,因此,函数中无法直接改变实参。

二、再次理解函数

函数是一种代码复用的手段

  • 把实现某个功能的代码片段进行封装(当作一个整体)
  • 给这个代码片段一个合适的名字(通过名字使用代码)
  • 定义参数(定义代码片段需要处理的问题)

三、C语言中的宏

  • 宏是C语言中代码复用的补充方式
  • 宏定义语法:#define MACRO(param) code_segment
  • 宏使用语法:MACRO(num);

例如:

?
1
2
3
4
5
6
7
#define ADD(a,b) a + b
int main()
{
    int z = ADD(1,2);
    printf("z = %d\n", z);
    return 0;
}

四、宏与函数的不同

  • 宏不是函数,使用宏没有函数调用的过程
  • 函数调用先传递参数值,然后跳转执行函数体,最后返回
  • 使用宏只是单纯“代码复制粘贴”,然后替换参数
  • 同一个函数,无论调用多少次,都执行相同的函数体代码
  • 同一个宏,每次使用都会“复制粘贴”相同代码

五、编译器组成简介

  • 预处理模块:处理所有宏以及#开头的语句(复制粘贴替换)
  • 编译模块:将C程序翻译成二进制程序
  • 链接模块:将二进制程序组合成可执行程序

六、宏使用示例

用一个简单的交换两个数的值作为例子:

?
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#define SWAP(a, b)  {int t = a; a = b; b = t;}
int main()
{
    int x = 1;
    int y = 2;
    SWAP(x, y);   // {int t = x; x = y; y = t;}
    printf("x = %d, y = %d\n", x, y);
    return 0;
}

下面为输出结果:

C语言详细分析宏定义的使用

七、再论宏常量

#define NAME value

  • 预处理模块将代码中出现的NAME标识符替换为value
  • 因此,宏常量在本质上与字面量相同(真正意义的常量)

八、小结

  • 宏是C语言中代码复用的补充方式
  • 宏不是函数,使用宏没有函数调用的过程
  • 预处理模块对宏的处理方式:复制粘贴替换
  • 程序中使用宏的地方最终被处理为对应的代码片段
  • 宏常量的本质就是字面量

到此这篇关于C语言详细分析宏定义的使用的文章就介绍到这了,更多相关C语言宏定义内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_43129713/article/details/122501375

延伸 · 阅读

精彩推荐
  • C/C++Opencv2.4.9函数HoughLinesP分析

    Opencv2.4.9函数HoughLinesP分析

    这篇文章主要为大家详细介绍了Opencv2.4.9函数HoughLinesP,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    zhaocj8882021-07-17
  • C/C++C语言进阶教程之字符函数&字符串函数

    C语言进阶教程之字符函数&字符串函数

    C语言提供了丰富的字符串处理函数,可以对字符串进行输入、输出、合并、修改、比较、转换、复制、搜索等操作,下面这篇文章主要给大家介绍了关于C语言...

    三分苦6332022-10-17
  • C/C++C语言中getchar的用法以及实例解析

    C语言中getchar的用法以及实例解析

    getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,下面这篇文章主要给大家介绍了关于C语言中getchar的用法以及实例的相关资料,文中通过实例...

    ww here10892022-10-12
  • C/C++C++11 并发指南之std::thread 详解

    C++11 并发指南之std::thread 详解

    这篇文章主要介绍了C++11 并发指南之std::thread 详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    Haippy11792021-08-13
  • C/C++C语言玩转指针之指针的高阶玩法

    C语言玩转指针之指针的高阶玩法

    指针可以表示一个变更的地址,在计算机程序中,通常表示内存地址,存储数据的地址,下面这篇文章主要给大家介绍了关于C语言玩转指针之指针的高阶玩法,文...

    波风张三7382022-02-17
  • C/C++C语言实现洗牌与发牌游戏

    C语言实现洗牌与发牌游戏

    这篇文章主要为大家详细介绍了C语言洗牌与发牌游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    零商8902021-10-16
  • C/C++C++实现算法两个数字相加详解

    C++实现算法两个数字相加详解

    这篇文章主要介绍了C++实现算法两个数字相加详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    Grandyang9862021-11-23
  • C/C++C++基础入门教程(一):基础知识大杂烩

    C++基础入门教程(一):基础知识大杂烩

    这篇文章主要介绍了C++基础入门教程(一):基础知识大杂烩,本文讲解了注释、头文件、命名空间等内容,需要的朋友可以参考下...

    笨木头9962021-02-20