2017-02-17 1 views
-1

J'utilise la fonction de hachage SDBM dans un programme et nous avons une question concernant la définition de la fonction, reproduite ci-dessous:placement Argument de fonction en 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; 
} 

Je comprends par tâtonnement que la fonction attend un unsigned char * , mais pourquoi le placer après les parenthèses et avant l'accolade? Je ne savais pas que ce soit une option, et je ne trouve rien à me dire pourquoi il est pas écrit comme ceci:

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

Bien sûr, si je le modifier pour être comme celui-ci, la fonction semble toujours fonctionner parfaitement bien, alors pourquoi le faire? Quelle est la différence?

Répondre

3

Ceci est K&R method of function definition, rien à redire, mais obsolète. C'était la manière de définir la fonction dans l'ère pré-ISO.

Techniquement,

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

est exactement le même que

static unsigned long sdbm (unsigned char *str) {