2014-10-05 2 views
-7

Может кто-нибудь объяснить мне, пожалуйста, почему здесь:Где отформатировать/разместить «{» в C?

void 
st_clear(st_table *table) 
{ //1 a new line 
    register st_table_entry *ptr, *next; 
    st_index_t i; 

    if (table->entries_packed) { //2 the same line 
     table->num_entries = 0; 
     table->real_entries = 0; 
     return; 
    } 

    for (i = 0; i < table->num_bins; i++) { 
     ptr = table->bins[i]; 
     table->bins[i] = 0; 
     while (ptr != 0) { 
     next = ptr->next; 
     st_free_entry(ptr); 
     ptr = next; 
     } 
    } 
    table->num_entries = 0; 
    table->head = 0; 
    table->tail = 0; 
} 

в одном случае они покинули { ту же линию, в то время как в другом, поставленном на новую строку?

https://github.com/ruby/ruby/blob/1b5acebef2d447a3dbed6cf5e146fda74b81f10d/st.c

Я не знаю, в C есть не определенное соглашение об именах, как и в большинстве других языков, но { в рамках одного проекта всегда должен быть ставить либо на новой линии или оставить на той же линии, ,

+5

Это полностью стилистический. –

+0

@ T.C., Я знаю. Но там должна быть последовательность. –

+0

«в рамках одного проекта всегда должно быть либо на новой строке, либо на той же строке» - нет, это не так. Компилятору все равно. Люди могут, но, видимо, этого не делают. –

ответ

4

В стандарте C нет ничего, что требует размещения токенов при условии, что они находятся в правильном порядке. В самом деле:

i 

    = j 

++; 

это совершенно нормален, синтаксис мудрого, несмотря на его серьезно уродливое форматирование:

i = j++; 

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

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

0

Как вы отметили, это вполне допустимо и действительно является частью многих общих стилей отступов, например. K & R-style (Википедия имеет summary некоторых популярных стилей).

Зачем это делать в этом случае, трудно ответить без указания стиля кодирования (с некоторым обоснованием) для этого кода, но преимущество в том, что существует определение функции тогда и только тогда, когда есть соответствие линии ^[{], поэтому их можно легко найти. (Функции не гнездятся в стандартном C, так что { всегда в первой колонке, и (видимо) не любые другие конструкции, где { находится в первом столбце в этом стиле кодирования конвенции.)

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

{ Ввод определения функции отличается от других фигурных скобок в начале составного оператора, поскольку он необходим (тела функций являются единственным случаем, когда составной оператор не может быть заменен каким-либо другим утверждением, int foo(void) return 5;, для пример, недействителен). Это может несколько оправдать несогласованность (если вы считаете это такой) с размещением других фигурных скобок в разных обстоятельствах.