SA0007: Operatore di indirizzo sulle costantiPermalink

Rileva le righe di codice in cui l'operatore ‎ADR‎ viene applicato per una costante

Giustificazione: L'uso di un puntatore a una variabile costante sovrascrive la proprietà ‎CONSTANT‎ della variabile. La variabile può essere modificata tramite il puntatore senza alcuna notifica da parte del compilatore.

Eccezione: In rari casi, può essere utile passare un puntatore a una costante a una funzione. Tuttavia, è necessario assicurarsi che questa funzione non modifichi il valore trasferito. Quando possibile, utilizzare ‎VAR_IN_OUT CONSTANT‎.

Importanza: Alto

Quando l'opzione «replace constants» è selezionata nelle «opzioni del compilatore» delle impostazioni del progetto, l'operatore address non è consentito per le costanti scalari (integer, BOOL, REAL) e viene emesso un errore di compilazione. (Le stringhe, le strutture e gli array costanti hanno sempre un indirizzo).

Esempio

PROGRAM PLC_PRG
VAR CONSTANT
	c_iValue : INT := INT#15;
END_VAR
VAR
	poiValue : POINTER TO INT;
END_VAR
poiValue := ADR(c_iValue); // SA0007

--> SA0007: Address to constant variable 'c_iValue'