回答編集履歴
1
出力する情報を増やせるように関数を可変長引数化、マクロは3パラメータまで対応。
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 *
|
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
|
-
|
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
|
77
|
+
int BB = 18900;
|
48
78
|
|
49
|
-
|
79
|
+
int m = 200;
|
80
|
+
|
81
|
+
int AA = 0;
|
50
82
|
|
51
83
|
|
52
84
|
|
53
|
-
ARR(
|
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
|
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=
|
101
|
+
配列内のインデックス(int AA=-1)とした場合
|
66
102
|
|
67
103
|
```plain
|
68
104
|
|
@@ -72,10 +108,10 @@
|
|
72
108
|
|
73
109
|
```
|
74
110
|
|
75
|
-
配列外のインデックス(i=
|
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
|
```
|