常識便條 1

2021-06-11 15:15:09 字數 2779 閱讀 4019

常識便條 1

1. 可重入函式:

即可以被中斷的函式。可以在這個函式執行的任意時刻中斷它,轉入os排程去執行另一段**,而返回控制時不會出現什麼錯誤。

2. restrict關鍵字:修飾指標

表示只能通過它限定的指標訪問該指標所指向的物件。

3. register關鍵字:

宣告乙個暫存器變數,用來提高訪問速度。

注:是否真的會放入暫存器,視情況而定。

4. static關鍵字:

用來宣告乙個靜態變數。

例如:stati int tmp; // 宣告了乙個靜態變數tmp,但未定義。

5. /dev/null: linux黑洞

6. set命令:

顯示所有本地定義的shell變數。

unset命令:

清除某個變數的定義。

7. 溢位、越界、洩漏的區別

溢位:放入某個已分配好的空間過多的內容。

越界:訪問位置超過已分配好的空間。

洩漏:申請的空間未得到正確釋放。一般是new或malloc的空間未用delete或free釋放。

8. explicit關鍵字:

主要用於修飾建構函式,指明建構函式只能顯示的使用。防止不必要的隱式轉換。

9. 淺複製,深複製

淺複製:

char *p =(char *) malloc(10);

strcpy(p, "abcd");

char *q = p;   // 淺複製

深複製:

char *p =(char *) malloc(10);

strcpy(p, "abcd");

char *q = malloc(strlen(p));

strncpy(q, p, strlen(p)); // 深複製

10. 類模版的宣告與定義。

類模板的宣告與定義分別放在.h標頭檔案和.cpp原始檔中:

在編譯時,模版並不能生成真正的二進位制**,而是在編譯呼叫模板類或函式的cpp檔案時,才會去找對應的模板宣告和實現。

在這種情況下,編譯器是不知道實現模板類或函式的cpp檔案的存在。所以它只能找到宣告,但找不到實現。 

編譯器只好建立乙個鏈結符號寄希望於鏈結程式找到該模板類或函式的實現位址。

而又知道,模板類或函式的實現並不能被編譯成二進位制**,結果鏈結程式也找不到位址,只好報錯了。

兩種解決辦法:

1). 將類模版的宣告和定義放在同乙個檔案中

2). 在.h中包含.cpp。例如:

// .h檔案

#ifndef __***_h__

#define __***_h__

.....

#include "***.cpp" // 包含原始檔,該檔案的最後位置

#endif

// .cpp檔案

#ifndef __***_cpp__

#define __***_cpp__

#include "***.h" // 包含標頭檔案,該檔案的最前位置

....

#endif

11. telnet連線某個埠:

telnet ip port

例如:telnet 127.0.0.1 80

12. gdb 簡單使用查詢段錯誤位置

$ulimit -c 1024  或者 $ulimit -c 2048  // 設定core檔案大小

$gdb exe-file core.***

$bt......

13. 編譯c++檔案

gcc ***.cpp -lstdc++ -o ***

gcc ***.cpp -i /usr/local/include -l /usr/local/lib -llib***x -o ***

14. 一些鎖機制:

互斥量,讀寫鎖,條件變數,訊號量

15. 分離執行緒:分離執行緒不被其它執行緒(父程序或init程序)所等待,執行結束後,執行緒就終止了,馬上釋放系統資源。

使用方法:

phtread_t tid;

pthread_attr_t attr;

pthread_attr_setdetachstate(&attr, pthread_create_detached);

pthread_create(&tid, &attr, thread_func, (void *)data);

16. size_t與ssize_t

size_t 一般是unsigned int,無符號型別,用來指示記憶體大小、陣列下標等

ssize_t 一般是signed int,有符號型別,用來表示返回值,可能為負值。

17. volatile關鍵字:修飾變數

每次使用該變數時,都需要從記憶體中讀取,修改之後馬上寫入記憶體,而不是使用cache中的值。(編譯器不對其進行優化)。

18. 類成員函式中const的使用

放在函式引數表與函式體之間:

例如:void func(....) const;

指明該函式不可以修改該類的任何成員變數。

如果在編寫該const成員函式時,不慎修改了資料成員,或者呼叫了非const成員函式時,編譯器就會報錯。

這大大提高了程式的健壯性。

另:任何不會修改資料成員的函式都應該宣告為const型別。

19. shmdt函式:用來斷開共享記憶體附加點的位址,禁止本程序訪問此片共享記憶體。

另共享記憶體其它函式:shmget, shmat, shmctl

yy: shmat與shmdt有點兒類似於open與close的味道。

20. 後台執行

nohup ./***.exe &

c primer plus筆記(1)常識

返回值 是函式的出口 函式頭 是函式的介面 b 退格 const 和 define 都可以建立符號常量 define x 512 不強調常量型別,屬於預編譯處理,故不帶分號 const int x 152 強調常量型別 typedef 和 define 都可以為型別建立別名 define pn in...

工作學習常識1

保護電腦應該注意的事情 把光碟放在機箱內對vcd 燒錄機損耗很大 關機後立馬重啟,對主機板 硬碟損耗很大,最好是等待機器徹底關機後再開啟 用手去摸螢幕,對lcd影響較大 使用同乙個牆紙或者是靜止的畫面加速lcd老化 不停的更換驅動程式 安裝很多測試的軟體或共享軟體 電腦非正常重啟 如果提高自己的工作...

Shell 指令碼小常識1

shell 指令碼小常識1 shell 比較符號 都是英文縮寫,知道英文含義就很好記。等於 eq equal 不相等 ne not equal 大於 gt greater than 小於 lt less than 大於或等於 ge greater than or equal 小於或等於 le les...