If you cannot grok the overall structure of a program while taking a shower, you are not ready to code it.
- Richard Pattis
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#define DECLARE_ARRAY(type,name,size) \
extern type array_##name[size];
#define DEFINE_ARRAY(type,name,size) \
static const int size_##name = size; \
type array_##name[size];
#define ARRAY_INIT(name,value) \
do { \
memset(array_##name,value,size_##name * sizeof(array_##name)); \
} while (0);
#define ARRAY_GET(name,index,result) \
do { \
assert(index >= 0 && index < size_##name && result); \
*result = array_##name[index]; \
} while (0);
#define ARRAY_SET(name,index,value) \
do { \
assert(index >= 0 && index < size_##name); \
array_##name[index] = value; \
} while (0);
#define ARRAY_SIZE(name) size_##name
DECLARE_ARRAY(int,myarray,5)
DEFINE_ARRAY(int,myarray,5)
int main()
{
int value;
int x;
ARRAY_INIT(myarray,0)
ARRAY_SET(myarray,0,1)
ARRAY_SET(myarray,1,1)
ARRAY_SET(myarray,2,5)
ARRAY_SET(myarray,3,1)
ARRAY_SET(myarray,4,1)
for (x = 0; x < ARRAY_SIZE(myarray);x++)
{
ARRAY_GET(myarray,x,&value)
printf("value: %d\n",value);
}
return 0;
}