-1

我在程序中使用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)
{
    ....
}

当然,如果我把它修改成这样,这个功能看起来仍然可以很好地工作,那为什么要这样做呢?有什么不同?

4

1 回答 1

3

这是函数定义的 K&R 方法,没有错,但是已经过时了。这是前 ISO 时代的函数定义方式。

从技术上讲,

static unsigned long
sdbm(str)
unsigned char *str;
{

static unsigned long sdbm ( unsigned char *str ) {
于 2017-02-17T10:47:59.650 回答