keil中使用——變參數宏__VA_ARGS__


本文說的__VA_ARGS__,就是一個可變參數宏,與printf中可變參數的宏定義一個道理,是新C99規范中增加的。

 __VA_ARGS__詳情內容

1.關於__VA_ARGS__

__VA_ARGS__它是一個可變參數的宏,就是將左邊宏中“...” 的內容原樣抄寫在右邊 __VA_ARGS__ 所在的位置。

要注意的是,printf 的輸出格式是括號內左邊是字符串,右邊是變量,而且右變量與左輸出格式是一一對應的,不對應就會出錯。可以參看下面那個例子, __VA_ARGS__其實是遵循了printf的格式。

...缺省號代表一個可以變化的參數表。使用保留名 __VA_ARGS__ 把參數傳遞給宏。當宏的調用展開時,實際的參數就傳遞給 printf()了。

 2.實例說明

#define SENSOR_Printf(...)  printf("--SENSOR--"__VA_ARGS__)

int TemperatureVal = 25;

SENSOR_Printf("溫度 = %d℃\n", TemperatureVal);

 

輸出結果:

--SENSOR--溫度 = 25℃

 

用心的朋友可能會猜測的到:“...”類似等於“__VA_ARGS__”。

 

從例子中我們可以看得出來,__VA_ARGS__的用途,主要是用於可變參數的函數。我們使用較多的printf就是最常見的一個。

如果我們的工程很龐大,我們就可以將打印信息分類,這樣的好處就是方便我們識別各類打印信息。

 

我自己在項目中使用的方法如下:

#define _MSG_DBG(...)   SEGGER_RTT_printf(0, __VA_ARGS__);      //RTT打印

如果不想打印,就使用下面的:

#define _MSG_DBG(...) 

即可

 

參考了strongerHuang 的博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM