回 帖 发 新 帖 刷新版面

主题:求助!工程中全局变量问题,谢


我用TC3组建工程文件,有两个全局变量,一个头文件,四个个函数,如下,可是每次我建好了,RUN的时候都是提示无法undefined symbol m,求大神解救,谢!
头文件
#include <stdio.h>
extern int m[10];
extern float credit;
float product(int a[]);
void sortA(int x[]);
void sortB(float y[]);
void readin(int a[]);
主函数
void main()

  extern int m[10];
  extern float credit;
  int a[10],c;
  float b[10];
  scanf("%f",&credit);
  product(a);
  readin(m);
  sortA(a);
  sortB(b);
  for(c=0;c<10;c++)
    printf("%d ",a[c]);
  for(c=0;c<10;c++)
    printf("%f ",b[c]);
  getchar();
  getchar();
 
}这是主函数
void readin(int a[])
{
 int c,b;
 for(c=0;c<10;c++)
   {
     scanf("%d",&b);
     m[c]=b;
   }
}
float product(int a[])
{
 int c,sum;
 float average;
 for(sum=c=0;c<10;c++)
   sum=sum+m[c];
 average=(float)sum/10;
 return(average);
}
void sortB(float y[])
{
 int i,j,k;
 float t;
 for(i=0;i<10;i++)
    y[i]=(float)m[i]/100*credit;
 for(i=0;i<10;i++)
   {
    k=i;
    for(j=i+1;j<10;j++)
      if(y[j]<y[k])
        k=j;
    t=y[k];
    y[k]=y[i];
    y[i]=t;
   }

void sortA(int x[])
{
 int i,j,c,t;
 for(c=0;c<10;c++)
    x[c]=m[c];
 for(i=0;i<9;i++)
    for(j=0;j<9-i;j++)
      if(x[j]>x[j+1])
        {
     t=x[j];
     x[j]=x[j+1];
     x[j+1]=t;
        }
}

回复列表 (共2个回复)

沙发

extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。

extern int m[10]只是声明了一个int数组m,并没有为m分配空间,没有真正给m分配空间,一个全局的变量,在一个模块或者全局中只能定义一次,你这里没有,所以编译的时候会有错误。
把main函数里面的两个extern放到外面,定义一下应该就没问题了吧。

板凳


描述清晰,问题解决了,谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册