LINUX.ORG.RU
ФорумTalks

Посоветуйте, какой формат стиля выбрать для сишки?

 , , ,


0

2

Всем привет! Посоветуйте какой стиль формата выбрать для сишки? Перешёл от любимого Sublime Text на VScode, пока что впечатления хорошие прикрутил себе плагинчик Clang-Format и разбираюсь какой формат стиля выбрать для кодинга. Есть LLVM, Google, Chromium, Mozilla, WebKit. Какой из них наиболее предпочтительный?

Перемещено tailgunner из development



Последнее исправление: Hufoc (всего исправлений: 4)

Начинал с:

clang-format -style="{BasedOnStyle: llvm, ColumnLimit: 120, Cpp11BracedListStyle: true, Standard: Cpp11, BreakBeforeBraces: Stroustrup, IndentWidth: 2, UseTab: Never}"

AlexVR ★★★★★
()

Взрослые дяди используют KNF (Kernel Normal Form).

beastie ★★★★★
()

Почти любой, только не GNUтое убожество типа:

if (x < foo (y, z))
  haha = bar[4] + 5;
else
  {
    while (z)
      {
        haha += foo (z, z);
        z--;
      }
    return ++x + bar ();
  }

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

LLVM, Google, Chromium, Mozilla, WebKit

Это не общепринятые стили для C, а просто местечковые гайдлайны, да ещё и для крестов. Ты уж определись с языом.

Предпочитаю allman/bsd как самый логично структурированный. Но этот выбор ты должен сделать для себя сам.

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

тоже предпочитаю именно этот стиль.

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

Iron_Bug ★★★★★
()

K&R и, по возможности, camel case

GblGbl ★★★★★
()

Я вместо VSCode юзаю atom, там есть плугин uncrustify, вот держи конфиг (найдено где-то на просторах stack overflow):

#
# uncrustify config file for the linux kernel
#

indent_with_tabs        = 2             # 1=indent to level only, 2=indent with tabs
input_tab_size          = 8             # original tab size
output_tab_size         = 8             # new tab size
indent_columns          = output_tab_size

indent_label            = 1             # pos: absolute col, neg: relative column


#
# inter-symbol newlines
#

nl_enum_brace           = remove        # "enum {" vs "enum \n {"
nl_union_brace          = remove        # "union {" vs "union \n {"
nl_struct_brace         = remove        # "struct {" vs "struct \n {"
nl_do_brace             = remove        # "do {" vs "do \n {"
nl_if_brace             = remove        # "if () {" vs "if () \n {"
nl_for_brace            = remove        # "for () {" vs "for () \n {"
nl_else_brace           = remove        # "else {" vs "else \n {"
nl_while_brace          = remove        # "while () {" vs "while () \n {"
nl_switch_brace         = remove        # "switch () {" vs "switch () \n {"
nl_brace_while          = remove        # "} while" vs "} \n while" - cuddle while
nl_brace_else           = remove        # "} else" vs "} \n else" - cuddle else
sp_brace_else           = force
sp_else_brace           = force
nl_func_var_def_blk     = 1
nl_fcall_brace          = remove        # "list_for_each() {" vs "list_for_each()\n{"
nl_fdef_brace           = add           # "int foo() {" vs "int foo()\n{"
nl_after_label_colon    = true          # "fail:\nfree(foo);" vs "fail: free(foo);"
# nl_after_return               = TRUE;
# nl_before_case        = 1


#
# Source code modifications
#

mod_paren_on_return     = remove        # "return 1;" vs "return (1);"
#mod_full_brace_if      = remove        # "if (a) a--;" vs "if (a) { a--; }"
mod_full_brace_if_chain = true
mod_full_brace_for      = remove        # "for () a--;" vs "for () { a--; }"
mod_full_brace_do       = remove        # "do a--; while ();" vs "do { a--; } while ();"
mod_full_brace_while    = remove        # "while (a) a--;" vs "while (a) { a--; }"
mod_full_brace_nl       = 3             # don't remove if more than 3 newlines


#
# inter-character spacing options
#

sp_return_paren         = force         # "return (1);" vs "return(1);"
sp_sizeof_paren         = remove        # "sizeof (int)" vs "sizeof(int)"
sp_before_sparen        = force         # "if (" vs "if("
sp_after_sparen         = force         # "if () {" vs "if (){"
sp_after_cast           = remove        # "(int) a" vs "(int)a"
sp_inside_braces        = force         # "{ 1 }" vs "{1}"
sp_inside_braces_struct = force # "{ 1 }" vs "{1}"
sp_inside_braces_enum   = force # "{ 1 }" vs "{1}"
sp_assign               = force
sp_arith                = force
sp_bool                 = force
sp_compare              = force
sp_assign               = force
sp_after_comma          = force
sp_func_def_paren       = remove        # "int foo (){" vs "int foo(){"
sp_func_call_paren      = remove        # "foo (" vs "foo("
sp_func_proto_paren     = remove        # "int foo ();" vs "int foo();"


#
# Aligning stuff
#

align_with_tabs         = TRUE          # use tabs to align
align_on_tabstop        = TRUE          # align on tabstops
# align_keep_tabs               = true
align_enum_equ_span     = 4             # '=' in enum definition
# align_nl_cont         = TRUE
# align_var_def_span    = 2
# align_var_def_inline  = TRUE
# align_var_def_star    = FALSE
# align_var_def_colon   = TRUE
# align_assign_span     = 1
align_struct_init_span  = 3             # align stuff in a structure init '= { }'
align_right_cmt_span    = 3
# align_pp_define_span  = 8;
# align_pp_define_gap   = 4;

cmt_star_cont = true

# indent_brace          = 0

nl_func_paren = remove
nl_func_decl_start = remove
nl_func_decl_empty = remove
nl_func_decl_args = remove
nl_func_decl_end = remove
sp_inside_paren = remove
sp_inside_square = remove
sp_inside_paren_cast = remove
sp_inside_fparen = remove
sp_inside_sparen = remove
sp_paren_paren = remove
sp_before_ptr_star = force
sp_after_ptr_star = remove
sp_between_ptr_star = remove
align_func_params = true
align_var_struct_span = 6

eat_blanks_after_open_brace   = true
eat_blanks_before_close_brace = true
pp_indent = remove

nl_start_of_file   = remove
nl_end_of_file     = force
nl_end_of_file_min = 1
nl_comment_func_def = 1

ncrmnt ★★★★★
()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от unixwz

K&R конечно же

Сторонники этого стиля обычно используют отступы в восемь пробелов? Однако большинство программистов обычно полагают, что преимущество такого стиля состоит в экономии вертикального пространства. Оборотной стороной такого преимущества является тот факт, что может оказаться трудно найти символ {, спрятанный в конце строки.

for(j=0; j<MAX_LEN; j++) {
........foo();
}

Hufoc
() автор топика
Ответ на: комментарий от mittorn

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

kachsheev ★★★
()
Ответ на: комментарий от ncrmnt
 indent_with_tabs        = 2

http://uncrustify.sourceforge.net/default.cfg

# 2=indent and align with tabs, using spaces when not on a tabstop

Выравнивать табами, добивая пробелами — эталонное сладкохлебоедство.

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

Строки 40-47 демонстрируют отсос любителей применять табы для чего-то кроме отступов:

#define FILE_BUFF_SIZE		2048
#define PAK_LOAD_OK			0
#define PAK_LOAD_COULDNT_OPEN		1
#define PAK_LOAD_BAD_HEADER		2
#define PAK_LOAD_BAD_FOLDERS		3
#define PAK_LOAD_TOO_MANY_FILES	4
#define PAK_LOAD_NO_FILES		5
#define PAK_LOAD_CORRUPTED		6

(там есть и другие места, где «форматирование» табами поехало)

utf8nowhere ★★★
()

«Формат стиля» vs «стиль форматирования». Почувствуй разницу, ТС.

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