多维C程序结构

Multidimension C program structure

我有一个用C写的程序,目的是作为多维码运行。例如,用户可以通过将 MACRO "DIMENSION" 设置为“1”或“2”来选择 1D 或 2D。这是一个简单的例子:

#define DIMENSION 1
#define UNUSED(x) (void)(x)

void fun(double *x, double *y);
int main()
{
  double *x;
  double *y;

  x = calloc(5,sizeof(double));
#if DIMENSION == 2
  y = calloc(5,sizeof(double));
#elif DIMENSION == 1
  UNUSED(y);
#endif

  fun(x,y);

  free(x);
#if DIMENSION == 2
  free(y);
#endif
  return 0;
}

fun(double *x, double *y)
{
  int i;

  for(i = 0; i < 5; i++)
  {
      x[i] = i;
#if DIMENSION == 2
      y[i] = i;
#endif
  }

}

需要指出的是,我正在使用 GCC(并非我的所有最终用户都会使用)并且我确实启用了编译器选项 -Wuninitialized 和 -Wmaybe-uninitialized。我想在编译过程中抑制警告,但仍保留检查。我读过有关使用以下内容的信息:

#define UNUSED(x) (void)(x)

它似乎抑制了一些警告,但不是全部。这是因为即使我没有初始化函数 "fun" 也采用了 y 项吗?我将如何解决这个问题?理想情况下,通过将 "DIMENSION" 设置为“1”,代码将在没有警告的情况下编译为一维代码,并且不需要内存开销。建议?谢谢

尝试

#define DIMENSION 1


#include<cstdlib>
void fun(double *x, double *y);
int main()
{
  double *x = NULL;
  double *y = NULL;

  x =(double*) malloc(5*sizeof(double));
#if DIMENSION == 2
  y =(double*) malloc(5*sizeof(double));
#endif

  fun(x,y);

  free(x);
#if DIMENSION == 2
  free(y);
#endif
  return 0;
}

void fun(double *x, double *y)
{
  int i;
  for(i = 0; i < 5; i++)
  {
      x[i] = i;
#if DIMENSION == 2
      y[i] = i;
#endif
  }

}

最简单的解决方案就是将 y 初始化为 NULL。这使您可以摆脱所有 UNUSED 废话。

#define DIMENSION 1

void fun(double *x, double *y);

int main()
{
    double *x;
    double *y = NULL;

    x = calloc(5,sizeof(double));
#if DIMENSION == 2
    y = calloc(5,sizeof(double));
#endif

    fun(x,y);

    free(x);
#if DIMENSION == 2
    free(y);
#endif
    return 0;
}

void fun(double *x, double *y)
{
    int i;

    for(i = 0; i < 5; i++)
    {
        x[i] = i;
#if DIMENSION == 2
        y[i] = i;
#endif
    }
}