C語言編程容易混淆的幾個(gè)問題總結(jié)

轉(zhuǎn)自:mp.weixin.qq.com/s/YmNcEX9S41K21POsE552iA

【嵌牛導(dǎo)讀】:在進(jìn)行單片機(jī)開發(fā)時(shí),經(jīng)常都會(huì)出現(xiàn)一些很不起眼的問題箕昭,這些問題其實(shí)都是很基礎(chǔ)的c語言知識(shí)點(diǎn)落竹,是一些小細(xì)節(jié)旭愧。但是正是因?yàn)楹芑A(chǔ)去扣,又都是小細(xì)節(jié)怪与,所以我們往往容易忽視它們。結(jié)果有時(shí)候我們會(huì)花很長(zhǎng)的時(shí)間糾結(jié)一個(gè)問題,遲遲找不到問題的所在遍愿。當(dāng)發(fā)現(xiàn)原因竟然是這么的簡(jiǎn)單和不起眼時(shí)存淫,我想大家都會(huì)感到痛不欲生。筆者今天又碰到了這樣的問題错览,實(shí)在忍不住了纫雁。因?yàn)檫@些問題都是小的知識(shí)點(diǎn)煌往,考慮到之前也遇到好多這種問題倾哺,于是決定每次遇到問題就記錄下來,時(shí)刻提醒自己!!

【嵌牛鼻子】:?jiǎn)栴}總結(jié)刽脖、c語言編程

【嵌牛提問】:在進(jìn)行單片機(jī)開發(fā)時(shí)羞海,我們會(huì)遇到許多編程上的問題,這些問題會(huì)耗費(fèi)我們大量時(shí)間曲管,如此以往却邓,我們?cè)撊绾我?guī)避呢?

【嵌牛正文】:

1. !和~不一樣

! :邏輯非符號(hào)院水;

~:是位取反符號(hào)腊徙;

對(duì)IO口某個(gè)管腳賦值時(shí)不要錯(cuò)用 !民傻,如

1. <<和>>的優(yōu)先級(jí)低于+、-

比如要實(shí)現(xiàn)c=x*2+1喧半,沒有加括號(hào)會(huì)出錯(cuò)

3. 移位要防止溢出

其實(shí)用移位代替乘除法是個(gè)不錯(cuò)的方法吴菠,筆者很喜歡拿到一段代碼后用移位代替乘除法來進(jìn)行優(yōu)化。不過有時(shí)候卻會(huì)出現(xiàn)問題榨乎,比如溢出問題。當(dāng)很明顯可能溢出的話我們是會(huì)注意的,比如

但是有時(shí)候這個(gè)問題是不明顯的,比如當(dāng)移位出現(xiàn)在數(shù)組索引或函數(shù)參數(shù)時(shí)缀蹄,有段用液晶顯示字符的代碼如下

我們可以用左移運(yùn)算來代替乘法進(jìn)行優(yōu)化悬襟,如

這本是一個(gè)好方法逸绎,但是事實(shí)上上面的代碼是錯(cuò)的巫糙。當(dāng)執(zhí)行c<<4時(shí)乏悄,因?yàn)闆]有明顯的賦值過程,我們可能認(rèn)為沒問題卵惦,而事實(shí)上c的高位已經(jīng)丟失了,所以得到錯(cuò)誤的結(jié)果哨坪。一個(gè)可行的做法是先進(jìn)行強(qiáng)制轉(zhuǎn)換忿偷,如

4. 無符號(hào)和有符號(hào)運(yùn)算

當(dāng)一個(gè)有符號(hào)數(shù)和一個(gè)無符號(hào)數(shù)進(jìn)行算術(shù)運(yùn)算時(shí)渠概,系統(tǒng)會(huì)自動(dòng)將有符號(hào)數(shù)強(qiáng)制轉(zhuǎn)換為無符號(hào)數(shù)再進(jìn)行運(yùn)算(即使你使用有符號(hào)數(shù)強(qiáng)制類型轉(zhuǎn)換)猪狈,如下面兩種寫法的運(yùn)輸結(jié)果是一樣的。

5. 局部變量要初始化

這一點(diǎn)是比較容易被忽略的。局部變量沒有初始化的話,因?yàn)閱纹瑱C(jī)每次為他分配的是同一個(gè)內(nèi)存區(qū)域,當(dāng)你在函數(shù)中是這么使用局部變量時(shí)择膝,就可能出問題:

如果第一次調(diào)用fun時(shí)饺律,a傳遞的值為0,那么flag = 0x01;

執(zhí)行if(flag&0x01)后面的代碼十籍。以后再調(diào)用fun時(shí)勾栗,即使a不為0楷拳,但flag依然使用之前的內(nèi)存區(qū)域,所以其值一直為0x01臭脓,一直執(zhí)行的是if后面的代碼砚作,而不是else后面的领猾。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末窍霞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子梦裂,更是在濱河造成了極大的恐慌冗恨,老刑警劉巖揪利,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件楚午,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡尿招,警方通過查閱死者的電腦和手機(jī)矾柜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來就谜,“玉大人怪蔑,你說我怎么就攤上這事∩ゼ觯” “怎么了缆瓣?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)虹统。 經(jīng)常有香客問我弓坞,道長(zhǎng),這世上最難降的妖魔是什么车荔? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任渡冻,我火速辦了婚禮,結(jié)果婚禮上忧便,老公的妹妹穿的比我還像新娘族吻。我一直安慰自己,他們只是感情好珠增,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布超歌。 她就那樣靜靜地躺著,像睡著了一般切平。 火紅的嫁衣襯著肌膚如雪握础。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天悴品,我揣著相機(jī)與錄音禀综,去河邊找鬼简烘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛定枷,可吹牛的內(nèi)容都是我干的孤澎。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼欠窒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼覆旭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起岖妄,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤型将,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后荐虐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體七兜,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年福扬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腕铸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铛碑,死狀恐怖狠裹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汽烦,我是刑警寧澤涛菠,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站撇吞,受9級(jí)特大地震影響碗暗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜梢夯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晴圾。 院中可真熱鬧颂砸,春花似錦、人聲如沸死姚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽都毒。三九已至色罚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間账劲,已是汗流浹背戳护。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工金抡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腌且。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓梗肝,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親铺董。 傳聞我的和親對(duì)象是個(gè)殘疾皇子巫击,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容