2017-02-17 3 views
-1

Я использую функцию SDBM хэш в программе и есть вопрос, касающийся определения функции, приводится ниже:Функция размещения аргумент в C

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) 
{ 
    .... 
} 

Конечно, если я изменить его, чтобы быть, как это, функция по-видимому, работает отлично, так зачем? Какая разница?

ответ

3

Это K&R method of function definition, ничего страшного, но устаревшего. Это был способ определения функции в эпоху до ISO.

Технически

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

точно так же, как

static unsigned long sdbm (unsigned char *str) { 
Смежные вопросы