Препроцессор 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;
Таким образом, этот макрос является способом оставить один исходный код, даже если вы меняете компиляторы или целевые системы. Именно поэтому страница называется «Абстракция компилятора».