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

No comments:

Post a Comment

精選文章

使用Ardunio Atmega2560 連接 nRF24L01+

使用Ardunio Atmega2560 連接 nRF24L01+ 關於library 目前主流有 https://github.com/maniacbug/RF24 與 https://github.com/TMRh20/RF24 這兩個。 其中TMRh20大大做...