Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将宏调用函数转换为内核内函数?_C_Kernel - Fatal编程技术网

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

C 如何将宏调用函数转换为内核内函数?,c,kernel,C,Kernel,我需要删除内核模块中使用的CEIL宏,并在内核中使用CEIL函数来替换宏的调用者 我试图在参考Linux手册页面时替换ceil函数 我的问题是,是否有可能将这个宏转换为内核函数,即ceil?此外,在代码中,变量“o”和“rsz”被声明为unsigned int,其中as-ceil函数的返回类型为double。如果可能的话,我怎样才能改变它 #define CEIL(a, b) (((a) + (b-1)) / (b)) CEIL(a,b)内核宏与CEIL()C库函数完全不同。它甚至不

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

我试图在参考Linux手册页面时替换ceil函数

我的问题是,是否有可能将这个宏转换为内核函数,即ceil?此外,在代码中,变量“o”和“rsz”被声明为unsigned int,其中as-ceil函数的返回类型为double。如果可能的话,我怎样才能改变它

#define CEIL(a, b)     (((a) + (b-1)) / (b))
CEIL(a,b)
内核宏与
CEIL()
C库函数完全不同。它甚至不需要相同数量的参数


此外,浮点函数(以及一般的浮点数学)在内核中不可用。
头不能在此环境中使用。

不,不能在内核函数中将上述宏转换为ceil,因为内核中没有此类函数。但是如果仔细看一下上面的宏

# include <math.h>
#define CEIL(a, b)     (((a) + (b-1)) / (b))
上述函数是内核函数中DIV_ROUND_的替代函数。因此,您可以在内核中的宏上方放置,并在调用者函数中使用DIV_ROUND_


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

您通常不能在内核中使用浮点。(a)代码导致了什么编译错误?(b)
中的
ceil
函数用于浮点
double
,但显示的
ceil
宏用于整数。您需要浮点上限函数还是整数上限函数?当然,没有理由不能在内核代码中使用整数上限函数。无论您遇到什么编译错误,都是源于代码错误,而不是试图计算比率上限。(c) 您应该显示足够的代码,其他人可以编译它,并亲自查看错误。如果我使用上面的宏,就不会有编译错误。由于内核考虑使用内联函数,所以我想直接删除宏并在内核CEL函数中使用。因此,我试图实现它,你写了“上面的代码给出了编译错误”,上面的代码显示了一个宏定义和使用它的代码。现在您写道,如果“使用上述宏”,则不会出现编译错误。这令人困惑;我们不知道什么代码会出错。编辑您的问题以准确显示给出编译错误的代码,并准确显示错误消息。抱歉,我刚刚编辑了问题。
# include <math.h>
fatal error: math.h: No such file or directory
#define CEIL(a, b)     (((a) + (b-1)) / (b))