#define P2VAR(ptrtype, memclass, ptrclass) ptrclass ptrtype * memclass
谁能解释这个声明?
最佳答案
当涉及到宏时,C预处理器只是一个简单的搜索和替换机器。 (实际上,并不是那么简单。)
因此,如果您编写示例(从the URL Raymond found无耻复制):
P2VAR( uint8, SPI_VAR_FAST, SPI_APPL_DATA ) Spi_FastPointerToApplData;
它将替换为(此过程通常称为“它将扩展为”):
SPI_APPL_DATA uint8 * SPI_VAR_FAST Spi_FastPointerToApplData;
现在,您将需要了解如何定义
SPI_APPL_DATA
和SPI_VAR_FAST
。这些似乎也是宏,以允许使用不同的编译器和/或目标系统。由于链接页面上的第一个示例显然就是这个(某些微控制器的示例),因此我们假设您想使用另一个编译器和目标系统。这应该是您的PC作为目标的标准C编译器,因为,例如,您将模拟程序。然后,您将提供以下宏定义:
#define P2VAR(ptrtype, memclass, ptrclass) ptrtype *
它忽略参数
memclass
和ptrclass
并扩展为:uint8 * Spi_FastPointerToApplData;
因此,即使您更改编译器或目标系统,此宏也是一种将源代码保留下来的方法。这就是为什么页面标题为“编译器抽象”的原因。