關於這條Coding Rule,雖然Google與Facebook等軟體巨擘們沒有強制要自己的員工加上大括號;並且以我過往的工作經驗看來,同事們對這條規矩的回饋總有雜音,想必大家都很糾結。
這裡提供一些傾向於要加括號的有力資訊 (而不只是感覺上加了比較好) 給大家參考:
1. 注重安全性的MISRA C的規定:
- MISRA C:2004
- Rule 14.9,if 結構後面應是一個複合語句(即用大括號包含) ,else 後面必須是一個複合語句(即用大括號包含) 或者另一個if 語句。 (From http://i.mtime.com/5690410/blog/6998138/)
- MISRA C:2012
- 根據MISRA提供的比較表 (https://www.misra.org.uk/forum/download/file.php?id=629&sid=ef7e4fac471adbd29e7ea9a093e93a7c) ,這條規則在 2012年版(編號改成Rule 15.6) 仍然被保留為必要性(required)規則
- MISRA C:2016
- 可惜我還找不到相關資訊。
2. Apple goto fail事件的低級Bug
提出一個發生在2012年關於Apple公司的真實案例,應該更有臨場感,詳細請參考文章 (https://coolshell.cn/articles/11112.html) ,文章中思考的面向頗多,推薦一讀,這裡只節錄一小段:…如我們強制使用語句塊括號,那麼,這兩個goto fail都會在一個if的語句塊裡,而且也容易維護並且易讀。……還是分多行,加上大括號會好一些。……雖然寫起來有點囉嗦,但利人利己。