剛學 C 的時候,老師說過:「變數要記得初始化。」
我點點頭,然後還是繼續寫:
int count;
char buf[64];
int *ptr;
反正當下程式跑起來好像也沒問題。
直到有一天,發現程式出現一個「偶發性」的奇怪行為。
有時候正常,有時候不正常,完全沒有規律。
韌體開發 x 踩坑心得 x 讓錢慢慢長大
剛學 C 的時候,老師說過:「變數要記得初始化。」
我點點頭,然後還是繼續寫:
int count;
char buf[64];
int *ptr;
反正當下程式跑起來好像也沒問題。
直到有一天,發現程式出現一個「偶發性」的奇怪行為。
有時候正常,有時候不正常,完全沒有規律。
#define 可以說是 C 語言裡最早學到的東西之一。
#define MAX_SIZE 256
#define PI 3.14159
看起來很無害,對吧?
但用久了才發現,#define 其實是個很容易出事的工具。
它不是變數、不是函式、不遵守 scope、不做型別檢查,
就是單純的文字替換。
而「單純的文字替換」,在某些情況下會產生你完全沒預期到的結果。
這篇記錄幾個我自己踩過、或在 code review 看過的坑。