C语言的傻瓜式随笔(二):全局变量、预编译、goto

时间:2023-12-19 10:43:14

  函数的作用:可以实现代码的重用. 函数只需要定义1次,那么函数中的代码就可以随意的调用.       -某不知出处的基本概念

  学而时习之,如有误笔,请指正

一、goto跳转语句

  goto在C语言的作用: 可以将CPU的执行跳转到当前函数的别的地方继续执行.因为会产生代码回朔,所以极易产生死循环。

  注意:

1). 标签名随意,但是要符合标识符的命名规则及规范.

标识符: 那就是程序员可以自己给名字的东西 统称为标识符.

变量名、标签名、函数名.

2). goto可以往前跳 也可以往后跳.

3). 只能在当前函数中跳.

4). 取标签名下面的那一句代码不能是声明变量.

如果你非要做的话 就写1句没有效果的代码.

  实例如下:

loop:
printf("");
int userName = , password = ;
printf("用户名: ");
scanf("%d",&userName);
printf("密 码: ");
scanf("%d",&password); //如果是错误的.
if(userName != || password != )
{
goto loop;
}

  二、全局变量和局部变量

1. 变量: 在内存中用来存储数据开辟的那块空间.

局部变量:定义在函数内部的变量,我们就叫做局部变量.

  全局变量:定在函数外部的变量.我们就叫做全局变量.直接定义在源文件下面.

2. 全局变量和局部变量的异同点.

相同点: 都是变量,都是在内存中开辟一块空间来存储数据.

不同点:

1). 声明的位置不同. 局部变量声明在函数内部,而全局变量声明在函数的外面.

2). 作用域不同.

a. 局部变量.只能在当前函数的内部访问.

b. 全局变量.从定义这个全局变量的地方开始,后面的所有的函数中都可以访问这个全局变量.

一般情况下.全局变量都是定义在最顶上的.#include下面.

3). 默认值不同.

a. 局部变量.

声明1个局部变量,如果没有为这个局部变量赋初始值.那么这个局部变量中有值, 值是1个垃圾数.是个随机数.

b. 全局变量.

声明1个全局变量,如果没有为这个全局变量赋初始值,那么这个全局变量的初始值默认就是0 会自动初始化为0

如果全局变量的类型是char类型,并且我们也没有初始化.那么系统就会自动的这个char变量赋值1个 '\0'

'\0' 代表1个不可见的字符. 这个字符的ASCII码就是0

4). 创建和回收的时间不同.

a. 局部变量.

CPU执行声明局部变量的那句话的时候,才会在内存中声明.

当作用域结束以后 就会自动回收.

b. 全局变量.

程序一启动 就在内存中创建全局变量.

程序结束的时候,全局变量才会被回收.

3. 全局变量的特点.

1). 程序一启动就会创建,直到程序结束的时候才会被回收.

局部变量.每次调用函数都会重新声明1个.函数结束的时候局部变量就回收.

无论在那个函数中 访问全局变量.访问的都是同1个.

具备共享性. 将数据声明为全局变量.那么所有的函数都能访问,都可以共享这个数据.

2). 什么时候我们需要把1个数据定义为全局变量呢?

如果这个数据想要被多个的函数访问.那么就可以将这个数据定义为全局变量.

4. 函数如果不被调用,函数内部的代码是不会执行的.

5. 可以定义1个和全局变量名称相同的局部变量.

这个时候,在函数内部从定义同名局部变量开始后面访问这个 变量. 访问的是局部变量.

  不建议这么写~

  三、预编译

1. 预处理指令/预处理代码.

C语言的代码主要分为两类.

1). C代码.

2). 预处理代码.

以#开头的代码就叫做预处理代码.

2. 手写第1个C程序的步骤.

1). 在.c的源文件中写上符合C语言规范的源代码.

2). 编译. 使用cc -c 指令将C语言的源代码编译为.o的目标文件.

a. 先检查源文件中的代码是否符合语法规范

YES: 生成目标文件.

NO:  报错.

3). 链接: 使用cc 指令 将目标文件链接生成1个可执行文件.

a. 为目标文件添加启动代码.

4). 执行可执行文件.

----->  这都是编译器在编译的时候做的事情 <-------------

.c源文件 --> 执行.c文件中的预处理代码 --> 检查语法 --> 编译成.o目标文件 --> 链接生成可执行文件 --> 执行.

3. 预处理指令

1). 预处理指令的分类.

a.  文件包含指令. #include

b.  宏定义       #define

c.  条件编译指令  #if

2). 预处理指令的特点.

a. 都是以#号开头.

b. 预处理指令的后面没有分号.

c. 在编译的时候,检查语法之前.