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 :
- void b ( int32_t * );
- int32_t f ( int32_t * p1, // Non Compliant
- int32_t * const p2, // Compliant
- int32_t * const p3 ) // Compliant
- {
- *p1 = 10;
- *p2 = 10;
- b( p3 );
- int32_t i = 0; // Non Compliant
- return i;
- }
|
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 :
- Int f ( int i, int j)
- {
- int y = i ;
- j++ ;
- int z = 10 ;
- int y = y + j + z;
- return ( y ) ;
- }
|
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.