C语言中,可以用 #define 定义一个标识符来表示一个常量。其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。

预编译又叫预处理。预编译不是编译,而是编译前的处理。这个操作是在正式编译之前由系统自动完成的。

用 #define 定义标识符的一般形式为:

#define  标识符  常量   //注意, 最后没有分号

#define 和 #include 一样,也是以“#”开头的。凡是以“#”开头的均为预处理指令,#define也不例外。

#define又称宏定义,标识符为所定义的宏名,简称宏。标识符的命名规则与前面讲的变量的命名规则是一样的。#define 的功能是将标识符定义为其后的常量。一经定义,程序中就可以直接用标识符来表示这个常量。是不是与定义变量类似?但是要区分开!变量名表示的是一个变量,但宏名表示的是一个常量。可以给变量赋值,但绝不能给常量赋值。

宏所表示的常量可以是数字、字符、字符串、表达式。其中最常用的是数字。

那么,程序中什么时候会使用宏定义呢?用宏定义有什么好处呢?我们直接写数字不行吗?为什么要用一个标识符表示数字呢?

宏定义最大的好处是“方便程序的修改”。使用宏定义可以用宏代替一个在程序中经常使用的常量。注意,是“经常”使用的。这样,当需要改变这个常量的值时,就不需要对整个程序一个一个进行修改,只需修改宏定义中的常量即可。且当常量比较长时,使用宏就可以用较短的有意义的标识符来代替它,这样编程的时候就会更方便,不容易出错。因此,宏定义的优点就是方便和易于维护。

那么程序在预编译的时候是怎么处理宏定义的呢?或者说是怎么处理预处理指令的呢?

其实预编译所执行的操作就是简单的“文本”替换。对宏定义而言,预编译的时候会将程序中所有出现“标识符”的地方全部用这个“常量”替换,称为“宏替换”或“宏展开”。替换完了之后再进行正式的编译。所以说当单击“编译”的时候实际上是执行了两个操作,即先预编译,然后才正式编译。#include也是这样的,即在预处理的时候先单纯地用头文件stdio.h中所有的“文本”内容替换程序中#include这一行,然后再进行正式编译。

需要注意的是,预处理指令不是语句,所以后面不能加分号。这是很多新手经常犯的错误。#include 后面也没有加分号。

宏定义 #define 一般都写在函数外面,与 #include 写在一起。当然,写在函数里面也没有语法错误,但通常不那么写。#define 的作用域为自 #define 那一行起到源程序结束。如果要终止其作用域可以使用 #undef 命令,格式为:

#undef  标识符

undef 后面的标识符表示你所要终止的宏。比如前面在程序开头用 define 定义了一个宏 M,它原本的作用范围是一直到程序结束,但如果现在在程序中某个位置加了一句:

#undef M

那么这个宏的作用范围到此就结束了。#undef 用得不多,但大家要了解。

为了将标识符与变量名区别开来,习惯上标识符全部用大写字母表示。宏定义用得最多的地方是在数组中用于指定数组的长度。下面来写一个程序:

# include

# define NUM 5

int main(void)

{

int i, j = NUM;

int a[NUM] = {0};

printf("请输入%d个数:", j);

for (i=0; i

{

scanf("%d", &a[i] );

}

for (i=0; i

{

printf("%d\x20", a[i]);

}

printf("\n");

return 0;

}

输出结果是:

请输入5个数:5 4 3 2 1

5 4 3 2 1

NUM 是定义的宏,它表示的是其后的常量(而不是变量)。此外,程序中用双引号括起来的宏在预处理的时候是不会被宏替换的。因为在 C 语言中,用双引号括起来表示的是字符串。下面再写一个程序看一下:

# include

# define PI 3.14159

int main(void)

{

double r, s;

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

scanf("%lf", &r); //scanf中, double只能用%lf

s = PI * r * r;

printf("s=PI*r^2 = %.6f\n", s); //PI不会被宏替换

return 0;

}

输出结果是:

请输入圆的半径:1

s=PI*r^2 = 3.141590

python中define的用法_#define用法,C语言#define详解相关推荐

  1. python跨函数调用变量_对python中不同模块(函数、类、变量)的调用详解

    首先,先介绍两种引入模块的方法. 法一:将整个文件引入 import 文件名 文件名.函数名( ) / 文件名.类名 通过这个方法可以运行另外一个文件里的函数 法二:只引入某个文件中一个类/函数/变量 ...

  2. python中的异常分类_列举 5 个 Python 中的异常类型以及其含义【面试题详解】

    今天爱分享给大家带来列举 5 个 Python 中的异常类型以及其含义[面试题详解],希望能够帮助到大家. BaseException +-- SystemExit +-- KeyboardInter ...

  3. python中json模块_Python json模块与jsonpath模块区别详解

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与后 ...

  4. python中def func是什么意思_Python的函数参数详解

    原标题:Python的函数参数详解 前言 Python中函数的参数可以分为两大类形参和实参~ def func(x, y): # x, y 就是形参 print(x, y) func(2, 3) # ...

  5. python中sys模块是什么意思_python之sys模块详解

    python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...

  6. python中exchange函数使用_python基于exchange函数发送邮件过程详解

    python基于exchange函数发送邮件过程详解 作者: shuzihua 更新时间:2020-11-06 10:40:35 原文链接 1.Python hasattr() 函数 描述 hasat ...

  7. [转载] python中set函数是什么数据类型_Python基本数据类型-list-tuple-dict-set详解

    参考链接: Python中的isdisjoint函数 Python基本数据类型-list-tuple-dict-set 数据类型 表示方法 特性 list 列表用方括号表示:[] list是一种有序的 ...

  8. python中集合比大小方法_Python集合17个方法详解

    Python 中的集合类似于数学中的集合概念,它是一组无序.不可重复数据的组合.集合用{ ...}创建,某种程度上可以把集合看作是没有值的字典.集合是Python里面非常重要的数据类型,其中的方法总共 ...

  9. python中choices_Django之choices选项和富文本编辑器的使用详解

    项目准备 1.创建数据库 create database choices_test default charset utf8; 2.创建一个名为 choices_test 的Django项目: 3.创 ...

  10. Python中的*(星号)和**(双星号)完全详解

    Python和C++不同,并没有指针,因此python中的*号作用和C++中不同.网上对于这方面的教程写的啰啰嗦嗦,一点不简明扼要.看的让人找不到重点.我这里快速的讲解一下. 1.最简单的不用细说,是 ...

最新文章

  1. AIX5.3安装bash shell
  2. centos7重新加载服务的命令_阿粉手把手教你在 CentOS7 下搭建 Jenkins
  3. 我们距离AI编程还有多远?
  4. ImportBeanDefinitionRegistrar向容器中注册bean
  5. python函数调用键盘热键_Tkinter对键盘和鼠标事件的处理
  6. 我结婚了,我要用什么做个邀请函呢?【iVX无代码YYDS 06】
  7. c语言中文刷屏,c语言二维数组刷屏练习.doc
  8. 编程谜题:提升你解决问题的训练场
  9. 说透Applet的数字签名之2——数字签名
  10. js 正则 exec() 和 match() 数据抽取
  11. 最新win10系统下载64位
  12. 加深 | Matlab图像实验操作基础(矩阵,九宫格、噪声处理)
  13. 虚拟机服务器系统蓝屏怎么办,虚拟机windows 2008 R2 系统蓝屏
  14. excel中去重计数_在Excel中计数
  15. SpringMVC使用websocke
  16. html5相册制作成视频,怎么把照片制作成视频,视频相册制作免费软件|特效多多...
  17. 王者荣耀6月23服务器维护,王者荣耀6月23日维护到几点 王者荣耀6月23日维护延期补偿...
  18. 如何成为有效学习的高手(笔记)
  19. 数据结构之KH[第五,六章] -->选择题 (二)
  20. SALOME软件下载

热门文章

  1. DOS命令:cacls
  2. shell_链接命令ln与nohup命令使用方法
  3. es6模块化和异步编程高级用法
  4. JConsole远程连接
  5. Python自动化开发基础 分布式监控系统开发实战 day8-李杰-专题视频课程
  6. redis订阅过期key发通知
  7. 微信小程序——多人协同和版本管理
  8. 计算机组成原理——控制器的功能和工作原理
  9. java鼠标事件监听
  10. fix协议的服务器,Fix8