Nuestra herramienta de análisis estático se queja de un "calificador de tipo inútil en el tipo de retorno" cuando tenemos prototipos en los archivos de cabecera, tales como:¿Deberían usarse los calificadores de tipo inútil en los tipos de devolución, para mayor claridad?
const int foo();
lo definimos de esta manera debido a que la función se vuelve una constante que nunca va a cambiar , pensando que la API parecía más clara con const
en su lugar.
siento que esto es similar a inicializando explícitamente las variables globales a cero para mayor claridad, a pesar de que el estándar C ya establece que todas las variables globales se inicializan a cero si no inicializado de forma explícita. Al final del día, realmente no importa. (Pero la herramienta de análisis estático no se queja de eso.)
Mi pregunta es, ¿hay alguna razón por la que esto podría causar un problema? ¿Deberíamos ignorar los errores generados por la herramienta, o deberíamos aplacar la herramienta al posible costo de una API menos clara y consistente? (Devuelve otras constantes const char*
con las que la herramienta no tiene problemas).
De acuerdo. Mi reacción instantánea a un tipo de retorno const es suponer que el retorno es una referencia/puntero a un buffer compartido que no debe ser cambiado. Mi modelo mental es que const se aplica al contenedor (por ejemplo, variable), no al contenido. En "const char *", por ejemplo, la const se aplica a la cadena apuntada, mientras que si tiene "const int i = 5;", puede escribir "i + 1" en una expresión; puede trabajar con la valor siempre que no intente cambiar la variable. Con un retorno int simple, realmente no tiene un contenedor, solo un valor. – Steve314
Supongo que la gente se confunde debido al comportamiento extraño de la palabra clave 'const'. Quiero decir que 'const char * c' y' char const * c' son lo mismo. Si la sintaxis anterior no fuera legal, las cosas serían mucho menos confusas. Solo tendríamos 'char const * c' y' char * const c' y todos sabrían lo que está pasando. Tal vez estoy pensando demasiado. –
De acuerdo, estoy convencido. Gracias por señalar la advertencia de GCC. Ojalá hubiera sido un error en lugar de una advertencia, por lo que las áreas grises como esta no aparecen. – mpontillo