У меня есть два кода: vector_add.c
и vector_print.c
.Оба требуют, чтобы я назначил длину вектора N как макрос, используя #define N (3)
, где 3 - длина.Я согласен с этим для vector_add.c
, но я не хочу обобщать vector_print.c
для работы с любой длиной вектора, а затем просто назначить длину вектора позже в другом коде.Я пытался использовать #undef N
по-разному, но не смог заставить его работать.
У кого-нибудь есть какие-либо предложения о том, как я могу обобщить мою функцию vector_print
для работы с любой длиной вектора, N ?Сейчас я просто использую #define N (3)
для обоих файлов, что прекрасно работает для вектора длины 3. Но я не хочу явно назначать длину вектора в vector_print.c
.Я хочу, чтобы он работал для любых N !
Это vector_add.c
:
#include <vector_print.h>
#include <stdio.h>
// vector length (fixed)
#define N (3)
// ----------------------------------------------------------------------
// vector_add
//
// returns the linear sum of the two vectors and puts them in another
// x: first vector
// y: second vector
// z: solution vector
void
vector_add(double *x, double *y, double *z)
{
for (int i = 0; i < N; i++) {
z[i] += x[i] + y[i];
}
}
// ----------------------------------------------------------------------
// main
//
// test the vector_add() function
int
main(int argc, char **argv)
{
double x[N] = { 1., 2., 3. };
double y[N] = { 2., 3., 4. };
double z[N] = {0.,0.,0.};
vector_add(x, y, z);
printf("x is ");
vector_print(x);
printf("y is ");
vector_print(y);
printf("z is ");
vector_print(z);
return 0;
}
Это vector_print.c
:
#include <stdio.h>
// vector length (fixed)
#define N (3)
// ----------------------------------------------------------------------
// vector_print
//
// prints the elements of an N-element array
// name: name of vector to print
void
vector_print(double *name)
{
for (int i = 0; i < N; i++) {
printf("%g ", name[i]);
}
printf("\n");
}
А если надо, то вот vector_print.h
:
#ifndef VECTOR_PRINT_H
#define VECTOR_PRINT_H
void vector_print(double *name);
#endif