黑马程序员技术交流社区

标题: c中得全局变量和宏定义的区别是什么 [打印本页]

作者: godlike    时间: 2014-4-29 17:22
标题: c中得全局变量和宏定义的区别是什么
本帖最后由 godlike 于 2014-5-14 14:13 编辑

c语言中的宏定义:#define COUNT 4
和全局变量:int  a = 4;//定义在函数外部,文件的开头;
有区别吗,分别用在什么场合,还有宏定义没有说明数据类型,那么它的数据类型是如何确定的;

作者: 兰闻天    时间: 2014-4-29 17:30
本帖最后由 兰闻天 于 2014-4-29 17:32 编辑

首先 未带参的宏定义的是基本上是常量,#define COUNT 4意思是在书写的时候把4用COUNT书写,等编译之前在把所有的COUNT替换成4;
int a = 4;定义的a是个变量;是在编译过程中把a替换成的4;
在定义数组和字符串的时候,char array[a]="abc";这么写是错误的,因为定义数组和字符串初始化的时候,数组个数不能是变量;而char array[COUNT]="abc";是可以这么写的,因为在未编译之前COUNT已经换成4了宏的数据类型,是根据定义时的值确定的,#define COUNT 4 数据类型就是int,应该是这样

作者: 魅影穿眸    时间: 2014-4-29 17:30
#define COUNT 4把count 定义为4,见到count就是4,可以用#undef取消宏定义的作用,int  a = 4是全局变量本文件都可以用的。#define COUNT 4 这个4不是告诉你类型了吗!
作者: NenKeer    时间: 2014-4-29 20:57
  1. #define COUNT 4    //预编译指令,在源文件编译之前,会把源文件中所有COUNT换成4
  2. int a = 4;
  3. int m[COUNT];     //这种定义在编译是不会报错,因为在编译之前已经变为int a[4]
  4. int m[a];               //这种定义编译是会出错,因为数组个数不能是变量
复制代码


至于#define COUNT 4 这句宏定义之后4的数据类型,可以参照你直接在souce里面写的其他数字,比如i = 0之类的,他们都是int类型的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2