Ces quelques conseils permettent de réaliser des programmes plus faciles à utiliser, plus faciles à porter sur une autre architecture.
Utiliser la norme la plus récente (c_exp_1).
Lors d’un nouveau développement, il vaut parfois mieux utiliser une norme récente du langage tel que le C99 .
Justification.
Le codage est plus efficace lors de l’utilisation des nouvelles fonctionnalités introduite par la norme (mot-clé restrict, type de taille fixe, tableau de taille variable (VLA), boolean...). 
Le programme sera plus facile à reconstruire et à porter sur une autre machine dans le futur.
Tout chemin d’accès figé est interdit (c_exp_2).
Les chemins d'accès aux fichiers ne doivent pas être écrits en dur dans les fichiers sources.
Justification.
Un programme doit être paramétrable sans avoir à modifier ses fichiers sources et le recompiler.
Les chemins d'accès aux ressources doivent être récupérés depuis l’environnement ou depuis des fichiers de configuration : de préférence dans un format auto-décrit et éditable : comme XML.
Code retour du programme (c_exp_3).
Un programme doit toujours renvoyer la valeur 0 (EXIT_SUCCESS de stdlib.h) en cas de fin correcte ou un code erreur en cas d’incident (généralement EXIT_FAILURE de stdlib.h).
Des messages d'erreur utiles (c_exp_4).
Les messages d'erreur émis par les logiciels doivent aider les utilisateurs :
Justification.
Améliore l’ergonomie du logiciel.
Fichiers temporaires (c_exp_5).
Les fichiers temporaires doivent être générés dans les répertoires prévus à cet effet.
Ils doivent être détruits à la fin de l’exécution (qu’il s’agisse d’une terminaison normale ou dégradée).
Justification.
Limite la prolifération des fichiers parasites.
Outils.
Une analyse des appels systèmes en cours d'exécution du logiciel peut se réaliser avec un utilitaire comme strace pour UNIX ou ktrace sur Mac. Analyse des modifications du système de fichiers.

Conseils de codage en C/Qualité numérique

L'application de ces règles doit permettent d'éviter des erreurs de calcul.
Types homogènes dans les calculs (c_num_1).
Une expression arithmétique ne doit comporter que des éléments du même type.
Justification.
Évite les erreurs de calcul dues aux règles de conversions implicites des langages. C’est le programmeur qui doit définir explicitement les conversions de type. Les conséquences du mélange d'opérandes de même type :
Exemple.
unsigned int u =2;
int n = -2;
n = n / u;
n ne vaut pas -1 à la fin, mais une valeur du genre : 2147483647, ce qui faussera beaucoup les calculs ultérieurs , pour avoir un résultat correct il aurait fallut écrire n = n/(int) u;
Outils.
Les compilateurs et les outils de contrôle statique comme splint émettent des avertissements.
Ne pas tester l'égalité de deux réels (c_num_2).
Justification.
Améliore la qualité numérique.
a = a +1 dans une boucle peut produire la valeur a = 9.999999999 au lieu de 10.0, une instruction du genre codice_1 ne fonctionnera pas comme prévue.
Au lieu de codice_2
Écrire codice_3
EPS est une valeur très petite qui dépend de la précision de la machine, utiliser si disponible des constantes symboliques définies sur le système.
Outils.
Les compilateurs et les outils de contrôle statique comme splint émettent des avertissements.
Limitez les erreurs numériques (c_num_3).
Évitez les phénomènes d'annulation, d’absorption et d’arrondi.
Justification.
Les logiciels informatiques tentent de manipuler des nombres réels.
L'ensemble mathématique des décimaux, déjà plus restreint, est infini en étendue : il contient les nombres compris entre plus à moins l'infini. L'écart entre deux nombres peut être infiniment petit. Par contre les nombres en machine sont stockés dans un espace mémoire de taille très limité (32, 64, 128 bits...). Les nombres y sont représentés par une mantisse et un exposant codés sur un nombre fini de bits. On pourrait comparer le domaine de représentation des nombres en machine à une tranche de gruyère pleine de trous.
Il faut parfois réorganiser les expressions numériques et leur ordre de calcul pour éviter ces erreurs.

Conseils de codage en C/Facilité de modification