全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
内核中有很多的宏定义 在宏定义 define 中经常看到两个字符串 和 这里把它的用法做 一下说明 是一个连接符号 用于把参数连在一起 例如 define FOO arg my arg 则 FOO abc 相当于 myabc 是 字符串化 的意思 出现在宏定义中的 是把跟在后面的参数转换成一个字符串 例如 define STRCPY dst src strcpy dst src 则 STRCPY buff abc 相当于 strcpy buff abc 另外 如果 后的参数本身也是一个宏的话 会阻止这个宏的展开 define STRCPY a b strcpy a p b int main char var1 p 20 char var2 p 30 strcpy var1 p aaaa strcpy var2 p bbbb STRCPY var1 var2 STRCPY var2 var1 printf var1 s n var1 p printf var2 s n var2 p return 0 注意这里 STRCPY STRCPY var1 var2 var2 这里是否会展开为 strcpy strcpy var1 p var2 p var2 答案是否定的 展开结果将是 strcpy STRCPY var1 var2 p var2 阻止了参数的宏展开 如果宏定义里没有用到 和 宏将会完全展开 tell you about in common text 关于记号粘贴操作符 token paste operator 1 简单的说 是一种分隔连接方式 它的作用是先分隔 然后进行强制连接 其中 分隔的作用类似于空格 我们知道在普通的宏定义中 预处理器一般把空格 解释成分段标志 对于每一段和前面比较 相同的就被替换 但是这样做的结果是 被替换段之间存在一些空格 如果我们不希望出现这些空格 就可以通过添加一些 来替代空格 另外一些分隔标志是 包括操作符 比如 所以尽管下面的 宏定义没有空格 但是依然表达有意义的定义 define add a b a b 而其强制连接的作用是 去掉和前面的字符串之间的空格 而把两者连接起来 2 举列 试比较下述几个宏定义的区别 define A1 name type type name type type 或 define A2 name type type name type type A1 a1 int 等价于 int name int type A2 a1 int 等价于 int a1 int type 解释 1 在第一个宏定义中 name 和第一个 之间 以及第 2 个 和第二个 type 之间没有被分隔 所以预处理器会把 name type type 解释成 3 段 name type 以及 type 这中间只有 type 是在宏前面出现过 的 所以它可以被宏替换 2 而在第二个宏定义中 name 和第一个 之间也被分隔了 所以 预处理器会把 name type type 解释成 4 段 name type 以及 type 这其间 就有两个可以被宏替换了 3 A1 和 A2 的定义也可以如下 define A1 name type type name type type define A2 name type type name type type 结果是 会把前面的空格去掉完成强连接 得到和上面结果相同的宏定义 3 其他相关 单独的一个 至于单独一个 则表示 对这个变量替换后 再加双引号引起来 比如 define stringify 1 x x 那么 stringify 1 linux linux 所以 对于 MODULE DEVICE TABLE 1 define MODULE DEVICE TABLE type name MODULE GENERIC TABLE type device name 2 define MODULE GENERIC TABLE gtype name extern const struct gtype id mod gtype table attribute unused alias stringify name 得到 MODULE DEVICE TABLE usb products notes struct usb device id products MODULE GENERIC TABLE usb device products extern const struct usb device id mod usb device table attribute unused alias products 注意到 alias attribute 需要一个双引号 所以在这里使用了 stringify name 来 给 name 加上双引号 另外 还注意到一个外部变量 mod usb device table 被 alias 到了本驱动专用的由用户自定义的变量 products 这个外部变量 是如何使用的 更多的信息请参看 probe 过程分析 4 分析方法和验证方式 编写一个简单的 C 程序 用宏定义一个变量 同时用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产品质量控制计划及检验标准方案
- 复古格纹布艺转角沙发创新创业项目商业计划书
- 健康养生部主管健康管理计划与生活方式指导方案
- 仓库管理员面试技巧分享
- Java工程师高薪岗位选择策略如何找到心仪的高薪岗位
- 人力资源全流程管理实操指南及制度模板
- 冶金生产技术员生产效率提升方案
- 中学体育教师先进事迹撰写范例
- 充电桩安装调试员技术创新方案
- 企业节能减排方案与绿色可持续发展计划
- 游戏陪玩平台入驻协议2025
- 新生儿呼吸系统疾病护理评估与干预
- 小儿肺炎健康宣教
- 电焊工考试题及答案下载
- 2025年国考《申论》副省级真题(含答案)
- 2024人教版八年级英语上册Unit5 大单元教学设计
- 2025陕西安康汉滨区招聘城镇社区专职工作人员121人考试参考题库及答案解析
- 口腔门诊护士培训课件
- 电力施工安全风险评估报告
- 牡丹江市烟草公司2025秋招综合管理类岗位面试模拟题及答案
- 轮机安全操作培训内容课件
评论
0/150
提交评论