LINUX.ORG.RU

[c++][синтаксис] Пробелы в языке.

 ,


0

0

Собственно как лучше писать читабельный код?
for( int i = 0; i < 10; i++ ) или
for(int i=0; i<10; i++)

mas или mas[ i ]
Все время ставил пробелы везде где только можно, а за последнее время пересмотрел несколько чужих исходников, никто так вроде не делает.


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

К.О.

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

Вам за кол-во строчек кода платят шоле?

wfrr ★★☆
()

for(int i=0;i<10;i++)

Очевидно же.

staseg ★★★★★
()

Я делаю как во втором варианте for и первом mas. Только с пробелом после for (и вообще любое ключевое слово выделяется пробелами, чтобы визуально отличалось от вызова функции).

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

Так тоже правильно. Если строка с for'ом слишком длинная или занимает несколько строк, то фигурную скобку лучше переносить, чтобы было читабельней.

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

Если строка с for'ом слишком длинная или занимает несколько строк, то

её лучше переписать по-другому, имхо :)

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

НЕНАВИСТЬ!

> А еще лучше не i, а вменяемое имя писать.

for (int variable_name = 0; variable_name < 10; ++variable_name)

Нет уж, лучше i.

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

Только не GNU. Есть шанс что код потом будут читать.

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

>А почему кстати ++i, а не i++?

Некоторые специалисты из середины восьмидесятых считают, что это удл^Wдает прибавку производительности.

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

>Если это int, то использовать надо вменяемые счетчики i,j,k,m,n.

Я иногда использую x,y,z. В случае какого-либо обхода координатной сетки удобней.

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

если у тебя сложный тип с перегруженным оператором ++, то это так, так как в случае постфиксного инкремента надо создавать копию объекта

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

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

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

С++0x подучи ;)

Что в C++0x изменили касательно парсинга шаблонных типов в параметрах другого шаблона?

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

Разговор таки про инт, а не сферические объекты. Но в тех случаях да, префиксный оператор нужно использовать.

staseg ★★★★★
()

mas

Ну Array же!

По сабжу:

#include <something>
#include       <foo>
#include  <blahblah>

int main(int argc, char** argv)
{
	int  a[10];
	int  some_variable    = 3;
	int  another_variable = 5;
	bool boolvar	       = true;
	

	for(int i = 0; i < 10; i++)
		a[i] = i;

	
	for(int i = 0; i < 9; i++)
	{
		DoSomeStuff(some_variable, another_variable);
		DoSomethingElse(a[i + 1]);
	}

	return 0;
}
Hetor
()
Ответ на: комментарий от Legioner

Можно писать vector<vector<int>> и это пропарсится без ошибок.

В Qt с ихнем QVector воспримется как ошибка.

n4ela
() автор топика

Лучше

forM [0..9] $ \i -> ...

Miguel ★★★★★
()

Мне нравится стиль гоогля. К том же предпочитаю ++i. Итого:

for (int i = 0; i < 10; ++i) mas [i];

делаю упор на то что это интуитивно и читабельно.

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

>К том же предпочитаю ++i

Если пишешь на низкоуровневых языках не стиль надо предпочитать а ориентироваться на скорость :) Для арм это например использование do/while вместо for, декремент счетчиков вместо инкремента и сравнение i!=0 вместо i>0. Локальные переменные и аргументы ф-ций делать int - никаких char или short. В структурах поля располагать по возрастанию размерности - char,short...массивы, не использовать битовые поля, частично разворачивать цмклы и т.д. в этом роде.

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

vector< vector<int> > или прощай #include<iostream>

Причём тут iostream? >> в C++0x в зависимости от контекста распознаётся либо как оператор >> либо как две лексемы > >.

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

Цикл do/while, в отличие от while (или for) чуточку быстрее. Дело в том, что на каждой итерации do/while есть только одна инструкция условного перехода, а в while — один условный и один безусловный переходы.

P.S.: Компиляторы Borland сами умели превращать циклы в do/while.

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

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

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

Тут как посмотреть.

Стоимость перехода ненулевая, и чем короче тело цикла, тем больше относительная стоимость самого перехода.

k_andy ★★★
()

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

Для своих проектов выработай свой стиль кода удобный для тебя и придерживайся его.

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

> Если строка с for'ом слишком длинная или занимает несколько строк, то фигурную скобку лучше переносить, чтобы было читабельней.

А вот это уже вредный совет: в одном случае скобку ставить так, а в другом сяк. Скобки надо ставить единообразно!

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

> использование do/while вместо for, декремент счетчиков вместо инкремента и сравнение i!=0 вместо i>0. Локальные переменные и аргументы ф-ций делать int - никаких char или short. ... частично разворачивать цмклы и т.д. в этом роде.


За такую premature optimization надо вешать. Чем выше - тем лучше.
И не забывать на грудь табличку с надписью «Он менял for() на do/while()».

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

>За такую premature optimization надо вешать.

Ха-ха :) Ты элементарно не отличаешь efficient programming от premature optimization. Это простые правила - нужно просто знать как надо делать а как нет, никто не заставляет тебя менять for там где он действительно нужен на do/while.

bengan
()

Скобки в условиях и циклах отделяются пробелом от ключевого слова. В вызовах функций не отделяются. Типа того.

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

> Ты элементарно не отличаешь

Я элементарно отличаю исходный код на С/С++ от объектного кода целевой платформы. И уж точно не принадлежу к числу тех, кто мешает одно с другим в общую кучу. ;)
Если тебе нужен именно такой двоичный код - допили компилятор или напиши свой, а не страдай фигней.:)
На крайняк можешь портануть С--. Он специально был написан для таких любителей скафандров и гамака, как ты. ;)

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

> А почему не делать так

while (i--) mass[i] =


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

ТС и все-все-все, кого волнует, сколько и где должно быть пробелов, читайте уже - Голуб А. Правила программирования на C и C++(2001).

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

подскажите прогу, которая форматирует исходник в нужный стиль

A-Style

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

>Я элементарно отличаю исходный код на С/С++ от объектного кода целевой платформы.

А я вижу что наоборот кроме х86 ты ничего не видишь :) Эти правила одинаково работают на любой архитектуре. Для примера - char и short на процессорах где нет анахронизма в виде 8/16 битных регистров как в х86, для локальных переменных и параметров ф-ций будут создавать дополнительный код - компилятору придется эмулировать поведение 8 битных регистров в арифметических операциях, for всегда будет иметь на выходе лишний безусловный переход по сравнению с do/while, битовые поля не переносимы, поведение счетчиков немного специфично для арм - тут согласен, ну и разворачивание циклов это наверно уже перебор в повседневной практике.

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