C 用于解释此行指针的宏

C 用于解释此行指针的宏,c,pointers,macros,C,Pointers,Macros,有人能解释这个声明吗?对于宏来说,C预处理器只是一个简单的搜索和替换机器。(事实上,事情并没有那么简单。) 例如,如果你写(无耻地抄袭): 将替换为(此过程通常称为“它将扩展到”): 现在您需要知道如何定义SPI\u APPL\u DATA和SPI\u VAR\u FAST。这些似乎也是宏,用于支持使用不同的编译器和/或目标系统 由于链接页面中的第一个示例显然就是这个,一些微控制器的示例,让我们假设您希望使用另一个编译器和目标系统。这应该是一个标准的C编译器,用于您的PC作为目标,因为,比方说,

有人能解释这个声明吗?

对于宏来说,C预处理器只是一个简单的搜索和替换机器。(事实上,事情并没有那么简单。)

例如,如果你写(无耻地抄袭):

将替换为(此过程通常称为“它将扩展到”):

现在您需要知道如何定义
SPI\u APPL\u DATA
SPI\u VAR\u FAST
。这些似乎也是宏,用于支持使用不同的编译器和/或目标系统

由于链接页面中的第一个示例显然就是这个,一些微控制器的示例,让我们假设您希望使用另一个编译器和目标系统。这应该是一个标准的C编译器,用于您的PC作为目标,因为,比方说,您将模拟您的程序。然后,您将提供以下宏定义:

SPI_APPL_DATA  uint8 *  SPI_VAR_FAST  Spi_FastPointerToApplData;
它忽略参数
memclass
ptrclass
,并扩展为:

#define P2VAR(ptrtype, memclass, ptrclass) ptrtype *
因此,即使您更改了编译器或目标系统,此宏也是一种不使用源代码的方法。这就是为什么页面标题为“编译器抽象”。

您在哪里找到它(URL)?你能展示一下它是如何使用的吗<代码>P2VAR(常量、整数、变量)=&some_整数?现在还不清楚目的是什么——如果没有更多的上下文,就不可能可靠地说出目的是什么。“p2var”代表“指向变量的指针”。
SPI_APPL_DATA  uint8 *  SPI_VAR_FAST  Spi_FastPointerToApplData;
#define P2VAR(ptrtype, memclass, ptrclass) ptrtype *
uint8 * Spi_FastPointerToApplData;