原创

C++中volatile、inline和pragma

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://shazhenyu.blog.csdn.net/article/details/52327833

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)

文章最后发布于: 2016-09-01 13:37:58
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 代码科技 设计师: Amelia_0503

分享到微信朋友圈

×

扫一扫,手机浏览