原创 線程局部存儲 TLS(Thread Local Storage)

前幾天,一個同事過來跟我說,發現代碼庫裏面熟悉的“pthread_key_t”不見了,取而代之的是一個從來沒見過的“__thread”。說實話,這兩個東西我都不熟,但是本着“刨根問底”的態度,上網研究了一番,總算把這兩個東西基本搞清楚了。

原创 gcc鏈接靜態庫路徑與庫文件名對應關係

今天在編譯項目的過程中,發現一個庫文件的路徑明明寫錯了,但還是能夠正確鏈接成功…… 一番調研後發現,原來這個庫在前面已經被放在鏈接列表裏面了,而且前面的路徑是正確的。這說明,雖然我們通常在鏈接靜態庫的時候,我們都會像下面這樣寫: gcc

原创 軟件開發之大忌:想當然

寫這篇文章源於前幾天與同事關於一個需求的討論,大致的場景是這樣的: 有一個商品有多種品類供交易,業務部門想註銷掉其中的一個品類(數據庫中更改一個標誌位的值)。數據庫中的這張品類表,由我們的系統每天從數據庫中導出成文件,文件提供給其它系統使

原创 用心才能寫出好代碼

void foobar(x, y, z) { px = get_x(x); if (0 != check_x(px)) return ERROR; py = get_y(y); if

原创 C語言的static函數

前幾天,一個同事跟我說在我們的代碼庫裏面看到,一個static函數被放在了頭文件裏面,可構建的時候卻沒有報告鏈接錯誤。我的第一反應也是,函數被放在頭文件裏面,當這個頭文件被多個源文件引用之後,再把那幾個源文件編譯產生的目標文件鏈接起來的時

原创 Excel:二級菜單製作

所謂二級菜單的效果如下圖所示,當【一級部門】選擇“技術部門”時,【二級部門】的下拉列表中只顯示屬於“技術部門”的二級部門選項;“業務部門”邏輯類似。 #一級菜單製作: 一級菜單的製作相對簡單,選中B列,菜單【數據】->【數據驗證】->【

原创 程序員 vs 碼農

碼農工作的方式很多時候更像是一個“翻譯”,他們在拿到需求時,從不去考慮業務需求是否正確、合理,也從不去了解需求背後的業務邏輯,而是第一時間就開始動手寫代碼,一味簡單機械地把需求“翻譯”成代碼後即算完成任務。這樣久而久之、日復一日做的都是重

原创 目睹一次“失敗”的項目經歷

標題裏面的“失敗”二字加上了雙引號,是因爲這個項目儘管整個過程磕磕絆絆,但最近還是勉強上線了——但整個項目的開發過程真的是失敗…… 作爲這個項目的一位輕度參與者(臨時被拉過去支持了一段時間),從旁觀者的角度反思整個項目過程,發現其中的問題

原创 C/C++函數參數那些事兒~~

學習過C/C++編程語言函數的人都知道,C/C++語言的函數有“形參”與“實參”之分: “形參”即“形式參數”的簡稱,在函數沒有被調用的時候,“形參”是沒有實際的值的。 “實參”即“實際參數”的簡稱,在函數被調用時,由函數調用方傳遞實際的

原创 定製文本編輯器Notepad++

Notepad++是我日常工作中必備的文本編輯軟件,而且經常使用到的一個功能就是高亮顯示特定的文本。 Notepad++支持五種不同顏色的高亮顯示,分別以格式1~5命名,但這種命名方式在日常使用中很不方便。比如,我使用5種格式分別高亮顯示

原创 Notepad++文本編輯器簡介

Notepad++是Windows平臺上一款免費且開源的文本編輯器,其功能比Windows系統自帶的Notepad(記事本)強大的多。Notepad++除了可以用於一般的純文本記錄,還可以用於編寫小型的計算機程序,因爲Notepad++不

原创 指針那些事兒~~

“指針”一直以來都是初學者理解和掌握C語言的一大障礙,“指針”作爲C語言的核心內容,如果不掌握指針的相關知識,就不能說是學會了C語言。 本文將通過文字描述+代碼解析+圖例展示的方式,詳細解釋C語言指針的含義,以期撥開指針之迷霧、得見C語言

原创 Excel:根據特定單元格的內容突出顯示整行

Excel中根據特定內容突出顯示某個單元格,這個應該使用Excel的多數人都是知道的。 但是根據特定內容突出顯示整行,使用的人就比較少了,因爲這裏需要使用到簡單的函數功能。具體操作如下: 0、選中要設置的區域; 1、菜單【開始】->【條件

原创 逐步提高代碼的執行效率 —— 一次小實踐

最近,讓組裏的一個新人寫一個小工具,統計日誌文件裏面不同的時間點出現的次數(行數),找出其中的最大值。 第一次,新人是這樣做的:     1. 循環讀取文件的每一行,並執行命令“grep xxx | wc -l”,然後將結果輸出到一箇中間

原创 一次gcc鏈接靜態庫的小實驗總結

首先,大致說一下代碼文件結構,具體代碼附在最後。 main.c裏面調用libtestA.a(testA.c)裏面的函數testA()和libtestB.a(testB.c)裏面的函數testB(),函數testA()和testB()分別調