首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C中为什么把申明函数放到主函数中就报错解决方法

2012-06-18 
C中为什么把申明函数放到主函数中就报错C中为什么把申明函数放到主函数中就报错?运行正常的代码#include

C中为什么把申明函数放到主函数中就报错
C中为什么把申明函数放到主函数中就报错?
运行正常的代码
#include <stdio.h>

void array_pao(float a[],int n);//区别在这

int main()
{
  float a[300];
  int i, n = 0;
  char ch; 
  while (1)
  {
  scanf("%f", &a[n++]);
  ch = getchar();
  if (ch == '\n')
  break;
  }

  array_pao(a,n);
  getchar();
  return 0;
}
void array_pao(float a[],int n)
{
  float t;
  int j,m,p;
  for(p=1;p<n;++p)
  {
  for(j=0;j<n-1;++j)
  {
  while(a[j]>a[j+1])
  {
  t=a[j];a[j]=a[j+1];a[j+1]=t;
  }

  }
  }
  for(m=0;m<n;++m)
  {
  printf(" %f",a[m]);
  }
}

报错的代码:
#include <stdio.h>

int main()
{
  float a[300];
  int i, n = 0;
  char ch; 
  while (1)
  {
  scanf("%f", &a[n++]);
  ch = getchar();
  if (ch == '\n')
  break;
  }
  void array_pao(float a[],int n);//区别在这  
  array_pao(a,n);
  getchar();
  return 0;
}
void array_pao(float a[],int n)
{
  float t;
  int j,m,p;
  for(p=1;p<n;++p)
  {
  for(j=0;j<n-1;++j)
  {
  while(a[j]>a[j+1])
  {
  t=a[j];a[j]=a[j+1];a[j+1]=t;
  }

  }
  }
  for(m=0;m<n;++m)
  {
  printf(" %f",a[m]);
  }
}


为什么把声明部分从main之前放到main之中就报错了,我记得也是合法的,有例子证明:

申明放在main之中成功运行的例子:

#include <stdio.h>
#include <math.h>
#define n 5
void main()
{
void array_pao(); //申明在main中,运行正常
array_pao();
}
void array_pao()
{
float a[n]={3.6,7.0,1.0,2.8,2.0};
float t;
int j,m,p;
for(p=1;p<5;++p)
for(j=0;j<n-1;++j)
{
while(a[j]>a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}

}
for(m=0;m<5;++m)
{
printf(" %f",a[m]);
}
}


求解,这是为什么,请解释下好吗,为什么在main中定义,有时可行,有时却报错

[解决办法]
C语言中,变量的声明、定义要放在函数体的最前面。是不是函数的声明也是如此啊?
但我从来不认可在函数内声明另一个函数这种看起来就很恶心的写法。
[解决办法]
首先楼主要明确声明放在函数内是个很不好的习惯,堂而皇之这样做并且不作任何说明的的C教材,除了谭浩强意外我没见过

你的问题涉及到C89标准的限制——声明必须放在作用域头部,如果写了其他语句再声明就报错

热点排行