黑马程序员--C语言--预处理指令、枚举、Typedef、递归函数、变量作用域
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了黑马程序员--C语言--预处理指令、枚举、Typedef、递归函数、变量作用域,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2666字,纯文字阅读大概需要4分钟。
内容图文
一、预处理指令
1>所有的预处理指令都是以#号开头;
2>预处理指令是在代码翻译成0,1之前执行;
3>预处理指令最后没有分号;
4>预处理指令的位置可以随便写;
5>预处理指令有作用域,从编写指令的那一行开始,一直到文件结尾,可以用#undef取消宏定义的作用;
预处理指令分3种
1> 宏定义
2> 条件编译
3> 文件包含
二、宏定义
1. 宏定义命名规则:
1>大写字母
1#define COUNT
2>k开头首字母大写 #define kCount
2. 宏定义开始和结束,注意结尾处没有分号:
1 #define kCount 4 23.... 45#undef kCount 6789char * name = “COUNT”;
则此时的COUNT不是宏定义,在双引号中的宏是字符串
3. 带参数的宏定义,效率比函数高,
1 /* #define sum(v1, v2) v1+v2 这种定义存在漏洞 2 3 正确的书写格式应为: 4 */ 5 #define sum(v1,v2) ((v1)+(v2))
这样可以让计算的结果为正确结果,要保持变量的整体性和表达式的整体性
注意:
1>表达式中几乎每一个参数都加小括号;
2>宏定义计算只是纯粹的文本替换;
3>宏定义是在编译时调用,函数是在运行时调用;
三、条件编译
条件编译格式:变量一般为宏定义名称
1 // 1> 2 #if defined kCount /#ifdef kCount 3 4... 5 6#endif 7//2> 8#ifndef kCount 910... 1112#endif
条件编译和函数中的条件语句比较:
条件语句:
1>条件语句在编译时所有的if-else都要翻译成0,1,
2>在程序运行时执行;
条件编译:
1>只有符合条件的语句翻译成0,1,其他条件不符合的不翻译;
2>在编译时执行;
四、文件包含
1><>表示的是系统自带的文件,“”表示的是用户自定义的文件;
2>不允许循环包含文件,例如:a.ha中包含b.h,b.h中包含a.h;
3>函数的声明可以引入多行,例如:
1 #include “lisi.h” 2 3 ... 4 5 #include “lisi.h” 6 7 #include <stdio.h> 8 9... 1011 #include <stdio.h>
系统不会报错,但是不建议这样写
4>一般在头文件中写入:
1 #ifndef LISI_H 2 3 #define LISI_H 4 5int sum(int v1, int v2); 6 7//..... 8 9//函数的声明;1011#endif
这样写目的:引入头文件是,进行判断,只引入一次头文件;#include “lisi.h”
5>头文件中定义的宏名,一般以头文件名称的大写LISI_H,定义的宏的值可以为空
#define LISI_H 123 其中123可以不写
6>注意:一般一个头文件对应一个宏,宏名以头文件名命名
五、枚举类型
格式:enum 类型名称
{
值1,//注意此处为逗号,不是分号
值2,
...
};
enum Season { Spring; Summer; Autumn; Winter; }; enum Season s = 122;//这样定义的变量也是可以的,因为c语言为弱语言,所以这样可以通过 //枚举类型注意: typedef enum { SexMan, SexWoman } Sex; //命名规范示例
六、Typedef
1 Typedef作用:起别名 2 // 1> 3 typedef int Interger; 4//2> 5 typedef char * string; 6//3> 7 typedef struct student stu; 8//4> 9 typedef enum Season season; 10//5>11 typedef int (*MyPointer)(int, int);// 指向函数的指针126> 13 typedef struct Person 1415{ 1617int age; 1819} myPerson; 20217>typedef enum Week 2223{ 2425monday; 2627tuesday; 2829wendsday; 3031} myWeek; 323334//使用宏定义起别名: 35//1>36#define Interger int 3738#define string char * 39//2>40 typedef int Interger; 4142 typedef char * string;
七、递归函数
递归的两个条件:
1>函数自己调用自己;
2>必须有个明确的返回值。
递归函数的步骤:
1>找规律,找出前一个数据跟当前数据的关系(一般为归纳数列);
2>找出可以设置特定值的数值,一般为最小数值的位置,例如n=1;
3>
1 int pow2(int b, int n) 23{ 45if(n<=0) return1; 67return pow2(b,n-1)*b; 89 }
根据列出的关系式书写函数,例如此函数的关系表达式:b的n次方 = b的n-1次方*b;
直接将此关系式套用到pow2(b,n-1)*b中;
递归函数最重要的是找规律。
八、Extern和static
区别:
Exter外部函数,定义的函数可以被本文件和其他文件访问,不允许有两个名称相同的文件;
Static内部函数,定义的函数只能被本件访问,其他文件不能访问,如果要访问,可以利用extern函数间接访问;
static修饰局部变量的使用场合:
1>如果某个函数的调用频率特别高;
2>这个函数内部的某个变量值是固定不变的;
原文:http://www.cnblogs.com/zsling/p/4178436.html
内容总结
以上是互联网集市为您收集整理的黑马程序员--C语言--预处理指令、枚举、Typedef、递归函数、变量作用域全部内容,希望文章能够帮你解决黑马程序员--C语言--预处理指令、枚举、Typedef、递归函数、变量作用域所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。