自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C語(yǔ)言中的“六大陷阱”,你可能已經(jīng)知道了兩個(gè)

開(kāi)發(fā) 后端
要理解一個(gè)C 程序,僅僅理解組成該程序的符號(hào)是不夠的,我們還需要理解這些符號(hào)是如何組成聲明、表達(dá)式、語(yǔ)句和程序的。今天我們就來(lái)討論一下不一樣的語(yǔ)法結(jié)構(gòu)。

前戲

要理解一個(gè)C 程序,僅僅理解組成該程序的符號(hào)是不夠的,我們還需要理解這些符號(hào)是如何組成聲明、表達(dá)式、語(yǔ)句和程序的。今天我們就來(lái)討論一下不一樣的語(yǔ)法結(jié)構(gòu)。

1. 正確理解函數(shù)聲明

你是否見(jiàn)過(guò)這樣的代碼“(*(void(*)())0)();”,你能知道這是上面意思嗎?

看不懂不用擔(dān)心,下面我們來(lái)分析一下:任何C變量的聲明都由兩部分組成:類型以及一組類似表達(dá)式的聲明符(declarator)。聲明符從表面上看魚表發(fā)揮有些類似,對(duì)他就只應(yīng)該返回一個(gè)聲明給定的結(jié)果。(void (*)()0)是將常數(shù)0 轉(zhuǎn)型為“指向返回值為void 的函數(shù)的指針”類型。而(*(void(*)())0)();就可以看成是一個(gè)函數(shù)調(diào)用,末尾的分號(hào)使得表達(dá)式成為一個(gè)語(yǔ)句。當(dāng)然我們也可以使用typedef來(lái)世表達(dá)式更加清晰:

  1. typedef void (*funcptr)(); 
  2. (*(funcptr)0)(); 

2. 運(yùn)算符的優(yōu)先級(jí)問(wèn)題

在 C語(yǔ)言中,運(yùn)算符優(yōu)先級(jí)有15個(gè)之多,如果不知道運(yùn)算符的優(yōu)先級(jí)我們?cè)谔幚韱?wèn)題,分析代碼時(shí),就非常被動(dòng),那么我們可以對(duì)運(yùn)算符進(jìn)行簡(jiǎn)單的分組,了解各組運(yùn)算符之間的相對(duì)優(yōu)先級(jí),那么記起來(lái)就相對(duì)簡(jiǎn)單了,可以簡(jiǎn)單的記做:!> 算術(shù)運(yùn)算符 > 關(guān)系運(yùn)算符>&&>|| > 賦值運(yùn)算符。

3. 語(yǔ)句結(jié)束符的分號(hào)問(wèn)題

C語(yǔ)言以分號(hào)“;”,作為語(yǔ)句結(jié)束的標(biāo)志,那么如果在表達(dá)式后多寫了分號(hào),會(huì)出現(xiàn)什么結(jié)果呢?這個(gè)分號(hào)也許會(huì)被視作一個(gè)不會(huì)產(chǎn)生任何實(shí)際效果的空語(yǔ)句,或者編譯器會(huì)因?yàn)檫@個(gè)多余的分號(hào)產(chǎn)生一條警告信息,可以根據(jù)警告信息去掉這個(gè)分號(hào)。但一個(gè)例外就是在if 或者while語(yǔ)句之后多寫一個(gè)分號(hào),此時(shí)原來(lái)在if或者while之后的語(yǔ)句即使一條單獨(dú)的語(yǔ)句,魚條件判斷沒(méi)有了任何關(guān)系。請(qǐng)看一下代碼:

  1. If(x > y)return; 
  2. If(x > y);return; 

這兩句完全是不一樣的。

4. Switch 語(yǔ)句問(wèn)題

C語(yǔ)言中的switch,在case分支后都需要添加一個(gè)break;語(yǔ)句,不然會(huì)已知順著語(yǔ)句執(zhí)行下去,達(dá)不到我們需要的效果。

5. 函數(shù)調(diào)用

與其他程序設(shè)計(jì)語(yǔ)言不同,C語(yǔ)言要求:在函數(shù)調(diào)用時(shí)及時(shí)函數(shù)不帶參數(shù),也應(yīng)該包含參數(shù)列表,因此,如果f 是一個(gè)函數(shù),f();一個(gè)函數(shù)調(diào)用,而f;卻是一個(gè)什么也不做的語(yǔ)句。

6. else 懸掛問(wèn)題

我們經(jīng)常聽(tīng)到說(shuō)else要和if 配對(duì)使用,然而在我們寫代碼時(shí),還是會(huì)經(jīng)常出錯(cuò),例如如下代碼:

這段代碼的本意是分為兩種情況,x 等于0 不等于0,然而上面的代碼表達(dá)的意思卻截然不同。即 想不等于0,程序不做處理,x 等于0時(shí),判斷y的值,做出不同的處理。

責(zé)任編輯:趙寧寧 來(lái)源: 今日頭條
相關(guān)推薦

2020-10-10 17:34:11

大數(shù)據(jù)IT技術(shù)

2018-06-06 00:06:48

開(kāi)源存儲(chǔ)存儲(chǔ)軟件存儲(chǔ)

2010-10-26 10:16:36

求職

2025-04-02 00:00:04

2022-11-02 11:02:52

數(shù)據(jù)中心數(shù)據(jù)中心架構(gòu)

2024-08-07 15:44:04

2011-07-14 10:23:33

C語(yǔ)言

2014-12-08 10:39:15

2025-03-27 00:25:55

微服務(wù)架構(gòu)技術(shù)

2022-06-20 07:44:22

truncatedeletedrop

2020-11-11 14:23:35

網(wǎng)絡(luò)安全數(shù)據(jù)泄露網(wǎng)絡(luò)攻擊

2018-04-27 14:40:18

Java語(yǔ)言程序

2016-05-18 11:47:35

Apache大數(shù)據(jù)項(xiàng)目開(kāi)源

2020-07-02 15:43:26

Kubernetes容器工作負(fù)載

2020-02-17 09:42:09

編程語(yǔ)言JavaWindows

2017-12-14 14:38:56

物聯(lián)網(wǎng)網(wǎng)絡(luò)技術(shù)機(jī)器學(xué)習(xí)

2024-01-26 11:19:36

CIOIT領(lǐng)導(dǎo)者企業(yè)

2024-05-11 12:47:16

Kafka場(chǎng)景.高性能

2023-07-27 08:40:45

PawSQL數(shù)據(jù)庫(kù)

2019-06-05 15:20:00

MongoDBNoSQL數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)