# C語言-C陷阱與缺陷 ## 詞法陷阱 這裡指的詞法是如同符號一般,在C語言中這些符號單獨存在是沒有意義的,必須配合上下文。 1. =不等於== = 是賦值操作(ex. a=b=c重複賦值) ``` if(x=y) break;//實際上是將y的值給了x然後檢查該值是否為0 ``` 2. &和|不同於&&和|| 3. 貪心法(near-ambiguity) ``` a---b 含意等同於a-- - b 但不等同於a- --b ``` * 第一個"/*"會被視為是註解的開始 ``` y = x/*p; /* p 指向除數*/ 編譯器會把第一個/*視為註解,直到遇到*/才停止,所以結果會變成y = x。 若要真的使x除以p 指向的值,需改成y = x / *p; 或 y = x/(*p); ``` * =+ 可用來表 += (老編譯器) ``` a=-1; //會被視為 a = a -1; 如果你想表示的是a的值是-1,應寫成a = -1; ``` ## 語法陷阱 ### 理解函數聲明 ``` (*(void(*)())0)(); ``` 任何C變量的聲明都由兩部分組成:類型以及一組類似表達式的聲明符。 ``` float *g(),(*h)(); ``` 因為()優先權高於*,所以*g()等同於*(g()),g是一個函數,該函數的返回值類型為指向浮點數的指針。h是一個函數指針,h所指向函數的返回值為浮點類型。 ``` ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up