C预处理、static和extern
来源:互联网 发布:sql sequence 编辑:程序博客网 时间:2024/05/22 06:05
1、预处理指令:
定义:1>预处理指令是在程序开始编译前执行。
2>全部是#开头。
分类: 宏定义、条件编译、文件包含
作用域:从编写指令开始,一直到文件结尾。
2、宏定义(替换代码)
关键词:#define 宏名值 (宏定义只负责换代码,并不负责运算 值中每个参数要加())
#define count 4 // 会将程序中所有count 转化成4 如果代码中是“count” 则此count不会被替换
#undef 取消define宏的作用。
注:宏名使用大写,变量名用小写。
★带参数的宏定义
一般形式:
#define 宏名(参数列表) 字符串
使用注意:
1> 宏名和参数列表之间不能有空格,否则空格后面的所有字符串都作为替换的字符
2> 带参数的宏在展开时,只作简单的字符和参数的替换,不进行任何计算操作。所以在定义宏时,一般用一个小括号括住字符串的参数
3> 计算结果最好也用括号括起来
与函数的区别
1> 宏定义不涉及存储空间的分配、参数类型匹配、参数传递、返回值问题
2> 函数调用在程序运行时执行,而宏替换只在编译预处理阶段进行。所以带参数的宏比函数具有更高的执行效率
3、条件编译(文件编译时存在)
#if()A // 如果只编译了A,则下面的B和C不会保存在内存中 #elif()B#else()C#endif
注: 1>条件编译只编译宏中定义的语句,且如果elif或else没有判断,则此没有保存在内存中(不参与编译的不会保存在内存中)。
2>endif必须添加
#if defined() 相当于 #ifdef
#if undefined 相当于#ifndef
4、文件包含
注:不允许循环包含(互相包含)。
防止多次包含方法:
#ifndef ...#define ... .....#endif#idndef _TEST // 如果没有定义_TEST,则会运行以下,就是声明test( )函数,如果定义了,就不会进行声明,防止了文件重复包含#define _TESTtest();#endif
5、类型定义 typedef
#typedef int myint; // 将int类型的别名定义为myint
使用场合:
1>基本数据类型
typedef int myint;
2>指针
typedef char * p; // p是名字
3>结构体
typedef struct student{ int age;} stu; //类型名是stu
定义结构体的指针:
typedef struct student * p; // p是名字
4>枚举
定义枚举的2种方式,如下:
/*enum Sex {Man, Women};typedef enum Sex MySex;*/typedef enum Sex { Man, Woman} MySex;int main(){ MySex s = Man; // enum Sex s = Man; ......}
5>指向函数的指针
typedef int (*name)(int , int) // name是以后的名字
6、static和extern
1>对函数的影响
外部函数:定义的函数能被本文件和其他文件访问。(函数默认为外部函数)(其它文件可访问)
注:外部函数不能有重名
内部函数:定义的函数只能被本文件访问,其他文件不能访问。(只有本文件访问)
注:内部函数可以不同文件中函数重名
extern:声明或定义此函数是外部函数。
extern void test();
static:声明或定义此函数是内部函数。
2>对变量的影响
全局变量分类:
外部变量:定义的变量能被本文件和其他文件访问。(其它文件可访问)
注:不同文件中的同名外部变量,都代表着同一个变量。
内部变量:定义的变量只能被本文件访问(只有本文件访问)
3>static对局部变量影响
(1)延长局部变量生命周期,局部变量就不会随着函数调用结束就被销毁,而是等到程序结束后才被销毁。
(内存空间中一直有此变量)
(2)没有改变局部变量的作用域。
使用范围:
(1)某些变量值保持不变。
(2)某些变量值使用频繁
- C预处理、static和extern
- C语言—预处理指令、static和extern、递归
- static、extern和extern "c"
- static和extern c
- 预处理指令、typedef、static和extern
- 黑马程序员——c语言的全局变量和局部变量,static和extern,预处理指令
- 黑马程序员——C语言的关键字 typedef,static,extern和预处理指令
- C语言热身——预处理指令、变量类型、static和extern、结构体、枚举
- C 中 extern 和 static
- C 中 extern 和 static
- C 中 extern 和 static
- C 中 extern 和 static
- C 中 extern 和 static
- C语言extern和static
- C语言extern和static
- 黑马程序员 C语言 - 09 预处理指令、typedef、extern、static
- 黑马程序员——C语言热身——预处理指令、变量类型、static和extern、结构体、枚举
- 黑马程序员--ios基础--c语言--预处理指令、typedef、static和extern、递归
- 坐着纵转卓资赘赘赘族酌驻足转椎庄总走
- I P B 帧和DTS PTS的关系
- 锥桌茁篆孜遵昨谆祝滓子奏佐走族灼砖子
- 正则表达式抓取网页中的邮箱地址
- 纂灼揍拽佐孜子紫柞租捉撰揍最纂壮昨追
- C预处理、static和extern
- liferay spring mvc的实现
- 《海量数据处理》
- (1)Python安装和配置
- 2014.12.7 Shanghai. Game Never Over.
- 《两路归并排序算法》
- 最长共公子序列
- 《如何用STL中的list实现循环链表》
- 结构化风险最小、VC维到SVM的理解