Конкретная проблема стиля программирования C? - PullRequest
0 голосов
/ 10 ноября 2009

Я много слышал о важности стиля программирования. На мой взгляд, с отступом легко справиться. Но другие вещи меня сильно расстроили. Рассмотрим конкретный пример, демонстрирующий использование inet_makeaddr.

/* demonstrate the use of host address functions */
#include <stdio.h>
#include <arpa/inet.h>
#include <netinet/in.h>

int
main(void)
{
 /* inet_makeaddr demo */
 uint32_t neta = 0x0a3e5500;
 uint32_t hosta = 0x0c;

 struct in_addr alla = inet_makeaddr(neta, hosta);

 printf("makeaddr of net: %08x and host: %08x = %08x\n", 
    neta, hosta, alla);

 return 0;
}

Кто-то может захотеть написать следующее:

 uint32_t neta;
 uint32_t hosta;
 struct in_addr alla;

 neta = 0x0a3e5500;
 hosta = 0x0c;
 alla = inet_makeaddr(neta, hosta);

Тогда другие всегда могут инициализировать переменную, когда она определена:

 uint32_t neta = 0;
 uint32_t hosta = 0;
 struct in_addr alla = {0};

 neta = 0x0a3e5500;
 hosta = 0x0c;
 alla = inet_makeaddr(neta, hosta);

Является ли один из них лучше, чем другие, или это просто личный вкус?

Ответы [ 5 ]

5 голосов
/ 10 ноября 2009

Я думаю, что первый из трех примеров является лучшим: второй пример имеет неинициализированные переменные, а третий пример имеет переменные, инициализированные бессмысленным (нулевым) значением. Я предпочитаю инициализировать переменные (со значимым значением), как только я определю их (чтобы у меня не было неинициализированных переменных). См. Также Должна ли инициализация локальной переменной быть обязательной?

0 голосов
/ 10 ноября 2009

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

Хотя, если вы собираетесь инициализировать свои переменные, вероятно, лучше всего сделать это со значением, которое что-то значит для вашего алгоритма, иначе вы ничего не решаете, просто меняете способ поведения, когда вы создать ошибку.

0 голосов
/ 10 ноября 2009

Лично я определяю переменные, близкие к вызову функции, если они интересны для вызова функции. Если это неинтересная переменная, я обычно определяю ее в объявлении.

0 голосов
/ 10 ноября 2009

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

0 голосов
/ 10 ноября 2009

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

...