請問寫C程式時,固定不變的動作跟動態變化的動作分成兩個子函式會不會好些?

時間 2021-09-10 04:41:15

1樓:記憶體塊生命週期

emm可以考慮,但是你看情況吧。拿個我常用的list說事吧。

假如我有乙個委託管理記憶體的list:

def stc List List;

def stc Node Node;

def stc List

u64 length;

Node * head;

Node *tail;

void *(*obj_delete)(void* obj);

}List;

def stc Node

u64 value;

u64 size;

u64 index;

Node *next;

}Node;

List *list_new(void *(*obj_delete)(void *obj));

u64 list_get(List *list,u64 index);

u8 list_remove(List*list ,u64 index);

void list_delete(List *list);

def stc Iterator

略)其中,在外面的5個函式都是固定不變的,寫完沒問題基本不會再改。

這樣,這個list模組分為了兩部分的函式,分別是固定動作的函式和需要不定動作的物件析構函式。

但是對於欲儲存的物件而言,自身的析構函式又是固定的,只是對於儲存物件的容器List而言是動態的。

所以你看,「變」和「不變」只是乙個相對的概念,看你針對誰。

2樓:宇宙是人類的

有點面相物件設計思路的味道了。

如果你了解過「設計模式」,就會知道乙個軟體工程的核心要義:把不變的和變化的分開。

如果你是在做乙個比較複雜的軟體專案的話,這樣做是很有必要的,但如果只是乙個功能十分單一的小程式,那分不分開都沒啥區別。

此外如果函式呼叫非常頻繁,那最好還是不要拆或者使用內聯函式,因為函式呼叫需要切換上下文環境,是乙個比較耗時的操作。

寫程式時c和cpp混著用是一種不好的習慣嗎?

Seayoki 我曾無數次地說過,C 和C是兩種完全不同的語言,但還有人無知地認為C 是C的超集。C std 已經可以代替絕大部分 C Library 裡的東西。的確也有一些不能代替,比如cmath。Cpp是提供cstdio,cmath這樣的庫的。用C庫和用C程式設計樣式是兩種完全不同的概念。Cpp...

請問,人生是否有固定不變的法則?

冰雪涼 除了生老病死,吃喝拉撒這些注定要會每個人身上發生的事情之外,沒什麼是一成不變的 如果非要說有什麼的話,那就自己的底線。盡量保持善良,盡量正直誠實 盡量通過正途獲取財富 在別人落魄的時候盡量不嘲諷不上去踩一腳,能拉一把拉一把人生那麼長,總有一些事情的發生與我們的本心相悖,總要做出一些妥協盡量避...

能用Rust的方式寫C 程式嗎?

chunquedong 可以。把所有用指標的地方都改為unique ptr就行了,unique ptr相當於Rust中的所有權機制。但是其他rust的編譯時安全檢查的功能做不到。 這個我還真動手做了,https 先要實現rust標準庫。rust裡面的trait可以讓程式設計變得很簡單,比如ops,c...