C易忘知識點

2022-09-12 23:24:29 字數 938 閱讀 8139

巨集定義中

## 類似於拼接,如 12##34 = 1234,並且如果34是乙個巨集,##也會阻止其展開並拼接;

# 將後邊的內容轉換成字串

巨集定義可以巢狀

巨集定義中可以使用三目運算子,因為被認為是表示式,最終返回的是乙個結果。其實最重要就是記住巨集的用法是直接展開,然後看符不符合語法。

int 左移 不溢位時符號位不變,其餘位左移,右邊補0;溢位時最左邊的幾位被丟棄。

右移 符號位向右移動後,正數的話補0,負數補1,補符號位。

unsigned int 左移 左移 最左邊的幾位被丟棄,右邊多出來的幾個空位則由0補齊。

右移 補0

int char 互相強制轉換,只要不溢位都不用考慮很多,考慮溢位要看二進位制(補碼形式)。

uchar->int 正數,數值不變

char->int 數值不變,符號不變

int->char 不溢位則數值、符號不變,溢位則高位截斷

int->uchar 正數不溢位則數值不變,溢位則高位截斷;負數永遠高位截斷。

三目運算子可以用在巨集定義中,這樣就可以在巨集中做判斷,並且這個巨集還能作為引數,至少看起來很好看。eg.

#define icm_reg(reg, id)\

(\id==icm40607_chip_id ? (icm40607_##reg) : (icm42670_##reg)\

)

linux中 read()、write()函式都可以在呼叫完之後直接列印errno,以此判斷問題。

open函式的引數:o_rdoly=0,o_wroly=1,ordwr=2。所以不能或運算賦值。

linux中可以用 檢視函式是被誰呼叫的。

#include <execinfo.h>

int backtrace(void buffer, int size);

c基本易忘知識點

const 作用是把乙個變數視為常量,這個變數不能被改變,可以用const int a b a不能被改變,a可以改變,a c這樣是可以的,a 20這樣是不行的 int const a b 這樣的話a不能改變,而 a可以改變 register關鍵字暗示編譯器前面帶有這個關鍵字的變數將被頻繁的利用 re...

C 部分易忘知識點(更新)

define bool int define ture 1 define false 0布林型別變數在c 中佔1位元組空間,bool型別取值範圍僅有兩個值 true和false。例 bool flag true 引入命名空間的目的是為了避免命名衝突,其關鍵字為namespace。試想兩個不同程式設計...

python易忘知識點記錄

python函式在定義的時候,預設引數l的值就被計算出來了,即 因為預設引數l也是乙個變數,它指向物件,每次呼叫該函式,如果改變了l的內容,則下次呼叫時,預設引數的內容就變了,不再是函式定義時的了。def a l return l print 連續執行函式a的結果 print a 結果 null p...