c - 为什么 UEFI 协议(protocol)头文件为单个协议(protocol) GUID 定义宏和外部全局变量?

标签 c macros uefi

我是 UEFI(统一可扩展固件接口(interface))开发的新手。我正在使用 EDK(EFI 开发套件)。

要创建新协议(protocol),我们需要为协议(protocol)提供 GUID。例如,在BlockIO协议(protocol)的头文件中,我们可以看到:

(MdePkg\Include\BlockIo.h)

宏: enter image description here

全局变量:

enter image description here

并在包声明文件MdePkg.dec中:

enter image description here

为什么我们需要其中 3 个来为协议(protocol)提供 GUID?

(也许这个问题与 C 语言细节有关,所以我也添加了 cmacros 标签。)

最佳答案

全局变量只能由链接到定义它的对象的驱动程序使用(在您的情况下是BlockIo.c)。我认为宏是在头文件中定义的,以便不与该对象链接的驱动程序可以使用宏中的 GUID。

关于c - 为什么 UEFI 协议(protocol)头文件为单个协议(protocol) GUID 定义宏和外部全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32155283/

相关文章:

.net - 如何在调试.NET项目的命令行参数中使用宏?

operating-system - 这些 ACPI 名称是什么意思?

c - 这是缓冲区溢出吗?

数组内字符串中的 C 索引

c - 迭代结构成员的宏

bios - 如何让基于 UEFI EDK2 的 BIOS 自动加载位于其自身固件卷中的驱动程序?

linux - hello efi 的 UEFI 安全启动问题

c - 将标记存储到数组中以便稍后作为参数传递

c - C 计算字符串中字符数的函数

c - GCC 使用 -D 参数定义类似函数的宏