Главная » Статьи » Программирование [ Добавить статью ]

Стили расстановки отступов при программировании на языке C

Использование пробелов

Стили расстановки скобок — не единственное поле, на котором происходят баталии войны стилей программирования. Способы использования пробелов также оказывают значительное влияние на читабельность вашего кода. Если вы думаете, что где-то должен быть, конечно, один стиль расстановки пробелов, которого придерживается каждый программирующий для максимизации читабельности своего кода, я боюсь, вы ошибаетесь. Здесь имеется столько стилей расстановки пробелов, сколько существует С-программистов.

Отступы

Что представляют собой правильные установки табуляции и отступов? Чаще всего выбирают два, три, четыре, восемь пробелов или ни одного. Я надеюсь, вы согласитесь, что мы можем отклонить нулевой вариант как делающий код полностью нечитабельным, но все другие варианты являются вполне читабельными.

Большинство программистов начинают с использования заданной по умолчанию установки табуляции, которая часто имеет восемь колонок в ширину (но не обязательно; это зависит от вашего текстового процессора). Постепенно, особенно в случае большого числа уровней отступов, код начинает выглядеть немного растянутым:


int foo(int arr[А][В][С])
{
        int а, Ь, с, total = 0;
        for (а = 0; а < А; а++)
        {
                for(b = 0; Ь < В; Ь++)
                {
                        fоr(с = 0; с < С;  С++)
                        {
                                total += arr[a](b][c];
                        }
                }
        }
        return total;
}

Поэтому многие уменьшают количество пробелов до четырех:

int foo(int bar[А][В][С])
    {
        int a, b, c, total = 0;
        for(a = 0;  a < A; a++)
        {
            for(b = 0; b < B; b++)
            {
                for(c = 0; с < C;  С++)
                {
                    total += bar[a][b][c];
                }
            }
        }
    return total;
}

Лично я пользовался таким способом на протяжении многих лет. Многим позже я обнаружил, что для моих целей наиболее удобными оказываются отступы в два пробела. Это была установка, от которой я не отступаю уже длительное время. Я приобрел привычку использовать два пробела, когда начал регулярно публиковать статьи в Usenet. Я использовал клавишу пробела вместо табулятора не только потому, что установка табулятора у моих читателей дает слишком широкий отступ, но мне также не нравилась сама идея вставки табуляции в публикации Usenet. Коль скоро такое решение было принято, я быстро обнаружил, что уменьшение количества символов пробела в 12 раз для трехуровневого отступа позволяет мне сэкономить немало времени, так что я начал использовать отступы в два пробела. К своему удивлению, я нашел, что мне нравится это больше, чем четыре пробела, так что теперь я использую два пробела все время.

Отступ в три пробела для многих С-программистов представляется неестественным. Тем не менее, он используется на некоторых сайтах, и при этом текст выглядит неплохо.

Какая же установка табуляции и отступа является правильной? Вы опередили меня, я знаю — действительно, нет одного правильного уровня. Если вашим проектом стандарта кодирования предусмотрена установка, которую вы должны использовать, выберите уровень, который, по вашему мнению, выглядит наиболее читабельно, используйте его последовательно в своей программе и будьте готовы пересмотреть свое мнение через некоторое время.

Табуляторы и мэйнфреймовские компиляторы

Некоторые мэйнфреймовские С-компиляторы не отвечают должным образом на вставку символов табуляции в исходные файлы. Если вы чувствуете, что попадаете в собственную ловушку, может оказаться необходимым потратить время (или деньги) на программный инструмент для замены табуляции пробелами. Фактически вы можете уже иметь такой инструмент. Например, редактор Microsoft Visual С++ имеет эту возможность.

Пробелы вокруг символов

Для улучшения читабельности программного кода следует творчески подходить к использованию пробелов. Снова-такигиет единственно правильного способа расстановки пробелов, но неправильных способов — множество. В приведенном ниже примере пробелы использованы скверно:

#include <stdlib.h>
#include <stdio.h>
#define P printf
#define I  atoi
int main(int a,char*v
[]){int r=5,   i;if(a>l
)  r=l(v[lj);   if(r<=0)
 r=5;if(r*2==0)++r;for
(i=0;   i<r*r;   P(i/r==
( 3*r)/2-(iir+l)I|i/r==
 r/2 - i%r||i/r==r/2+i
 %r||i/r==i%r-r/2?"*-:
 "  "),i++,  I % r==0?P(
 "\n")   :  0);return 0;}

(Если вы удивлены, что такое вообще может быть, спешу сообщить, что я не выудил это из материалов Международных соревнований по головоломному С-кодированию. Я написал этот текст лично, так что могу посылать его в IRC (Internet Relay Chat — Обмен дружескими посланиями через Internet) всякий раз, когда кто-то задает довольно общий для домашней работы вопрос, к которому этот код подходит. Выяснение вопроса о том, какие функции выполняет эта программа, я оставляю для вас в качестве упражнения. Сделать это сразу практически невозможно.)

Вероятно, наиболее эффективный способ повышения читабельности кода состоит в том, чтобы ставить пробелы вокруг бинарных операторов. Рассмотрим строку

a=b+c*d/e%f;

и строку

a = b + c*d/e%f;

Какую из них, по-вашему, легче читать? Именно так делаю я.

Некоторым людям нравится также устанавливать пробелы вокруг круглых скобок:

for  ( foo = 0  ;  foo < bar ;  foo++ )

и даже вокруг прямоугольных скобок:

а  [ baz ]  = 0;

Лично мне кажется, что это уж чересчур усердное использование пробелов, но это стиль, с которым вы время от времени будете встречаться.

© Ричард Хэзфилд, "Искусство программирования на C", 2001 год.


Похожие статьи:

Добавлено: 23.07.2011 | Просмотров: 3825 | Рейтинг: 0.0/0 |
Теги: язык Си, стиль, программирование


Комментарии (0)
Имя *:
Email *:
Код *: