说明特定的C #define的工作原理

问题描述 投票:0回答:1

[我一直在http://www.netlib.org/fdlibm/处查看一些代码,以了解某些功能的工作方式,并且我在查看e_log.c的代码以及在代码的某些部分显示的内容:

hx = __HI(x);       /* high word of x */
lx = __LO(x);       /* low  word of x */

__ HI(x)和__LO(x)的代码是:

#define __HI(x) *(1+(int*)&x)
#define __LO(x) *(int*)&x

我真的不理解,因为我不熟悉这种类型的C。有人可以向我解释__HI(x)和__LO(x)在做什么吗?稍后在该函数的代码中也有一条语句:

__HI(x) = hx|(i^0x3ff00000);

有人可以向我解释一下如何使一个函数等于某物(我通常使用python,所以我真的不知道发生了什么)?总而言之,__ HI(x)和__LO(x)的作用以及程序对x的“高位字”和“低位字”的含义是什么。还有一个函数如何等于某物。

c algorithm function
1个回答
0
投票

#define A B

preprocessor指令,在编译之前在整个源代码中用文字B替换文字A。

#define A(x) B

是类似函数的预处理器宏,它使用参数x进行参数化的预处理器替换。在这种情况下,B也可以B是x的函数。

您的宏

#define __HI(x) *(1+(int*)&x)
#define __LO(x) *(int*)&x

// called as
__HI(x) = hx|(i^0x3ff00000);

由于这只是代码替换的问题,因此分配是完全合法的。为什么?因为在两种情况下,宏都用R-value替换。

在两种情况下,该右值都是int类型的变量:*带x的地址*将其转换为指向int的指针*尊重它(在__LO()的情况下)*加1,然后在__HI ()时遵从。它实际指向的内容取决于体系结构,因为指针算法实际上取决于体系结构。

© www.soinside.com 2019 - 2024. All rights reserved.