2011-11-20 11 views
14

¿Hay alguna herramienta para reordenar automáticamente el archivo .c basado en .h?Reordenar función en archivo c basado en el archivo de encabezado c

Por ejemplo, foo.h

void function1(); 
void function2(); 
void function3(); 

Y foo.c

void function2(){} 
void function1(){} 
void function3(){} 

¿Puedo reordenar como

void function1(){} 
void function2(){} 
void function3(){} 

Por cierto, estoy usando Vim en Ubuntu.

+1

Interesante. ViM puede hacer muchas cosas (vi un ejemplo de "resolver laberintos"). Puede terminar escribiendo un gran guión para ello. Aunque algo me dice que deberías poder hacer esto con macros. – Shahbaz

+1

Por ejemplo, una macro que copia una función es fácil. Empiezas al principio de la función, comienzas visual, (teniendo búsqueda por '{') presiona 'n', luego'% ', luego' d'. Ahora tienes el corte de función. Todo lo que necesita ahora es encontrar su ubicación correcta e insertarla ... Me pregunto ... – Shahbaz

+0

Parece un buen proyecto de programación en C para que pueda emprender. –

Respuesta

2

No creo que exista tal herramienta. En C, el orden de la declaración y la definición generalmente no importa. Existe, por supuesto, la excepción de un bucle de dependencia (a() llamadas b() que llama a a()), pero cuando las funciones se declaran en un archivo de cabecera, incluso esto no es un problema, ya que todas las declaraciones son efectivamente las declaraciones "forward" necesarias para manejar lazos de dependencia.

Por lo tanto, el orden de las definiciones en una unidad de traducción es esencialmente una cuestión de gusto y estilo. Como tal, no es una característica que los diseñadores de editores puedan abordar, ya que el esfuerzo por crear características generales y lo suficientemente poderosas como para que valgan la pena para una preponderancia de usuarios puede considerarse prohibitivamente grande. Piense cuánto tardaron los editores (no programables) en tener comúnmente características flexibles y potentes de sangría y reformateo.

También existe el riesgo de romper la lógica, la gramática o la legibilidad del código cuando se reorganiza automáticamente. Por ejemplo, si los comentarios se encuentran entre definiciones de funciones, ¿cómo sabrá la herramienta si un comentario va con una función particular, o con un grupo de funciones, o con la función anterior? Y como @Yuri menciona arriba, ¿qué pasa con las funciones dentro de los bloques # if/# else/# endif? ¿Y qué pasa con casos sutiles como macros que se expanden a funciones o #incluyen directivas intercaladas entre definiciones de funciones? Supongo que una función de reordenación podría restringir su dominio a un caso simple, pero si el caso se vuelve demasiado simple, su apelación es correspondientemente limitada, y no se publica de manera pública o amplia.

Dicho todo esto, creo que con un rico conjunto de herramientas a su disposición, tal característica no sería demasiado difícil de implementar, aunque si lo hiciera, supongo que en la primera dificultad imprevista, me encontraría preguntándose si no sería más fácil simplemente editar los archivos fuente a mano. El corte y pegado Multiline es bastante fácil, después de todo.

+3

Hmmm. Parece mucho texto para decir "No que yo sepa". :) –

Cuestiones relacionadas