Règle de codage

Règle de codage - C++ - Programmation

Marsh Posté le 21-08-2008 à 08:59:31    

Il s'agit d'une règle de codage de MISRA, et l'exemple associé provient d'un outil QAC.
 
MISRA-C++ Rule 7-1-1: A variable which is not modified shall be const qualified.  
 
If a variable does not need to be modified, then it should be declared with const qualification so that it cannot be modified. A non-parametric variable will then require its initialisation at the point of declaration. Also, future maintenance cannot accidentally modify the value.  
 
Example
 

Code :
  1. void b ( int32_t * );
  2. int32_t f (  int32_t * p1,         // Non Compliant
  3.              int32_t * const p2,   // Compliant
  4.              int32_t * const p3 )  // Compliant
  5. {
  6.    *p1 = 10;
  7.    *p2 = 10;
  8.    b( p3 );
  9.    int32_t i = 0;                  // Non Compliant
  10.    return i;
  11. }


 
 
La règle écrite je la comprends, enfin je pense, mais c’est leur exemple qui me met le doute. Je trouve leur exemple pas du tout clair.
 
Pour ma part, voilà ce que j’ai compris :
 
(prenons un exemple basique)  
 

Code :
  1. Int f ( int i, int j)
  2. {
  3.    int y = i ;
  4.    j++ ;
  5.    int z = 10 ;
  6.    int y = y + j + z;
  7.    return ( y ) ;
  8. }


 
Dans cet exemple pour moi, selon la règle i doit etre marqué const car il n’est pas modifié, à la place on déclare une variable locale y pour effectuer les calculs. Du coup si plus loin dans la fonction, on a besoin de rappeler i, sa valeur n’aura pas bouger et sera bien protéger via le const.
De meme que z mérite const car elle est initialisée mais pas modifiée.
 
Vous me confirmez ?
 
Merci d'avance.
 

Reply

Marsh Posté le 21-08-2008 à 08:59:31   

Reply

Marsh Posté le 21-08-2008 à 09:03:48    

bah c'est le principe du mot clé const, y a rien de sorcier.

 


Message édité par Joel F le 21-08-2008 à 09:04:09
Reply

Marsh Posté le 25-08-2008 à 11:13:00    

par contre ton exemple est foireux :

Code :
  1. int f ( int i, int j)
  2. {
  3.   int y = i ;
  4.   j++ ;
  5.   int z = 10 ;
  6.   int y = y + j + z;
  7.   return ( y ) ;
  8. }


tu déclare deux fois la variable y... sinon ben oui c'est la bête règle du const, si c'est constant tu met const c'est assez simple ;)


Message édité par Malkav le 25-08-2008 à 11:13:15
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed