高级宏定义

简介: 一、高级宏定义二、不带参数的宏定义三、带参数的宏定义

高级宏定义

 

目录:

一、高级宏定义

二、不带参数的宏定义

三、带参数的宏定义

 

一、高级宏定义

image.png

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

 

 

二、   不带参数的宏定义

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

 

#include <stdio. h>

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

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

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

}

 

结果:

请输入圆的半径:3

圆的面积是:28.26

 

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


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

return 0 ;

}

结果:

地球的体积大概是:1082657777102.05

 

 

三、带参数的宏定义

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

 

#include <stdio. h>
#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 <stdio . h>
#define SQUARE(x) x * x
int main (void )
{
int x;
printf("
请输入一个整数:");

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

}

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

5的平方是:25

#include <stdio . h>
#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

相关文章
|
5天前
|
程序员 C语言
C语言中的宏定义:从常量到高级技巧
C语言中的宏定义:从常量到高级技巧
8 1
|
2月前
|
程序员 编译器 C语言
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(中)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
31 0
|
2月前
|
自然语言处理 编译器 Linux
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(下)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
27 0
|
2月前
|
存储 程序员 编译器
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(上)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
32 0
|
2月前
|
Rust 编译器 开发者
Rust中的进阶宏:派生宏与属性宏
本文将深入探讨Rust编程语言中的派生宏(Derive Macros)和属性宏(Attribute Macros)这两种进阶宏的用法。派生宏用于自动生成实现特定trait的代码,而属性宏则允许我们为模块、函数、结构体等添加自定义属性。我们将通过实例展示如何在Rust项目中使用这些高级宏来增强代码的可读性和可维护性。
|
2月前
|
Rust 安全 编译器
Rust宏基础:定义与使用
本文将深入探讨Rust编程语言中的宏(Macros)基础,包括其定义、使用场景以及如何编写自定义宏。我们将从宏的基本概念出发,逐步深入到具体的实现细节,并通过实例展示如何在Rust项目中使用宏来简化代码和提高效率。
|
9月前
|
编译器 C语言
C语言之#define以及预处理详讲解
C语言之#define以及预处理详讲解
48 0
|
10月前
|
C语言
C语言宏定义的提示之法
C语言宏定义的提示之法
47 0
|
12月前
|
C语言 C++
【C语言】宏vs函数谁更简便
【C语言】宏vs函数谁更简便
|
编译器 Linux C语言
C语言 | 预处理知识详解 #预处理指令有哪些?他们如何使用?宏和函数有哪些区别?...#
C语言 | 预处理知识详解 #预处理指令有哪些?他们如何使用?宏和函数有哪些区别?...#