Skip to main content

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.)

Exemple 19. Exemple
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:

  • sa_icon_message.png SA0007 : Adresse de la variable constante 'c_iValue'