c 的詭異與藝術一例

2021-08-25 01:28:23 字數 1430 閱讀 6576

c++到底是詭異的還是藝術的,可能都是吧,說它詭異是因為沒有理解它的精髓,說它藝術那是因為理解了它的精髓,我這裡僅以乙個實際的例子說明,在工作過程中,我的專案經理讓我看一段程式,可能程式的作者根本不懂怎麼進行互斥,這足以說明他不是乙個合格的程式設計師,為何說他不懂基本的互斥呢?以下是乙個函式:

int in_use = 0;

*** ***(*** yyy)

while(in_use == 1)

sleep(1);

syncclass instance(&in_use);

//do_something;

很顯然,這個in_use的意義就是為了防止這個***函式被重入,我說作者不合格的原因是完全可以用waitforsingeleobject之類的函式來完成,用這種方式就顯得太「低階」了,我的專案經理還迷惑於沒有發現在什麼地方將in_use這個變數設定為1,他在我們的專案出了大問題而又面對這種詭異的**的時候顯得十分氣憤,刪去吧,萬一作者有很什麼隱藏的很深的意圖呢?不刪吧,實在對這種互斥方式不解,然而當我看到這段**的標頭檔案的時候,一切豁然開朗了,syncclass的定義如下:

class syncclass

public:

syncclass(int* _use):m_use(_use)

*m_use=1;

~syncclass()

*m_use=0;

private:

int* m_use;

很簡單的乙個類,在呼叫建構函式的時候將引數作為乙個位址,然後將該位址指向的值設定為1,然後在析構的時候將其設定為0,而函式***中只是簡單的建立了乙個syncclass物件,呼叫了其唯一的顯式的建構函式,可以看到並沒有用這個物件做任何事情,這個物件的意義就在於互斥,c/c++的特性決定了變數的作用域,該物件是乙個區域性變數,在出去它所在的大括號之外,它就離開了它的作用域,c++中,乙個物件離開了作用域就要呼叫其析構函式,而虛構函式中將互斥變數的值設定為了0。這個方式的好處在於你幾乎不用時刻操心在離開函式的時候忘記了釋放互斥量。

這個方案是美妙還是詭異,起初,我的專案經理說這種摸不著頭腦的**肯定是乙個大學生寫的,然而我不贊同他的觀點,這個**恰恰表現了作者堅實的基本功,他可能不懂api,但是他卻深刻的理解了c++的精髓,這二者哪一點更重要呢?現在很多程式設計師api玩得不亦樂乎,但是基本的知識卻一問三不知,不知道記憶體怎麼讀,不知道int型別的資料在記憶體的布局,這到底說明這個程式設計師效率高還是根基不牢?...我其實根本不喜歡那些只會呼叫api的人,他們可能會是很好的執行者,但是他們很難設計出良好的系統,你難道指望乙個根本不懂原理的人去充分挖掘原理性的潛力嗎?個版本不可能的。

有人認為搞作業系統的人水平就一定很高,其實不是,搞應用的人水平更高,我這裡說的不是編碼的人,而是搞設計搞架構的人,大多數的應用要比作業系統複雜的多,要考慮的問題要多得多,隨便看乙個訂單系統的邏輯設計圖就會發現它的複雜,特別是高複雜度的物件導向的系統更是如此,設計模式就像是一堵牆,時刻在權衡著設計的優劣。

C語言陣列賦值一例

在移植核心時,發現乙個驅動使用陣列十分巧妙。一般地,操作cpu某一外設寄存,不是直接使用完整的位址,而是通過相對位址來訪問。比如,訪問定時器,首先參考手冊定義好定時器基位址,然後再定義暫存器 如控制暫存器 讀資料暫存器等 對於定時器基位址的偏移位址。在使用時,一般都是使用偏移位址的,這樣十分方便 快...

Java 模仿 C 字典 一例

list orderstatuslist new arraylist orderstatuslist.add new abstractmap.entry 1 已下單 orderstatuslist.add new abstractmap.entry 2 已分配客服 orderstatuslist.a...

Python的正則一例

悄悄打入公司內部ued的乙個python愛好者小眾群,前兩天一位牛人發了條訊息 小的測試題 re.split w test,test,test.返回什麼結果 一開始看,我倒沒注意w是大寫的,以為是小寫的w代表單詞字元 含下劃線 今天執行一看才發現是大寫的。在idle跑一下的結果如下 import r...