SA0007: Operador de dirección en constantes
Detecta líneas de código donde el operador ADR
se aplica para una constante
Justificación: El uso de un puntero a una variable constante anula el CONSTANT
propiedad de la variable. La variable se puede cambiar por medio del puntero sin ninguna notificación del compilador.
Excepción: en casos excepcionales, podría ser útil pasar un puntero a una constante a una función. Sin embargo, debe asegurarse de que esta función no cambie el valor transferido. Siempre que sea posible, utilice VAR_IN_OUT CONSTANT
.
Importancia: Alta
Sugerencia
Cuando el Reemplazar constantes La opción está seleccionada en el Opciones del compilador De la configuración del proyecto, el operador de dirección no está permitido para constantes escalares (enteros, BOOL
, REAL
) y se emite un error de compilación. (Las cadenas, estructuras y matrices constantes siempre tienen una dirección).
PROGRAM PLC_PRG VAR CONSTANT c_iValue : INT := INT#15; END_VAR VAR poiValue : POINTER TO INT; END_VAR
poiValue := ADR(c_iValue); // SA0007
Salida en el Mensajes vista:
SA0007: Dirección a la variable constante 'c_iValue'