------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
1.枚举类型的定义:
结构体一样,先定义enum类型,再定义变量名。
Enum season
{
//和结构体的区别,里面的这些属性都是整体常量,值从0开始递增,也可以修改其值。
Spring,
Summer,
Autumn,
winter
};
Enum season jijie=summer;
Printf(“%d\n”,jijie);//值为1
用途:当我们的变量是固定取值的时候,我们用枚举类型来表示,阅读性强,方便同事交流。
2.预处理定义:
预处理指令主要是代码在编译工具翻译成0和1前执行的,程序中以“#”开头的都属于预处理指令。主要有三种预处理指令:1>宏定义 2>条件编译3>文件包含
预处理指令的位置可以随意放置,但是作用域的范围是从定义的那一行到文件的结束。
1> 宏定义:
(1) 不带参数。#define COUNT 8 #undef结束宏定义
(2) 带参数。 #define squar(a) ((a)*(a)) //特别重要,参数a不加括号是不严谨的。必须理解宏定义的参数只是进行替换,不会参与运算,带参数的宏定义效率比函数高。
2>条件编译顾名思义就是满足一定的条件才进行编译,否则不编译。好处就是减少编译器的负担,同时还可以杜绝重复定义。格式:
#if () #elif() #else #endif 还有可以#ifndef A #define #endif #ifdef B #define #endif
3>#include<> 与#include””的区别在于<>包含的是系统的头文件,而””是用户自己定义的头文件,包含的实质就是拷贝一份文件。
3.#typedef 作用:
给已经存在的类型起一个新的类型名,使用场合:
1> 所有的基本数据类型 例:typedef int MyInt
2> 指针 例:typedefchar* String
3> 结构体 例:typedefstruct Person{ int ages;}NewPerson;
NEWPerson p={20};j结构体指针也是类似,在NEWPerson前加*。
4> 枚举类型 例:跟结构体一样,在此不写。
5> 指向函数的指针 例:这个比较特殊,typedefint *Mypiont(in tint ); Mypoint=sum;
4.Static 与extern的比较
1> static定义和声明一个内部函数,函数只能在本文件内使用,作用域从定义的那一行起到本文件的结束。
修饰全局变量:只能在本文件内使用,作用域从定义的那一行到本文件的结束。
修饰局部变量:只能在块模块(函数)内部使用,当块模块执行完之后内存不销毁,继续调用块模块,值仍然保留上一次的。
2> extern定义和声明一个外部函数,其中关键字可省略。函数在本文件或其它文件都能调用,作用域从定义那一行到文件的结束。
Extern声明和定义的全局变量能被其它文件访问,如果其它文件同样定义了同一全部变量,那么使用时将共享同一块内存的变量。
带有extern的变量在函数(块模块)里面仍然可以作为全局变量被使用。
补充:static法则:
1>若全局变量仅在单个C文档中访问,则能够将这个变量修改为静态全局变量,以降低模块间的耦合度;
2>若全局变量仅由单个函数访问,则能够将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
3>设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;