回答編集履歴

1

出力する情報を増やせるように関数を可変長引数化、マクロは3パラメータまで対応。

2021/08/27 10:50

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -8,9 +8,11 @@
8
8
 
9
9
  ```c
10
10
 
11
- #include<stdio.h>
11
+ #include <stdio.h>
12
12
 
13
- #include<stdlib.h>
13
+ #include <stdlib.h>
14
+
15
+ #include <stdarg.h>
14
16
 
15
17
 
16
18
 
@@ -20,9 +22,25 @@
20
22
 
21
23
  #ifdef DEBUG
22
24
 
23
- int *getArr(int *arr, int i, char *s) {
25
+ int *getArr(int *arr, int i, char *fmt, ...) {
24
26
 
27
+ if(i < 0 || i >= 18900*200) {
28
+
29
+ char buf[1024];
30
+
31
+ va_list ap;
32
+
33
+ va_start(ap, fmt);
34
+
35
+ vsprintf(buf, fmt, ap);
36
+
37
+ va_end(ap);
38
+
25
- if(i < 0 || i >= 18900*200) { printf("'%s' index error: i=%d\n",s,i); exit(1); }
39
+ printf("'%s' index error: i=%d\n",buf,i);
40
+
41
+ exit(1);
42
+
43
+ }
26
44
 
27
45
  return &arr[i];
28
46
 
@@ -30,9 +48,21 @@
30
48
 
31
49
  #define ARR(i,s) (*getArr(arr,i,s))
32
50
 
51
+ #define ARR1(i,s,v1) (*getArr(arr,i,s,v1))
52
+
53
+ #define ARR2(i,s,v1,v2) (*getArr(arr,i,s,v1,v2))
54
+
55
+ #define ARR3(i,s,v1,v2,v3) (*getArr(arr,i,s,v1,v2,v3))
56
+
33
57
  #else
34
58
 
35
59
  #define ARR(i,s) arr[i]
60
+
61
+ #define ARR1(i,s,v1) arr[i]
62
+
63
+ #define ARR2(i,s,v1,v2) arr[i]
64
+
65
+ #define ARR3(i,s,v1,v2,v3) arr[i]
36
66
 
37
67
  #endif
38
68
 
@@ -44,25 +74,31 @@
44
74
 
45
75
 
46
76
 
47
- int i=18900*200-1; //範囲内
77
+ int BB = 18900;
48
78
 
49
- //int i=18900*200; //範囲外
79
+ int m = 200;
80
+
81
+ int AA = 0;
50
82
 
51
83
 
52
84
 
53
- ARR(i, "test A") = 123;
85
+ ARR3(BB*m+AA, "testA BB=%d,m=%d,AA=%d",BB,m,AA) = 123;
54
86
 
55
87
 
56
88
 
89
+ int i=BB*m+AA;
90
+
57
- printf("arr[%d]=%d\n", i, ARR(i,"test B"));
91
+ printf("arr[%d]=%d\n", i, ARR(i,"testB"));
58
92
 
59
93
  printf("end.\n");
60
94
 
61
95
  }
62
96
 
97
+
98
+
63
99
  ```
64
100
 
65
- 配列内のインデックス(i=18900*200-1)とした場合
101
+ 配列内のインデックス(int AA=-1)とした場合
66
102
 
67
103
  ```plain
68
104
 
@@ -72,10 +108,10 @@
72
108
 
73
109
  ```
74
110
 
75
- 配列外のインデックス(i=18900*200) とした場合
111
+ 配列外のインデックス(int AA=0)とした場合
76
112
 
77
113
  ```plain
78
114
 
79
- 'test A' index error: i=3780000
115
+ 'testA BB=18900,m=200,AA=0' index error: i=3780000
80
116
 
81
117
  ```