C语言之声明和定义

1、先说“声明”和“定义”的区别:(这里的对象泛指函数、变量等)

“声明”只是简单地告诉编译器在其他地方创建的对象的名字,允许你使用这个名字,并不分配内存空间,以extern关键字标识。

“定义”是一种特殊的声明,它在声明的同时告诉编译器为对象分配内存空间。C语言的对象必须有且只有一个定义,但可以有多个extern声明。

定义

只能出现在一个地方

确定对象的类型并分配内存,创建新的对象,如int a[10];

声明

可以多次出现

描述对象的类型,用于指代其他地方定义的对象,如extern int a[];这里由于不分配内存,所以不需要指定数组长度。


2、再说typedef和#define的区别: 

typedef:为数据类型创建别名,如: typedefint MyInt;

#define: 宏定义,宏文本替换,如: define N100

二者之间的关键区别在于编译器把typedef定义的类型视为一种彻底的类型封装,声明之后不允许往里面增加别的东西。从下面两个例子可以看出二者的不同:

(1)    #define MyInt int

  unsigned MyInt i;//OK,no problem

  typedef int MyInt;

  unsigned MyInt i;//Error,illegal

 

(2)    #define int_ptr int*

  int_ptr a,b;//扩展以后:int* a,b;(a,b为不同的类型)

  typedef int_ptr int*;

  int_ptr a,b;//a,b类型一致,都为int*



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值