c - 多维C程序结构

标签 c function multidimensional-array gcc-warning

我有一个用 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
  }

}

关于c - 多维C程序结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28290167/

相关文章:

c - 摆脱基于文件的通信

jquery - 使用 jquery/javascript 停止带有动画的函数

javascript - 使用 forEach 循环循环遍历一系列数字,并将任何包含整数 1 的数字替换为 "Beep"

excel - 在VBA中从二维数组分配一维数组?

python - 如何对 `numpy.ndarray` 进行子集化,其中另一个沿某个轴最大?

c - 如何计算字符串中的字符数(如果没有占用所有空间)

c - C中具有不同数据类型的键值

c - 在 C 中实现回调函数

c++ - 低级妓女

php - 仅使用mysql查询从第二个表中获取第一个表作为数组的记录