LINUX.ORG.RU

Оформление кода в С

 , ,


0

1

Как «правильно» оформлять код? Подскажите, пожалуйста, правильную стилистику. Вот пример из моего быдлокода



#include <stdio.h>
// DEFAULT
#define SNAKENAME      "Mysnake"   
#define SCORE 		0           
#define LIVES 		0           
#define MAXLENGTH       10    		
#define DELAY  		200   		

typedef struct{                             // SNAKE BODY 2D
  int x, y;
} pointworm_t;

typedef struct{
 char		*snakename;             
 int		score;
 unsigned char	lives; 
 
 pointworm_t    move_snake, 		   // Direction
                newhead,    		   // newhead  = snakebody[0]  
                snakebody[MAXLENGTH];      // Body
              
} snake_t;

int main(int argc, char **argv){

snake_t snake = {
		SNAKENAME, SCORE, LIVES, 
		{1,0}, 
		{5,5},          

		{		           // BODY
		 {5,5},
		 {4,5},
		 {3,5},
		 {2,4},
		}	                   // BODY
};
return 0;
};
Где «стилистические» ошибки? Что почитать для правильного «почерка».

★★★★★

Важнейшее правило — не использовать табуляцию для отступов и выравнивания; всё только пробелами.

CARS ★★★★ ()

Просто нужно использовать K&R, все будет збс.

Deleted ()

Это теперь типа месячных?

greenman ★★★★★ ()
Ответ на: комментарий от Deleted

я то и по к&р учусь, но, как вы знаете, там нет четких правил оформления кода - необходимо всматриваться, что ли. Грубо говоря, я понимаю, что надо писать код не для компилятора, а для других людей.

int13h ★★★★★ ()
Ответ на: комментарий от CARS

Важнейшее правило — не использовать табуляцию

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

Stahl ★★☆ ()

Что почитать для правильного «почерка».

Больше кодить самому и читать чужой код.

drSchur ★★★ ()
Ответ на: комментарий от CARS

Для выравнивания полей, я согласен, использовать табуляцию не стоит. А отступы чем не угодили? Да, у разных людей они будут разными, но код-то все равно останется ровным.

uuwaan ★★ ()

Господа, товарищи! Простите, но что вы скажите больше о моем коде? на что стоит обратить внимание-то? Комментарии стоит держать на одном уровне?

int13h ★★★★★ ()
Ответ на: комментарий от int13h

Хз. Всегда писал в K&R, все устраивает. Главное - код компактный и легко читаем.

Можешь на вики прочесть.

Deleted ()
Ответ на: комментарий от Deleted

я согласен с вами. но не совсем. ведь раньше разметка была под дисплей терминалов тех лет, а сейчас немного все поменялось. не будут ли атавизмом «старые устои»?

int13h ★★★★★ ()
Ответ на: комментарий от CARS

Вредные советы.

Важнейшее правило — не использовать табуляцию для отступов и выравнивания; всё только пробелами.

Это вы Успенского что ли перечитали, который «Вредные советы» написал?

Camel ★★★★★ ()
Ответ на: комментарий от int13h

На мой вкус и цвет:

  • если писать не char *x а char* x, получается ровнее;
  • комментарии всегда пишу над кодом, а не справа;
  • тело функции должно идти с отступом и без пустой строки в начале.
uuwaan ★★ ()
Ответ на: комментарий от uuwaan

если писать не char *x а char* x, получается ровнее;

Если так написать char* x, y, то создастся ложное впечатление, что y тоже указатель.

keyran ★★ ()
Ответ на: комментарий от uuwaan

если писать не char *x а char* x, получается ровнее

Ровнее, но не правильнее. Семантика объявления типов в C такова, что звезда — это что-то вроде диакритического знака перед идентификатором, который как бы говорит: «этот тип относится не к самой переменной, а к тому, указателем на что она является».

Хотя бы потому, что «char* c, s;» эквивалентен «char *c; char s;», а не «char *c; char *s;».

Так что в этом месте у автора всё хорошо. Автору я бы посоветовал для лучшей читаемости отделять открывающую фигурную скобку пробелом: не «srtuct{», а «struct {». Квадратные скобки тоже хорошо бы отделять. Решай сам, снаружи или внутри ставить пробел, но я лично предпочел бы «snakebody[ MAXLENGTH ]», а не «snakebody [MAXLENGTH]».

VladimirP ★★★ ()

И это, отступы в 4, в 2 отстой... в 8 мега-отстой, ну и use K&R style, всем добра :)

xterro ★★★★★ ()
Ответ на: комментарий от uuwaan

А всё нормально с отступами. Главное - не мешать пробелы и табы, иначе всё форматирование обязательно поедет в некотором другом редакторе.

Deleted ()

Не используй дефайны, там где можно применять константы. Дефайны неудобно отлаживать и нет котроля типов. И никто тебя не предупредит, что где-то уже твой дефайн определен, или ты своим определение чье-то поломал. Даже если тебя предупредят - бывают проекты на 100500 ворингов, и ворнинг про дефайн ты просто не заметишь. И вобще, единственное достойное применение препроцессора в 2014 году - замок включения для инклудов.

Во времена Кернигана-Ричи препроцессор вовсю использовали для ускорения времени конпеляции, но сейчас это уже не актуально.

xnick ()
Ответ на: комментарий от int13h

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

xnick ()

в корень проекта запили файл format_sources

* : astyle --mode=c --style=kr --pad-oper --pad-paren --pad-header $TMPFILE $TMPFILE
открой в kdevelop и сделай reformat. идеалъ

punya ★★ ()
Последнее исправление: punya (всего исправлений: 1)

С точки зрения читабельности вполне годный код, только пробелов поменьше, намного поменьше. И вообще компактнее пиши.

И вот так делать не надо:

 char		*snakename;             
 int		score;
 unsigned char	lives; 
От подобного хочется плакать и вырывать глаза.

E ★★★ ()
Ответ на: комментарий от keyran

Если так написать char* x, y

Если так написать, то автору нужно руки оторвать.

UVV ★★★★★ ()
Ответ на: Вредные советы. от Camel

Нет, он написал прописную истину. За табы руки нужно отрывать.

UVV ★★★★★ ()

typedef struct{


typedef struct {
Исправил.

UVV ★★★★★ ()
Ответ на: комментарий от UVV

Руки надо отрывать за пробелы при формировании отступов. Если автор дурак и сделал отступы в 2 пробела, то я-то почему должен эту кашу читать? У меня отступ 4 пробела по глубоким личным причинам, блин. А если использовать табуляцию для формирования отступа, то все счастливы: он себе настроит таб в 2 знака, а я в 4.

uuwaan ★★ ()
Ответ на: комментарий от VladimirP

Ровнее, но не правильнее.

На мой вкус и цвет, писать через запятую не стоит вообще. Но с доводами о семантике согласен, конечно.

uuwaan ★★ ()

Чото ни один пурист не сказал, что *_t зарезервирован в glibс, например.

AptGet ★★★ ()
Ответ на: комментарий от int13h

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

Общие рекомендации крайне просты:

  • Комментируй.
  • Поменьше используй goto.
  • Не допускай разрастания функции на более чем один экран
  • Не допускай дублирования кода. Если что-то повторяется дважды — оформь это как отдельную функцию.
  • Давай осмысленные имена переменным.
  • Неплохая идея — выравнивать блоки кода, к примеру:
    int i   = 1,2
    char c  = 'd'
    float k = 0,45
    
  • Это только часть советов, но пожалуй самая главная. Можешь погуглить на эту тему, может быть нароешь неплохих идей.
Policeman ()

В последней и в третей с конца строчках стоят закрывающие скобки на одинаковом уровне отступа. Внутреннюю из них надо несколько отступить, примерно на 4 пробела. И return, и объявление структуры тоже отступить.

А после самой последней скобки, закрывающей функцию main(), разве нужна точка с запятой? Нет, не нужна. Если точка с запятой ставится после последего оператора функции, то после самой функции ставить не надо.

Deleted ()

У меня подобное выравнивание настойчиво ассоциируется со школой.

 char		*snakename;             
 int		score;
 unsigned char	lives; 
urxvt ★★★★★ ()
Ответ на: комментарий от CARS

Важнейшее правило — не использовать табуляцию для отступов и выравнивания; всё только пробелами.

расстрелять

Pinkbyte ★★★★★ ()
Ответ на: комментарий от unlog1c

Расстрелять надо использующих символы фиксированный ширины для отступов где фиксированная ширина НЕ ТРЕБУЕТСЯ!

Догадаться какой из символов пробел/табуляция имеет фиксированную ширину я думаю сможешь.

Pinkbyte ★★★★★ ()
Ответ на: комментарий от CARS

Важнейшее правило — не использовать табуляцию для отступов и выравнивания; всё только пробелами.

Святая толстота.

edigaryev ★★★★★ ()
Ответ на: комментарий от Pinkbyte

где фиксированная ширина НЕ ТРЕБУЕТСЯ!

Упырь мел. Кто тебе такое сказал, что не требуется?

unlog1c ★★★ ()

argv){

>< пробелы совсем не в тех местах. Стоит делать перенос в этом месте. Про K&R, наверное, уже написали.
wakuwaku ★★★★ ()

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

chg ★★★★★ ()
Ответ на: комментарий от CARS

важнейшее правило — должно просто работать и по 4 пробела на таб. у каждого свое правило. прав тот, у кого работает.

chg ★★★★★ ()
Ответ на: комментарий от int13h

С одним пробелом между типом и именем переменной.

urxvt ★★★★★ ()
Ответ на: комментарий от chg

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

Xellos ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.