Tagged

Tips

各種神奇的小知識

Tips

在 Alpine Linux 上用 bindgen 的踩雷紀錄

最近在弄專題時,想說在一個比較單純的環境裡做測試,就挑了 Alpine Linux 來用。結果在編譯時跑 bindgen 吃了不少苦頭。 最一開始是這樣的,bindgen 會回報說無法動態載入 clang 的 shared library,錯誤訊息是 Dynamic loading not supported 。 幸好,bindgen 有提供 static 的 feature 可以用 cargo install --no-default-features --features static,logging,clap,which-rustfmt bindgen但是裝起來之後,一下指令就 Segmentation fault 是怎麼回事?? Debug 了一下就發現,他的 GOT 並沒有 relocate 到正確的地址上,查了很久才發現 rust

Tips

為何在 C 語言中,char ** 無法安全轉換為 const char **?

最近在寫程式時,發現當我把一個 char ** 型態的變數,傳到一個 const char ** 型態的參數時,出現了以下的警告: passing 'char *[257]' to parameter of type 'const char **' discards qualifiers in nested pointer types將 char * 型態轉換為 const char * 是安全的,那為何會這樣呢? 那是因為 char ** 會含有 char * ,因此有可能可以透過其他 char * 去修改 const char * 中的值 以下是一個簡單的範例: const char *bin = "/bin/sh"; char *argv[

Tips

在 Word 裡嵌入程式碼的注意事項

雖然說在 Word 裡塞程式碼並不是什麼好選擇,但是總是會遇到必須這麼做的時候,Ex: 某某教授的作業、要給某某客戶的文件...之類的。然後你就會體會到 Word 是一個 programmer-unfriendly 的玩意 : ( 等寬字體相信大家都知道讓程式碼好看的主要精華就是等寬字,也相信各位一定都有安裝等寬字體,也會知道要套用上去,就會得到: 相信大家都發現了,這空白跟其他字元並不等寬啊啊啊!顯然是 Word 又雞婆的動了手腳,調整了寬度,但這並不是我們想要的結果... 解決這個問題的秘訣在於某個藏起來的設定:「調整半形字及全形字的字距比例」 將它取消勾選就好 這個設定是針對每個檔案去設定的,在調整時要注意是否選到了要調整的檔案 調整完的結果: 舒服~~ 來源:https://answers.microsoft.com/en-us/mac/forum/macoffice2011-macword/monospaced-font-not-aligning-vertically-due-to/8d854439-41c1-4664-91c1-3f3e5de0f111

Tips

在C++的const function存取mutex

在 C++ 中寫 Multi-thread program的時候,為了 Thread-Safety 經常會在裡面塞 std::mutex 。 class ThreadSafe { public: int get() const; void set(int value); private: std::mutex _lock; int data; }; 但這時問題就來了, mutex::lock()/ mutex::unlock() 並不是 const member function,因此在 get() 中 lock mutex 的時候,想必會編譯失敗。 難道我們就得因此犧牲 const member function 的使用嗎? 其實 C++ 有一個鮮為人知的關鍵字