c - C 中函数参数的放置

标签 c function syntax function-definition

我正在使用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/

相关文章:

c - 如何在 Castalia 3.3 模拟器的命令行中更改配置 GTson(即对于具有不同 GTS 请求的各个节点)?

python - PyImport_Import 失败(返回 NULL)

javascript - 数组作为参数传递,但函数内重新分配失败?

Python:这里使用 [] 是什么意思?

c# - C++:数据类型为函数的 map 语法?

c - 在 AssignOp 之后在 ROSE 编译器中插入赋值

javascript - eval() 和 new Function() 是一回事吗?

c - 将结构体成员传递给 C 中的函数

c# - 如何使用 Type.GetType(string) 获取嵌套类的类型

c - 通过在未初始化的数据段 (bss) 中打印 "garbage values",我们可以映射出先前程序中的所有值