2011-06-12 12 views
7

gcc 4.6.0 GNU Emacs 23.2.1Encontrar los apoyos desequilibradas y paréntesis

que tienen algo de código C y en algún punto I ha presentado un error de escritura. Y ahora me quedan unas llaves desbalanceadas o un paréntesis.

Tengo alrededor de 2000 líneas de código y me pregunto ¿hay alguna técnica para encontrarlas?

Emacs tiene algunas buenas características, así que me pregunto si hay alguna forma de que pueda escanear el código y decirme dónde están. Actualmente tengo un error de compilación relacionado con esto.

Muchas gracias por todas las sugerencias,

+0

hacer paréntesis base una pila corrector a sí mismo, lo haría diga – phoxis

+2

Consejos para el futuro: (1) escribir un mejor código sangrado, hace que sea fácil ver errores como este; (2) compilar más a menudo; no escriba 2000 líneas sin compilar de vez en cuando. –

Respuesta

1

Yo sugeriría añadiendo "#ifdef 0 .... #endif" en torno a bloques de código hasta que la fuente se compila. Sigue ajustando el tamaño del código ifdefd out hasta que reduzcas un fragmento que se compila cuando se defina y no lo haga de otra manera. Este fragmento contendrá la llave desbalanceada.

Personalmente, empezaría por eliminar casi todo el archivo y mover mi "#ifdef 0" delante de cada función hasta que comencé a ver errores de compilación.

Si tiene funciones locas largas, tome el mismo tipo de enfoque pero dentro de la función que le ocasiona problemas (una vez que haya determinado qué función es).

+0

No me gusta esta idea. La sangría de Emacs es una mejor opción en mi humilde opinión. –

+0

Hola Camennie. Eso es lo que hice para descubrir el problema. Solo falta un corsé en una declaración if anidada. Sin embargo, no es un gran problema para encontrar. Utilicé C-M a y C-M e para llegar a los comienzos y finales de la función. Emaces detecta paréntesis desequilibrados utilizando esta tecnología. Sin embargo, cuando llego a la función, tengo que usar C-M b y C-M f para tratar de precisar el corsé incorrecto. Pero sería bueno que emacs lo encuentre directamente para nosotros. Gracias. – ant2009

1

Un buen punto para comenzar es seleccionar todo (M-x select-all) y luego aplicar sangría al código (M-x indent-region). Como emacs hace un buen trabajo de sangría, notará dónde falló la sangría.

También, usando show-paren-mode (M-x show-paren-mode) emacs le mostrará el par correspondiente de cada terminación paren (y viceversa), para que pueda revisar su código.

0

Si quieres algo más elegante que el resaltado de llanura, se podría utilizar delimitadores del arco iris: https://www.emacswiki.org/emacs/RainbowDelimiters

que aquí hay una entrada en el blog corta en él: http://emacs-fu.blogspot.com/2011/05/toward-balanced-and-colorful-delimiters.html

+0

Gracias por eso. Siempre agradecido – ant2009

+0

El primer enlace no es muy útil ... – skyking

+0

Gracias por señalarlo. Parece que el enlace ha cambiado, lo he actualizado ahora. – GeneralBecos

Cuestiones relacionadas