TIR: 為何將不使用的變量強制轉(zhuǎn)換為void

Thinking In Redis


閱讀redis源碼時看到如下代碼:

static void redisAeReadEvent(aeEventLoop *el, int fd, void *privdata, int mask) {
    ((void)el); ((void)fd); ((void)mask);

    redisAeEvents *e = (redisAeEvents*)privdata;
    redisAsyncHandleRead(e->context);
}

發(fā)現(xiàn)redisAeReadEvent的三個變量 el, fd, mask 的使用上很特別: 函數(shù)體中均用void做了強制轉(zhuǎn)換, 但是其他地方?jīng)]有使用的. 就個人常識而言, 這種強制轉(zhuǎn)換沒有任何實現(xiàn)層面的意義, 為何redis的作者要如此為之.

百思不解, 于是決定將((void)el); ((void)fd); ((void)mask); 這段代碼刪了試試會發(fā)生什么:

src git:(dev) ? make
    CC release.o
    CC sentinel.o

sentinel.c:271:43: warning: unused parameter 'el' [-Wunused-parameter]
static void redisAeReadEvent(aeEventLoop *el, int fd, void *privdata, int mask) {
                                          ^
sentinel.c:271:51: warning: unused parameter 'fd' [-Wunused-parameter]
static void redisAeReadEvent(aeEventLoop *el, int fd, void *privdata, int mask) {
                                                  ^
sentinel.c:271:75: warning: unused parameter 'mask' [-Wunused-parameter]
static void redisAeReadEvent(aeEventLoop *el, int fd, void *privdata, int mask) {

編譯器給出了警告, 說 el, fd, mask 三個變量沒有使用過.
恍然大悟: 原來做'多此一舉'的強制轉(zhuǎn)換是為了消除編譯器警告, 告訴編譯器這些變量我用過了, 你就別給我發(fā)警告了.

通常redis中用UNUSED宏來處理不使用的變量:

/*server.h: Anti-warning macro... */
#define UNUSED(V) ((void) V)

總結(jié):
在c語言編程中類似的處理技巧還是很普遍的, 特別是在一些接口編程中, 函數(shù)簽名是定義好的, 具體實現(xiàn)中可能有些變量用不上, 可以采用這種人為將無用變量強制轉(zhuǎn)換為void的方式, 消除編譯器警告.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,539評論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,643評論 18 399
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,209評論 2 33
  • 走最平凡的路 不單是眾多腳印 還有隱衷下 顯得自得其樂的神情 記得一曲高歌 適當時辰難以保存 方才平靜的水紋 冷風...
    我是個詩人閱讀 187評論 0 3
  • 這世界上 有一種很動聽的語言 不通過言語 只通過旋律 那跳動的音符 仿佛漂浮在言語之上 我們不曾學過 卻早已躍然于...
    詩一般的夕陽閱讀 330評論 0 2

友情鏈接更多精彩內(nèi)容