Linux uint8_t被识别为数据类型,但u8不是。为什么?

Linux uint8_t被识别为数据类型,但u8不是。为什么?,linux,linux-kernel,c,raspbian,kernel-module,Linux,Linux Kernel,C,Raspbian,Kernel Module,我正在学习基于 目前我是一部分。我尝试添加静态u8 myByte='X';但u8未被识别。然后我用uint8_t更改了u8,这与AFAIK相同,uint8_t被识别为数据类型 本教程的旧版本规定了静态u8 myByte='X';,所以我想在更新的教程中重复使用它 旧教程包括以下内容: #define MODULE #define LINUX #define __KERNEL__ #include <linux/module.h> #include <linux/kernel.

我正在学习基于

目前我是一部分。我尝试添加静态u8 myByte='X';但u8未被识别。然后我用uint8_t更改了u8,这与AFAIK相同,uint8_t被识别为数据类型

本教程的旧版本规定了静态u8 myByte='X';,所以我想在更新的教程中重复使用它

旧教程包括以下内容:

#define MODULE
#define LINUX
#define __KERNEL__

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
而较新的教程包括这些

#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/stat.h>
我试过使用旧的,但是定义部分会产生错误,所以我使用了更新的教程


那么,为什么在较新版本中可以识别uint8\u t而在较新版本中不能识别u8?

因为u8不是标准类型,而uint8\u t在C99及更高版本中是类型定义的。如果要使用u8,请在代码中包含一个带有适当typedef的标题,或将其typedef。

因为u8不是标准类型,而uint8_t在C99及更高版本中是typedef'd。如果您想使用u8,请在代码中包含一个带有适当typedef的标题,或者将其typedef。

恐怕这个问题超出了这个特定站点的范围,但在Stackoverflow或Unix.stackexchange上可能会做得更好。哦,这实际上回答了我的问题。谢谢寻求调试帮助的问题此代码为什么不起作用?必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小的、完整的和可验证的示例。@widiwidyanto查看和读取LDD3。“你会在那里找到答案的。”奥拉夫我想我已经解释得很清楚了。我想尝试静态u8 myByte='X';但是只有当我使用静态uint8_t myByte='X'时,它才被识别出来。我担心这个问题超出了这个特定站点的范围,但在Stackoverflow或Unix.stackexchange上可能会做得更好。哦,这实际上回答了我的问题。谢谢寻求调试帮助的问题此代码为什么不起作用?必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小的、完整的和可验证的示例。@widiwidyanto查看和读取LDD3。“你会在那里找到答案的。”奥拉夫我想我已经解释得很清楚了。我想尝试静态u8 myByte='X';但它只有在我使用静态uint8_t myByte='X'时才被识别,这不是完全正确的答案。虽然它确实是一种非标准类型,但它在Linux内核中被广泛使用。我想问题不在于类型本身,而在于它作为模块参数的使用。在任何情况下,都没有提供代码来查看作者实际做了什么。我想在旧版本@0andriy中添加静态u8 myByte='X',答案是正确的。u8不是标准类型。它在内核中的使用是C99之前的遗留,在C99之前,标准中没有固定宽度的类型。Linux内核没有设置标准与否。然而,对于内核,我们应该坚持使用这些剩余的类型,但是对于其他新项目,我们应该使用标准类型。非常感谢@Widiwidianto,不。在内核中最好使用u8、u16等。如果导出到用户空间,则必须使用uuu8、uuu16等。这不是完全正确的答案。虽然它确实是一种非标准类型,但它在Linux内核中被广泛使用。我想问题不在于类型本身,而在于它作为模块参数的使用。在任何情况下,都没有提供代码来查看作者实际做了什么。我想在旧版本@0andriy中添加静态u8 myByte='X',答案是正确的。u8不是标准类型。它在内核中的使用是C99之前的遗留,在C99之前,标准中没有固定宽度的类型。Linux内核没有设置标准与否。然而,对于内核,我们应该坚持使用这些剩余的类型,但是对于其他新项目,我们应该使用标准类型。非常感谢@Widiwidianto,不。在内核中最好使用u8、u16等。如果将其导出到用户空间,则必须使用uuu8、uu16等。