功能参数位置在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&amp; r,没有错,而是过时的。这是ISO之前的功能定义方式。

从技术上讲,

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

完全相同
static unsigned long sdbm ( unsigned char *str ) {

最新更新