快速而又安全刪除(注釋)代碼
if 0
statements
endif
轉義字符 \
\ddd
ddd代表1~3個數字,表示8進制數值所代表的數字。
#######define與typedef
define的副作用
#define ptr_to_char char*
ptr_to_char a,b //a類型為char*,b類型為char`
而typedef可正確定義
typedef ptr_to_char char*
ptr_to_char a,b a,b類型均為char*
```
######static關鍵字
用于函數定義或代碼塊之外的變量聲明時,static關鍵字用于修改標識符的鏈接屬性,從external改為internal,但標識符的存儲類型和作用域不受影響。
用于代碼塊內部的變量聲明時,static關鍵字用于修改變量的存儲類型,從自動變量修改為靜態變量,但變量的鏈接屬性和作用域不受影響。
######位的操縱
把指定位bit_number置1
```
value = value | 1 << bit_number;
```
把指定位bit_number置0
```
value = value & ( 1 << bit_number );
```
測試指定位bit_number
```
value & 1 << bit_number;
```
######EOF必須使用int類型的變量接收
stdio.h中規定EOF=-1,超出了char類型的表示范圍。
######sizeof不對表達式進行求值
```
int a=1,b=10;
sizeof(a = b + 1);
printf("%d",a);
```
輸出結果為1,sizeof(a = b + 1)并沒有向a賦任何值。
######逗號操作符的運用
```
a = get_value();
count_value(a);
while (a > 0) {
...
a = get_value();
count_value(a);
}```
利用逗號操作符可以改寫為
```
while (a = get_value(), value_count(a), a > 0) {
...
}
```
######左值與右值
左值代表一個位置(地址),右值代表一個值。
######函數的調用順序
```
f() + g() + h()
```
該段代碼盡管左邊的加法運算必須在右邊的加法運算之前執行,但對于函數調用的順序,并沒有規則加以限制。如果函數執行具有副作用,則可能由于函數調用順序不同而產生不同結果。例如:
```
int fun() {
static int counter = 1;
return ++counter;
}
int main() {
int answer;
answer = fun() - fun() * fun();
printf("%d\n", answer);
}
```