Node:Presentation globale,
Next:Indications supplementaires,
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").