我正在使用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 ,没有错,但已经过时了。这是ISO之前时代的函数定义方式。
从技术上讲,
static unsigned long
sdbm(str)
unsigned char *str;
{
与
完全相同static unsigned long sdbm ( unsigned char *str ) {
关于c - C 中函数参数的放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42295854/