Node:Presentation globale, Next:, Previous:Presentation locale, Up:Top



Présentation globale

Fichiers en-tête et inclusions

Les indications de présentation locale sont applicables pour les fichiers en-tête (.h).

Les fichiers en-tête doivent être protégés contre l'inclusion multiple, en utilisant une macro de même nom que le fichier, en majuscules. Par exemple, le fichier foo.h sera protégé comme suit :
#ifndef FOO_H
# define FOO_H
/*
** Contents of foo.h
*/
#endif /* !FOO_H */

Les inclusions (directives #include) doivent apparaître au début d'un fichier. Les inclusions d'en-têtes système doivent apparaître avant les inclusions "locales" :

Incorrect :
#ifndef FOO_H
# define FOO_H

int bar();

# include "bar.h"

int foo();

# include <stdio>
#endif /* !FOO_H */
Correct :
#ifndef FOO_H
# define FOO_H

# include <stdio>
# include "bar.h"

int bar();
int foo();

#endif /* !FOO_H */

Prototypes

Toutes les fonctions exportées (à portée globale) doivent être correctement prototypées. Les prototypes doivent apparaître dans des fichiers en-tête, pas dans les fichiers source.

Quand un fichier définit une fonction exportée, il doit inclure l'en-tête qui contient le prtototype de la fonction.

Par exemple :

Fichier my_string.h :
#ifndef MY_STRING_H
# define MY_STRING_H

# include <stddef.h>

size_t my_strlen(const char *);
char   *my_strdup(const char *);

#endif /* !MY_STRING_H */

Fichier my_strlen.c :
#include "my_string.h"

size_t my_strlen(const char *s)
{
/* definition of my_strlen */
}
Fichier my_strdup.c :
#include "my_string.h"

char *my_strdup(const char *s)
{
/* definition of my_strdup */
}

Les prototypes doivent être écrits dans le style ANSI : ils doivent spécifier à la fois le type de retour et les types des arguments.

Prototypes incorrects :
foo();

bar(int, long);

int baz();
Prototypes corrects :
int  foo(int x);

void bar(int, long);

int  baz(void);

Lorsque plusieurs prototypes se suivent, les noms de fonctions doivent être alignés :

Incorrect :
unsigned int  strlen(const char *);
char *strdup(const char *);

Correct :
unsigned int  strlen(const char *);
char          *strdup(const char *);

Il ne doit pas y avoir plus d'une fonction exportée par fichier source. Il ne doit pas y avoir plus de 5 fonctions locales ("static").