[英]Macro for pointer explanation of this line
#define P2VAR(ptrtype, memclass, ptrclass) ptrclass ptrtype * memclass
誰能解釋這個聲明?
當涉及到宏時,C 預處理器只是一個簡單的搜索和替換機器。 (實際上,並沒有那么簡單。)
因此,如果您編寫示例(從Raymond 發現的 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
是如何定義的。 這些似乎也是宏,可以使用不同的編譯器和/或目標系統。
由於鏈接頁面中的第一個示例顯然就是這個,一些微控制器的示例,讓我們假設您想要使用另一個編譯器和目標系統。 這應該是您的 PC 的標准 C 編譯器作為目標,因為,比方說,您將模擬您的程序。 然后你將提供這個宏定義:
#define P2VAR(ptrtype, memclass, ptrclass) ptrtype *
它忽略參數memclass
和ptrclass
並擴展為:
uint8 * Spi_FastPointerToApplData;
所以這個宏是一種不影響源代碼的方法,即使你改變了編譯器或目標系統。 這就是該頁面標題為“編譯器抽象”的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.