文章目录
- 1 变量的声明与定义
- (1)定义与声明的区别:
- (2)为什么要区分定义与声明?
- (3)extern是什么 ?
- (4)举例:
- 2 函数的声明:
- 函数声明的格式:
- 函数声明的本质:
- 最后
1 变量的声明与定义
(1)定义与声明的区别:
变量定义是为变量分配内存空间,并赋予初始值
变量声明是向程序表明变量的类型与名字
定义也是声明,但声明不是定义
在程序中我们可以声明多次,但只能定义一次,这就好比,我们可以使用很多次锤子,但是锤子只有一把
(2)为什么要区分定义与声明?
程序员们编写程序时,不会将程序全部写在一个.c文件中(这样不能使程序员们同时进行编码,
且代码可读性很差),
而是存放在多个文件中去, 如果我们想引用其他文件定义的变量,函数,则需要用到声明,声明的作用即
告诉
编译器,有这个函数或变量,可以调用,而在链接阶段使程序去查找变量或函数的定义。
(3)extern是什么 ?
extern是C/C++中的一个关键字,用于声明一个全局变量或函数,表示该变量或函数是在其他文件中定义的。
它的作用是告诉编译器该变量或函数的定义在其他地方,而不是当前文件中。具体来说,extern可以用于以下两种情况:声明全局变量:当在一个文件中声明一个全局变量时,如果该变量是在其他文件中定义的,
就需要使用extern关键字进行声明。这样编译器在编译时就知道该变量是在其他文件中定义的,并且可以正确地链接到该变量的定义处。声明外部函数:当在一个文件中调用一个函数时,如果该函数是在其他文件中定义的,也需要使用extern关键字进行声明。这样编译器在编译时就知道该函数是在其他文件中定义的,并且可以正确地链接到该函数的定义处。总结一下,extern关键字用于声明全局变量或函数的定义在其他文件中。
它的作用是告诉编译器该变量或函数的定义在其他地方,以便正确地链接到定义处。
(4)举例:
#include 包含文件的功能本质上即是声明,这与extern的功能相同,所以二者选其一即可,
在声明时,我发现在VS2022上,不用extern关键字也行,比如直接声明int b
2 函数的声明:
在c语言中,默认的情况是只能定义在后的函数调用定义在前的函数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int Add(int x, int y) {return x + y;
}
int main() {int a = 3, b = 5;int c = Add(a, b);printf("%d\n", c);return 0;
}
如果调用定义在后的函数:则在c标准编译器中会报错,(gcc编译器中只会报警告)
如果想调用定义在后的函数,则需要用对应的函数声明(被调用函数的)
如果将main函数与Add函数的位置调换:
int main() {int a = 3, b = 5;int c = Add(a, b);printf("%d\n", c);return 0;
}
int Add(int x, int y) {return x + y;
}
函数声明的格式:
//int Add(int x, int y);
//声明的格式是:
//返回值类型 函数名(形参类型 形参名 ....);
//声明放在定义在前的函数之前:```c
#include<stdio.h>
int Add(int x, int y);
int main() {int a = 3, b = 5;int c = Add(a, b);printf("%d\n", c);return 0;
}
int Add(int x, int y) {return x + y;
}
函数声明的本质:
//声明的本质是什么?
//声明可以看作告诉编译器,所调用的函数存在,函数的基本信息是什么
(返回值类型,函数名等等),
// 而不会去探究函数体是什么,是否定义,在链接阶段,才会去查找
声明函数的函数体,如果函数并不存在:
,则会在链接阶段报错,而解决问题就是添加上对应的函数定义
例如:
#include<stdio.h>
int Add(int x, int y);int main() {int a = 3, b = 5;int c = Add(a, b);printf("%d\n", c);return 0;
}
结果表明是链接阶段出现错误
最后
函数的声明并不仅仅用于定义在前的函数调用定义在后的函数
,也用于引用其他文件中函数,比如include 包含头文件本质上就是声明的一种:
例子:
或者:
//#include"Add.h"
//上面与下面的语句本质相同,均是声明!
int Add(int x, int y);
#include<stdio.h>
int main() {int a = 3, b = 5;int c = Add(a, b);printf("%d\n", c);return 0;
}
# 2