函数
1.作用域
作用域分为全局作用域与局部作用域。
全局作用域就是可以对整个代码源文件生效,
局部作用域就是只能对{}中生效
例如
int a;
void func(int a)
{
int b=a;
if(b>0)
{
int c;
}
}
在C语言中规定,全局变量未经初始化时为0,全局变量存放在全局区。形参是局部变量,函数名的作用域是全局的。在编写代码的过程中,全局变量能不用最好还是不用,因为使用全局变量会造成代码的耦合性较高。
变量的生存期是指:变量从被定义开始到被销毁所存在的时间。
生存期又根据变量的类型分为两类:静态生存期与动态生存期。
静态生存期是指:变量存在的时间与程序运行的时间周期相等(变量的存储空间在程序运行之前就被开好了)
栈区具有动态性,全局区具有静态性。
当用static修饰局部变量时,此变量就被存储在了静态区,而不是栈区,此时变量就具有静态生存期,但是不是常量,值可变。但是其作用域依旧是局部作用域。
当用static修饰全局变量时,是限制该变量只能在本文件中使用,其余文件不可调用。
具有静态生存期:static,全局变量,其余的均是动态生存期。
标识符的作用域允许存在包含关系,即可存在局部的局部。而且局部作用域一定是被包含在全局作用域中。
2.可见性(4点):
1.标识符要在声明在前,引用在后。
2.在同一作用域中,不能声明同名的标识符。
3.在没有互相包含关系的不同的作用域中声明的同名标识符,互不影响。
4.如果在两个或多个具有包含关系的作用域中声明了同名标识符,则外层标识符在内层不可见。
3.auto
auto:是指自动变量。是说在定义时变量会自动开辟与销毁空间。在C语言中定义变量会默认有auto。
4.register
register 是指寄存器函数,是将所定义的函数空间开辟在寄存器从,可以更快的调用函数,但是由于其空间小,所以是建议而不是命令。不可取地址。
5.extern
extern是声明函数,并不是定义。而且在头文件中只放声明不放定义。
预处理命令
在编译一个C语言程序的第一步骤就是预处理阶段,这一阶段就是宏发挥作用的阶段。C预处理器在源代码编译之前对其进行一些文本性质的操作,主要任务包括删除注释、插入被#include进来的文件内容、定义和替换由#define 定义的符号以及确定代码部分内容是否根据条件编译(#if )来进行编译。”文本性质”的操作,就是指一段文本替换成另外一段文本,而不考虑其中任何的语义内容。
一、宏定义
在定义宏名时一般是全大写,主要是为了与变量有所区分。预处理就是对宏进行机械式的替换。宏名之后不能加“ ;”。
1、不带参数的宏定义
格式: #define 宏名 字符串
例:#define a 6 则a是宏名,凡是出现a的地方均用6替换
C语言中自带的不带参的宏:%d\n__LINE__与%s\n__FILE__这两个宏的含义分别是输出当前行数与输出当前文件。
2.带参宏:
#define ADD (a, b)a+b
该宏替换也是机械替换,带参宏与函数有着本质的区别。
二、 #include
C语言中通过#include来实现文件包含的操作。文件包含命令有两种#include" "与#include< >
在绝对路径下(包含根目录)两种写法无区别。#include< >相对路径是/user/include/
#include" "相对路径是指本文件所在的目录。
三、条件编译
条件编译用的最多的情况是在头文件中
#inndef 文件名
#define 文件名
声明
#endif
其主要是为了在写头文件时,防止多文件包含对同一个文件多次包含。