zion - indent
Nom
indent - indente un programme C, ou change son style.
Résumé
indent [options] [fichiers] indent [options] [fichier] [-o fichier] indent --version
Description
Cette page de man est générée à partir du fichier indent.texinfo. C'est l'édition de "The indent Manual", pour la dernière mise à jour de la version d'Indent. indent rend le programme plus lisible en faisant automatiquement les indentations et le formatage. Il permet aussi de convertir un programme d'un style d'écriture à un autre. indent comprend un bonne part de la syntaxe du C, mais il peut traiter des fichiers dont la syntaxe est incomplète ou erronée. Dans les version 1.2 et plus récentes, le style GNU est le style d'indentation par défaut.
Options
-bad, --blank-lines-after-declarations
Place une ligne blanche après les déclarations. Voir LIGNES BLANCHES. |
-bap, --blank-lines-after-procedures
Place une ligne blanche après le corps des procédures. Voir LIGNES BLANCHES. |
-bbb, --blank-lines-before-block-comments
Place une ligne blanche avant les commentaires sous forme de boîte. Voir LIGNES BLANCHES. |
-bbo, --break-before-boolean-operator
Préfère couper les lignes devant les opérateurs booléens Voir COUPURE DES LIGNES TROP LONGUES. |
-bc, --blank-lines-after-commas
Passe à la ligne après une virgule dans une déclaration. Voir DÉCLARATIONS. |
-bl, --braces-after-if-line
Met des crochets sur la ligne suivant un if, un while, un for, une déclaration de fonction, etc. Voir ASSERTIONS. |
-blin, --brace-indentn
Nombre d'espaces pour l'indentation des crochets Voir ASSERTIONS. |
-bls, --braces-after-struct-decl-line
Met des crochets sur la ligne suivant une déclaration de structure. Voir DÉCLARATIONS. |
-br, --braces-on-if-line
Met les crochet sur la ligne après if, etc. Voir ASSERTIONS. |
-brs, --braces-on-struct-decl-line
Met des crochets sur la même ligne après une déclaration de structure. Voir DÉCLARATIONS. |
-bs, --Bill-Shannon, --blank-before-sizeof
Place un espace entre sizeof et son argument. Voir ASSERTIONS. |
-cn, --comment-indentationn
Place les commentaires à droite du code à la colonne n. Voir COMMENTAIRES. |
-cbin, --case-brace-indentationn
Indente les crochets après un case de N espaces. Voir ASSERTIONS. |
-cdn, --declaration-comment-columnn
Place les commentaires à droite des déclaration à la colonne n. Voir COMMENTAIRES. |
-cdb, --comment-delimiters-on-blank-lines
Place les délimiteurs de commentaires sur une ligne blanche. Voir COMMENTAIRES. |
-cdw, --cuddle-do-while
Colle le `}' et le while d'un do {} while;. Voir COMMENTAIRES. |
-ce, --cuddle-else
Colle le else avec le `}' qui le précède. Voir COMMENTAIRES. |
-cin, --continuation-indentationn
Indentation continue de n espaces. Voir ASSERTIONS. |
-clin, --case-indentationn
Indentation pour les case de n espaces. Voir ASSERTIONS. |
-cpn, --else-endif-columnn
Place les commentairs à droite des assertions #else et de #endif à la colonne n. Voir COMMENTAIRES. |
-cs, --space-after-cast
Place une espace après un opérateur de transtypage. Voir ASSERTIONS. |
-dn, --line-comments-indentationn
Spécifie l'indentation des commentaires qui ne sont pas à droite de code. Voir COMMENTAIRES. |
-bfda, --break-function-decl-args
Coupe la ligne avant tous les arguments d'une déclaration. Voir DÉCLARATIONS. |
-bfde, --break-function-decl-args
Coupe la ligne après le dernier argument d'une déclaration. Voir DÉCLARATIONS. |
-din, --declaration-indentationn
Place les variables à la colonne n. Voir DÉCLARATIONS. |
-fc1, --format-first-column-comments
Place les commentaires à la première colonne. Voir COMMENTAIRES. |
-fca, --format-all-comments
Ne pas désactiver le formatage des commentaires. Voir COMMENTAIRES. |
-gnu, --gnu-style
Utilise le style GNU. C'est l'option par défaut. Voir STYLES COURANTS. |
-hnl, --honour-newlines
Préfère respecter les sauts de ligne du fichier d'entrée. Voir COUPURE DES LIGNES TROP LONGUES. |
-in, --indent-leveln
Fixe le niveau d'indentation à n espace. Voir INDENTATION. |
-ipn, --parameter-indentationn
Indente les paramètres dans le vieux style d'écriture des fonctions de n spaces. Voir INDENTATION. |
-kr, --k-and-r-style
Utilise le style Kernighan & Ritchie. Voir STYLES COURANTS. |
-ln, --line-lengthn
Fixe la longueur maximale d'une ligne de code à n. Voir COUPURE DES LIGNES TROP LONGUES. |
-lcn, --comment-line-lengthn
Fixe la longueur maximale d'une ligne de commentaire à n. Voir COMMENTAIRES. |
-lp, --continue-at-parentheses
Aligner les lignes d'une parenthèse. Voir INDENTATION. |
-lps, --leave-preprocessor-space
Laisser l'espace entre `#' et une directive du préprocesseur. Voir INDENTATION. |
-nbad, --no-blank-lines-after-declarations
Ne place pas de lignes blanches après les déclarations. Voir LIGNES BLANCHES. |
-nbap, --no-blank-lines-after-procedures
Ne place pas de lignes blanches après le corps des procédures. Voir LIGNES BLANCHES. |
-nbbo, --break-after-boolean-operator
Ne pas préférer couper les lignes avant les opérateurs booléens. Voir COUPURE DES LIGNES TROP LONGUES. |
-nbc, --no-blank-lines-after-commas
Ne pas placer de saut de ligne après les virgules dans les déclarations. Voir DÉCLARATIONS. |
-nbfda, --dont-break-function-decl-args
Ne pas placer chaque argument d'une fonction sur une ligne séparée lors de sa déclaration. Voir DÉCLARATIONS. |
-ncdb, --no-comment-delimiters-on-blank-lines
Ne pas placer les délimiteurs de commentaires /* et */ sur des lignes séparées. Voir COMMENTAIRES. |
-ncdw, --dont-cuddle-do-while
Ne pas coller } et while dans un do {} while;. Voir ASSERTIONS. |
-nce, --dont-cuddle-else
Ne pas coller } et else. Voir ASSERTIONS. |
-ncs, --no-space-after-casts
Ne pas placer d'espace après les opérateurs de transtypage. Voir ASSERTIONS. |
-nfc1, --dont-format-first-column-comments
Ne pas formater les commentaires dans la première colonne. (comportement pas défaut.) Voir COMMENTAIRES. |
-nfca, --dont-format-comments
Ne pas formater les commentaires. Voir COMMENTAIRES. |
-nhnl, --ignore-newlines
Ne pas préférer respecter les sauts de ligne du fichier d'entrée. Voir COUPURE DES LIGNES TROP LONGUES. |
-nip, --no-parameter-indentation
Ne pas indenter les paramètres. Voir INDENTATION. |
-nlp, --dont-line-up-parentheses
Ne pas aligner les parenthèses. Voir ASSERTIONS. |
-npcs, --no-space-after-function-call-names
Ne pas placer d'espace après la fonction dans les appels de fonctions. Voir ASSERTIONS. |
-nprs, --no-space-after-parentheses
Ne pas placer d'espace après chaque '(' et chaque ')'. Voir ASSERTIONS. |
-npsl, --dont-break-procedure-type
Place le type de la procédure sur la même ligne que son nom. Voir DÉCLARATIONS. |
-nsaf, --no-space-after-for
Ne place pas d'espace après chaque for. Voir ASSERTIONS. |
-nsai, --no-space-after-if
Ne place pas d'espace après chaque if. Voir ASSERTIONS. |
-nsaw, --no-space-after-while
Ne place pas d'espace après chaque while. Voir ASSERTIONS. |
-nsc, --dont-star-comments
Ne place pas d'`*' à gauche des commentaires. Voir COMMENTAIRES. |
-nsob, --leave-optional-blank-lines
Ne pas supprimer les lignes superflues. Voir LIGNES BLANCHES. |
-nss, --dont-space-special-semicolon
Ne pas placer d'espace avant le point virgule après certaines assertions. Désactive `-ss'. Voir ASSERTIONS. |
-nut, --no-tabs
Utilise des espaces plutôt que des tabulations. Voir INDENTATION. |
-nv, --no-verbosity
Mode non verbeux. Voir MISCELLANEOUS OPTIONS. |
-orig, --original
Utilise le style original de Berkeley. Voir STYLES COURANTS. |
-npro, --ignore-profile
Ne pas lire les fichiers de profil `.indent.pro'. Voir INVOKING INDENT. |
-pcs, --space-after-procedure-calls
Place un espace entre le nom d'une procedure appelée et `('. Voir ASSERTIONS. |
-pin, --paren-indentationn
Specifie l'indentation par parenthèse ouvrante quand une assertion est coupée sur plusieurs lignes. Voir ASSERTIONS. |
-pmt, --preserve-mtime
Conserver les droits et l'horodatage du fichier. Voir MISCELLANEOUS OPTIONS. |
-prs, --space-after-parentheses
Place une espace avant chaque '(' et après chaque ')'. Voir ASSERTIONS. |
-psl, --procnames-start-lines
Place le type d'une procédure sur la ligne au dessus de son nom. Voir DÉCLARATIONS. |
-saf, --space-after-for
Place un espace après chaque for. Voir ASSERTIONS. |
-sai, --space-after-if
Place un espace après chaque if. Voir ASSERTIONS. |
-saw, --space-after-while
Place un espace après chaque while. Voir ASSERTIONS. |
-sbin, --struct-brace-indentationn
Spécifie l'indentation pour strut, union et enum. Voir ASSERTIONS. |
-sc, --start-left-side-of-comments
Ajouter le caractère `*' au début des commentaires, pour former des boîtes. Voir COMMENTAIRES. |
-sob, --swallow-optional-blank-lines
Supprimer les lignes blanches superflues. Voir LIGNES BLANCHES. |
-ss, --space-special-semicolon
Quand une assertion for ou while tient sur une ligne, placer un espace avant le point virgule. Voir ASSERTIONS. |
-st, --standard-output
Écrit sur la sortie standard. Voir INVOCATION D'D' INDENT. |
-T
Indique à indent le nom des types. Voir DÉCLARATIONS. |
-tsn, --tab-sizen
Spécifie la taille de la tabulation, en espaces. Voir INDENTATION. |
-ut, --use-tabs
Utilise les tabulations. C'est l'option par défaut. Voir INDENTATION. |
-v, --verbose
Mode verbeux. Voir MISCELLANEOUS OPTIONS. |
-version
Afficher le numéro de version de indent. Voir MISCELLANEOUS OPTIONS. |
Invocation
Comme dans la version 1.3, le format de la commande indent est : .in +5 .nf .na indent [options] [input-files] indent [options] [single-input-file] [-o output-file] .in -5 .ad .fi Ce format n'est pas le même que celui de versions plus anciennes, ni que celui d'autres versions d' indent. La première forme accepte plusieurs fichiers en entrée. Indent fait une copie de chaque fichier, et le fichier original est remplacé par sa version indentée. Voir BACKUP FILES. Le seconde forme n'accepte qu'un fichier en entrée, ou l'entrée standard, et permet de spécifier un fichier de sortie. Utilisez l'option `-st' pour une sortie sur la sortie standard. Cela n'est possible qu'avec la deuxième forme. Si aucun nom de ficher d'entrée n'est fourni, l'entrée standard est utilisée. C'est aussi le cas si le nom de fichier est `-'. Ces trois commandes indentent `confus.c' et écrivent le résultat dans `clair.c' : .in +5 .nf .na indent confus.c -o clair.c indent -st confus.c > clair.c cat confus.c | indent -o clair.c .in -5 .ad .fi La plupart des options d'indent servent à définir de quelle façon le code est formaté. Chaque option une forme longue, comme dans la version 1.2. Celles-ci ont pour préfixe `--' ou `+' ( `+' est transformé en `--' pour maintenir la conformité avec le standard POSIX). Dans ce document on utilise plutôt la forme courte tradionnelle. Voir la LISTE DES OPTIONS qui indique les deux formes. La commande : .in +5 .nf .na indent -br test/metabolism.c -l85 .in -5 .ad .fi indente `test/metabolism.c' avec les options `-br' et `-l85', et écrit le fichier de sauvegarde dans le répertoire `test'. Avec les noms d'option longs le même commande devient : .in +5 .nf .na indent --braces-on-if-line --line-length185 test/metabolism.c indent +braces-on-if-line +line-length185 test/metabolism.c .in -5 .ad .fi Si vous utilisez souvent le même ensemble d'options vous pouvez placer celles-ci dans un fichier de profil nommé `.indent.pro'. indent cherche d'abord un fichier de profil défini par la variable INDENT_PROFILE. Si cette variable n'est pas définie il cherche le fichier `.indent.pro' dans le répertoire courant, puis dans le répertoire personnel de l'utilisateur. Les autres version d'indent ont un comportement différent : elles chargent tous les fichiers s'ils existent. Le fichier de profil est simplement le liste des options telle qu'elle apparaîtrait sur la ligne de commande, séparées par des espaces, des tabulations ou des sauts de ligne. On peut utiliser les commentaires du C ou du C++. Les options de la ligne de commande sont traitées après celles du fichier de profil et priment sur elles, à une exception près : les options explicites priment toujours sur les options globales (voir STYLES COURANTS). L'option `-npro' force indent à ne pas lire les fichiers de profil.
Fichiers de sauvegarde
Comme dans sa version 1.3, GNU indent fait une sauvegarde dans le style GNU, comme GNU Emacs. On peut donc faire des sauvegardes simples ou numérotées. Les fichiers de sauvegarde simples sont nommés d'après le nom du fichier auquel on ajoute un suffixe, par défaut un tilde (`~'), ou la chaîne définie par la variable d'environnement SIMPLE_BACKUP_SUFFIX. Les sauvegardes numérotées du fichier momeraths.c vont ressembler à `momeraths.c.~23~', où 23 est la numéro de la sauvegarde. Si on fait une sauvegarde numérotée de `src/momeraths.c', elle s'appellera `src/momeraths.c.~.I V~', où .I V est supérieur à la plus haute version qui existe déja dans le répertoire. La variable d'environnement VERSION_WIDTH permet d'indiquer le nombre de chiffres significatifs. Si elle vaut 2, par exemple, les fichiers ressembleront à `momeraths.c.~04~' Le type de sauvegarde est fonction de la variable d'environnement VERSION_CONTROL, qui peut contenir `simple', pour une copie simple, `numbered', pour une copie numérotée, ou encore `numbered-existing', pour faire une copie numérotée uniquement s'il en existe déja une dans le répertoire, et sinon une simple. Les autres versions d'indent utilisent le suffixe .BAK. Ce comportement peut être obtenu en donnant à SIMPLE_BACKUP_SUFFIX la valeur `.BAK'. Notez aussi que les autres versions d'indent font toujours les sauvegardes dans le réperoire courant, contrairement au comportement actuel de GNU indent.
Styles courants
Il existe plusieurs styles courants d'écriture en C. Le style GNU, le style Kernighan & Ritchie, et le style de Berkeley. Un style peut être défini par une option globale, ou par un ensemble d'options explicites. Les options explicites priment toujours sur celles définies par au sein l'option globale. Comme dans la version 1.2, le style par défaut est le style GNU. On peut aussi le spécifier avec l'option globale `-gnu', qui correspond à : .in +5 .nf .na -nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2 -ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -nprs -psl -saf -sai -saw -nsc -nsob .in -5 .ad .fi Le style GNU est le style de préference du projet GNU. C'est celui que GNU Emacs encourage à utiliser, et dans lequel les portions en C de Emacs sont écrites. (Les personnes intéressés par le développement de programmes pour le projet GNU peuvent utilement se référer à "Standard de Codage GNU", qu traite également de la sémantique et de la portabilité, par exemple pour les questions touchant à l'utilisation de la mémoire ou à la taille des entiers). Le style Kernighan & Ritchie a commencé à être utilisé après la parution du fameux livre "The C Programming Language". Il est spécifié par l'option `-kr', et correspond à : .in +5 .nf .na -nbad -bap -bbo -nbc -br -brs -c33 -cd33 -ncdb -ce -ci4 -cli0 -cp33 -cs -d0 -di1 -nfc1 -nfca -hnl -i4 -ip0 -l75 -lp -npcs -nprs -npsl -saf -sai -saw -nsc -nsob -nss .in -5 .ad .fi Le style Kernighan & Ritchie ne place pas tout le temps les commentaires à droite du code à la même colonne (il ne place pas non plus toujours un seul espace à la droite du code). Le choix a donc été fait de la colonne 33. Le style original de Berkeley est obtenu avec l'option `-orig' (ou `--original'). Il correspond à : .in +5 .nf .na -nbad -nbap -bbo -bc -br -brs -c33 -cd33 -cdb -ce -ci4 -cli0 -cp33 -di16 -fc1 -fca -hnl -i4 -ip4 -l75 -lp -npcs -nprs -psl -saf -sai -saw -sc -nsob -nss -ts8 .in -5 .ad .fi
Lignes blanches
Les styles de programmation utilisent les lignes blanches à plusieurs occasions. Voici les options d'indent les concernant: L'option `-bad' provoque l'ajout d'une ligne blanche après chaque bloc de déclarations. Avec l'option `-nbad', cet ajout n'aura pas lieu. L'option `-bap' provoque l'ajout d'une ligne blanche après chaque corps de procédure. Avec l'option `-nbad', cet ajout n'aura pas lieu. L'option `-bbb' provoque l'ajout d'une ligne blanche après chaque bloc de commentaire (voir COMMENTAIRES). Avec l'option `-nbbb', cet ajout n'aura pas lieu. L'option `-sob` provoque la suppression de toutes les lignes blanches superflues. Avec l'option `-nsob', cette suppression n'aura pas lieu.
--blank-lines-after-declarations
L'option `-bad' provoque l'ajout d'une ligne blanche après chaque bloc de déclarations. Avec l'option `-nbad', cet ajout n'aura pas lieu. Par exemple, .in +5 .nf .na char *foo; char *bar; /* Séparation entre deux blocs de déclarations. */ int baz; .in -5 .ad .fi donnera avec indent -bad .in +5 .nf .na char *foo; char *bar; /* Séparation entre deux blocs de déclarations. */ int baz; .in -5 .ad .fi et avec indent -nbad .in +5 .nf .na char *foo; char *bar; /* Séparation entre deux blocs de déclarations. */ int baz; .in -5 .ad .fi
--blank-lines-after-procedures
L'option `-bap' provoque l'ajout d'une ligne blanche après chaque corps de procédure. Avec l'option `-nbad', cet ajout n'aura pas lieu. Par exemple, .in +5 .nf .na int foo () { puts("Salut !"); } /* La procédure bar est moins importante. */ char * bar () { puts("est-ce bien utile ?"); } .in -5 .ad .fi donnera avec indent -bap .in +5 .nf .na int foo () { puts ("Salut !"); } /* La procédure bar est moins importante. */ char * bar () { puts("est-ce bien utile ?"); } .in -5 .ad .fi et avec indent -nbad .in +5 .nf .na int foo () { puts ("Hi"); } /* La procédure bar est moins importante. */ char * bar () { puts("est-ce bien utile ?"); } .in -5 .ad .fi
Commentaires
indent formate les commentaires dans le style C (commençant par `/*', se terminant par `*/', et pouvant contenir des sauts de ligne) et dans le style C++ (commençant par `//' et se terminant avec la ligne). indent traite les commentaires différemment selon leur contexte. Il distingue ceux qui suivent une instruction, ceux qui suivent une déclaration, ceux qui suivent une directive du préprocesseur et ceux qui ne sont pas précédés de code d'aucune sorte, par exemple ceux qui commencent une ligne (mais pas forcément à la première colonne). indent fait aussi la différence entre les commentaires situés à l'intérieur de procédures et de blocs , et ceux qui ne le sont pas. Ceux qui commencent une ligne à l'intérieur d'une procedure seront indentés à la colonne où le code est indenté à cet endroit, sauf s'il commence au début de la ligne, auquel cas il est laissé inchangé. indent laisse les commentaires sous forme de boîte inchangés. Ce type de commentaire est défini rigoureusement ainsi : le `/*' initial est immédiatement suivi par `*', `=', `_', `-', ou par un saut de ligne suivi d'un `*' aligné avec l'astérisque situé au dessus, comme on le voit sur ces exemples : .in +5 .nf .na /************************************ * Un commentaire dans une boîte !! * ************************************/ /* * Un autre style de commentaire * inclus dans une «boîte». */ .in -5 .ad .fi indent laissera ces commentaires inchangés. Il changera seulement les tabulations en un nombre d'espaces correspondant. Si l'option `-bbb' est spécifiée, tout commentaire sous forme de boîte sera précédé d'une ligne blanche, sauf s'il est précédé de code sur sa première ligne. Les commentaires qui n'ont pas cette forme seront formatés, c'est-à-dire alignés sur la marge de droite et remplis d'espaces à gauche. Un simple saut de ligne sera considéré comme un espace, mais une ligne blanche, ou un groupe d'au moins deux sauts de lignes, comme un changement de paragraphe. Le formatage des commentaires qui commencent après la première colonne est activé par l'option `-fca'. Pour formater ceux qui commencent à la première colonne, utilisez l'option `-fc1'. Ces formatages sont inactivés par défaut. La marge de droite est par défaut à la colonne 78, mais peut être spécifiée avec l'option `-lc'. Si celle-ci ne permet pas l'affichage d'un commentaire, elle sera modifiée pour la durée de ce commentaire. La marge ne sera pas respectée si le commentaire n'est pas formaté. Si un commentaire commence une ligne (c'est-à-dire s'il il n'y a pas de de texte, qui ne soit pas lui même un commentaire, à sa gauche), il sera indenté à la colonne à laquelle il sera trouvé, sauf s'il se trouve à l' intérieur d'un bloc de code (et qu'il ne commence pas à la première colonne), auquel cas il sera indenté comme ce code. Ceci peut être modifié par l'option `-d' qui spécifie de combien le commentaire est déplacé vers la gauche. Ainsi, `-d2' place les commentaires deux colonnes à gauche du code. Pour aligner le commentaire avec le code, utilisez l'option `-fc1'. Un commentaire commençant à la première colonne ne sera pas formaté. Les commentaires situés à droite du code sont placés par défaut à la colonne 33. Cela peut être modifié par l'une des trois options suivantes. `-c' spécifie la colonne pour les commentaires qui suivent du code en général, `-cd' pour ceux qui suivent des déclarations et `-c' pour ceux qui suivent les directives du preprocesseur #else et #endif. Si le code à gauche d'un commentaire dépasse la colonne à laquelle le commentaire doit commencer, celui-ci commencera à la première tabulation après le code, ou dans le cas d'une directive de compilation, un espace après la fin de cette directive. L'option `-cdb' place les délimiteurs de commentaires sur des lignes à part. Ainsi le commentaire /* Loving hug */ deviendra : .in +5 .nf .na /* Il vaudrait mieux tout effacer */ .in -5 .ad .fi Les astérisques peuvent être placés au début des commentaires occupant plusieurs lignes avec l'option `-sc'. Un commentaire d'une ligne comme le précédent devient alors, avec `-cdb -sc' : .in +5 .nf .na /* * Il vaudrait mieux tout effacer */ .in -5 .ad .fi
Assertions
Les options `-br' ou `-bl' spécifient comment formater les crochets. L'option `-br' les formate ainsi : .in +5 .nf .na if (x > 0) { x--; } .in -5 .ad .fi L'option `-bl' les formate ainsi : .in +5 .nf .na if (x > 0) { x--; } .in -5 .ad .fi On peut ajouter à l'option `-bl' l'option `-bli' qui spécifie de combien d'espaces les crochets sont indentés. La valeur par défaut est 2. `-bli0' donne le résultat suivant : .in +5 .nf .na if (x > 0) { x--; } .in -5 .ad .fi On peut ajouter à l'option `-br' l'option `-ce', qui indique à indent de placer le else immédiatement après le `}' qui le précède dans une construction if-then-else. Ainsi, avec `-br -ce', on obtient par exemple : .in +5 .nf .na if (x > 0) { x--; } else { fprintf (stderr, "...OK
"); } .in -5 .ad .fi Ainsi avec `-br -nce', on obtiendrait .in +5 .nf .na if (x > 0) { x--; } else { fprintf (stderr, "...OK
"); } .in -5 .ad .fi L'option `-cdw' indique à indent de placer le while juste après le `}' dans une boucle do-while, pour donner par exemple : .in +5 .nf .na do { x--; } while (x); .in -5 .ad .fi Avec `-ncdw' on obtiendrait : .in +5 .nf .na do { x--; } while (x); .in -5 .ad .fi L'option `-cli' spécifie de combien d'espaces doit être indenté chaque branchement case par rapport à la droite de l'instruction switch. La valeur par défaut est zéro, et donne quelque chose comme : .in +5 .nf .na switch (i) { case 0: break; case 1: { ++i; } default: break; } .in -5 .ad .fi Avec l'option `-cli2', ce code deviendrait : .in +5 .nf .na switch (i) { case 0: break; case 1: { ++i; } default: break; } .in -5 .ad .fi L'indentation des crochets après l'instruction case peut être spécifiée par l'option `-cbin'. Par exemple, `-cli2 -cbi0' donnera : .in +5 .nf .na switch (i) { case 0: break; case 1: { ++i; } default: break; } .in -5 .ad .fi Si un point-virgule est sur la même ligne qu'une assertion for ou while, l'option `-ss' permet de placer un espace avant le point-virgule. Cela met bien en évidence le point-virgule, on voit mieux que l'assertion while ou for n'a pas de corps. Avec l'option `-nss', ce comportement n'a pas lieu. L'option `-pcs' place un espace entre le nom d'une procédure appelée et le `(' (par exemple, puts ("OK");). L'option `-npcs' retirera cet espace. L'option `-cs' place un espace après les opérateurs de transtypage. L'option `-bs' place un espace entre sizeof et son argument. Dans certaines versions cette option est appelée l'option `Bill_Shannon'. L'option `-saf' place un espace entre un for et la parenthèse qui le suit. C'est le comportement par défaut. L'option `-sai' place un espace entre un if et la parenthèse qui le suit. C'est le comportement par défaut. L'option `-saw' place un espace entre un while et la parenthèse qui le suit. C'est le comportement par défaut. L'option `-prs' placera un espace entre les parenthèses et ce qu'elles contiennent. Cela donnera par exemple : .in +5 .nf .na while ( ( e_code - s_code ) < ( dec_ind - 1 ) ) { set_buf_break ( bb_dec_ind ); *e_code++ = ' '; } .in -5 .ad .fi
DÉclarations
Par défaut indent aligne les identificateurs, à la colonne spécifiée par l'option `-di'. `-di16' donnera par exemple : .in +5 .nf .na int foo; char *bar; .in -5 .ad .fi On peut spécifier une petite valeur à l'option `-di' (un ou deux) pour que les identificateurs soient placés le plus à gauche possible : .in +5 .nf .na int foo; char *bar; .in -5 .ad .fi La valeur donnée à `-di' affectera toujours les variables qui sont sur des lignes séparées. Par exemple `-di2' donnera : .in +5 .nf .na int foo; .in -5 .ad .fi L'option `-bc' permet de passer une ligne après chaque virgule dans une déclaration : .in +5 .nf .na int a, b, c; .in -5 .ad .fi L'option `-nbc' force le comportement contraire : .in +5 .nf .na int a, b, c; .in -5 .ad .fi L'option `-bfda' permet de passer une ligne après chaque virgule dans la déclaration des arguments d'une fonction. Ceux-ci vont apparaître à un niveau d'indentation immédiatement supérieur à celui de la déclaration de la fonction. C'est pratique pour les fonctions qui prennent beaucoup d'arguments. L'option `-bfde' permet de passer une ligne avant le crochet fermant. Les options `-nbdfa' et `-nbdfe' ont les comportements contraires. Le comportement par défaut est `-nbdfa -nbdfe'. Par exemple, .in +5 .nf .na void foo (int arg1, char arg2, int *arg3, long arg4, char arg5); .in -5 .ad .fi donne avec l'option `-bfda' : .in +5 .nf .na void foo ( int arg1, char arg2, int *arg3, long arg4, char arg5); .in -5 .ad .fi et avec en plus l'option `-bfde' : .in +5 .nf .na void foo ( int arg1, char arg2, int *arg3, long arg4, char arg5 ); .in -5 .ad .fi L'option `-psl' place, lors d'une définition de procédure, le type de celle-ci sur la ligne précédant son nom. Ce style est nécessaire pour que le programme etags puisse correctement lire le code, de même que pour certaines fonctions du mode C d'Emacs. L'option `-T' permet d'indiquer à indent les noms de tous les types définis par typedef dans votre programme. `-T' peut être spécifié plusieurs fois. Par exemple si vous avez de telles déclarations : .in +5 .nf .na typedef unsigned long CODE_ADDR; typedef enum {red, blue, green} COLOR; .in -5 .ad .fi vous pourrez utiliser les options `-T CODE_ADDR -T COLOR'. Les options `-brs' ou `-bls' spécifient comment formater les crochets dans une déclaration de structure. L'option `-brs' donne : .in +5 .nf .na struct foo { int x; }; .in -5 .ad .fi et l'option `-bls' donne : .in +5 .nf .na struct foo { int x; }; .in -5 .ad .fi
Indentation
L'indentation consiste à placer chaque ligne de code à une certaine distance de la marge de droite. après le début d'un bloc, par exemple après un if ou un for, le niveau d'indentation est augmenté de la valeur spécifiée par l'option `-i'. Si le début d'un bloc est situé sur plusieurs lignes, chaque ligne est indentée par rapport à la prédédente d'un nombre d'espaces spécifié par l'option `-ci'. La valeur par défaut de `-ci' est 0. Cependant si l'option `-lp' est spécifiée, et si une ligne a une parenthèse ouvrante qui ne se ferme pas sur cette même ligne, alors les lignes suivantes seront alignées sur la position qui suit immédiatement cette parenthèse ouvrante. Cela s'applique aussi à `[', et à `{' (dans les listes d'initialisations). Voilà par exemple un résultat possible avec `-nlp -ci3' : .in +5 .nf .na p1 = first_procedure (second_procedure (p2, p3), third_procedure (p4, p5)); .in -5 .ad .fi et avec `-lp', qui donne un code peut-être un peu plus clair : .in +5 .nf .na p1 = first_procedure (second_procedure (p2, p3), third_procedure (p4, p5)); .in -5 .ad .fi Quand une assertion est située entre plusieurs paires de parenthèses, chaque paire supplémentaire entraîne un niveau d'indentation supplémentaire : .in +5 .nf .na if ((((i < 2 && k > 0) || p == 0) && q == 1) || n = 0) .in -5 .ad .fi L'option `-ipN\' permet de spécifier le nombre d'espaces supplémentaires par parenthèse. Avec `-ip0' le code précédent deviendrait : .in +5 .nf .na if ((((i < 2 && k > 0) || p == 0) && q == 1) || n = 0) .in -5 .ad .fi indent suppose que les tabulations sont placées à des intervalles réguliers à la fois dans les flux d'entrée et dans les flux de sortie. Ces intervalles sont de 8 colonnes par défaut, et peuvent être spécifiés avec l'option `-ts' (comme dans la version 1.2). Les tabulations sont traitées comme la quantité équivalente d'espaces. L'identation des déclarations de type dans l'ancienne façon de déclarer les fonctions est contrôlée par l'option `-ip'. L'option `-ip5' donnera par exemple : .in +5 .nf .na char * create_world (x, y, scale) int x; int y; float scale; { . . . } .in -5 .ad .fi Pour assurer la compatibilité avec les autres versions d'indent, l'option `-nip' est définie et est équivalente à `ip0'. On peut en ANSI C placer un espace, dans les directives du préprocesseur, entre le `#' et le nom de la commande. Le comportement par défaut d'indent est d'enlever cet espace. L'option `-lps' permet de laisser cet espace. L'option `-nlps' redonne le comportement par défaut. L'option `-ppi' remplace `-nlps' et `-lps'. Cette option `-ppi' permet d'indenter les statements conditionnels des directives du préprocesseur. Ainsi avec l'option `-ppi 3' .in +5 .nf .na #if X #if Y #define Z 1 #else #define Z 0 #endif #endif .in -5 .ad .fi devient .in +5 .nf .na #if X # if Y # define Z 1 # else # define Z 0 # endif #endif .in -5 .ad .fi
Coupure des lignes trop longues
L'option `-ln', ou `--line-lengthn', permet de spécifier la longueur maximale d'une ligne de code C, sans inclure les commentaires qui pourraient suivre sur la même ligne. Quand la ligne est plus longue que cette longueur, GNU indent essaye de couper la ligne à une place logique. C'est une nouveauté de la version 2.1, qui n'est encore ni très intelligente ni très flexible. Il y a pour l'instant deux options qui permettent de contrôler comment l'algorithme détermine à quel endroit couper la ligne. Avec l'option `-bbo', indent préfèrera couper la ligne avant les opérateurs booléens && et ||. Avec l'option `-nbbo' il n'aura pas cette préférence. L'option `-bbo' est l'option par défaut. Avec les options `-bbo', `--line-length60' et `--ignore-newlines', on peut obtenir quelque chose comme : .in +5 .nf .na if (mask && ((mask[0] == '
Poster un commentaire