Програмите имат много лица. Още преди да почна да се знимавам по-сериозно с писането на С код, реших да проверя дали има начин автоматично да си подравнявам кода. За мен лично е важно програмата, която преглеждам да е в "удобен" за мен стил. Разгадаването на логиката идва на втори план.
Решението е indent! Как става това? Как се дефинират правилата за подравняване?
В home директорията трябва да се дефинира .indent.pro, който е ресурсен файл за indent. В него се поставят и желаните правила. Наложи ми се доста да експериментирам преди да налучкам "моя" стил (между другото, Java доста повлия на вкуса ми). По метода проба-грешка резултата е:
Преди:
void printpathto( ino_t this_inode )
{
ino_t my_inode ;
char its_name[ BUFSIZ ];
if ( get_inode("..") != this_inode )
{
chdir( ".." ); /* up one dir */
// some comment
inum_to_name(this_inode,its_name,BUFSIZ);
my_inode =get_inode( "."); /* print head */
printpathto( my_inode); /* recursively */
printf("/%s", its_name ); /* now print */
/* name of this */
}
}
След:
void printpathto(ino_t this_inode) {
ino_t my_inode;
char its_name[BUFSIZ];
if (get_inode("..") != this_inode) {
chdir(".."); /* up one dir */
// some comment
inum_to_name(this_inode, its_name, BUFSIZ);
my_inode = get_inode("."); /* print head */
printpathto(my_inode); /* recursively */
printf("/%s", its_name); /* now print */
/* name of this */
}
}
Ето правилата, дефинирани в моя .indent.pro
/* indentation */
--indent-level 4
--brace-indent 4
--continuation-indentation 2
--parameter-indentation 0
--case-brace-indentation 0
--case-indentation 4
--declaration-indentation 4
--struct-brace-indentation 4
--line-length 80
--tab-size 4
--dont-line-up-parentheses
--continue-at-parentheses
/* spacing */
--dont-break-procedure-type
--space-after-cast
--no-space-after-function-call-names
--no-space-after-parentheses
--no-tabs
--space-after-for
--space-after-if
--space-after-while
--space-after-cast
--space-special-semicolon
--dont-break-function-decl-args
/* misc */
--format-all-comments
--no-comment-delimiters-on-blank-lines
--break-before-boolean-operator
--comment-indentation 50
/* blank lines */
--blank-lines-after-declarations
--blank-lines-after-procedures
--blank-lines-before-block-comments
--blank-lines-after-commas
/* braces */
--braces-on-if-line
--braces-on-struct-decl-line
--cuddle-do-while
--cuddle-else
-brf /* brace on function line */
/* misc */
-ppi 3
Само да кажа, че понякога е добре да няма подравняване! За да изкючите местата в кода, където не искате да влиза indent ги обграждаите с т.н.control comments
/* *INDENT-OFF* */
< Част, която не искате да се форматира >
/* *INDENT-ON* */
Забележка: За повече подробност можете да погледнете тук
Забележка2: А за Eclipse има много подходящ plugin Astyle
1 comment:
Много добре, но това вече остаря. Ако си свалиш Eclipse 3.3 и C/C++ плъгина CDT, ще видиш, че там вече има няколко вида подравняване. Най-впечатляващото е, че подравнява и С++ кода!.
Post a Comment