teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コーディングスタイルへのリンクと余談を追記

2020/10/25 08:27

投稿

SaitoAtsushi
SaitoAtsushi

スコア5740

answer CHANGED
@@ -18,4 +18,12 @@
18
18
 
19
19
  `else` 節が外側の `if` と対応付けることを意図しているにもかからわず `testbyte` の中の `if` と対応付いてしまいます。
20
20
 
21
- こういうことを防止するためにマクロ定義で `do` `while` を用いるのはよくあるテクニックです。
21
+ こういうことを防止するためにマクロ定義で `do` `while` を用いるのはよくあるテクニックです。
22
+
23
+ ----
24
+
25
+ Free BSD のカーネルのコーディングスタイルの文章の中にマクロを `do` `while` で囲むことについて言及があるのを発見しました。 `if` 文の中で安全に使えると述べています。
26
+
27
+ 》 [STYLE(9) FreeBSD Kernel Developer's Manual](https://www.freebsd.org/cgi/man.cgi?query=style&sektion=9)
28
+
29
+ 余談ですが現代では関数として記述できるならば関数として書くことが一般的には好まれます。 現代のコンパイラはこのような簡単な関数をインライン化することが期待できるのでマクロで書く優位性がないからです。 カーネルの場合はコンパイラの最適化機能を無効に (または弱く) する必要がある場合もありますので事情が異なるのかもしれませんが。