J'ai un fichier source C ayant des commentaires dans // code> (C ++) style. Je veux changer tous les commentaires à l'ancien
/ * * * /
8 Réponses :
une substitution avec votre éditeur préféré et une expression régulière comme s # // (. *) # / * \ 1 * / # code> devrait le faire ... P>
Faites juste attention à x = 0; // / * était x = 1; * / BUCHE OFF-ONE corrigé code>
Ne fonctionne pas pour moi dans VI (lancers non trouvé: //(.*)< / code>) Qu'est-ce que hachait?
@N 1.1: Le hachage est juste un espace réservé, cela peut être n'importe quel caractère. Il s'agit généralement d'une barre oblique, mais lorsque vous avez des barres obliques dans votre motif, il est plus facile d'utiliser un délimiteur différent de celui-ci pour échapper à toutes vos barres obliques. S / FOO / BAR / CODE> est équivalent à
S # FOO # barre # code>,
SXFOOXBARX code> et
s, foo, bar, < / code> etc.
@N 1.1: Dans VI, je pense que vous devez échapper à la parenthèse pour les faire capturer (sans échéance qu'ils correspondent au texte) : s # // \\ (. * \ 1 * / # code>. Le '#' servir à délimiter la recherche et la substitution (généralement faite avec '/', mais en utilisant '#' permet de remplacer '/' s sans s'échapper)
@N 1.1: Le séporateur par défaut de recherche et de remplacement dans VI est '/' mais vous pouvez réellement utiliser n'importe quel caractère. WHCIH est utile lorsque la chaîne de recherche contient le caractère '/' (sinon, vous devez échapper à son utilisation). Avec VI, vous devez échapper à '(' ('et') 'pour que vous vous retrouviez avec :% s # // \\ (. * \\) $ # / * \ 1 * / # code>
Malheureusement, la plupart des scripts ne feront que travailler l'inverse. Il y a un décent nommé "recommentation" mais il faut C et convertit les commentaires de style C ++ plus récents. J'imagine que votre raison de vouloir faire cela est dû aux erreurs de compilateur avec les commentaires de style C ++. La cause habituelle de ceci est une ligne qui utilise un commentaire de style C avec un commentaire de style C ++. Peut-être que chercher ce scénario particulier éliminerait votre besoin de reconvertir des commentaires de style plus ancien. Sinon, malheureusement, vous pourriez avoir à le faire à la main. (Je prie que tu ne sois pas comme je sais à quel point cela peut être fastidieux!)
Je garderai cela à l'esprit quand j'en ai besoin. Vous voudrez peut-être fournir un lien à la reprise de votre réponse.
Les scripts qui font cela l'autre sens sont effrayants. / * FOO * / BAR ++; code> ne peut pas être traduit correctement sans changement de numérotation de ligne.
Je m'excuse d'avoir oublié le lien! J'ai mis à jour ma réponse avec le lien en bas!
Si vous recherchez quelque chose d'un peu plus générique, vous pouvez également utiliser un outil de formatage de code source pour cela. Pour C, j'ai utilisé Incustify avant et cela a fonctionné raisonnablement bien. Il peut y avoir d'autres aussi, mais je pense que les détruisements peuvent changer de style C ++ commentaires dans des commentaires de style C avec le paramètre La configuration peut être un peu décourageante, mais si vous utilisez simplement le fichier d'exemple de configuration et modifier uniquement les éléments qui vous intéressent, cela pourrait faire ce que vous voulez. P> cmt_cpp_to_c code>. p>
Vous pouvez le faire avec le plug-in VIM NerdCommENTment em>. P>
Cela facilite la découverte du texte, puis ajoutez un commentaire multiligne comme vous le souhaitez. P>
Eh bien, Tout commentaire de style C ++ régulier qui a 1, $ s # // \ \ (. * \ \) # / * \ 1 * / # code> ne fonctionnera que si vous n'avez pas d'instances de commentaires de style C ++ (généralement multi -Line) Commentaires de style C, puisque la substitution mettra prématurément le commentaire de style C, laissant la partie restante du commentaire de style C sans un
/ * code>. p>.
* / code> dans ce poste entraînera des problèmes. Cela se produit dans le code dans lequel un mauvais programmeur a modifié un commentaire de style C sur un commentaire de style C ++ sans retirer l'extrémité
* / code>. P>
C'est un problème simple à la surface, mais un problème très difficile de gérer tous les cas de bord. La solution simple est facilement implémentée dans SED:
egrep '//.*/[*]|".*//' oldfile
Pour tous les codeurs là-bas! La solution ci-dessous fonctionne avec Eclipse, sublime et autres éditeurs qui soutiennent des expressions régulières. P>
voilà! p>
Si vous le faites: Vous pouvez également être intéressé par le "Mode Sexy Commentaires" utilisé avec
// code> et
et
et
et
/ * code>, testé en 2.5.2. P>
Utilisez-vous une version pré-C99 de C? Per mon expérience et la page wiki ( en.wikipedia.org/wiki/c_ (programmation_language) < / a>)
// code> Les commentaires sont autorisés C99 à partir de. Si la norme de codage a une limite de longueur de ligne (par exemple, le style de codage Google recommande Max 80 caractères), vous devez vous surveiller également. Il peut y avoir des cas comme ce que PMG mentionne ci-dessous. Dans l'ensemble, je suis curieux de savoir, quelle est votre motivation.
Une bonne raison pour que cela consiste à obtenir du code pour compiler proprement avec des compilateurs qui ne prennent pas en charge les commentaires de style C ++ ou se plaignent d'eux avec la version C particulière spécifiée.
Je suis censé écrire le code conformé à l'ANSI autant que possible. Donc, je vérifie toutes les erreurs que
GCC -ansi code> est en marche.
GCC -ANSI CODE> changera pour soutenir C99 un peu de temps (bientôt, nous espérons). Si vous avez vraiment besoin de compatibilité C89, utilisez
gcc -std = c89 -pedantic code>
Pour quelque chose de plus d'une décennie maintenant,
// code> a été parfaitement standard C, et comme conformément à l'ISO comme
int code>. (La norme C originale C, en 1989, était une norme ANSI. Je pense que les normes C ++ et C99 étaient uniquement ISO, autant que je sache.)