C语言复习12

C语言复习12

C语言学习,在这里推荐浙江大学翁恺老师的视频,慕课网网址:https://www.icourse163.org/learn/ZJU-9001?tid=9001#/learn/content。笔者的复习笔记也主要是根据该视频进行。本文的主要内容如下

  • 程序设计与C语言
  • 计算
  • 判断
  • 循环
  • 循环控制
  • 数据类型
  • 函数
  • 数组
  • 指针
  • 字符串
  • 结构类型
  • 程序设计
    全局变量;编译预处理和宏;大程序结构;上机12;
  • 文件
  • 链表

refer
1.


12.1 全局变量

一、生存期和作用域

全局变量是定义在函数外边的变量(包括main函数),一般具有全局生存期和作用域,他们可以在任何函数内部使用。

二、全局变量初始化

本地变量未初始化会得到一个稀奇古怪的值,但是全局变量未初始化会得到0值,指针会得到NULL值。只能用编译时刻已知的值来初始化全局变量(即不能用scanf),它们的初始化在main函数之前。

三、静态本地变量

增加修饰符static来得到静态本地变量。当函数离开的时候,静态本地变量会继续存在并保持其值。静态本地变量的初始化只会在第一次进入函数的时候做,以后每次进入函数都会保持上次离开时候的值。
静态本地变量实际上是特殊的全局变量,具有全局生存期和函数内的局部作用域。

四、少用全局变量和静态本地变量

全局变量和静态本地变量使得线程不安全。

12.2 编译预处理和宏

一、编译预处理指令和宏

在第一张我们就讲过,从.c文件预处理后成.i文件,其中#开头的就是编译预处理指令,而#define用来定义一个宏。
#define不是C的语句,他的使用如下:define <名字> <值>
在这里插入图片描述

12.3 大程序结构

一、项目和编译单元

当我们程序过大的时候,就会出现多个.c文件,而一个.c文件实际上是一个编译单元,编译器每次编译只能处理一个编译单元。
在一个项目project中会有多个编译单元.c文件,编译器或者IDE需要把所有源代码文件编译后链接起来。
有的IDE有分开的编译构建两个按钮,前者是编译,后者是将整个项目做链接。

二、头文件

函数原型会被放到一个头文件中(.h文件),需要在调用这个函数的源代码文件(.c文件)中#include这个头文件。

#include是一个编译预处理指令,和宏一样,在编译之前就需要处理。
#include有#include <>和#include ""两种形式。
其中#include ""会要求编译器先在当前目录(.c文件所在目录)寻找这个文件,如果没有,则到编译器指定的目录中去找;
#include <>会要求编译器只在指定的目录中去找;注意,环境变量和编译器命令行参数可以指定寻找头文件的目录。mac的环境变量加载顺序为:

a. /etc/profile			# 系统级别
b. /etc/paths			# 系统级别
c. ~/.bash_profile		# 用户级别,常改找个
d. ~/.bash_login
e. ~/.profile
f. ~/.bashrc

#include不是用来引入库的,他只是为了让编译器知道printf函数的原型,保证调用时给出的参数值是正确的类型。
一般任何.c文件都有其对应同名的.h文件,把所有函数原型和全局变量声明都放进去。

不如欣赏一下红色警戒的源码:
https://github.com/electronicarts/CnC_Remastered_Collection/tree/master/REDALERT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值