Вперед Назад Содержание

8. Форматирование Вашего исходного кода.

Важно помещать открывающую скобку, которая начинает тело функции на C в нулевой колонке, и избегать появления других открывающих или закрывающих скобок в нулевой колонке. Имеется несколько инструментов, которые просматривают исходный текст и ищую открывающую фигурную скобку в нулевой колонке для того, чтобы найти начало функции. Эти инструменты не будут работать с кодом, отформатированным без учета этого соглашения.

Так же важно, чтобы в описании функции ее имя начиналось в колонке ноль. Это помогает людям искать определение функции, и может так же помочь некоторым инструментам распознать его. Таким образом, правильное оформление описания функции следующее:

static char * concat (s1, s2) /* Name starts in column zero here */ char *s1, *s2; { /* Open brace in column zero here */ ... }
В случае, если Вы хотите использовать ANSI C, оформляйте описание следующим образом:

static char * concat (char *s1, char *s2) { ... }
Для ANSI C, если список аргументов не помещается на одной строке, его следует разбивать, как указано в примере:

int lots_of_args (int an_integer, long a_long, short a_short, double a_double, float a_float) ...
Для тела функции, мы предпочитаем форматировать код, как указано ниже:

if (x < foo (y, z)) haha = bar[4] + 5; else { while (z) { haha += foo (z, z); z--; } return ++x + bar (); }
Мы считаем, что проще читать программу, когда она имеет пробелы перед открывающимися скобками и после запятых. Особенно после запятых.

Когда Вы разрезаете выражение на несколько строк, разбивайте его перед оператором, а не после. Правильно делать так:

if (foo_this_is_long && bar > win (x, y, z) && remaining_condition)
Старайтесь избегать наличия двух операторов с разным приоритетом на одном уровне отступа. Например, не следует писать так:

mode = (inmode[j] == VOIDmode || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j) ? outmode[j] : inmode[j]);
Вместо этого, используйте дополнительные скобки, чтобы отступ показывал вложенность:

mode = ((inmode[j] == VOIDmode || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]))) ? outmode[j] : inmode[j]);
Вставляйте дополнительные скобки, для того, чтобы Emacs самостоятельно выравнивал код. Например, следующие отступы будут выглядеть хорошо, если Вы сделаете их руками, но Emacs может все испортить:

v = rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 + rup->ru_stime.tv_sec*1000 +rup->ru_stime.tv_usec/1000;
Но добавление пары скобок решает эту проблему:

v = (rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 + rup->ru_stime.tv_sec*1000 +rup->ru_stime.tv_usec/1000);
Конструкцию do-while следует форматировать следующим образом:

do { a = foo (a); } while (a > 0);
Следует использовать символы перевода страницы (control-L) для того, чтобы разделить программу на страницы в логических местах (но не внутри функции). Не важно, как велика страница, поскольку они не должны попадать на печатные страницы. Символ перевода страницы должен быть единственным символом в строке.


Вперед Назад Содержание