Skip to main content

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

ejemplo 19. Ejemplo
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:

  • sa_icon_message.png SA0007: Dirección a la variable constante 'c_iValue'