C语言笔记之程序结构

全局变量:定义在函数外面的变量是全局变量。
全局变量具有全局的生存期和作用域,与任何函数都无关,在任何函数内部都可以使用它们。没有初始化的全局变量会得到0值,指针会得到NULL值,只能用编译时刻已知的值初始化全局变量,初始化发生在main函数之前。如果函数内部存在与全局变量同名的变量,则全局变量被隐藏。

静态本地变量:本地变量定义时加上static修饰符就成了静态本地变量,当函数离开的时候,静态本地变量继续存在并保持其值。
静态本地变量的初始化只会在第一次进入函数时做,以后进入函数时会保持上次离开的值。静态本地变量实际上就是特殊的全局变量。它们位于相同的内存区域。
静态本地变量具有全局的生存期,内部的局部作用域。
static的意思是局部作用域,本地可访问。
返回本地变量的地址是危险的。返回全局变量和静态本地变量的地址是安全的。返回函数内malloc的内存是安全的,但是容易造成问题。最好的做法是返回传入的指针。

注:
不要使用全局变量在函数之间传递参数和结果;
尽量避免使用全局变量;
使用全局变量和静态本地变量的函数是线程不安全的。

编译预处理指令:
“#”开头的是编译预处理指令;
不是C需要的成分,但也离不开他们;
#define用来定义一个宏:
#define<名字><值>
注意没有结尾的分号,因为不是C的语句
名字必须是一个单词,值可以是任何东西
在C语言的编译器开始编译之前,编译预处理程序(cpp)会把程序中的名字换成值
完全的文本替换
gcc–save-temps

宏:如果一个宏中有其他宏的名字,也是被替换的。如果一个宏的值超过一行,最后一行之前的行末需要加\,宏的值后面出现的注释不会被当做宏的值的一部分。
没有值的宏:#define_DEBUG
这类宏是用于条件编译的,后面有其它的编译预处理指令来检查这个宏是否被定义过了。

带参数的宏的原则:
一切都要括号,整个值要括号
参数出现的每个地方都要括号
可以带多个参数,也可以组合,嵌套,使用其它宏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值