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语言教程上就可以看得到....例如 八九十年代的,呵呵。
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语言教程上就可以看得到....例如 八九十年代的,呵呵。