No puedo encontrar respuestas a esto en Internet, y lo he buscado dos veces en los últimos 4 meses.
En MPLab v8.88 usando el compilador ANSI C de alta tecnología, tengo esta línea de código:
const uint8 SUM_THRESHOLD_MIN = 15; /* comment edited out */
y recibo la advertencia:
Warning [364] C:\*directory edited out* \ *filename_edited_out*.c; 273.35 attempt to modify object qualifed const
(disculpe las ediciones, pero sentí que debería eliminar detalles superfluos y personales).
No es mi código y solo usaría un #define
, pero otros quieren usar un const
(para aquellos que no lo saben: usar un const
garantiza un encasillado adecuado de un valor y puede salvarlo de algunos problemas extraños relacionados con encasillamiento y tipos de datos; no es mi forma favorita de hacerlo, pero tampoco es una mala idea).
Hay varias inicializaciones de const
ocurriendo en el mismo bloque de código, y todas me dan esta advertencia. Están en un archivo .c, en una función nula. Tengo otros archivos con funciones de anulación donde inicializo const uint8 y no hay advertencias en esos archivos. Busqué en todo el mundo y no encontré ninguna otra instancia de la variable, excepto la que se usa en la función void (por lo que no hay problemas con la redefinición ni nada de eso). Para ser claros, estas constantes no son parte de ninguna estructura ni nada extraño, simplemente se declaran en la función de vacío en el archivo .c.
Tengo uint8 correctamente typedef'd, y no # define'd (ver comentarios).
¿Puede alguien ayudarme a deshacerme de esta advertencia?
EDITAR: Si pego una de las const uint8 en otro archivo .c directamente después de una const uint16 que no produce el error, de esta forma:
const uint16 rate_bias_time_constant[NUM_RATE_CHANNELS][RATE_BIAS_STEP_MAX] =
{30,120,480,960, 300,120,180,240, 300,120,180,240 }; // comment edited out
const uint8 SUM_THRESHOLD_MIN = 15; /* comment edited out */
Aparece la advertencia 364 en este archivo para esta const uint8 pero no para la const uint16. Si cambio SUM_THRESHOLD_MIN de un uint8 a un uint16, todavía recibo la advertencia. Para completar, si lo cambio de mayúsculas a minúsculas, sigo recibiendo la advertencia. Si cambio la línea a, por ejemplo:
const uint8 SUM_THRESHOLD_MIN[2] = {15,2}; /* comment edited out */
No hay ninguna advertencia.