回答編集履歴
1
update
answer
CHANGED
@@ -4,18 +4,25 @@
|
|
4
4
|
|
5
5
|
> 2, プリプロセッサの[!]はC言語の[!]と同じ意味です??
|
6
6
|
|
7
|
-
C標準機能です。両
|
7
|
+
C標準機能です。両者とも論理否定を表します。
|
8
8
|
|
9
9
|
> 3, インラインアセンブリではなく、アセンブリ言語をC言語と混合して使用している?
|
10
10
|
|
11
|
-
|
11
|
+
少し微妙ですが、C標準の範囲内です。プリプロセッサをアセンブリ言語と組み合わせています。プリプロセッサはC言語(とC++言語)の一部ですが、プリプロセッサ単体でも利用可能ですし、別プログラミング言語と組み合わせることも可能です。
|
12
12
|
|
13
13
|
行末`\`は、物理行は分離しているが論理行としては続いていることを、プリプロセッサへ伝えるものです。
|
14
14
|
|
15
15
|
> 4, 中括弧を大括弧で囲んでいる?
|
16
|
+
> これは・・・関数の定義ですか?それともマクロですか? 融合しているような・・・
|
17
|
+
> よく見ると可変長関数ですかね? 関数内部では可変長用の処理が行われていないような・・・
|
16
18
|
|
17
|
-
|
19
|
+
可変長マクロ引数を伴う関数マクロ(function-like macro)の定義です。ここは2つのGCC独自拡張機能が使われています。
|
18
20
|
|
21
|
+
- 通常の`{ ~ }`ブロックは文(statement)になりますが
|
22
|
+
、`({ ~ })`は式(expression)として扱えます。詳細は[Statements and Declarations in Expressions](https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html)を参照ください。
|
23
|
+
|
24
|
+
- 可変長マクロ引数を`args...`で受け、マクロ定義本体では`args`で引数リストを展開します。詳細は[Variadic Macros](https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html)を参照ください。
|
25
|
+
|
19
26
|
> 5, 関数の中に関数を定義 & 呼び出しているんでしょうか??
|
20
27
|
|
21
28
|
`list_for_each_entry`は独自定義されたマクロです。マクロ展開後はC標準機能で解釈可能です。
|