如何概括我用于指定向量长度的宏?

时间:2019-02-16 03:01:46

标签: c

我有两个代码:vector_add.cvector_print.c。两者都要求我使用#define N (3)将向量长度 N 分配为宏,其中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

1 个答案:

答案 0 :(得分:0)

只需在评论中转发解决方案即可。

您可以做的就是将长度传递给以下函数:

void vector_print(double *name, int len);
void vector_add(double *x, double *y, double *z, int len);

这将允许您像这样控制循环:

  for (int i = 0; i < len; i++) { // Note: i < len now, not N
    printf("%g ", name[i]);
  }