汇编:assembly

猜测:所以这个宏跟汇编有关?!

引用:某些常量宏会同时被C和asm引用,而C与asm在对立即数符号的处理上是不同的。asm中通过指令来区分其操作数是有符号还是无符号的,而不是通过操作数。而C中是通过变量的属性,而不是通过操作符。C中如果要指明常量有无符号,必须为常量添加后缀,而asm则通过使用不同的指令来指明。如此,当一个常量被C和asm同时包含时,必须做不同的处理。故KBUILD_AFLAGS中将添加一项D__ASSEMBLY__,来告知预处理器此时是asm。

/* linux-3.08/include/linux/const.h */

/* const.h: Macros for dealing with constants.  */

#ifndef _LINUX_CONST_H
#define _LINUX_CONST_H /* Some constant macros are used in both assembler and
* C code. Therefore we cannot annotate them always with
* 'UL' and other type specifiers unilaterally. We
* use the following macros to deal with this.
*
* Similarly, _AT() will cast an expression with a type in C, but
* leave it unchanged in asm.
*/

/*
* 上边的注释说:一些常量宏同时在汇编和C中使用,然而,我们不能像注释C的常量宏那样加一个“UL”或其他后缀。所以我们需要使用以下的宏解决这个问题。
* 例如调用:#define DEMO_MACRO _AT(1, UL):在C中会被解释为 #define DEMO_MACRO 1UL; 而在汇编中什么都不做,就是: #define DEMO_MACRO 1
*/
#ifdef __ASSEMBLY__
#define _AC(X,Y) X
#define _AT(T,X) X
#else
#define __AC(X,Y) (X##Y)
#define _AC(X,Y) __AC(X,Y)
#define _AT(T,X) ((T)(X))
#endif #endif /* !(_LINUX_CONST_H) */

最新文章

  1. QTP参数化
  2. js数组方法push pop shift unshift的返回值
  3. SeedDms 文档管理系统安装
  4. iOS 中使用Block时需要注意的retain circle
  5. oracle 存储过程基础
  6. HTTP协议(待完善)
  7. linux常用命令:1文件处理命令
  8. OpenCV -- 获取轮廓照片
  9. Hdu3640-I, zombie(模拟+二分)
  10. BZOJ 2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛( dp )
  11. WPF之DatePicker使其只能选择日期,不能输入日期
  12. Android笔记: 在Eclipse环境下使用Genymotion模拟器
  13. 基于 xorm 的服务端框架 XGoServer
  14. 开源ERP-成功案例分析(3)
  15. __x__(47)0910第六天__IE6到IE11对于包含中文路径的png显示问题
  16. windows Apache服务器简单配置虚拟域名(转载)
  17. python 全栈开发,Day46(列表标签,表格标签,表单标签,css的引入方式,css选择器)
  18. Oracle导入的常见语句
  19. Java设计模式学习记录-建造者模式
  20. Caused by: java.lang.IllegalStateException: Method has too many Body parameters

热门文章

  1. 救救孩子吧,到现在还搞不懂TCP的三次握手四次挥手
  2. Android studio 运行程序出现两个apk的解决方案
  3. SpringCloud简记_part2
  4. Java 中几种常用设计模式
  5. Alpha阶段项目复审(鸽牌开发小分队)
  6. OpenGL学习日志(2020.4之前)
  7. SQL分组排序后取每组最新一条数据的另一种思路
  8. Scrapy命令行调用传入自定义参数
  9. laravel+vue+vuetify(下载图片到本地)
  10. Unity WebGL