2008-10-19 8 views
1

Je me demande s'il existe un logiciel libre qui me laisse passer un fichier C et qui génère un fichier C plus structuré.Outil de nettoyage de C à C pour traducteur/code

Je parle d'un petit morceau de C-Code qui a été écrit il y a longtemps. Je voudrais en extraire un algorithme intelligent, mais travailler avec le code lui-même est difficile car il manque tout ce qui rend le code C lisible.

Juste un court exemple:

node *first(node *p) 
{ 
    node *aux=p; 

    if (aux) 
    do aux=aux->next; 
    while(aux!=p && (!aux->intersect || aux->intersect && aux->visited)); 
    return aux; 
} 

Ce que je voudrais obtenir en sortie serait quelque chose comme ceci:

node *first(node *p) 
{ 
    node *aux=p; 

    if (aux) 
    { 
    do 
    { 
     aux=aux->next; 
    } 
    while((aux!=p) && (!aux->intersect || (aux->intersect && aux->visited))); 
    } 
    return aux; 
} 

Est-ce que cet outil de nettoyage automatique de code existe?

Répondre

7

Vous cherchez indent code très flexible et bien documenté beautifier.

3

Artistic Style est un autre embellisseur de code source pour C, C++, C#, et le code Java qui fera ce que vous voulez.

1

indent est l'outil classique pour le travail, comme le mentionne Ilya. Ce que je ne suis pas sûr, cependant, est si elle ajoute jamais les accolades comme demandé pour la boucle 'do { ... } while (...)' ou les parenthèses supplémentaires dans le conditionnel de la même boucle. Je crois que non.

<subjective> Je voudrais également configurer pour s'assurer qu'il y avait des espaces autour des opérateurs d'affectation et d'inégalité. Il doit y avoir un espace après while et avant la parenthèse; il ne devrait pas y avoir d'espace après la parenthèse. </subjectif >

Un outil très sophistiqué observerait que la condition de boucle devrait être simplifiée. Vous savez que le second terme (après l'opérateur or) ne sera jamais évalué que si le premier est faux, donc le retest de aux->intersect est redondant.