Linux宏:__ASSEMBLY__

汇编: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) */
时间: 2024-10-10 21:15:40

Linux宏:__ASSEMBLY__的相关文章

linux宏定义

在Objective-C语言源程序中,允许用一个标识符来表示一个字符串,称为宏,被定义为宏的标识符称为宏名.在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去替换,这称为宏替换或宏展开.宏定义是由源程序中的宏定义命令完成的,宏替换是由预处理程序自动完成的.在Objective-C语言中,宏分为有参数和无参数两种. 原文地址:https://www.cnblogs.com/4AMLJW/p/tuuytujrhe.html

Linux内核Makefile文件(翻译自内核手册)

转载自:http://www.cnblogs.com/jason-lu/p/3728198.html --译自Linux3.9.5 Kernel Makefiles(内核目录documention/kbuild/makefiles.txt) kbuild(kernel build) 内核编译器 This document describes the Linux kernel Makefiles 本文当介绍了Linux内核的Makefile === Table of Contents=== 目录

微内核和单(宏)内核的区别

内核按照体系结构分为两类 : 微内核(microkernel)与宏内核(macrokernel). 微内核 是将各种服务功能放到内核之外,自身仅仅是一个消息中转战,用于各种功能间的通讯.宏内核 是将所有服务功能集成于一身,使用时直接调用.ps:服务功能有进程管理,内存管理等. 微内核的系统有WindowNT,Minix,Mach,etc. 宏内核的系统有Unix,Linux,etc. 下面拿Minix(微内核)和Linux(宏内核)举例: Minix与Linux创建新进程的过程比较可以看出二者之

微内核VS宏内核【转】

本文转载自:https://segmentfault.com/a/1190000002711544 内核按照体系结构分为两类 : 微内核(microkernel)与宏内核(macrokernel). 微内核 是将各种服务功能放到内核之外,自身仅仅是一个消息中转战,用于各种功能间的通讯.宏内核 是将所有服务功能集成于一身,使用时直接调用.ps:服务功能有进程管理,内存管理等. 微内核的系统有WindowNT,Minix,Mach,etc.宏内核的系统有Unix,Linux,etc. 下面拿Mini

总结二:Linux系统的常见发行版(发行商)

总结二:Linux系统的常见发行版(发行商) 三大分支: 1.Slackware Slackware Linux是由Patrick Volkerding开发的GNU/Linux发行版.与很多其他的发行版不同,它坚持KISS(Keep It Simple Stupid)的原则. 比较著名分支发行版: S.u.s.E SUSE(发音 /sus/).SUSE Linux 原来是德国的 SuSE Linux AG公司发行维护的Linux发行版,是属于此公司的注册商标.第一个版本出现在1994年年初.20

linux 基础笔记(一)

[1.1]系统的选择 Centos: CentOS(Community Enterprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成.由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用.两者的不同,在于CentOS并不包含封闭源代码软件. Debian: 广义的Debian是指一个致力于创建自由操作系

盘点十大最流行的Linux服务器发行版

随着Linux不断发展,Linux所支持的文件系统类型也在迅速扩充.很多的数据中心服务器上都运行着Linux,可以节省大量的许可证费用及维护费用.但伴随着Linux新版本的发行,其中每一个不同版本的Linux所支持的文件系统类型都有所不同. 那么,对于这种情况来说,Linux系统家族中也划分着针对不同的用户群,比如Ubuntu被认为Linux新用户最容易操作的平台,而Slackware Linux是需要经过有着一定应用基础的用户,CentOS是一个企业级的发行版,特别适合对稳定性,可靠性和功能要

Linux系统配置及服务管理_第01章系统部署

大家好,我是"霸王卸甲"是一个新博主,从今天开始每日在这里为大家更新一篇关于linux方面的文章,如果有问题或者文章有错误的地方请大家私信我,谢谢. 一.GNU/Linux 的历史:自由软件之父 Richard M. Stallman 1984 GNU Copyleft OpenSource Free GPL 既然是历史,就让它成为历史吧......但请记住他们:Linux 之父 林纳斯?本纳第克特?托瓦兹(Linus Benedict Torvalds, 1969年~ ),著名的电脑

No.1 linux运维

一.Linux起源 自由软件之父Richard M. Stallman 1984 GNU Copyleft OpenSource Free GPL既然是历史,就让它成为历史吧..但请记住他们(GNU/GPL)2.Linux 之父林纳斯?本纳第克特?托瓦兹(Linus Benedict Torvalds, 1969年~ ),著名的电脑程序员.黑客.Linux内核的发明人 及 该计划的合作者.托瓦兹利用个人时间及器材创造出了这套当今全球最流行的操作系统(作业系统)内核之 一.现受 聘于开放源代码开发