Подтвердить что ты не робот

Руководство по стилю программирования для C

Прошло некоторое время с тех пор, как я написал C, и я никогда не делал никакого форматирования, когда я это делал, так как это была вся игрушка и была несущественной. Для проектов с открытым исходным кодом C, какими будут лучшие (наиболее согласованные и использованные) руководства по стилю (форматирование и условное использование), чтобы следовать?

4b9b3361

Ответ 1

Руководства по стилям C и С++ содержит множество руководств по стилям. Я думаю, вы должны выбрать тот, который используется в области вашего проекта ОС. Например. Люди GNU любят различное форматирование, чем разработчики ядра Linux.

Просто примеры:

Ответ 2

Многие крупные (с открытым исходным кодом) проекты имеют свои собственные соглашения и руководства по стилю, поэтому вы захотите проверить, не имеет ли проблема, в отношении которой вы хотите внести свой вклад, руководство по стилю для чтения. В противном случае, знакомясь с одним или несколькими общими стилями.

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

Примеры добавления (продолжение от @stacker):

Ответ 3

Это обширная и сложная область, есть так много мнений, что есть программисты. На мой взгляд, самое важное - быть последовательным, ничто не хуже, чем пытаться найти, какой блок принадлежит какому условию, потому что строки иногда отступаются с пробелами, иногда с вкладками, иногда 4 пробела на отступы, а затем - с 2...

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

if((pInfo->pSelects.Include.DT = CmdBuildMap(Tbl+TAG_SELINC_DT))) Counter++;
if((pInfo->pSelects.Include.DO = CmdBuildMap(Tbl+TAG_SELINC_DO))) Counter++;
if((pInfo->pSelects.Include.RQ = CmdBuildMap(Tbl+TAG_SELINC_RQ))) Counter++;
if((pInfo->pSelects.Include.YR = CmdBuildMap(Tbl+TAG_SELINC_YR))) Counter++;
if((pInfo->pSelects.Exclude.DT = CmdBuildMap(Tbl+TAG_SELEXC_DT))) Counter++;
if((pInfo->pSelects.Exclude.DO = CmdBuildMap(Tbl+TAG_SELEXC_DO))) Counter++;
if((pInfo->pSelects.Exclude.RQ = CmdBuildMap(Tbl+TAG_SELEXC_RQ))) Counter++;
if((pInfo->pSelects.Exclude.YR = CmdBuildMap(Tbl+TAG_SELEXC_YR))) Counter++;

более читабельна, чем

pInfo->pSelects.Include.DT = CmdBuildMap(Tbl+TAG_SELINC_DT);
if(pInfo->pSelects.Include.DT) 
  Counter++;
pInfo->pSelects.Include.DO = CmdBuildMap(Tbl+TAG_SELINC_DO);
if(pInfo->pSelects.Include.DO) 
  Counter++;
pInfo->pSelects.Include.RQ = CmdBuildMap(Tbl+TAG_SELINC_RQ);
if(pInfo->pSelects.Include.RQ) 
  Counter++;
pInfo->pSelects.Include.YR = CmdBuildMap(Tbl+TAG_SELINC_YR);
if(pInfo->pSelects.Include.YR) 
  Counter++;
pInfo->pSelects.Exclude.DT = CmdBuildMap(Tbl+TAG_SELEXC_DT);
if(pInfo->pSelects.Exclude.DT) 
  Counter++;
pInfo->pSelects.Exclude.DO = CmdBuildMap(Tbl+TAG_SELEXC_DO);
if(pInfo->pSelects.Exclude.DO) 
  Counter++;
pInfo->pSelects.Exclude.RQ = CmdBuildMap(Tbl+TAG_SELEXC_RQ);
if(pInfo->pSelects.Exclude.RQ) 
  Counter++;
pInfo->pSelects.Exclude.YR = CmdBuildMap(Tbl+TAG_SELEXC_YR);
if(pInfo->pSelects.Exclude.YR) 
  Counter++;

(и просто редактируя здесь для SO, второй форме было действительно сложно получить)

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

Это, конечно, очень субъективно.

Ответ 4

Всегда следуйте стилю кода, которому вы вносите. Тело кода должно выглядеть так, как будто оно было написано одним человеком. Если у проекта нет четких правил стиля, вам нужно просто следовать примеру. Хорошим правилом является то, что если вы хотите нарушить существующий стиль, вы должны (a) убедить всех остальных и (b) изменить весь существующий код, чтобы он соответствовал.

Если вы начнете свои собственные проекты, вы можете использовать простой современный стиль C, подобный CZMQ: https://github.com/zeromq/czmq#toc3-385