重读C库之宏定义
2024-08-30 08:11:49
1.如何编写头文件.h?
//file--func1.h #ifndef __FUNC1_H //__func1_h //可小写可大写 #define __FUNC1_H //__func1_h ... #endif
2.如何在C++文件使用C库?
#ifdef __cpluscplus extern “C” { #endif //中间是C代码 #ifdef __cpluscplus } #endif
更复杂版本:
3.#undef作用?
在后面取消以前定义的宏定义;一般使用#undef取消一个宏定义后可以再次对其进行新的定义。
4.屏蔽不同芯片数据类型位数差异,如int是16还是32位?统一使用int16_t/int32_t来定义变量。
5.volatile的使用:阻止编译器过优化,被定义的变量每次必须从内存中重新读取数据,而不是从缓存寄存器中读取。
有一个面试题这样问: 一个参数既可以是const还可以是volatile吗?
A:当然可以了,看上面高亮的代码,只读的状态寄存器加上const表示不能被程序修改。
多说几句,volatile关键字的应用场景:
1)并行设备的硬件寄存器;2)一个中断服务子程序中会访问到的非自动变量(Non-automatic variables);3)多线程应用中被几个任务共享的变量。
最新文章
- UIToolbar 莫名黑线条 隐藏办法
- 慕课网Java高并发秒杀学习
- [转]Tomcat----Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
- 再谈CocoaPods
- Asynchronously with NSURLConnection
- github 查看单个文件的历史记录命令
- 【关于php】Appserv的安装注意事项
- 如何将你牛逼的iOS代码分享到CocoaPod(转)
- J - 搞笑版费马大定理
- Redis Sentinel中的机制与原理详解
- Mybatis批量插入、批量更新
- 《Java程序设计》win10系统学前准备
- 用python连接mysql失败总结
- ArcGIS案例学习笔记_3_2_CAD数据导入建库
- Python mysql-表的创建,删除和更新
- C#对json数据的解析
- Silverlight 之 新建项目解析
- 异常:Error:Execution failed for task ':app:compileDebugJavaWithJavac'. >; Compilation failed; see the compiler error output for details.
- C++堆和栈详解(转)
- list容器详解