C 中的函数参数放置
Function argument placement in C
我在程序中使用 SDBM 哈希函数,对函数定义有疑问,转载如下:
static unsigned long
sdbm(str)
unsigned char *str;
{
unsigned long hash = 0;
int c;
while (c = *str++)
hash = c + (hash << 6) + (hash << 16) - hash;
return hash;
}
我通过反复试验了解到该函数需要一个 unsigned char *
,但为什么将它放在方括号之后和大括号之前?我不知道这是一个选项,我找不到任何东西来告诉我为什么它不是这样写的:
static unsigned long
sdbm(unsigned char *str)
{
....
}
当然,如果我真的修改成这样,功能看起来仍然很好用,那为什么要这样做呢?有什么区别?
这是 K&R method of function definition,没有错,但是过时了。这是pre-ISO时代的函数定义方式。
技术上,
static unsigned long
sdbm(str)
unsigned char *str;
{
与
完全相同
static unsigned long sdbm ( unsigned char *str ) {
我在程序中使用 SDBM 哈希函数,对函数定义有疑问,转载如下:
static unsigned long
sdbm(str)
unsigned char *str;
{
unsigned long hash = 0;
int c;
while (c = *str++)
hash = c + (hash << 6) + (hash << 16) - hash;
return hash;
}
我通过反复试验了解到该函数需要一个 unsigned char *
,但为什么将它放在方括号之后和大括号之前?我不知道这是一个选项,我找不到任何东西来告诉我为什么它不是这样写的:
static unsigned long
sdbm(unsigned char *str)
{
....
}
当然,如果我真的修改成这样,功能看起来仍然很好用,那为什么要这样做呢?有什么区别?
这是 K&R method of function definition,没有错,但是过时了。这是pre-ISO时代的函数定义方式。
技术上,
static unsigned long
sdbm(str)
unsigned char *str;
{
与
完全相同static unsigned long sdbm ( unsigned char *str ) {