高级宏定义|学习笔记

简介: 快速学习高级宏定义

开发者学堂课程【你的第一门 C 语言课高级宏定义】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/444/detail/5489


高级宏定义


目录:

一、 高级宏定义

二、不带参数的宏定义

三、带参数的宏定义


一、高级宏定义图片36.png

作为 c 语言三大预处理之一,宏定义的作用就是替换,就算宏定义再复杂只是个替换,不做计算,也不做表达式求解,另外的两大预处理就是文件包含、条件编译,然后再进行编译。


二、不带参数的宏定义

  • 为了和普通的变量进行区分,宏的名字通常我们约定是全部由大写字母组成
  • 宏定义只是简单地进行替换,并且由于预处理是在编译之前进行,而编译工作的任务之一就是语法检查,所以编译器不会对宏定义进行语法检查
  • 宏定义不是说明或语句,在末尾不必加分号
  • 宏定义的作用域是从定义的位置开始到整个程序结束
  • 可以用#undef 来终止宏定义的作用域
  • 宏定义允许嵌套

#include

#define PI 3.14int main (void ){int r;

float s;printf("请输入圆的半径: ");

scanf("%d", &r);s=PI*r*r‘;printf("圆的面积:%.2f\n”,s);return0;

}

结果:

请输入圆的半径:3

圆的面积是:28.26

#include #define R 6371#define PI 3.14#define V PI * R *R*R*4/ 3int main(void){

printf("地球的体积大概是: %.2f\n", V) ;

return 0 ;

}

结果:

地球的体积大概是:1082657777102.05


三、带参数的宏定义

C 语言允许函数带参数,在宏定义中参数称之为形式参数,define 叫做形式参数,在 int 当中叫做实际参数。

#include #define MAX(x, у) (((x) > (y)) ? (х) : (y))int main (void ){int x, y;printf(" 请输入两个整数:”);scanf ( "%d%d",&x, &y);printf("%d是较大的那个数! \n", MAX(x, y));
return 0 ;

}

结果:

请输入两个整数:35

5是较大的那个数!

错误写法:

#define MAX (x,y) (((x)>(y))? (x):(y))

#include #define SQUARE(x) x * xint main (void ){int x;printf(" 请输入一个整数:");

scanf("%d", &x) ;printf(" %d的平方是:%d\n", x, SQUARE)return 0 ;

}

结果:请输入一个整数:5

5的平方是:25

#include #define SQUARE(x) ((x) * (x))int main (void ){int x;printf(" 请输入一个整数:");

scanf("%d", &x) ;printf(" %d的平方是:%d\n", x, SQUARE(x))

printf(“%d的平方是:%d\n”,x+1,SQUARE(x+1));return 0 ;

}

结果:

请输入一个整数:5

5的平方是:25

6的平方是:36

相关文章
|
2月前
|
存储 数据处理 C语言
C语言高级应用探讨与实例
C语言高级应用探讨与实例
24 1
|
2月前
|
自然语言处理 编译器 Linux
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(下)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
27 0
|
2月前
|
程序员 编译器 C语言
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(中)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
31 0
|
2月前
|
存储 程序员 编译器
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(上)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
32 0
|
2月前
|
API C++ Windows
windows编程入门_链接错误的配置
windows编程入门_链接错误的配置
26 0
|
2月前
|
Rust 编译器 开发者
Rust中的进阶宏:派生宏与属性宏
本文将深入探讨Rust编程语言中的派生宏(Derive Macros)和属性宏(Attribute Macros)这两种进阶宏的用法。派生宏用于自动生成实现特定trait的代码,而属性宏则允许我们为模块、函数、结构体等添加自定义属性。我们将通过实例展示如何在Rust项目中使用这些高级宏来增强代码的可读性和可维护性。
|
12月前
|
Linux 编译器 C语言
C语言中宏的一些高级用法举例
C语言中宏的一些高级用法举例
259 0
|
存储 移动开发 数据安全/隐私保护
高级变量类型
Python 中数据类型可以分为 **数字型** 和 **非数字型**
变量高级用法
变量高级用法
54 0
|
编译器 C语言
高级宏定义
一、高级宏定义 二、不带参数的宏定义 三、带参数的宏定义
高级宏定义