c++ - solar - luna roja 2018 fechas
Deshabilitar el descubrimiento de errores de Eclipse.(Codan falsos positivos) (5)
Mi experiencia hasta ahora es que el descubrimiento de errores de Eclipse es terriblemente problemático sin soluciones (Probado __GXX_EXPERIMENTAL_CXX0X__
, -std=c++0x
, -std=c++11
en las cercanías de cada punto de la configuración). Estoy en el punto de que ya no quiero buscar una solución. Ahora solo quiero ver errores de compilador reales. Pero, ¿cómo lograr esto?
En una nueva instalación de Eclipse, se activó una macro y se reconstruyó el índice:
Proyectos-> Propiedades-> Preprocesador Incluye Seleccionar GNU C ++ Seleccionar entradas de configuración de usuario CDT Presione Añadir
y agregue una macro de preprocesador con el nombre __cplusplus
y el valor 201103L
.
Finalmente, reconstruya el índice. (Proyecto-> Índice C / C ++-> Reconstruir)
Me di cuenta de que la pregunta se había hecho hace mucho tiempo, pero dado que el problema persiste (utilizo Kepler y obtengo los mismos errores) publicaré otra solución posible.
Se puede crear un archivo fuente separado y redefinir las funciones que quiere usar allí (en el espacio de nombres general, por ejemplo). Después de crear una función así
std::string to_string(long long num) {
return std::to_string(num);
}
y comencé a usar to_string
lugar de std::to_string
en las fuentes principales (agregué el extra con std::to_string
) eclipse ya no marcaba el código como errores.
Por supuesto, los errores están marcados en la inclusión adicional, pero no contiene lógica así que ni siquiera miras allí.
Me preocuparon los errores de Cordian para el código c ++ 11 que se compilan perfectamente en gcc con todas las advertencias habilitadas también. Encontré lo que creo que es la causa raíz, al menos lo fue en mi caso. Pocas otras preguntas sobre los errores de Cordian para c ++ 11 se cierran como duplicados de esta pregunta y apuntan a esta pregunta. Entonces pensé que publicaría mi respuesta aquí.
Esto es lo que encontré: Project Properties> C ++ General> Preprocessor ...> Entries> GNU C ++> CDT GCC Builtin Compiler Settings tiene * __ cplusplus = 199711L * como una de las entradas.
Lo cambié de la siguiente manera: En la ventana> Preferencias> C / C ++> Compilar> Configuración> pestaña Descubrimiento seleccionada CDT GCC Configuración del compilador incorporado y cambiado $ {COMANDO} -E -P -v -dD $ {ENTRADAS} a $ {COMANDO } -E -P -v -std = c ++ 11 -dD ''$ {ENTRADAS}'' . Luego presiona Aplicar. Los errores desaparecieron después de la próxima compilación.
Estoy usando Juno SR2 con CDT 8.1.2 y archivos hechos a mano.
Añadiendo un poco más de color:
No soy un experto, pero esto es lo que creo que sucedió en mi caso:
Cordian reúne errores de múltiples maneras.
Uno es analizar la salida del compilador. -std=c++11
en mi -std=c++11
Makefile aseguró que esta parte funcionó correctamente todo el tiempo, ya que al invocar el mismo Makefile a través del terminal no se señalaron errores.
Otra es a través de ''Análisis de código''. Para esto, y probablemente para otras tareas, Ecplise necesita conocer la configuración que el compilador usaría. Eclipse los encuentra invocando el comando que he editado arriba y analizando el resultado. Al marcar la casilla ''Asignar consola en la vista de consola'' antes de presionar ''Aplicar'', es posible ver el resultado de este comando. Estas configuraciones incluyen directorios y definiciones como __cplusplus. Cuando estos coinciden con lo que usaría gcc cuando se invoca a través de mi Makefile, los resultados son consistentes.
Cuando estaba experimentando con el problema usando el mensaje #pragma dentro de los encabezados, pensé que __GXX_EXPERIMENTAL_CXX0X__ es lo que estaba mal y vi algunas sugerencias en línea para configurarlo manualmente, pero eso también parecía ser una solución alternativa.
También puede eliminar partes problemáticas del código del alcance de CDT al seguir los siguientes pasos:
Ahora puedes escribir:
#idndef MY_CODAN_MACRO
// this code is visible by compiler only
#else
// this code is visible by code analysis and CDT, but not visible by compiler
#endif
Creo que este truco es posible en Indigo +. Estoy usando a Juno.
ACTUALIZACIÓN: Ha pasado mucho tiempo desde que publiqué la respuesta original y se ha quedado obsoleto. Comprobé dos veces hoy (15 de marzo de 2014): en Eclipse Kepler (compilación ID 20130614-0229) es suficiente para
agregue en Proyecto> Propiedades> Creación de C / C ++> Configuraciones y luego en la pestaña Configuración de herramientas Compilador GCC C ++> Varios la
-std=c++11
,luego, en Ventana> Preferencias> C / C ++> Crear> Configuraciones en la pestaña Discovery, elija Configuraciones del compilador incorporadas de CDT GCC y agregue el
-std=c++11
a Comando para obtener las especificaciones del compilador . En mi máquina se ve así después del cambio:${COMMAND} -E -P -v -dD -std=c++11 "${INPUTS}"
limpie y reconstruya su proyecto y su índice ( Proyecto> Índice C / C ++> Reconstruir ) ya que Eclipse tiende a almacenar en caché los mensajes de error y mostrarlos aunque se hayan ido después de cambiar la configuración.
Esto funciona en mi máquina con seguridad. Si no funciona en el tuyo, entonces quizás quieras darle una oportunidad: C ++ 11 soporte completo en Eclipse aunque no estoy seguro de la corrección de este enfoque ni era necesario hacerlo en mi máquina. A partir del 7 de marzo de 2014, los usuarios claim que les ayudó, mientras que el enfoque anterior no lo hizo.
La publicación original de 2012, ahora desactualizada:
Estos errores falsos provienen de Codan . También emití un informe de error (C ++ 03 !!!) pero el mismo problema aparece en el último Eclipse estable, así que no creo que haya pasado mucho :(
Solución:
Haga clic en las propiedades del proyecto, luego en C / C ++ General> Análisis de código> Sintaxis y errores semánticos y anule la selección de los errores falsos que esté recibiendo.
Solo quiero ver errores de compilador reales
Por supuesto, puede desactivar completamente el análisis estático, en ese caso puede lograr exactamente lo que desea.
ACTUALIZACIÓN: 2 usuarios informaron que lo que Jeevaka escribió les ayudó. He intentado lo que escribió, no me ayudó con Juno SR1 y CDT 8.1.1. Quizás los desarrolladores de Codan hayan mejorado el análisis estático en Juno SR2 y CDT 8.1.2