C C 靜態告警清理 函式入參加const

2021-10-06 14:47:50 字數 794 閱讀 4453

注意點:

1,有巨集的地方,要點進去看內容

2,如果涉及到指標傳遞,要沿著呼叫鏈檢視是否有修改指標指向的內容,

如果有修改就不能設為const,如果沒有修改,則沿著呼叫鏈依次加const

void f1(int *p)

void f2(int *p)

像這種情況,f1加了const之後, f2也要加

貌似並不是很複雜?在我想了這些之後我就開幹了,然而,很快,我就遇到了各種各樣的情況。

首先是extern

注意點3:函式入參加了const,所有extern的地方都要改。

如果f3也呼叫了f2,會是什麼情況?

f2加了const,f3中的呼叫點給的實參是非const的,這樣是可以的。

但是,如果呼叫點是函式指標,那就扯犢子了.

void f1(int *p)

void f2(int *p)

typedef void(*funp)(int *p);

void f3(funp p)

void f4()

形如這樣的**,如果該f1就要改f2,改了f2就要改f3,改了f3就要改所有呼叫f3(傳遞這個指標)的地方,因為函式指標不能自動轉換,不像非const指標可以自動轉換為const指標。

另外一種情況是,函式指標被放到乙個函式指標的陣列中,這樣就更難單獨修改這個函式了。

如果把函式指標,強制轉化為另外一種函式指標,或許可行,但是我認為更不符合編碼規範。

這種情況是否只能選擇忽略?

內聯函式,建構函式,靜態函

inline,static,constructor三種函式都不能帶有virtual關鍵字。inline是編譯時展開,必須有實體 static屬於class自己的,也必須有實體 virtual函式基於vtable 記憶體空間 constructor函式如果是virtual的,呼叫時也需要根據vtabl...

C C 靜態變數

1 靜態區域性變數在函式內定義,但不象自動變數那樣,當呼叫時就存在,退出函式時就消失。靜態區域性變數始終存在著,也就是說它的生存期為整個源程式。2 靜態區域性變數的生存期雖然為整個源程式,但是其作用域仍與自動變數相同 即只能在定義該變數的函式內使用該變數。退出該函式後,儘管該變數還 繼續存在,但不能...

C C 動 靜 態庫

如果多個程式使用同乙個動態庫,如果動態庫出現bug,不需要公升級所用該動態庫的程式,只要公升級該動態庫。該動態庫只有這乙個,沒有其他副本,節省記憶體空間 靜態庫是編譯的時候被載入,使用靜態庫的好處 使用靜態庫編譯好的 程式在任何機器上都可以直接執行。如果有多個程式使用該靜態庫,如果公升級該靜態庫,使...