gpt4 book ai didi

c - 变量声明

转载 作者:太空宇宙 更新时间:2023-11-04 06:35:27 25 4
gpt4 key购买 nike

我正在编写一段代码,它从文件中读取数据并对其进行操作。这个想法是以全局方式加载数据,然后对数据使用几个函数来执行计算。我遇到的问题是编译时出现以下错误:

' vertices' undeclared (first use in this function).

头文件包含以下内容:

typedef struct
{
double x;
double y;
double z;
} variable;

在主体中,我调用了 malloc 和一个函数,它将使用这个名为“vertices”的“变量”数组:

int main (void)
{
variable *vertices = (variable*) malloc( 5000 * sizeof (variable) ) ;
load_file();
free(vertices);
return 0;
}

函数load_file():

    FILE *fp1 ;
fp1 = fopen( 'file',"r");
if (fp1==NULL)
{
printf("File couldn't be opened or read!");
return 1;
}

int j = 0;
while(fscanf(fp1, "%lf %lf %lf ", &vertices[j].x, &vertices[j].y, &vertices[j].z ) == 3 )
{
j++;
}
fclose(fp1);

实际上,当我将 malloc 放入 load_file 时,它会编译并运行,但问题是我有各种其他函数将使用数据,如果我在 load_file 中释放它,我将失去一切.如果我在 main 之上重新定义 typedef,我会得到一个'previous definition was here',如果我在 main 之前添加variable vertices;,则会出现大量错误。 p>

我该如何解决这样的问题?

最佳答案

问题是您在 main 中声明了“顶点”,这使得它的作用域在 main 中是局部的,而 load_file() 看不到它。

如下更改 load_file() 的声明...

void load_file( variable* vertices )
{
/// blah blah
}

然后在 main 中,将您的顶点变量传递给它...

int main (void)
{
variable *vertices = malloc( 5000 * sizeof (variable) ) ;
load_file( vertices );
free(vertices);
return 0;
}

编辑:我建议不要只让顶点成为一个全局变量……这意味着任何东西都可以访问它和/或修改它……甚至是无意的。将参数传入和传出需要它们的函数几乎总是更明智,而不是仅仅让它们对世界全局可用……范围是你的 friend 。

关于c - 变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15556518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com