枚举类型:
以前很少用到,以为直接定义一些状态变量就行了,干嘛用枚举啊。最近看了一些程序代码,觉得枚举确实在有些地方方便简洁多了,所以就研究总结了一下。
枚举用enum关键字来定义基本类型是enum xxType{xxa,xxb,xxc};
形式很简单,但是有几个地方很容易让人忽略。
1.枚举的元素不是变量,是常量,如果没有显式的进行常量赋值的话,其有默认的赋值,就是第一个元素为0,后面的元素依次加1。
2.枚举定义完之后xxType已经是类型了,可以用这个类型去定义枚举对象xxType Myobject;
3.枚举成员的值可以不是唯一的,比如xxc==1,这个时候xxb和xxc就是相等的。
4.枚举成员的引用可以用xxtype.xxa;
预编译:
很多时候(几乎是无时无刻)我们都需要使用头文件,定义好头文件之后再进行包含。这样可以编译我们对自己的程序进行修改和维护。
在头文件包含之后,编译之前,就必然需要经历一个过程叫做“预编译”。
预编译的时候我们特别需要注意几种情况,首先是避免多重包含,我们不希望一个相同的头文件被多重包含,费时费力。预处理允许我们自定义变量,预处理变量(常量)的名字在程序中年必须是唯一的。任何与预处理变量匹配的名字的使用都关联到该预处理变量。为了避免冲突,预处理变量经常用全大写字母表示。一般都是通过下面语句来实现避免多重包含。
#ifndef XXA_H
#define XXA_H
#endif
这里的话就可以保证这个头文件只被编译一次,XXA_H也可以是其他名字,符合规则都行,但是通常情况下都是头文件名字的大写。
#pragma once 效果也是一样的。只不过上面的形式是C++的专用,#pragma once跨平台好些。
还有一种情况需要注意的,在以前的博客中也有提到,就是头文件循环包含的时候会出现问题。即a.h中包含b.h,然而b.h中又包含a.h。这个问题会导致一些类型未定义的错误,这个错误也是不应该的,其中一个解决方法是不在头文件中包含另外一个头文件,而是在cpp中进行所需头文件包含。至于其他的方法,应该还有很多,这里不做过多的赘述,可进行网上搜索适合自己的解决方案。
头文件包含:
还有一个比较基本的认识就是头文件的包含方式的区别。用尖括号包含的话,就编译器就认为这个头文件是标准头文件。编译器将会在预定义的位置集查找该头文件,这些预定义的位置可以通过设置查找路径环境变量或者通过命令行选项来修改。如果头文件包含在一对引号里,那么认为它是非系统头文件,非系统头文件的查找通常开始于源文件所在的路径。