Какой лучший способ написать комментарии в C? - PullRequest
5 голосов
/ 07 сентября 2011

В C мы можем комментировать двумя способами:

1>

/* this is one way */

2>

// this is 2nd way

В чем разница между двумя?
Является ли одно лучше другого?

или

оба имеют одинаковое влияние и не имеют различий в компиляции или обработке на любой платформе?

Редактировать: Особенно писать код длявстроенный

Ответы [ 8 ]

8 голосов
/ 07 сентября 2011

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

5 голосов
/ 08 сентября 2011

Одна (возможно, теоретическая) причина не для использования // комментариев в том, что они не поддерживаются в C90. Это правда, что большинство, возможно, все современные компиляторы C поддерживают // комментарии, даже если они не поддерживают остальную часть C99, но разные компиляторы поддерживают разные подмножества C99.

Любой компилятор, который поддерживает C90, отклонит (или хотя бы предупредит) о // комментариях, если вы вызовете его в режиме, соответствующем C90.

Если вы фанатично относитесь к переносимости и хотите, чтобы ваш код компилировался с любым компилятором C, то вам следует скомпилировать его в режиме, соответствующем C90 - это означает, что комментарии // будут отклонены. Вы можете включить расширения или частичное (или даже полное) соответствие C99, но тогда вы также включите другие функции C99 - и ваш компилятор не будет предупреждать вас о other Специфичные для C99 функции, которые вы можете использовать случайно.

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

Например, gcc поддерживает как комментарии //, так и long long (а также ряд других функций C99); включение // комментариев в gcc отключение диагностики для long long.

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

5 голосов
/ 07 сентября 2011

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

Это не имеет значения для процесса компиляции.

3 голосов
/ 08 сентября 2011

Если вам нужно выполнить поиск кода, у вас будут преимущества с однострочным комментарием, используемым для каждой строки, даже если вы закомментируете блок (STRG + Shift + 7 в Eclipse). Сокращенный код, в котором была найдена поисковая фраза, отображается с символом //. Результат не может привести к недоразумениям из-за не отображаемого многострочного комментария.

1 #define MY_COUNTER 42
2 if( MY_COUNTER == index )
3 {
4     tempVar = calcSomething();
5     doThis();
6 //    tempVar = MY_COUNTER;
7     doThat();
8 }

grep результат:
1 #define MY_COUNTER 42
2 if (MY_COUNTER == index)
6 // tempVar = MY_COUNTER;

В приведенном выше коде, который вы непосредственно видите в результате поиска grep (ищите MY_COUNTER), строка 8 закомментирована.

1 #define MY_COUNTER 42
2 if( MY_COUNTER == index )
3 {
4     tempVar = calcSomething();
5     doThis();
6 /*    
7     tempVar = MY_COUNTER;
8 */
9     doThat();
8 }

Здесь вы не видите закомментированную строку:
1 #define MY_COUNTER 42
2 if (MY_COUNTER == index)
7 tempVar = MY_COUNTER;

1 голос
/ 07 сентября 2011

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

Это не скомпилируется:

/*

/*printf("foo");*/
printf("bar");

*/

Но это нормально:

/*

//printf("foo");
printf("bar");

*/
0 голосов
/ 07 сентября 2011
/* this is one way */

в основном используют это для блочного комментария и

//

для одной строки.

Как в случае, который лучше.

//

этот гарантированно работает на любом компиляторе.

0 голосов
/ 07 сентября 2011
  1. Это способ легко создавать многострочные комментарии
  2. Вы можете комментировать только строки, используя этот способ комментирования.

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

0 голосов
/ 07 сентября 2011

Точно так же, как вы сказали: оба имеют одинаковое влияние и не имеют различий в компиляции или обработке на любой платформе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...