Thursday, July 13, 2017
C/C++中避免unused variable造成報錯的方法(void cast of argc/argv)
一些Signal handler或是Thread(CMSIS-RTOS)的建立會要求你的的函數強制吃一些argument。
當你的compiler開 -Werror -Wall -Wunused-variable選項時,這些未被使用的變數會報錯。
這時有兩個解法。
1.void cast
例如:
void f(void * argc)
{
(void) argc;
}
這會無害的去用到這個變數。
2.自己等於自己
例如:
void f(void * argc)
{
argc = argc;
}
這兩招就是欺騙compiler這些變數已經被使用。
我第一次看到這寫法真的嚇到了。
以下是stackoverflow的討論。
https://stackoverflow.com/questions/21045615/what-does-voidvar-actually-do
https://stackoverflow.com/questions/8052091/void-cast-of-argc-and-argv?rq=1
Subscribe to:
Post Comments (Atom)
精選文章
使用Ardunio Atmega2560 連接 nRF24L01+
使用Ardunio Atmega2560 連接 nRF24L01+ 關於library 目前主流有 https://github.com/maniacbug/RF24 與 https://github.com/TMRh20/RF24 這兩個。 其中TMRh20大大做...
-
L3G4200 gyroscope使用筆記 特性與參數 用途:量測姿態 精度:250/500/2000 dps (degree per second) 輸出資料:為angular rate(角速度) ,16bit 原始感應器電壓(僅有晶片):2.4V ~3.6V ...
-
PWM簡述 PWM為Pulse Width Modulation的縮寫,對於只有high和low的數位訊號來說,如何用high,low比率調整出類似類比訊號為PWM的用處,另外大多數馬達也透過PWM來驅動轉速,LED由於只吃固定電壓,所以常用PWM來調整亮度。 du...
-
Arduino TLC5940與伺服馬達 TLC5940介紹 TLC5940是TI的16 channel LED驅動晶片。可以支援同時16通道的PWM灰階輸出,解析度為4096階。同時有兩種模式 12 bit (4096 Steps) Grayscale PWM C...
No comments:
Post a Comment