巨集開關和布林開關地獄

2021-08-25 01:29:29 字數 857 閱讀 4135

最近開發的產品遇到了網路問題,很嚴重的網路問題,具體我就不說了,總之問題很嚴重,專案組有個哥們兒,看似很有經驗,企圖通過新增新的處理邏輯來解決問題,這個方式我本身就很不同意,因為遇到問題之後最好的辦法就是找到問題的根源然後徹底解決,而不是在錯誤之上試圖彌補,這哥們兒用了一招試圖讓大家覺得他很有經驗,他害怕新增新的邏輯會引起新的問題,於是他用巨集開關來控制他新加入的邏輯,一旦出現新問題他可以關掉他加入的邏輯從而定位問題。但是想象一下,這個做法實際上變成了整合他新加入的邏輯而不是解決原來的問題,乙個又乙個的新功能被加入了,乙個又乙個的巨集被define,甚至出現了巢狀的define,巢狀的ifdef,過了大概一周,我想除了他自己之外,沒有第二個人可以讀明白**的邏輯了,在他眼裡,**很清晰,然而在大家眼裡卻很混亂。

於是我開口了,我不能忍受陷入巨集定義的泥潭,我明確反對了這哥們兒的做法,他還好說話,不再新增巨集定義了,怎麼修改**呢?他引入了很多的布林變數,試圖靠布林開關在執行時左右**的執行邏輯,我只能苦笑,這實際上還不如巨集開關呢,巨集開關起碼還是在編譯期左右編譯過程,好一點的開發環境比如vs2005可以講未定義的巨集包圍的**置為灰色,還不錯,但是換成布林開關之後,我們大家完全不知道了**的處理流程,其實這是乙個更大的錯誤...

當代it業的基礎是什麼,是計算機和網路技術,後者的基礎是什麼,是布林邏輯,我感覺那哥們兒適合做硬體,後來知道他以前是寫彙編的,暈!高階語言的優勢就在於可以是人們逃離布林邏輯而使用人們慣用的邏輯來分析和解決問題,他倒好,又回到了布林邏輯時代,不管是巨集開關還是布林開關,他好像對布林邏輯很親!這一點是軟體開發的大忌,軟體開發應該從整體上把握問題,然後試圖用人的思維方式去解決問題,這正是物件導向思想的精髓,最重要的一點就是按照人的邏輯去解決問題而不是機器的方式,布林邏輯當然很重要,它對編譯器和cpu的設計更加重要而不是對業務軟體開發...

除錯技巧 巨集列印開關

在 除錯過程中,或多或少會新增printf 函式輸出除錯資訊來協助 地除錯工作。但當 除錯ok進入發布階段時,將printf 都注釋會造成 混亂不符合程式設計規範,將其刪除又會帶來後續除錯地不便。所以很多人採用了,巨集定義的方式來輸出除錯語句。常見地巨集定義列印開關如下 ifdef debug de...

CMakeLists 實現動態巨集開關

最近在工作中需要通過乙份c 控制邏輯走向,網上找了一下資料,發現可以通過在cmakelists檔案中動態定義巨集開關,從而能夠達到編譯出不同邏輯流的 具體步驟 首先,我在src 裡編寫了若干debug的輸出 ifdef debug some print command endif然後,在cmakel...

除錯技巧 巨集定義開關和printf

printf 的巨集定義版本 前言 我們在寫程式的時候,總是或多或少會加入一些printf之類的語句用於輸出除錯資訊,但是printf語句有個很不方便的地方就是當我們需要發布程式的時候要一條一條的把這些語句刪除,而一旦需要再次除錯的時候,這些語句又不得不一條條的加上,這給我們帶來了很大的不便,浪費了...