位域
当程序需要将二进制数据传递给另一个程序或硬件设备的时候,通常使用位域,位域在内存中布局是和机器相关的。
typedef unsigned int Bit;
class File{
Bit mode: 2;
Bit modified:1;
Bit prot_owner: 3;
Bit prot_group: 3;
Bit prot_world: 3;
};
作为类的private成员位域只能从成员函数的定义和类的友元访问。
volatile限定符
volatile的确切含义与机器有关,只能通过阅读编译器文档来理解。
直接处理硬件的程序常具有这样的成员,它们的值由程序本身直接控制之外的过程所控制。
例如,程序可以包含由系统时钟更新的变量。当可以用编译器的控制或检测之外的方式改变对象值的时候,应该声明为volatile。
volatile是给编译器的指示,指出对这样的对象不应该执行初始化。
链接指示:extern "C"
编译器一般必须产生不同的代码来调用用其他语言编写的函数
链接指示两种形式:单个的或复合的
链接指示不能出现在类定义或函数定义的内部,必须出现在函数的第一次声明上。
extern "C" size_t strlen(const char*);
extern "C" {
int strcmp(const char*, const char*);
char* strcat(char*,const char*);
}
C++的cstring头文件可以像这样:
extern "C"{
#include<string.h>
}
假定头文件中的所有普通函数声明都是用链接指示的语言编写的函数。
链接指示支持的语言:Ada,FORTRAN等,随编译器而变。
编写函数所用的语言是函数类型的一部分。
extern "C" void f1(void(*)(int));
extern "C" typedef void FC(int);
void f2(FC*);