Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на С.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Занятие 8.Оформление кода программы на Си.Уроки программирования для чайников.Язык Си.

Сегодня мы не будем разбирать какие-то новые конструкции языка, а поговорим об оформлении кода наших программ. Тема это очень важная. Дабы самому не путаться в своем коде написанном несколько месяцев назад. У каждого программиста есть свой стиль, свои привычки при написании программ. Они появляются с течением времени и закрепляются у каждого. В компаниях и командах где несколько разработчиков, обычно разработчики договариваются об каком-то одном стиле написания исходного кода. Оформляя определенным образом код программы, человек приучается к дисциплине. Вот об основных таких советах оформления кода мы сегодня и поговорим.

Имена и способы описания переменных.

Основной совет таков, давайте переменным осмысленные имена.

Это очень важный совет на самом деле. В маленьких программках которые мы пишем в практических занятиях это не столь серьезно, но в большой программе это вам очень поможет. Даже в небольших программах это иногда очень помогает. У меня есть небольшой опыт олимпиадного программирования, так вот когда переменным даешь короткие имена, ничего не обозначающие, можно очень легко запутаться. Когда имя переменной несет в себе информацию которая хранится в переменной, это позволяет легче искать ошибки в ходе отладки программы. А в условиях нехватки времени, отлаживать и оптимизировать программу постоянно вспоминая что именно хранится в переменной q, что в get, очень непросто. Так что давайте своим переменным осмысленные имена.

Немного о разделении слов в именах переменных. Пусть есть переменная целого типа в который содержится номер ящика. Её логично назвать number_box. Так вот, разделение слов с помощью нижнего подчеркивания, можно считать традицией программистов на Си. В паскалеподобных языках обычно подчеркивания для это цели не используют программисты. Для этого используется заглавные буквы. Возвращаясь к нашему примеру: NumberBox. Но так как Си регистрозависимый, а паскаль нет, то при если случайно ошибиться и написать потом numberBox, то в паскале программа будет работать, а в Си нет, ибо NumberBox и numberBox являются по правилам языка Си разными переменными. Отсюда, есть еще традиция в языке Си, имена переменных всегда пишутся маленьким буквами, а имена констант только заглавными.И всегда понятно, где используется константа, а где переменная.

Еще одна из условностей, это указание типа переменной в её имени. Опять же обратимся к нашему примеру, количество ящиков величина целая, поэтому достаточно удобно в имени это указать каким-то образом. Например так. n_number_box. Т.е. в начале имени переменной писать определенный префикс для каждого типа свой (int - n, char - ch, double,float - d, file - f, и другие). Я лично таким способом не пользуюсь постоянно, хотя это иногда очень удобно.

Оформление логических блоков и запись лесенкой.

Запись лесенкой очень-очень полезная и практичная вещь. Оформлять код лесенкой это первое, что каждый может сделать на пути избежания ошибок в коде своих программ и повышения удобчитаемости.

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

Листинг 8.1

#include <stdio.h>

int main(void)

{

int n,b;

printf("Vvedite chislo ot 1 do 100: ");

scanf("%d", &n);

if(n>=11&&n<=14){

printf("Na lugu pasetsya %d korov \n", n);

}

else{

b=n%10;

if(b==1) printf("Na lugu pasetsya %d korova \n", n);

if(b>=2&&b<=4) printf("Na lugu pasetsya %d korovy \n", n);

if(b>=5&&b<=9) printf("Na lugu pasetsya %d korov \n", n);

if(b==0) printf("Na lugu pasetsya %d korov \n", n);

}

return(0);

}

Оформляя таким образом свой код, его очень удобно читать другим, да и самому спустя какое-то время, да и непосредственно во время написания. Отступы можно делать как пробелами, так и табуляциями, я предпочитаю табуляции, и вам советую тоже пользоваться ими. Это удобно.Касательно табуляций и пробелов есть хороший пост на ресурсе Хабрахабр. Рекомендую ознакомится.

Теперь оформление логических блоков, а точнее разберемся с написание составного оператора. Есть несколько типов написания составного оператора. Рассмотрим основные, на примере с оператором if.Обратите внимание в каких местах расставлены фигурные скобки.

Листинг 8.2.

1)

if(n>=11&&n<=14){

printf("Na lugu pasetsya %d korov \n", n);

}

2)

if(n>=11&&n<=14)

{

printf("Na lugu pasetsya %d korov \n", n);

}

3)

if(n>=11&&n<=14)

{

printf("Na lugu pasetsya %d korov \n", n);

}

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

В качестве совета который я уже давал в комментариях. Всегда пишите фигурные скобки, даже если у вас один оператор в теле цикла, и в конструкции if. И при том сразу напишите заготовку if () {}, а потом уже записывайте условие и что делать при этом условии. Так же и с циклами.

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

Листинг 8.3.

for (int i=0; i<100; i++){

for(int j=i+1; j<200-i; j++){

b=i*j+4;

if(b%2!=0){

g=13*b;

}//IF

}//FOR(j)

}//FOR(i)

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