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)多线程应用中被几个任务共享的变量。

重读C库之宏定义的更多相关文章

  1. CURL库的宏定义列表

    列表CURL库一共同拥有17个函数 curl_close:关闭CURL会话 curl_copy_handle:复制一个CURL会话句柄,同一时候3复制其全部參数 curl_errno:返回最后一个错误 ...

  2. iOS 静态库中使用宏定义区分iPhone模拟器与真机---备用

    问题描述 一般项目中,可以使用宏定义来判断模拟器还是真机,这无疑是有效的. #if TARGET_IPHONE_SIMULATOR #define SIMULATOR 1 #elif TARGET_O ...

  3. 解决关于ARM_MATH数学库宏定义的报错

    昨天在建立新工程的时候发现加入含有ARM_MATH库的时候出现了宏定义报错. #error directive:"Define according the used Cortex core ...

  4. Makefile中的特殊宏定义以及实用选项

    Makefile中的一些特殊宏定义的名字跟shell中的位置变量挺相似的. $?    当前目标所依赖的文件列表中比当前目标文件还要新的文件 $@   当前目标我名字 $<   当前依赖文件的名 ...

  5. C中的预编译宏定义

     可以用宏判断是否为ARC环境 #if _has_feature(objc_arc) #else //MRC #endif C中的预编译宏定义 -- 作者: infobillows 来源:网络 在将一 ...

  6. iOS技巧,宏定义

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnoAAAPCCAYAAADvRHWgAAAAAXNSR0IArs4c6QAAAZ1pVFh0WE1MOm

  7. Makefile,如何传递宏定义DEBUG【转】

    转自:http://blog.csdn.net/linuxheik/article/details/8051598 版权声明:本文为博主原创文章,未经博主允许不得转载. Makefile,如何传递宏定 ...

  8. 宏定义中的##操作符和... and _ _VA_ARGS_ _

    1.Preprocessor Glue: The ## Operator 预处理连接符:##操作符 Like the # operator, the ## operator can be used i ...

  9. C语言可变参数在宏定义中的应用

    在C语言的标准库中,printf.scanf.sscanf.sprintf.sscanf这些标准库的输入输出函数,参数都是可变的.在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用 ...

随机推荐

  1. makefile之patsubst函数

    格式:$(patsubst pattern,replacement,text) 名称:模式字符串替换函数--patsubst. 功能:查找text中的单词(单词以"空格".&quo ...

  2. python学习之getdefaultlocale()函数

    def getdefaultlocale(envvars=('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')) 返回一个二元组. >>> local ...

  3. NYOJ 78 圈水池 (入门级凸包)

    题目链接:nyoj 78  单调链凸包小结 题目讲解:本题考查的主要是凸包的用法,算是入门级的吧,当然前提是你接触过,平面几何: AC代码: #include<iostream> #inc ...

  4. 使用 xlue 实现 tips

    经常遇到如下的需求 鼠标hover到目标对象一定时间后,弹出tips或者窗口; 鼠标离开目标对象一定时间后,隐藏tips或者窗口; 鼠标从目标对象移动到弹出的窗口上,这种状况下不隐藏窗口; 考虑到这种 ...

  5. 使用response.setHeader("Content-Disposition","attachment;filename="+fName)下载文件,中文文件名无法显示的问题

    今天遇到这么一个情况,在Action代码中进行文件下载: ActionForm得到file_id,通过file_id进行数据库查询得到file_name以及服务器硬盘上的file_uri,其中file ...

  6. zabbix 源码安装

    操作系统:CentOS IP地址:192.168.21.127 Web环境:Nginx+MySQL+PHP zabbix版本:Zabbix 2.2 LTS 备注:Linux下安装zabbix需要有LA ...

  7. google pr值查询接口

    PR(全称PageRank)是Google衡量一个网站的重要标准之一,从而影响Google搜索结果排名.Google官方提供了查询PR的API,如本站PR值:http://toolbarqueries ...

  8. .net 编码常见问题

    问题一: windows service 启动时需要用死循环来控制程序,如果不开启异步,死循环会导致windows sevice 程序无法启动,代码情况如下 protected override vo ...

  9. <!>贴图/音乐

    <img src=图片位址>贴图 <img src=图片位址 width=’180’>设定图片宽度 <img src=图片位址 height=’30’>设定图片高度 ...

  10. 机器学习之svm---cv wiki svm

    http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/ml/introduction_to_svm/introduction_to_s ...