c 關鍵點(二)

2021-04-22 03:58:44 字數 1773 閱讀 2629

20、#ifndef includefile_h_

#define includefile_h_

...#endif

用這種保護方法為了確保在同一檔案中只能包含同乙個標頭檔案內容一次。

21、保證乙個工程的所有檔案都是通過同乙個編譯器編譯的。不同的編譯器將為同乙個函式產生不同的修飾符。

22、儲存管理

自動儲存:在乙個**(通常是函式)中定義的,生命週期和作用域在這個**塊中。連續性為自動,作用域為可見,無連線性。 個人理解此記憶體應該是從棧中分配(register關鍵字宣告區域性變數的含義,表明該變數是儲存在cpu的暫存器,register 只能修飾區域性變數)。

int a;  函式外部宣告,作用域是整個程式

static int a;函式的外部宣告,作用域為整個他所在的檔案。

void f()

動態儲存:通過new關鍵字得到,生命週期是到delete(如果沒有delete將一直存在,導致記憶體洩漏)。個人理解此儲存應該是從堆中分配

23、extern 和 ::

int va;

void f()    

extern的重要用法是:

再多檔案程式中,可以在乙個檔案中(且只能在乙個檔案)定義乙個外部變數,使用該變數的其他檔案必須使用extern宣告它。

//file1

int a = 20;

//file2;

extern int a;

void f()

注: const 定義的靜態常量時,extern用法和常規變數的用法有所不同。

外部常量的連線性預設是內部的,不過如果想將這個常量做為外部鏈結性,必須要所有宣告的這個常量其他檔案都加上extern。

24、cv操作符:const 和 volatile

volatile: 宣告每次操作都是從內容讀取,而非是暫存器。

一般的程式中幾個語句兩次使用了同乙個變數,編譯器會對其優化,將變數放到暫存器中,因為編譯器認為這個變數是不變的。當有時並非如此,我們就要用volatile修飾這個變數來避免編譯器的這種優化。

auto:可以在宣告中使用關鍵字auto將變數宣告為自動變數。

mutable:可以指出,即使結構(或者類)變數為const,其某些成員也是可以改變的。

struct data

;const data v = ;

data.a = 2;// 不允許。

data.b = 3;// 允許。

volatile和mutable不是很常用

25、函式的連線性。預設是外部的。 如果想將它變成是內部的,要加static修飾。

26、c語言和c++語言編譯器,對函式名的翻譯規則不同。比如c可能將void f(int)翻譯成_f;而c++會翻譯成_f_i;

extern "c" void f(int);// 用c的翻譯規則查詢函式

extern void f(int);// 用c++的翻譯規則查詢函式

extern "c++" void f(int);// 用c++的翻譯規則查詢函式

27、new 的布局

char buffer[100];

void f()

28、名字空間

namespace myname

namespace myname

}對名字空間的操作, ::   

myname::a = 10;

myname::f();        

用using 來簡化 ::

using myname::a; 以後就可以用a代替 myname::a 了。

未完待續...

c 學習筆記 細節關鍵點

本文記錄那些該知道卻不甚清楚的東西,基於書本和自己的理解。1.c 定義class,public內放的東西是給外人看的,class開放給外人的介面 private中放的成員是自己用的,外人不必知道,除了我的朋友 friend 2.member funtion必須在class主體內宣告,是否在主體內定義...

C 關鍵點總結系列 2

自動變數 auto修飾,auto可省略 函式中的形參 函式中定義的變數 復合語句中定義的變數,都是自動變數。全域性變數在函式外面定義的變數 可被每個函式使用 作用域 程式級或檔案級 存放在靜態儲存區 預設初始值為0,可專門初始化 區域性變數 在函式內部定義的變數或函式引數 只能在函式內部使用 作用域...

C 關鍵點總結系列 3

引數傳遞 1.值傳遞 形參,不影響實際 2.位址傳遞 被呼叫函式中對形參指標所指向的位址中內容的任何改變都會影響到實參 3.引用傳遞 對形參的任何操作都能改變相應的實參的資料 引用通常被認為是另乙個變數的別名,通過別名可直接訪問這個變數 內聯函式 函式的定義或宣告前加上關鍵字inline則就把該函式...