English (United Kingdom)French (Fr)
Resources Programming rules Programming rules for C
Programming rules for C
Resources

Cette page donne une description d'une partie des règles de programmation vérifiées par l'outil Logiscope.

Règles de présentation

CodePres_1_DeclarationPerLineUne seule déclarationpar ligne
CodePres_2_NumberStatementsPas plus de 100 instructions dans une fonction et pas plus de 1000 dans un fichier
CodePres_3_FileLengthPas plus de 2000 lignes dans un fichier
CodePres_4_StatementSwitchPas plus de 10 clauses dans un switch
CodePres_5_StatementSwitchPas plus de 25 instructions dans chaque clause d'un switch
CodePres_6_CommentStatementLineLes commentaires ne doivent pas être sur la même ligne que les instrcutions
CodePres_7_ExtensionHeaderLes noms des fichiers header doivent avoir un suffixe ".h"
CodePres_8_EnumBooleanDéfinit un type booléen de la façon suivante :  typedef enum { false = 0, true = 1 } Boolean ;
CodePres_9_ParamFunctionPas plus de 7 paramètres pour les fonctions
CodePres_10_StatementPerLineUne seule instruction par ligne
CodePres_11_ControlStructureLes structures de contrôle doivent débuter sur une nouvelle ligne : - do - while - for - if - else - switch - return - break - continue
CodePres_12_BlankLine

Les parties déclarations et instructions d'une focntion doivent être séparées par une ligne blanche.

CodePres_13_BraceLes blocs d'instructions doivent être entre accolades.
CodePres_14_CommentDeclarationToutes les déclarations doivent être commentées.
CodePres_15_PointerDeclarationDans une déclaration de pointeur, le caractère "*" doit être collé au nom du pointeur.
CodePres_16_SpacingRefPas d'espace avant ou après "." et "->".
CodePres_17_SpacingOperatorLes opérateurs "++", "--", "&" (functionAddress) , "*" (FunctionRef) doivent être collés à leur opérande.
CodePres_18_SpacingParameterDans un appel de fonction, il ne doit pas y avoir d'espace après la parenthèse ouvrante et avant la parenthèse fermante.
CodePres_19_LineLengthUne ligne ne doit pas contenir plus de 80 caractères.
CodePres_25_SingleLineCommentLes commentaires doivent être sur une seule ligne.
CodePres_26_CommentDefinitionToutes les définitions doivent être commentées.
CodePres_28_DefinitionsUn fichier body ".c" doit contenir les définitions des variables exportées contenues dans le fichier header ".h" correspondant.
CodePres_29_SpacingUnaryOperatorLes opérateurs unaires "!" et "~" doivent être collés à leur opérande.
CodePres_30_DefineLes directives "#define" doivent être groupées.

Règles protégeant des pièges du langage C

Complexity_13_SimpleTestLes instructions du type x == y; et x != y; sont interdites
ControlFlow_1_NoDeadCodePas de code après "goto", "return", "break" ou "continue".
ControlFlow_4_ThenElseLes parties "then" et "else" d'une structure "if" ne doivent pas être vides.
ControlFlow_8_BreakPathInSwitchToutes les branches des clauses d'un switch doivent se terminer par un break.
MISRA_13_3 Ne pas comparer des nombres flottants pour une stricte égalité.
MISRA_14_9 La partie then d'un if doit être un bloc d'instuctions entre accolades. Il en est de même pour la partie else si elle existe.
MISRA_13_1Ne pas faire d'affectation dans une expression qui renvoie un booléen.

 Règles limitant la complexité du code

Complexity_1_MultipleAssignmentPas d'affectations en cascade
Complexity_2_NoTernaryOpPas d'utilisation de l'opérateur ternaire "?"
Complexity_3_NoUnary+Pas d'utilisation de l'opérateur unaire "+"
Complexity_4_NoAssignmentOpPas d'utilisation des opérateurs d'affectation autres que "=" comme "*=", "/=", "+="...
Complexity_5_CallResultUtiliser la valeur de retour des fonctions
Complexity_6_++--OperatorsN'utiliser "++" et "--" que dans les cas simples.
Complexity_7_NoCastPas de cast.
Complexity_8_NoMultipleInitPas d'initialisation dans des déclarations multiples.
Complexity_9_MacroPas de macros avec plusieurs instructions.
Complexity_10_FieldAddressingPour accéder à un élément de structure pointée, utiliser la notation "Ptr->Field" au lieu de "(*Ptr).Field"
Complexity_11_NoCommaAndTernaryNe pas utiliser les opérateurs ',' et '?'.
Complexity_12_OperatorInConditionUne condition aved plus de 4 opérateurs logiques ne doit pas contenir des opérateurs différents.
Complexity_13_SimpleTestLes instructions du type x == y; et x != y; sont interdites
Complexity_14_InclusionLevelLes inclusions de fichiers sont interdites dans les fichiers header.
Complexity_15_SizeofL'opérande du l'opérateur "sizeof" doit être entre parenthèses.

Règles permettant d'améliorer la structuration du code.

ControlFlow_10_SwitchBetterThanIfUtiliser un switch plutôt que des tests en cascade.
ControlFlow_11_OneBreakContinueUn seul "break" ou "continue" autorisé dans le corps d'une  boucle do, while ou for.
ControlFlow_1_NoDeadCodePas de code après goto", "return", "break" ou "continue".
ControlFlow_2_FunctionReturnUn seul return autorisé par fonction.
ControlFlow_3_NoGotoPas de goto.
ControlFlow_4_ThenElseLes parties "then" et "else" d'une structure "if" ne doivent pas être vides.
ControlFlow_5_NoBreakContinue"break" et "continue" interdits dans le corps d'une  boucle do, while ou for.
ControlFlow_6_DefaultInSwitchLa clause "default" est obligatoire dans les switchs.
ControlFlow_7_BreakInSwitchLe "break" est obligatoire comme dernière instruction de chaque clause d'un switch.
ControlFlow_8_BreakPathInSwitchToutes les branches des clauses d'un switch doivent se terminer par un break.
ControlFlow_9_ControlStructureNestingPas plus de 6 structures de contrôles imbriquées.

Règles pour la portabilité

Portability_1_C++KeywordsNe pas utiliser les mots clé du langage C++ comme identificateurs : class, new, friend, ...
Portability_2_NoDollarNe pas utiliser le caractère "$" dans les identificateurs.
Portability_4_CharIdentifierUtiliser uniquement les lettres (majuscules et minuscules), les chiffres et le caractère souligné dans les identificateurs.
Portability_5_NoSignedRightShiftPas de décalage à droite sur des entiers signés.
Portability_6_MainNamingExit obligatoire pour sortir du programme principal.
Portability_7_NoRecursiveHeaderLes inclusions de fichiers récursives sont interdites.
Portability_9U_AbsolutePathIncludeLe nom de fichier utilisé dans une directive "#include" doit avoir la même casse que le fichier correspondant.
ortability_12U_FilenameLengthLes noms de fichiers doivent être en minuscules et ne pas dépasser 8 caractères pour le nom et 3 caractères pour l'extension.
Portability_13_NoTabNe pas utiliser le caractère tabulation dans un fichier source.
MISRA_13_3 Ne pas comparer des nombres flottants pour une stricte égalité.

 Règles facilitant la maintenance

Resource_1_AccessArrayUtiliser un pointeur pour parcourir les éléments d'un tableau plutôt qu'un index.
Resource_2_ForCounterNe pas changer le compteur de boucle à l'intérieur d'une boucle.
Resource_3_DeclarationInitSeparateLes variables doivent être déclarées et initialisées séparément.
Resource_4_DeclarationInitCombineLes variables doivent être déclarées et initialisées simultanément.
Resource_5_LocalDeclarationIl ne faut pas déclarer de variables locales à un bloc.
Resource_6_GlobalDeclarationLes objets globaux doivent être déclarés dans un fichier header.
Resource_7_VariableUseLes variables déclarées doivent être utilisées.
Resource_8_FunctionUseLes fonctions déclarées doivent être utilisées.
Resource_9_ParameterUseTous les paramètres des fonctions doivent être utilisés.
Resource_10_NoGlobalParameterUne variable globale ne doit pas être utilisée comme paramètre d'une fonction.
Resource_11_InputParameterL'ordre des paramètres d'une fonction doit être : objet courant, paramètres en entrée, paramètres en sortie
Resource_12_NoExternBodyLe mot clé "extern" est interdit dans un fichier body (".c").
Resource_13_NoStaticInFuncLes variables déclarées "static" sont interdites dans les fonctions.
Resource_14_ExternHeaderToutes les déclarations de variables dans un fichier header doivent être précédées du mot clé "extern".
Resource_15_NoFunctionHeaderAucune définition de fonction ne doit se trouver dans un fichier header.
Resource_16_FileExtensionLes noms des fichiers header doivent avoir une extension ".h" et ceux des fichiers body une extension ".c".
Resource_18_NoBodyInclusionUn fichier ".c" ne doit pas être inclus pas une autre fichier ".c".
Resource_19_NoBitfieldLes champs de bits sont interdits.
Resource_20_NoAutoLes déclarations de variables locales ne doivent pas être "auto".
Resource_21_ArrayInitL'initialisation d'un tableau doit être conforme à sa structure.
Resource_22_PointerInitUn pointeur doit toujours être initialisé.
Resource_23_WhileInitLa valeur initiale du paramètre d'une boucle doit être connue avant l'entrée dans la boucle.
Resource_24_ConstVolatileInitSeules les variables déclarées const et volatiles doivent être initialisées à leur définition.
Resource_26_TypedefUnionStructUn typedef ne doit pas masquer une structure ou une union.
Resource_30_EnumInitLes valeurs des enums ne doiveny pas être explicites.
Resource_31_StructUnionL'usage des unions doit être limité.
Resource_32_ForSpecificationToutes les parties de l'instruction "for" doivent être remplies.
MISRA_14_10
 Les constructions if... else if... else if... doivent se terminer par else.
MISRA_14_9 La partie then d'un if doit être un bloc d'instuctions entre accolades. Il en est de même pour la partie else si elle existe.
MISRA_13_1Ne pas faire d'affectation dans une expression qui renvoie un booléen.

 

 

Latest news

April, 8 : Free seminar in Paris

Cité Internationale Universitaire de Paris - 17 bd Jourdan - 75014 Paris

Kalimetrix invites you to its next seminar in Paris, about

"Software products evaluation".
 
Please note that this seminar will be held in French.

 Read more

Tax Credit for Research

Kalimetrix has just received a government agreement concerning the French Tax Credit for Research disposition. This enables French companies to benefit from fiscal reductions when they entrust Kalimetrix with research and development related work.

 Please note that this applies only to French based companies.

News

 Kalimetrix IBM partner

 

 
 
In june, 2009, Kalimetrix became ISV (Independant Software Vendor), approved by IBM to sell the Rational product line for software development.

Poll of the month

Have you measured your software projects statistics?