C++引用作为函数参数解决方案

C++引用作为函数参数
//程序-:交换两个数的值
#include <iostream>
using namespace std; 
int main()
{
  void swap(int &a,int &b);//主要是声明这,我在这声明没实现.
  int x,y;
  cout<<"enter 2 integers: ";
  cin>>x>>y;
  swap(x,y); 
  cout<<x<<y;
  return 0;
}
void swap(int &a,int &b)
{
int t;
t = a;
a = b;
b = t;
}

//程序二:
#include <iostream>
using namespace std; 
void swap(int &a,int &b);//主要是声明这,我在这声明实现交换.
int main()
{
   
  int x,y;
  cout<<"enter 2 integers: ";
  cin>>x>>y;
  swap(x,y); 
  cout<<x<<y;
  return 0;
}
void swap(int &a,int &b)
{
int t;
t = a;
a = b;
b = t;
}
难道 必须声明成 全局的?
更奇怪的是:我在visual c++ 6.0中运行第一个程序没实现交换,在visual studio 2010中却实现了??

------解决方案--------------------
visual studio越高级的版本,编译的时候对程序的优化越来越强。程序一在2010中能交换式正常的。
------解决方案--------------------
在2010中程序一断点调试后,选择反汇编选项就能明白这段程序ide做了哪些优化。
------解决方案--------------------
VS2008实现交换了,编译器不同吧
------解决方案--------------------
函数声明应放在main函数的外面,VS2008下函数声明放在main函数内也能实现功能,应该是编译器做了优化