#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_DATASPI_VAR_FAST。这些似乎也是宏,以允许使用不同的编译器和/或目标系统。

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

#define P2VAR(ptrtype, memclass, ptrclass) ptrtype *


它忽略参数memclassptrclass并扩展为:

uint8 * Spi_FastPointerToApplData;


因此,即使您更改编译器或目标系统,此宏也是一种将源代码保留下来的方法。这就是为什么页面标题为“编译器抽象”的原因。

10-04 10:50