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