C C 小知識總結之二

2021-07-07 03:58:43 字數 3795 閱讀 9411

1、

#include

conio

是console input/output

(控制台輸入輸出)的簡寫,其中定義了通過控制台進行資料輸入和資料輸出的函式,主要是一些使用者通過按鍵盤產生的對應操作,比如

getc

h()函式等等。

2、#include"kalman_k.h"

#include

有的程式用<>,有的卻用" ",那麼二者到底什麼區別呢,什麼情況下使用呢?

<>和""表示編譯器在搜尋標頭檔案時的順序不同,<>表示從系統目錄下開始搜尋,然後再搜尋path環境變數所列出的目錄,不搜尋當前目錄;" "是表示從當前目錄開始搜尋,然後是系統目錄和path環境變數所列出的目錄。

所以,系統標頭檔案一般用<>,使用者自己定義的則可以使用" ",加快搜尋速度。

3、#開頭的語句,是預編譯指令。也就是說,這些語句,在編譯之前,就對他們進行了處理。

有些程式在除錯、相容性、平台移植等情況下可能想要通過簡單地設定一些引數就生成乙個不同的軟體,這當然可以通過變數設定,把所有可能用到的**都寫進去,在初始化時配置,但在不同的情況下可能只用到一部分**,就沒必要把所有的**都寫進去,就可以用條件編譯,通過預編譯指令設定編譯條件,在不同的需要時編譯不同的**。

(1)#if和#endif是配對的,叫做條件編譯指令,如果滿足#if後面的條件,就編譯#if和#endif之間的程式段,否則不編譯。

(2)

#if, #elif, #else, #endif

#if 條件 1

**段 1

#elif 條件 2

**段 2

...#elif 條件 n

**段 n

#else

**段 n+1

#endif

#if 的一般含義是如果#if 後面的常量表示式為true,則編譯它所控制的**,如條件1成立時就**段1,條件1不成立再

看條件2是否成立,如果條件2成立則編譯**段2,否則再依次類推判斷其它條件,如果條件1至n 都不成立則會編譯最後的**段n+1。

4、#include

在c語言中,

stdio.h

標頭檔案是主要的。而在後來的c++語言中,c只是c++的乙個子集,且c++中,已不推薦再用c的類庫,但為了對已有**的保護,還是對原來的標頭檔案支援。

cstdio

是c++從c的

stdio.h

繼承來的,在前面加c同時不要h字尾,在c++環境當然是選用前者,兩者內容都一樣,只是

cstdio

標頭檔案中定義的名字被定義在命名空間

std中。使用後者就會帶來額外的負擔,需要區分哪些是標準庫名是c++特有的,哪些是繼承過來的!!所以在c++中要盡量避免c風格的出現!!

5、#include

io代表輸入輸出,

manip

是manipulator

(操縱器)的縮寫(在

c++上只能通過輸入縮寫才有效)。

這裡面iomanip

的作用比較多,

經常配合

setw()

使用,用於控制資料的輸出格式。

setw(n)

設域寬為n個字元。

例如:   cout<

6、#include

#include

#include

vc裡面是math.h,cmath是c++標準風格的標頭檔案,位於std命名空間,用法和math.h差不多,都是包含一些常見的數學函式,比如平方、正余弦等等。

在c++裡include c的標頭檔案,就需要在原來的.h檔案前加個c,並去掉.h,

那兩個標頭檔案對應c中的stdlib.h和time.h。就是將原來的time.h和stdlib.h放在命名空間中了。cstdlib就是c中的stdlib.h 因為用到srand和rand;

ctime就是c中的time.h,因為用到time時間函式。

cstdlib就是c中的stdlib.h,用到下列東西時要用 

#include 

字元轉換函式:

atof,atoi,atol,strtod,strtol,strtoul 

偽隨機數函式:

rand,srand

動態分配記憶體函式:

calloc,free,malloc,realloc

環境函式:

abort,atexit,exit,getenv,system

查詢,分類函式:

bsearch,qsort

整數計算函式:

abs,div,labs,ldiv,

多位元組文字(中日韓文)函式:

mblen,mbtowc,wctomb

mbstowcs,wcstombs,

巨集:exit_failure,

exit_success,

mb_cur_max,

null,rand_max,

型別:div_t,ldiv_t,size_t

7、srand()的作用是生成乙個「種子」,然後你再用rand()取隨機數的時候就用這個種子來經過計算得到乙個數字。在種子相同的情況下rand()的結果是一樣的,所以為了保證rand()的隨機性,經常用當前的時間作為種子,這樣就可以保證rand()每次的結果都是不同的。

srand((unsigned)time(null));

這語句的含義就是以自2023年1月1日00:00:00以來,到呼叫函式的時刻所累積的秒數作為

產生隨機數演算法的種子seed。 

8、函式宣告由函式返回型別、函式名和形參列表組成。形參列表必須包括形參型別,但是不必對形參命名。這三個元素被稱為函式原型,函式原型描述了函式的介面。定義函式的程式設計師提供函式原型,使用函式的程式設計師就只需要對函式原型編輯即可。

比如: 【返回型別】 函式名(引數1型別 引數1,引數2型別 引數2,……);

例項:bool swap(int a,int b); 

例子中函式的返回型別為bool型,兩個引數都是int型,乙個名稱為a ,乙個名稱為b

函式宣告中的形參名往往被忽略,如果宣告中提供了形參的名字,也只是用作輔助文件。

另外要注意函式宣告是乙個語句,後面不可漏分號!

9、#ifndef/#define/#endif

主要目的是防止標頭檔案的重複包含和編譯 

c++中 #ifdef 和#endif的作用

10、

#define

是用來定義巨集的。不是定義非零值的。其定義的巨集,會在編譯的時候自動替換。

比如:

#define pi 3.1415926

以後的**中凡是出現

pi 的地方,編

譯器直接給替換

為3.1415926。

#define

的時候,一定要注意:編譯器是直接替換的。

比如:

#define add(a,b) a+b

//把a + b這樣的操作用函式表示。以後你就可以直接用

add(a,b)來表示a和b的

和了。 現在你要計算:

e = d * (a + b);

如果你這樣寫:

e = d * add(a,b);

那就錯了,因為編譯器會將

#define

的add(a,b)

替換為

a+b,結果就成了: e = d * a + b

就錯了。

C C 瑣碎知識歸納之二

1 malloc 函式 void malloc unsigned int size 在記憶體的動態分配區域中分配乙個長度為size的連續空間,如果分配成功,則返回所分配記憶體空間的首位址,否則返回null,申請的記憶體不會進行初始化。2 calloc 函式 void calloc unsigned ...

Canvas基礎知識總結之二

canvas的繪製模型 在向canvas之上繪圖形或影象時,瀏覽器要按照如下步驟操作 1 將圖形或影象繪製到乙個無限大的透明點陣圖中,在繪製時遵從當前的填充模式 描邊模式以及線條樣式。2 將圖形或影象的陰影繪製到另外一幅點陣圖中,在繪製時使用當前繪圖環境的陰影設定。3 將陰影中每乙個畫素的alpha...

學生知識點總結之二

mdiform 窗體是多文件介面 mdi 的主窗體,同乙個工程中只能有乙個 mdi主窗體。而把某個窗體的 mdichild 屬性設為 true 則這個窗體就由乙個普通的 sdi 單文件介面 窗體轉變為乙個 mdi 多文件介面 子窗體。之間是乙個字串,和 用 連線 例如 strsql selcet f...