回答編集履歴

1

update

2017/07/19 04:25

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- C標準機能です。両とも論理否定を表します。
13
+ C標準機能です。両とも論理否定を表します。
14
14
 
15
15
 
16
16
 
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- 少し微妙ですがC標準の範囲内です。プリプロセッサをアセンブリ言語と組み合わせています。プリプロセッサはC言語(C++言語)の一部ですが、単体でも利用可能ですし、別プログラミング言語と組み合わせることも可能です。
21
+ 少し微妙ですがC標準の範囲内です。プリプロセッサをアセンブリ言語と組み合わせています。プリプロセッサはC言語(C++言語)の一部ですが、プリプロセッサ単体でも利用可能ですし、別プログラミング言語と組み合わせることも可能です。
22
22
 
23
23
 
24
24
 
@@ -28,9 +28,23 @@
28
28
 
29
29
  > 4, 中括弧を大括弧で囲んでいる?
30
30
 
31
+ > これは・・・関数の定義ですか?それともマクロですか? 融合しているような・・・
32
+
33
+ > よく見ると可変長関数ですかね? 関数内部では可変長用の処理が行われていないような・・・
31
34
 
32
35
 
36
+
37
+ 可変長マクロ引数を伴う関数マクロ(function-like macro)の定義です。ここは2つのGCC独自拡張機能が使われています。
38
+
39
+
40
+
33
- GNUコンパイラの独自拡張機能です。通常の`{~}`ブロックは文(statement)すが、`({~})`をとすると式(expression)として扱えます。
41
+ - 通常の`{ }`ブロックは文(statement)になりますが
42
+
43
+ 、`({ ~ })`は式(expression)として扱えます。詳細は[Statements and Declarations in Expressions](https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html)を参照ください。
44
+
45
+
46
+
47
+ - 可変長マクロ引数を`args...`で受け、マクロ定義本体では`args`で引数リストを展開します。詳細は[Variadic Macros](https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html)を参照ください。
34
48
 
35
49
 
36
50