python defined,define用法,C语言define详解
在C中,可以用#define定义一个标识符来表示一个常数。其特点是定义的标识符不占用内存,只是一个临时符号,预编译后就不存在了。
预编译也称为预处理。预编译不是编译,而是编译前的处理。该操作在正式编制前由系统自动完成。
用#define定义的标识符的一般形式是:
#定义标识符常量//注意末尾没有分号
#define和#include一样,以“#”开头。任何以“#”开头的都是预处理指令,#define也不例外。
#define也叫宏定义,标识符是定义好的宏名,简称宏。标识符的命名规则与前面提到的变量的命名规则相同。#define的作用是将标识符定义为它后面的常量。一旦定义好,这个常数就可以直接用程序中的标识符来表示。类似于定义变量吗?但是要做个区分!变量名表示变量,而宏名表示常数。可以给变量赋值,但不能给常量赋值。
宏表示的常量可以是数字、字符、字符串和表达式。最常用的是数字。
那么,宏定义什么时候会用到程序中呢?宏定义的优势在哪里?我们不能只写数字吗?为什么要用标识符来表示一个数字呢?
宏定义最大的好处就是方便修改程序。使用宏定义用宏替换程序中常用的常量。注意是“频繁”使用。这样,当你需要改变这个常量的值时,不需要逐个修改整个程序,只需要修改宏定义中的常量即可。并且当常量较长时,可以用更短的有意义的标识符代替宏,这样编程更方便,也更不容易出错。所以宏定义的好处就是方便,容易维护。
那么程序在预编译的时候是如何处理宏定义的呢?或者如何处理预处理指令?
事实上,预编译执行的操作是简单的“文本”替换。对于宏定义,程序中所有出现的“标识符”在预编译时都会被这个“常数”所替换,称为“宏替换”或“宏扩展”。替换后将进行正式编制。所以当你点击“编译”的时候,你实际上执行了两个操作,就是先预编译,然后正式编译。#include也是如此,即在预处理时,只需将程序中的行#include替换为头文件stdio.h中的所有“文本”内容,然后正式编译即可。
需要注意的是,预处理指令不是语句,所以后面不能带加号。这是很多新手经常犯的错误。#include后面也没有加号。
宏定义#define通常与#include一起写在函数之外。当然,函数中的写法没有语法错误,但通常不会这么写。#define的范围是从#define的行到源程序的结尾。如果要终止其作用域,可以使用#undef命令,格式如下:
#undef标识符
undef后面的标识符表示要终止的宏。比如在程序前面,define是用来定义一个宏m的,它原来的作用域是直到程序结束,但是如果你现在在程序的某个地方加了一句话:
#不知道
那么这个宏的范围就结束了。#undef用的不多,但你应该知道。
为了区分标识符和变量名,习惯上所有的标识符都用大写字母表示。宏在数组中最常用来指定数组的长度。这里有一个程序:
#包括
#定义编号5
int main(void)
{
int i,j=NUM
int a[NUM]={ 0 };
Printf(请输入%d个数字:,j);
for(I=0;我
{
scanf(%d ,a[I]);
}
for(I=0;我
{
printf(%d\x20 ,a[I]);
}
printf( \ n );
返回0;
}
输出是:
请输入5个数字:5 4 3 2 1。
5 4 3 2 1
NUM是一个已定义的宏,它代表跟在它后面的常量(不是变量)。此外,程序中用双引号括起来的宏在预处理过程中不会被宏替换。因为在C语言中,双引号是用来表示字符串的。再写个程序看看:
#包括
#定义PI 3.14159
int main(void)
{
双r,s;
Printf(请输入圆的半径:);
scanf(%lf ,r);//在//scanf中,double只能使用%lf。
s=PI * r * r
printf(s=PI*r^2=%.6f\n ,s);//PI不会被宏替换
返回0;
}
输出是:
请输入圆的半径:1
s=PI*r^2=3.141590
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。