求高手,一个有趣函数指针有关问题?调试了好久没解决

求高手,一个有趣函数指针问题??????调试了好久没解决?
#ifndef TEST_C_ 

#define TEST_C_ 

#include <stdio.h>


void hello_num(int num)
{
  int i;
  for (i=0;i<num;i++)
  {
  printf("hello world,number is %d\n",i);
  }
}

void hello(void)
{
  printf("hello world,no number\n");
}

void main()

  void (*p)(int)=hello_num;
  void (*q)()=hello;
  int a=5;
  (*p)(a);
   
 
 
  (*q)(a);
   
}


#endif 
在VC6.0编译和运行都正常,接着我不小心试了改了一下
将主函数里void (*p)(int)=hello_num和 void (*q)()=hello;次序换了结果会编译错误,横奇怪,我开始调试,一开始我认为是c语言声明不能 只能在主函数开头,即定义后不能再也不能声明,接着又写了一个简单的程序验证了程序中间可以再声明,一开始的想法错误,不知道怎么回事,求高手解答,调试了好久没头绪?????
void main()

  void (*p)(int)=hello_num;
  
  int a=5;
  (*p)(a);
  void (*q)()=hello;//换了位置
 
 
  (*q)(a);
   
}


------解决方案--------------------
c的定义一定要出现在最前面,你代码文件的后缀是不是改成了.cpp?
------解决方案--------------------
C/C++ code
void main()
{  
  void (*p)(int)=hello_num;
   
  int a=5;
  (*p)(a);
  void (*q)()=hello;//换了位置
 
  
  (*q)(a);
}

------解决方案--------------------
关于函数指针的几种用法,请参考:
http://blog.****.net/pathuang68/article/details/4817046