volatile
volatile表示可以被某些编译器未知的因素更改,多被用在嵌入式编程,它和const对应。
通常我们这么做,是告诉编译器,这个变量是可变的。就像const告诉编译器这是只读的一样。volatile的对象,可
以被操作系统、硬件或者其它线程等改变。由于访问寄存器的速度要快过随机存储器(RAM),所以编译器一般都会作
减少存取外部RAM的优化。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对
特殊地址的稳定访问。
inline
inline目的:用来定义一个类的内联函数
推出的目的:也正是为了取代这种表达式形式的宏定义,它消除了宏定义的缺点。
主要目的:为了优化程序,让系统编译时节约时间。
inline说明对编译器来说只是一种建议,编译器可以选择忽略这个建议。
比如:你将一个长达999行的函数指定为inline,编译器就会忽略这个inline,将这个函数还原成普通函数。
在何时使用inline函数:
1、你可以使用inline函数完全取代表达式形式的宏定义。
2、内联函数一般只会用在函数内容非常简单的时候,这是因为,内联函数的代码会在任何调用它的地方展开,
如果函数太复杂,代码膨胀带来的恶果很可能会大于效率的提高带来的益处。内联函数最重要的使用地方是用于类的
存取函数。
但是也有缺点哦,就是有些操作复杂的就不要用inline,否则编译器会按照最开始构建结果的进行处理。简单的赋值操
作可以用inline。
#pragma预处理指令
#pragma+空格+参数(每个编译器会有所不同,要注意)
1、message 参数
参数能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。
使用方法: #pragma message("打印信息")
2、once 参数
方式一: #ifndef _SOMEFILE_H_ #define _SOMEFILE_H_ …… // 一些声明语句 #endif
方式二: #pragma once ……// 一些声明语句
3、warning参数
#pragma warning(push)保存所有警告信息的现有的警告状态。
#pragma warning(push,n)保存所有警告信息的现有的警告状态,并且把全局警告等级设定为n。
#pragma warning(pop)向栈中弹出最后一个警告信息,
4、data_seg参数
1,#pragma data_seg()一般用于DLL中。最关键的是:这个数据段中的全局变量可以被多个进程共享
2,共享数据必须初始化,否则微软编译器会把没有初始化的数据放到.BSS段中,从而导致多个进程之间的共享行为
失败。例如:
#pragma data_seg("MyData")
intg_Value;//Notethattheglobalisnotinitialized.
#pragma data_seg() //DLL提供两个接口函数:
int GetValue() {
return g_Value;
}
void SetValue(int n) {
g_Value=n;
}
巧用方法:
如果你觉得有些警告没必要,比如未引用的形参,编码错误……就可以用这个预处理方法去掉
#pragma warning(disable:4100)
#pragma warning(disable:4819)