2017-02-17 3 views
-1

Ich bin mit der SDBM Hash-Funktion in einem Programm und habe eine Frage bezüglich der Funktionsdefinition, im Folgenden wiedergegeben:Funktion Argument Platzierung in 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; 
} 

ich durch Versuch und Irrtum zu verstehen, dass die Funktion ein unsigned char * erwartet , aber warum legen Sie es nach den Klammern und vor der geschweiften Klammer? Ich wusste nicht, das ist eine Option, und ich kann nichts finden, mir zu sagen, warum es nicht stattdessen wie folgt geschrieben:

static unsigned long 
sdbm(unsigned char *str) 
{ 
    .... 
} 

Natürlich, wenn ich es tun ändern, so zu sein, die Funktion scheint immer noch perfekt zu funktionieren, also warum? Was ist der Unterschied?

Antwort

3

Dies ist K&R method of function definition, nichts falsch, aber veraltet. Dies war der Weg der Funktionsdefinition in der Prä-ISO-Ära.

Technisch

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

ist genau das gleiche wie

static unsigned long sdbm (unsigned char *str) { 
Verwandte Themen