MOOC——C语言12:程序结构:全局变量、预编译器和宏、大程序结构
来源:互联网 发布:怎样优化直通车 编辑:程序博客网 时间:2024/05/17 06:25
全局变量
定义在函数外面的变量时全局变量。
全局变量具有全局的生存期和作用域。
会自动初始化0值。
如果函数内部存在与全局变量同名的变量,则全局变量被隐藏。
静态本地变量 static
在本地变量定义时加上static修饰符就成为静态本地变量。
当函数离开的时候,静态本地变量会继续存在并保持其值。
静态本地变量的初始化会只会在第一次进入这个函数时做,以后进入函数时会保持上次离开的值。
静态本地变量实际上是特殊的全局变量。 和全局变量位于相同的内存区域。
静态本地变量具有全局的生存期,函数内的局部作用域。
返回指针的函数
返回本地变量的地址是危险的
返回全局变量或静态本地变量的地址是安全。
预编译器和宏
宏定义
#开头的是编译预处理指令
它们不是C语言的成分,但是C语言程序离不开它们
#define用来定义一个宏 #define 名字 值 简单的文本替换。 #define PI 3.1416 后面没有分号,也不要有分号。
宏比较长可以用每行结尾用 \ 指明,表示宏定义未完。
没有值的宏 #define _DEBUG 这类宏是用于条件编译的,后面有其他的编译预处理指令来检查这个宏是否已经定义过。
预定义的宏 __LINE__ __FILE__ __DATE__ __TIME__ ……
带参数的宏
像函数的宏 #define cubx(x) ((x)*(x)*(x))
带参数的宏基本原则:
一切都要括号 :整个值要括号,参数出现的每个地方都要括号.
#define MIN(a,b) ((a)>(b)?(b):(a))
也可以组合(嵌套)使用其他宏。
国外用宏很多,国内较少。
其他编译预处理指令
条件编译error其他
大程序结构
一个源代码文件太长了适合分成几个文件,两个独立的源代码文件不能编译形成可执行的程序。需要放到一个项目中即可完成链接。
头文件:把函数原型放到一个头文件(.h结尾)中,在需要调用这个函数的源代码文件(.c文件)中#include这个头文件,就能让编译器在编译的时候知道函数的原型。
#include 是一个编译预处理指令,和宏一样,在编译之前处理。
#include 两种指出插入文件形式 "xxx.h" <xxx.h>
#include的误区:#include不是用来引入库的, #include<stdio.h>只是为了让编译器知道printf函数的原型,保证调用时给出的参数值是正确的。
头文件一般的做法就是任何.c都应该有对应的同名的.h,把所有对外公开的函数的原型和全局变量的声明都放进去。
不对外公开的函数: 在函数前面加上static就使得它成为只能在所在的编译单元(一个文件)中被使用的函数。
在全局变量前面加上static就使得它成为只能在所在的编译单元中被使用的全局变量。
声明:
int i; 是变量的定义
extern int i; 变量的声明
声明和定义:
声明是不产生代码的东西,定义是产生代码的东西。
对于头文件:
只有声明才可以放在头文件中。 //是通用规则不是强制法律
否则会造成一个项目中多个编译单元里有重名的实体。
标准头文件结构:
#ifndef _XXX_H_
#define _XXX_H_
#endif
运用条件编译和宏,保证这个头文件在一个编译单元中只会被#include一次。
0 0
- MOOC——C语言12:程序结构:全局变量、预编译器和宏、大程序结构
- c语言程序结构,全局变量,局部变量
- C语言:程序结构和语序
- C#——程序结构
- C语言的程序结构
- 单片机C语言程序结构
- C语言程序结构
- C语言的程序结构
- C语言之函数和程序结构
- C语言笔记3--函数和程序结构
- 黑马程序员——C语言——程序结构
- 大程序结构
- C语言第三章:C语言和程序结构
- 单片机C语言-程序结构
- 单片机C语言-程序结构
- 4.C语言之程序结构
- C语言2(程序结构)
- 浅谈c语言基础程序结构
- 单链表操作
- ubuntu14.04源码安装postgresql 9.1
- UVA 1563 - SETI (高斯消元+逆元)
- 网站开发-php开发手机论坛(6)-登陆注册(1)
- 《你真的输不起,别孩子了》——李开复
- MOOC——C语言12:程序结构:全局变量、预编译器和宏、大程序结构
- Android SwipeRefreshLayout 使用
- UVA - 10025 The ? 1 ? 2 ? ... ? n = k problem
- ajax基础
- java中类变量和实例变量的实质区别?
- ZOJ3781 - Paint the Grid Reloaded(最短路)
- 人生旅程需要自己去把握
- ThinkPad E440 Ubuntu 无线驱动总是掉线的问题
- 算法 老鼠迷宫问题