C語言中if (p==NULL)的是與非

來源:互聯網
上載者:User

部落格園cnblogs不知為何最近開始漸有C語言開發重啟的跡象,不少人開始寫一些C語言的教程。

其中看到一段有趣的留言,提到這個寫法:if (p == NULL),

有人說這是不好的~,經典不提倡的~,會寫錯出問題的~,華為都禁止的~。

我倒是有些不同的看法。

首先這種寫法是有問題,一般來講對於null 指標可以這樣寫

if ( p )

或者反義是這樣 if ( !p )

既簡單,還節省字數。

如果是想寫的比較容易懂,那麼if (p == NULL) 是我提倡的方式。

你可以很簡單的讀成“如果p等於空值”,反過來的方式NULL==p就有些彆扭,不是給人看的。

有人提到p==NULL很容易寫成p=NULL,代碼出錯啦!會有bug啦!

好吧,我承認這是一種可能性,在早期編譯器不完善的時候的確如此。那時候還提倡用匈牙利命名法,因為編譯器對類型識別支援不好,很容易寫出胡亂轉型的代碼(當然現在的C語言也容易)。但是針對正在使用的編譯器以及將來更先進的編譯器,在條件判斷中使用p==NULL不是問題。

做一個很簡單的實驗,使用VC2010,項目設定為compile as C,注意關鍵一點“把warning層級提高到最進階別4”,這時候if (p=NULL
)會得到如下警告:

1>purec.cpp(10): warning C4706: assignment within conditional
expression

很簡單吧,不需要你使用那種反人類常識的代碼規範。

使用GCC(v4.5.2 in Ubuntu11.4)也很容易,它有一個編譯選項-Wall,警告資訊如下:

/home/sun/foobar-sample/main.c:24:2: warning: suggest parentheses around
assignment used as truth value

如果工具支援,為何不使用一種更為合乎閱讀習慣的方式呢,BTW,我尋找了一下經典的K&R,其中==的使用都是我提到的p==0這種方式,其它更為經典的(有嗎?)我就不知道了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.