跳转至

模块化

全局变量: 定义在函数体外部的变量

  • 生命周期: 从定义处开始,到当前.c结束
  • 作用范围: 从定义处开始,到当前.c结束

局部变量: 定义在函数体内部的变量

  • 生命周期: 从定义处开始,到当前函数结束
  • 作用范围: 从定义处开始,到当前函数结束

声明和定义

学习以下内容前我觉得有必要学习一下声明和定义1

声明: 用于说明每个标识符的含义,而并不需要为每个标识符预存储空间

定义: 预留存储空间的声明称为定义

变量的声明和定义
1
2
3
4
5
6
7
int i;            // 同时声明和定义变量i,未初始化(很多人可能不理解,i其实已经有了初始值是随机值,在全局变量是是0)

int i = 1;        // 同时声明和定义变量i,并且初始化

extern int i;     // 仅仅声明变量i,表明变量i的定义在其它位置

extern int i = 1; // 同时声明和定义变量i,并且初始化,可忽略extern

点击可跳转到extern 可在下文学习

函数的声明和定义
int sum(int a, int b);  // 声明sum函数

extern int sum(int a, int b); // 等价上面,声明sum函数,可忽略extern

int sum(int a, int b)   // 声明和定义sum函数具体实现

{

    return a+b;

}
结构体的声明和定义1
struct student

{

    char name[10];

    int age;

    char sex[4];

};// 声明同时定义结构类型;

struct student stu1,stu2;// 声明和定义结构变量stu1,stu2;
结构体的声明和定义2
struct student;// 仅仅声明结构体student;

..... // 这里可以是其它代码

struct student

{

    char name[10];

    int age;

    char sex[4];

};// 定义结构体student

struct student stu1,stu2;// 声明和定义结构体变量
;
结构体的声明和定义3
// 同时声明和定义结构类型和结构体变量

// 省略结构类型名称,此时该匿名结构类型只能使用一次了

struct

{

    char name[10];

    int age;

    char sex[4];

} stu1,stu2;
数组的声明和定义
1
2
3
4
5
int a[100]; // 声明和定义数组

extern int a[100];   // 仅仅声明数组

extern int a[];      // 仅仅声明数组

好了,看到这里估计你也能明白了,什么是声明,什么是定义,总结一下:只有当声明也是定义时,声明才可以有初始化值,因为只有定义才分配存储空间。

那为什么要要了解声明和定义呢?因为这样有利于学习staticextern见下文;

#define(预编译指令)

格式一: #define + 宏名 + 宏体

对于计算机来说,在预处理时刻,宏明就会被宏体替换,并且是原样替换

1
2
3
4
//例如
#define PI 3.1415926
#define max(a,b) a>b?a:b
#define arr(a,b) a*b // arr(1+5,2+6) -> 1+5*2+6

格式二: #define + 宏名

1
2
3
4
#ifndef _HEAD_H_
#define _HEAD_H_

#endif

关键字

static(静态变量)

解释:

  1. 修饰局部变量: 延长声明周期(同全局变量),作用范围不变(当前函数)
  2. 修饰全局变量:

私有化,仅仅能被当前.c使用,不能被其它.c借用

  1. 修饰函数:

私有化,仅仅能被当前.c使用,不能被其他.c借用

内部函数和外部函数

函数本质上是全局的,一个函数可以被当前.C文件的另一个函数调用,也可以被其它.C文件调用,但是也可指定函数不能被其他文件调用。 根据函数能否被其它源文件调用,将函数分为内部函数和外部函数

定义内部函数时,在函数名和函数类型前面加static。

1
2
3
static 变量类型 函数名 参数

static int FUNC(int a,int b);

一个工程项目可能需要很多人员的参与,当使用引用其它.c的头文件时,你们使用了相同的函数名, 此时编译就会报错,那么如果在函数名前加上static 私有化 就可以不被其它文件调用了,就防止重名的存在了,但我现在还存有疑问, 就是我是防止重名了,但是我在其他文件中就用不了了,那这个意义是什么呢...意义就是 这个函数、或者变量 只在当前文件中用。 然后就是多写代码多总结!!!

外部函数在下面extern中解释

extern(外部变量)

外部变量:

全局变量只能被定义一次,如果其他模块要使用该全局变量,需要通过外部变量的声明。

外部变量的格式: extern 变量名表;

(1) 在定义函数时,如果在函数的最左端加关键字extern,则表示此函数是外部函数,可供其他文件调用。 C语言规定,若在定义函数时省略extern,则默认为外部函数。

(2) 在需要调用此函数的文件中,用extern对函数作声明,表示该函数是在其他文件中定义的外部函数。

外部变量:只起说明作用,不分配存储单元,对应存储单元在全局变量定义时分配。

sizeof(求大小 )

首先确定sizeof是关键字,而不是函数,其


  1. 声明和定义的部分笔记学习于知乎上的哪有岁月静好 


最后更新: September 27, 2023
创建日期: June 19, 2023

评论