高级宏定义|学习笔记

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

开发者学堂课程【你的第一门 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

相关文章
|
9天前
|
IDE 编译器 开发工具
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
在本文中,我们系统地讲解了常见的 `#pragma` 指令,包括其基本用法、编译器支持情况、示例代码以及与传统方法的对比。`#pragma` 指令是一个强大的工具,可以帮助开发者精细控制编译器的行为,优化代码性能,避免错误,并确保跨平台兼容性。然而,使用这些指令时需要特别注意编译器的支持情况,因为并非所有的 `#pragma` 指令都能在所有编译器中得到支持。
82 41
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
|
9天前
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
67 14
|
7月前
|
存储 数据处理 C语言
C语言高级应用探讨与实例
C语言高级应用探讨与实例
64 1
|
6月前
|
存储 C语言 索引
C语言实现个人通讯录(功能优化)-1
C语言实现个人通讯录(功能优化)
C语言实现个人通讯录(功能优化)-1
|
6月前
|
机器学习/深度学习 搜索推荐 程序员
C语言实现个人通讯录(功能优化)-2
C语言实现个人通讯录(功能优化)
C语言实现个人通讯录(功能优化)-2
|
7月前
|
自然语言处理 编译器 Linux
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(下)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
71 0
|
7月前
|
程序员 编译器 C语言
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(中)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
45 0
|
7月前
|
存储 程序员 编译器
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(上)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
58 0
|
编译器 C语言 C++
C语言基础教程(宏的使用和多文件编程)
C语言基础教程(宏的使用和多文件编程)
230 0
|
Linux 编译器 C语言
C语言中宏的一些高级用法举例
C语言中宏的一些高级用法举例
350 0