Макрос для объяснения указателя этой строки - PullRequest
0 голосов
/ 12 февраля 2020
#define P2VAR(ptrtype, memclass, ptrclass) ptrclass ptrtype * memclass

Кто-нибудь может объяснить это заявление?

1 Ответ

1 голос
/ 12 февраля 2020

Препроцессор C - это просто машина поиска и замены, когда дело доходит до макросов. (На самом деле, это не так просто.)

Так что если вы напишите, например (беззастенчиво скопированный с URL, найденный Раймондом ):

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. Похоже, это также макросы, позволяющие использовать различные компиляторы и / или целевые системы.

Поскольку этот первый пример со связанной страницы, очевидно, является именно этим, примером для некоторого микроконтроллера, давайте предположим, что вы хотел бы использовать другой компилятор и целевую систему. Это должен быть стандартный C компилятор для вашей P C в качестве цели, потому что, скажем, вы будете имитировать вашу программу. Затем вы предоставите это определение макроса:

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

Он игнорирует параметры memclass и ptrclass и расширяется до:

uint8 * Spi_FastPointerToApplData;

Таким образом, этот макрос является способом оставить один исходный код, даже если вы меняете компиляторы или целевые системы. Именно поэтому страница называется «Абстракция компилятора».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...