回答編集履歴

1

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

2020/10/25 08:27

投稿

SaitoAtsushi
SaitoAtsushi

スコア5466

test CHANGED
@@ -39,3 +39,19 @@
39
39
 
40
40
 
41
41
  こういうことを防止するためにマクロ定義で `do` `while` を用いるのはよくあるテクニックです。
42
+
43
+
44
+
45
+ ----
46
+
47
+
48
+
49
+ Free BSD のカーネルのコーディングスタイルの文章の中にマクロを `do` `while` で囲むことについて言及があるのを発見しました。 `if` 文の中で安全に使えると述べています。
50
+
51
+
52
+
53
+ 》 [STYLE(9) FreeBSD Kernel Developer's Manual](https://www.freebsd.org/cgi/man.cgi?query=style&sektion=9)
54
+
55
+
56
+
57
+ 余談ですが現代では関数として記述できるならば関数として書くことが一般的には好まれます。 現代のコンパイラはこのような簡単な関数をインライン化することが期待できるのでマクロで書く優位性がないからです。 カーネルの場合はコンパイラの最適化機能を無効に (または弱く) する必要がある場合もありますので事情が異なるのかもしれませんが。