SA0007 : Opérateur d'adresse sur les constantes
Détecte les lignes de code où l'opérateur ADR
est appliqué pour une constante
Justification : L'utilisation d'un pointeur vers une variable constante remplace CONSTANT
propriété de la variable. La variable peut être modifiée au moyen du pointeur sans aucune notification du compilateur.
Exception : dans de rares cas, il peut être utile de passer un pointeur vers une constante à une fonction. Cependant, vous devez vous assurer que cette fonction ne modifie pas la valeur transférée. Dans la mesure du possible, utilisez VAR_IN_OUT CONSTANT
.
Importance : Élevée
Astuce
Quand le Remplacer les constantes l'option est sélectionnée dans le Options du compilateur des paramètres du projet, l'opérateur d'adresse n'est pas autorisé pour les constantes scalaires (entier, BOOL
, REAL
) et une erreur de compilation est émise. (Les chaînes, structures et tableaux constants ont toujours une adresse.)
PROGRAM PLC_PRG VAR CONSTANT c_iValue : INT := INT#15; END_VAR VAR poiValue : POINTER TO INT; END_VAR
poiValue := ADR(c_iValue); // SA0007
Sortie dans le messages voir:
SA0007 : Adresse de la variable constante 'c_iValue'