定义在函数外面的变量是全局变量
全局变量具有全局的生存期和作用域
他们与任何函数无关
在任何函数内部都可以使用它们
没有做初始化的全局变量会得到0值
指针会得到NULL值
只能用编译时刻已知的值来初始化全局变量
它们的初始化发生在main函数之前
如果函数内部存在与全局变量同名的变量,则全局变量被隐藏
在本地变量定义时加上static修饰符就成为静态本地变量
(important)当函数离开的时候,静态本地变量会继续存在并保持其值
静态本地变量的初始化只会在第一次进入这个函数时做,以后进入函数时会保持上次离开时的值
静态本地变量实际上是特殊的全局变量
它们位于相同的内存空间
静态本地变量具有全局的生存域,函数内的局部作用域
static在这里的意思是 局部作用域(本地可访问)
返回本地变量的地址是危险的
返回全局变量或静态本地变量的地址是安全的
返回在函数内mallac的内存是安全的,但容易造成问题
最好的做法是返回传入的指针
不要使用全局变量在函数间传递参数和结果
尽量避免使用全局变量
#开头的是编译预处理指令
它们不是C语言的成分
#define用来定义一个宏
#define <名字> <值>
注意结尾没有分号 因为他不是c的语句
名字必须是一个单词,值可以是各种东西
在C语言的编译器开始编译之前,编译预处理程序(cpp)会把程序中的名字换成值
是完全的文本替换
如果一个宏的值中有其他宏的名字,也是会被替换的
如果一个宏的值超过一行,最后一行之前的行末需要加上\
#define_DEBUG
这类宏是用于条件编译的,后面有其他的编译
预处理指令来检查这个宏是否已经被定义过了
一切都要带括号
整个值要括号
参数出现的每个地方都要括号
在大型程序的代码中使用非常普遍
main()里的代码太长了适合分成几个函数
一个源代码文件太长了适合分成几个文件
两个独立的源代码文件不能编译形成可执行的程序
一个.c文件是一个编译单元
编译器每次编译只处理一个编译单元
在Dev C++中新建一个项目,然后把几个源代码文件加入进去
对于项目,Dev C++的编译会把一个项目中所有的源代码文件都编译后,链接起来
有的IDE有分开的编译和构建两个按钮,前者是对单个源代码文件编译,后者是对整个项目做链接
如果不给出函数原型,编译器会猜测你说调用的函数的所有参数都是int 返回类型也是int
编译器在编译的时候只看当前的一个编译单元,他不会去看同一个项目中其他编译单元以找出那个函数的原型
把函数原型放到一个头文件(以.h结尾)中,在需要调用这个函数的源代码文件(.c文件)中#include这个头文件里
#include是一个编译预处理指令,和宏一样,在编译之前就处理了
文本复制