#define用法

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

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

用 #define 定义标识符的一般形式为:
#define 标识符 常量 //注意, 最后没有分号

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

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

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

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

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

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

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

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

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

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

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

# include <stdio.h>
# define NUM 5
int main(void)
{int i, j = NUM;int a[NUM] = {0};printf("请输入%d个数:", j);for (i=0; i<NUM; ++i){scanf("%d", &a[i] );}for (i=0; i<NUM; ++i){printf("%d\x20", a[i]);}printf("\n");return 0;
}

输出结果是:
请输入5个数:5 4 3 2 1
5 4 3 2 1

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

# include <stdio.h>
# define PI 3.14159
int main(void)
{double r, s;printf("请输入圆的半径:");scanf("%lf", &r);  //scanf中, double只能用%lfs = PI * r * r;printf("s=PI*r^2 = %.6f\n", s);  //PI不会被宏替换return 0;
}

输出结果是:
请输入圆的半径:1
s=PI*r^2 = 3.141590

C:#define用法相关推荐

  1. #define 用法

    #define用法 收藏 1.简单的define定义 #define MAXTIME 1000 一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写 if(i<MAXTIME){ ...

  2. c++ 预处理命令 #define用法

    预处理命令 #define用法 #define命令 #define命令 #define命令用于把指定的字符串替换文件中的宏名称 . 也就是说, #define使编译器把文件中每一个macro-name ...

  3. [define的用法]define用法集锦

    篇一 : define用法集锦 Definition: The #define Directive You can use the #define directive to give a meanin ...

  4. c++中define用法

    c++中define用法 define在c++语言中用法比较多,这里对其进行整理. 1.无参宏定义 无参宏的宏名后不带参数. 其定义的一般形式为: #define  标识符  字符串 1 其中的&qu ...

  5. #define用法以及#define和typedef区别

    1.简单的define定义 #define MAXTIME 1000 2.define的"函数定义" define可以像函数那样接受一些参数,如下 #define max(x,y) ...

  6. C++中#define用法

    http://blog.sina.com.cn/s/blog_686188ef0100klku.html #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一 ...

  7. 转载--#define 用法

    作者:Jency Lee 链接:http://www.cnblogs.com/Jency/articles/C_Cplusplus_define.html 1.简单的define定义 #define ...

  8. [C/C++]#ifndef,#define用法

    文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了, ...

  9. C++ #define用法详解

    #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能理解该命令的本质,总是在此处产生一些困惑,在编程时误用该 ...

最新文章

  1. 为什么安装的是gpu版本训练时还是用的cpu?_免费GPU哪家强?谷歌Kaggle vs. Colab | 硬核评测...
  2. 青龙羊毛——帮多多(教程)
  3. mysql服务实例配置_MySQL多实例配置(一)
  4. 认识J2EE规范或标准以及J2EE和JEE有什么不同?
  5. 传统生成API文档弊端
  6. 【转】jmeter学习笔记——JDBC测试计划-连接Mysql
  7. .Net在线编辑工具.NET Fiddle
  8. css居中悬浮,CSS悬浮居中
  9. Vue 过渡效果的组件
  10. php的simplexml
  11. 项目Wiki的选择和配置
  12. PHP设计模式——适配器模式
  13. 毕设题目:Matlab机器人路径规划
  14. 纳米机器人驱动技术提速十万倍
  15. 急需小米笔记本TM1709最新版BIOS Firmware,当前是版:RMRKB5R0P0504 日期:2018/09/04 多谢帮助!
  16. 支付宝获取token 报错signData is Empty
  17. android 判断 飞行模式,Android 判断飞行模式的状态
  18. Codeforces Round #433 (Div. 1, based on Olympiad of Metropolises) C. Boredom(主席树)
  19. 吉他大横按的学习技巧总结
  20. 浏览器的input禁用输入法

热门文章

  1. 曲面屏敲代码飞起,包邮送到家!
  2. 记一次使用 Lombok 翻车造成的事故!
  3. 程序员入职国企,1周上班5小时,晒出薪资感叹:腾讯当CEO也不去
  4. SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  5. 注册jdbc驱动程序的三种方式
  6. Java IO流--练习
  7. Java异常类(Throwable)
  8. Oracle中的序列 sequence 用法
  9. 补充spring事务传播性没有考虑的几种情况
  10. html 渐变透明写法,CSS3透明度+渐变