Не определяйте имя макроса как a
или b
, вместо этого укажите массив в качестве параметра:
#define arr3d(a,i,j,k) a[(i)*span*span+(j)*span+(k)]
#define arr2d(b,i,j) b[(i)*span+(j)]
Тогда a
и b
будут параметрами, и вы 'Я смогу использовать его для разных массивов.
Редактировать
Например: char newarr [5] [5] [5];arr3d (newarr, 3, 3, 3);
также, если span
не является переменной, определенной во всех областях, где вам нужно использовать этот макрос, он не будет работать, и вам нужно будетдобавьте другой параметр в макрос - span, чтобы определение макроса выглядело так:
#define arr3d(a,i,j,k,span) a[(i)*(span)*(span)+(j)*(span)+(k)]
И да, я бы обычно этого избегал.