C/C++ 筆記 -- 基本概念(1)

背景:最近打算跳槽了,把以前翻過的書溫習下,順便記一記筆記,可能比較雜。


基本概念

關於main
1、C++的main函數的限制
   不能重載,不能內聯
   不能定義爲靜態的
   不能取其地址,不能自己調用自己。
2、main函數
   進入之前初始化全局變量(extern或static),若main結尾沒有return語句,則等效return 0;

關於名字修飾(name mangling)
1、編譯器爲變量和函數生成不同的內部名字。C和C++的生成方式不一樣。對於C只要考慮static和
全局函數與變量名的區別,而C++要考慮class,struct,union, namespace,同一作用於域重載函數
等等類似的情況需要一套Name Mangling方案,不同編譯器的實現方案不一樣。這樣說來同一平臺的
不同編譯器編譯的.o文件是不兼容的。

關於連接規範
由於不同語言(C,C++)的Name Mangling問題,不同語言在編譯的連接階段需要考慮這些差異而使用
不同的連接規範。比如在C++代碼裏,使用C編譯的函數或變量使用extern "C"。

全局變量(global, static)
全局變量的聲明和定義應放在源文件的開頭位置。
由於全局變量會在main之前初始化,同一編譯單元(cpp文件)按所定義的順序初始化,而不同編譯
單元在連接是全局變量的初始化順序不確定,所以全局變量的初始化不要引用另一個全局變量來做。

換行與回車的區別
它們都有不同的ASCII碼。
換行,用於文件和字符終端的輸出控制,表示從新的一行開始,通過在鍵盤上敲擊“回車”鍵(輸入
“回車”字符)轉換爲文件或字符終端的“換行”字符,已達到從新一行的效果。程序輸出“換行”
也達到換行效果。
回車,是一種鍵盤功能,用於輸入控制,比如代替“鼠標左擊”的功能,他不能輸出。
函數getchar()可以將鍵盤的“回車”輸入轉換爲“換行”字符返回。

const防小人不妨君子
const符號只是在編譯時強制類型安全檢查,設定不允許“直接”修改,但對於運行是的修改無能爲力。
const int i = 10;
int *p = (int*)&i;
*p = 100;
count << i << endl; // 10
cout << *p << endl; // 100 

C與C++中const 的區別
C中const 是默認外連接的, C++中const符號常量是內連接的。導致一個頭文件中定義常量後,如果
在不同的源文件(編譯單元)中同時包含這個頭文件,C會提示重複定義的錯誤,而C++編譯時則認爲
不同的符號常量分配空間,鏈接是進行常量合併。C在頭文件中定義符號常量時必須使用static修飾,
或在源文件中定義,其他編譯單元通過extern方式使用。

類中的常量
非靜態的類常量數據成員,必須在對象的構造函數的初始化列表中進行,而不能在類的聲明中進行。
這種常量的缺點是不能建立整個類的常量,而依靠類對象的不同而定。要建立整個類恆定的常量通常

通過類中的枚舉常量和類的靜態常量數據成員。


函數的調用規範

參見此篇

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章