C语言中定义和声明的区别

声明(declaration)与定义(definition)

 为了使不同的文件都可以访问同一个变量,C会区 分变量的声明和定义。
  变量的定义会为这个变量分配存储空间,并且 可能 会为其指定一个初始化的值, 一个变量的定义有且 仅有一处。 定义实际上是一种特殊的声明。 变量的声明会将变量的类型和名称传达给程序。当 然。我们可以通过使用“extern” 关键字来声明一个 变量,而不用定义它。声明的形式就是在变量的名 字和类型前面,加上关键字“extern”

此处就得讲一下extern的用处了:

1、extern关键字用法一是用来声明一个变量的,告诉编译器我这个变量已经定义过了,但不一定在我这个声明前面,让编译器自己去找,如:

C语言中定义和声明的区别_第1张图片

  我在main函数后面定义的a变量,但是我能在main函数里使用a,而且打印结果是10,

2、 extern关键字用法二,用于声明在别的文件中已经定义好的变量,但是该变量不能是静态变量,通俗一点说就是,假设我有两个文件A和B,我在A文件中定义了变量sum,我想在B文件中使用,此时我可以在B文件中用extern声明一下sum,则可以用A文件中的变量sum

 声明

  告诉程序一个变量或者函数已经被定义, 不会分配空间   可以被声明多次

定义

 分配变量的空间  只能定义一次

定义包含了声明,但是声明不包含定义,如

int a = 0;     //定义并声明了变量 a
extern int a;  //只是声明了有一个变量 a 存在,具体 a 在哪定义的,需要编译器编译的时候去找。

二、高级声明

 typedef  int *apple#define peach int *

 typedef是一种彻底的封装类型——在声明它之后不能 再往里面增加别的东西。 它和宏的区别体现在两个方面:
 1、不能用其他类型说明符进行扩展。
  unsigend apple j; // 这是非法的!
  unsigned peach i; // 没问题, i 是指向无符号整型变量的指针
 2、在连续几个变量的 声明中,#define定义的类型不能 保证所有的变量为同种类型。
  apple a, b; // a b 都是指向整型变量的指针
  peach c, d; // c 是整型变量指针, d 是整型变量

你可能感兴趣的:(c语言,开发语言)