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

uint8_t is recognized as a data-type but u8 isn't. Why?

我正在学习基于 The Linux Kernel Module Programming Guide

在 Raspbian Jessie 上创建内核模块

目前我在 hello-5.c 部分。我尝试添加 static u8 myByte = 'X'; 但无法识别 u8。然后我将 u8 更改为 uint8_t 这与 AFAIK 相同,并且 uint8_t 被识别为数据类型。

教程的旧版本 here 声明 static 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>

我试过使用旧的,但是 define 部分会产生错误,所以我使用了较新的教程。

那么,为什么uint8_t在新版本中可以识别,而u8不能呢?

因为 u8 不是标准类型,而 uint8_t 是(在 C99 和后来的 <stdint.h> 中有类型定义)。如果您想使用 u8,请包含一个 header 和适当的 typedef,或者在您的代码中对其进行 typedef。