MD5源码中的奇怪语法,求解!该如何解决

MD5源码中的奇怪语法,求解!
MD5.c   里面有这样的代码
static   uint32  
getu32   (addr)
          const   unsigned   char   *addr;
{
return   (((((unsigned   long)addr[3]   < <   8)   |   addr[2])   < <   8)
|   addr[1])   < <   8   |   addr[0];
}

static   void
putu32   (data,   addr)
          uint32   data;
          unsigned   char   *addr;
{
addr[0]   =   (unsigned   char)data;
addr[1]   =   (unsigned   char)(data   > >   8);
addr[2]   =   (unsigned   char)(data   > >   16);
addr[3]   =   (unsigned   char)(data   > >   24);
}

他那个getu32,   putu32   是定义的宏还是函数啊,用C编译没问题,改用C++就报错。
高人解释下。


------解决方案--------------------
是函数。
函数中的参数申明,写在函数的()与{}之间,这是比较老的C语法,ansi后来摈弃了这种声明方式。不过出于兼容,一般的C编译器,仍然会接受这种写法。但是C++中函数的参数声明必须写在调用列表中,也就是在()内,不能写在()与{}之间。
------解决方案--------------------
赞同al0n9的说法.
很多比较经典的源代码都是用这种方式写的.
扩展名用.c一般就没有什么问题.


------解决方案--------------------
老版本的 C语言教程上就可以看得到....例如 八九十年代的,呵呵。