C C 實戰實用知識點記錄

2021-07-15 01:45:48 字數 865 閱讀 1654

extern 「c」可分為兩個部分理解。extern表示這部分的函式或變數可在其他模組中使用。」c」表示該部分的函式採用c的編譯方式編譯,比如函式void foo(int, int)的名字被編譯為_foo,而不是c++中的_foo_int_int。extern 「c」有主要兩個應用場景:1.在c語言中呼叫c++函式時,c++函式的.h檔案中函式宣告需要加extern 「c」進行修飾。2.在c++語言中呼叫c函式時,在包含c函式的.h檔案時,需要用extern 「c」修飾.h檔案。(詳見:extern 「c」用法解析)

詳見部落格:dllimport與dllexport的作用於區別

詳見部落格:static函式與普通函式

位元組對齊涉及到節省記憶體空間和提高cpu訪問記憶體效率,而一般的pc程式設計師不會去設定位元組對齊(預設的位元組對齊訪問效率較高)。位元組對齊知識點,詳見c語言位元組對齊問題詳解

碰過的bug表現:程式中有乙個c++類,它的乙個int型變數表現極其詭異,明明給它賦值,但是讀出的資料與賦給它的值不一樣。通過除錯,發現它在讀取記憶體時錯誤,偏移了3個位元組。在這個int型變數的前面,宣告了乙個bool變數,除錯發現如果將bool變數放到int型變數之後,表現正常。後來發現,在程式中的其他地方(程式不是我寫的),定義了一些1位元組對齊的結構體,然後基本確認是位元組對齊問題。果然在該c++類定義前面加上#pragma pack()這行**,表現正常。然而,令人費解的是,我檢視了所有**檔案,所有的#pragma pack(1)最終都接了一行#pragma pack(),將位元組對齊設為vs中預設的位元組對齊8.這裡我有個疑問:既然設定了位元組對齊,程式應該就會按照我的設定進行對齊訪問,不應該會出現記憶體訪問錯誤,為什麼還會出現上述bug。而且之前的結構體重#pragma pack(1)和#pragma pack()都是成對出現的,也不可能會影響到c++類啊。

C C 知識點記錄

atof 功能是把字串轉換成浮點數。char str 12345.67 d atof str cout 將會把str字串轉換為浮點數,並輸出 記錄遇到的各種小知識點,不斷補充 std cout 20 32 32 對於輸出結果為0,原來也遇到過,但突然有感覺很不可思議。仔細分析後找到了原因 20 32...

C C 知識點記錄

目錄 1 void function const 函式宣告後加const的作用 2 ifdef cplusplus 的作用 例 看一下下面的例子,直接在編譯前,就會提示下面的兩個錯誤 test1107.cpp 定義控制台應用程式的入口點。include stdafx.h include using ...

CSS HTML實用知識點

所有產生了浮動流的元素,塊級元素看不到他們 產生了bfc的元素和文字類屬性 inline 的元素以及文字都能看到浮動元素 block fomatting context block level box formatting contex box 即盒子模型 formatting context 是w...