gpt4 book ai didi

c - 如何将宏调用函数转换为内核函数?

转载 作者:行者123 更新时间:2023-11-30 16:19:55 26 4
gpt4 key购买 nike

我需要删除内核模块中使用的CEIL宏,并使用内核中的ceil函数来替换宏的调用者。

我尝试引用Linux手册页替换ceil函数

http://man7.org/linux/man-pages/man3/ceil.3.html#DESCRIPTION

我的问题是是否可以将此宏转换为内核函数,即 ceil ?另外,在代码中,变量“o”和“rsz”被声明为 unsigned int,其中 ceil 函数的返回类型是 double。如果可以的话,我该如何改变它?

#define CEIL(a, b)     (((a) + (b-1)) / (b))
o += (((CEIL(rsz, 1024)) << 1) << n);

将上面的代码编辑为

o += ((ceil(rsz) << 1) << n)

此外,我尝试在 .c 文件中包含数学 header ,即

# include <math.h>

执行时出现编译错误

fatal error: math.h: No such file or directory

最佳答案

不,不能将上述宏转换为内核中的 ceil 函数,因为内核中没有这样的函数。不过,如果仔细看上面的宏,它是

#define CEIL(a, b)     (((a) + (b-1)) / (b))

上述函数是内核函数 DIV_ROUND_UP 的替代函数。因此,可以将上述宏删除到内核中,并在调用函数中使用 DIV_ROUND_UP 。

如果 a 和 b 都是整数,则这是正确的。

关于c - 如何将宏调用函数转换为内核函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55436596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com