关于c:C入门9宏定义

50次阅读

共计 1115 个字符,预计需要花费 3 分钟才能阅读完成。

Summary

1) C 语言 中,实参和函数的形参之间仅仅是值传递,因而在函数外部无奈扭转实参的值。

2)函数是一种 代码复用 的伎俩

3)宏是 C 语言中 代码复用 补充 形式,是对函数的一种补充;函数和宏的关系,相似于生存中 演员和替身 的关系,只是用于某些非凡场景。在大部分状况依然优先思考函数。

4)宏没有函数 调用的开销 ,函数调用须要在栈上保护流动记录;宏只是简略的文本替换,因而 代码块 会收缩,函数只会应用同一段函数体;宏替换不会对类型进行查看,当宏和运算符联合在一起时,会呈现意想不到的谬误,函数会进行 类型查看,也不会呈现二义性;

5)编译器组成简介:

  1. 预处理模块:解决所有 #结尾的语句(复制粘贴替换 –> 两头文件.i)
  2. 编译模块:将 C 程序翻译成二进制程序(两头文件.i –> 汇编文件.s –> 二进制文件.o)
  3. 链接模块:将二进制程序组合成可执行程序(.o –> .out)

宏定义

问题:以下代码输入什么?为什么?

void swap(int a, int b)
{
int t = a;
a = b;
b = t;
}
int main()
{
int x = 1;
int y = 2;
swap(x, y);
x = ?
y = ?
}

以上代码输入为 x = 1, y = 2;尽管咱们进行了替换,然而 x 和 y 的值依然没变,起因在于:实参和形参之间仅仅是值传递,所有函数中无奈间接扭转实参的值。

再次了解函数:函数是一种 代码复用 的伎俩

  • 把实现某个性能的代码片进行封装(当做一个整体)
  • 给这个代码片段一个适合的名字(通过名字来应用代码)
  • 定义参数(定义代码片段须要解决的问题)

C 语言中的的宏,是对函数“缺点”的 补充

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

    #define ADD(a, b) a + b
    int z = ADD(1, 2);

宏与函数的不同:

  • 宏不是函数,没有函数调用的过程(不须要在栈上保护函数调用的记录);函数调用会先传递参数值,而后跳转执行函数体,而后返回
  • 应用宏只是单纯“代码复制粘贴”,而后替换参数
  • 同一个函数,无论调用多少次,都只有一份函数体代码;同一个宏,每次都会“复制粘贴”雷同代码

编译器组成简介:

  1. 预处理模块:解决所有 #结尾的语句(复制粘贴替换 –> 两头文件.i)
  2. 编译模块:将 C 程序翻译成二进制程序(两头文件.i –> 汇编文件.s –> 二进制文件.o)
  3. 链接模块:将二进制程序组合成可执行程序(.o –> .out)

再论宏常量:#define NAME value

  • 预处理模块将代码中呈现的 NAME 标识符全副文本替换为 value
  • 因而,宏常量在实质上与字面量雷同(真正意义上的常量)

本文总结自“狄泰软件学院”唐佐林老师《C 语言入门课程》。
如有错漏之处,恳请斧正。

正文完
 0