【宏定义】#define 的使用方法

简介: 笔记

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

3.png

预编译又叫预处理。预编译不是编译,而是编译前的处理,编译器正式开始编译程序之前,会执行一段预处理程序(又称预处理器)专门对程序执行预处理操作。


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


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


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


#定义   标识符 内容
#define name  stuff

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


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


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



对于宏定义还要说明以下几点:


1.为了将标识符与变量名区别开来,习惯上标识符全部用大写字母表示。


2.宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。


3.宏定义其作用域为宏定义命令起到源程序结束。


4.程序中用双引号括起来的宏在预处理的时候是不会被宏替换的。


#include <stdio.h>
#define PI 3.14159
int main()
{
    double r, s;
    scanf("%lf", &r); 
    s = PI * r * r;
    printf("s=PI*r^2 = %.6f\n", s);  //PI不会被宏替换
    return 0;
}

5.#undef //了解即可


#include <iostream>
using namespace std;
 #define MODI 10
int main()
{
    cout << MODI << endl;
#undef MODI
    cout << MODI + 1 << endl;//报错
    return 0;
}

6.宏通常被应用于执行简单的运算,比如在两个数中找出较大的一个 .


相关文章
|
1月前
|
编译器 C语言
C语言宏定义(#define定义常量​、#define定义宏​、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比)
C语言宏定义(#define定义常量​、#define定义宏​、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比)
|
1月前
#define定义常量和宏
#define定义常量和宏
13 0
|
2月前
宏#define命令练习3
宏#define命令练习3
20 1
|
2月前
宏#define命令练习
宏#define命令练习。
19 2
|
2月前
宏#define命令练习2
宏#define命令练习2。
16 1
|
7月前
#define的用法
在程序中扩展#define定义符号和宏时,需要涉及几个步骤。 1. 在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号。如果是,它们首先 被替换。 2. 替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被他们的值所替换。 3. 最后,再次对结果文件进行扫描,看看它是否包含任何由#define定义的符号。如果是,就重复上述处理过程。
51 0
|
4月前
|
编译器
#define 宏定义看这一篇文章就够了
#define 宏定义看这一篇文章就够了
115 0
|
7月前
|
编译器
#define 定义常量和宏
工作机理:直接替换,以下列代码为例编译器直接将用到max的地方替换为100
39 0
|
10月前
用#define宏实现Add函数
用#define宏实现Add函数
57 0