Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Соколиный глаз
C#
280 / 220 / 123
Регистрация: 25.07.2014
Сообщений: 4,181
Записей в блоге: 6
Завершенные тесты: 4
1

Какие рекомендации по улучшению оформления кода вы можете предложить?

02.11.2018, 08:14. Просмотров 258. Ответов 5
Метки нет (Все метки)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <stdio.h>
#include <malloc.h>
 
// Замечания по оформлению:
// 1) Ко именам типов структур добавляется суффикс "_t".
// 2) Ко именам функций по обработке структур добавляется суффикс в виде имени типа структуры без "_t".
// 3) Число в конце именования функции указывает количество входных параметров (при единственном параметре цифра 1 не указывается).
// 4) Поля структур, имеющие префикс "__" не рекомендуются к непосредственному использованию. Для доступа к ним используйте указанные в комментариях функции.
 
// Узел очереди.
struct node_t
{
  int value;
  struct node_t* next;
};
 
// Создаёт новый узел с указанным значением.
struct node_t* new_node2(int value, struct node_t* next)
{
  struct node_t* result = (struct node_t*)malloc(sizeof(struct node_t));
  result->value = value;
  result->next = next;
  return result;
}
 
// Создаёт новый узел с указанным значением.
struct node_t* new_node(int value)
{
  return new_node2(value, NULL);
}
 
// Создаёт новый узел с значением 0.
struct node_t* new_node0()
{
  return new_node(0);
}
 
// Выводит значение узла.
void print_node0(struct node_t* target)
{
  printf("%i", target->value);
}
 
// Выводит значение узла и переходит на новую строку.
void print_line_node0(struct node_t* target)
{
  printf("%i\n", target->value);
}
 
// Очередь.
struct queue_t
{
  struct node_t* __head; // [Для доступа использовать get_head_queue.]
  struct node_t* __tail; // [Для доступа использовать get_tail_queue.]
  int __count; // [Для доступа использовать get_count_queue.]
};
 
// Возвращает голову очереди.
struct node_t* get_head_queue(struct queue_t* target)
{
  return target->__head;
}
 
// Возвращает хвост очереди.
struct node_t* get_tail_queue(struct queue_t* target)
{
  return target->__tail;
}
 
// Возвращает количество элементов в очереди.
int get_count_queue(struct queue_t* target)
{
  return target->__count;
}
 
// Создаёт новую очередь.
struct queue_t* new_queue0()
{
  struct queue_t* result = (struct queue_t*)malloc(sizeof(struct queue_t));
  result->__head = NULL;
  result->__tail = NULL;
  result->__count = 0;
  return result;
}
 
// Добавляет новый элемент в конец очереди.
void enqueue_queue2(struct queue_t* target, int x)
{
  if (target->__count == 0)
    target->__head = target->__tail = new_node(x);
  else
  {
    target->__tail->next = new_node(x);
    target->__tail = target->__tail->next;
  }
  target->__count++;
}
 
// Извлекает элемент с начала очереди и возвращает его значение.
int dequeue_queue(struct queue_t* target)
{
  if (target->__count > 0)
  {
    int result = target->__head->value;
    target->__head = target->__head->next;
    if (target->__count == 1)
      target->__tail = NULL;
    target->__count--;
    return result;
  }
}
 
// Выводит элементы очереди через пробел.
void print_queue(struct queue_t* target)
{
  struct node_t* current = target->__head;
  while (current != NULL)
  {
    printf("%i ", current->value);
    current = current->next;
  }
}
 
// Выводит элементы очереди через пробел и переходит на новую строку.
void print_line_queue(struct queue_t* target)
{
  print_queue(target);
  printf("\n");
}
 
int main(void)
{
  struct queue_t* q = new_queue0();
  for (int i = 0; i < 10; i++)
    enqueue_queue2(q, i);
  print_line_queue(q);
  printf("%i\n", get_count_queue(q));
 
  for (int i = 0; i < 10; i++)
    printf("%i\n", dequeue_queue(q));
  printf("%i\n", get_count_queue(q));
  return 0;
}
Какие рекомендации по улучшению оформления кода вы можете предложить?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2018, 08:14
Ответы с готовыми решениями:

Есть ли какие-то общие рекомендации по организации кода на Си?
Здравствуйте! Есть следующий вопрос. Есть ли какие-то общие рекомендации по организации кода,...

Рекомендации по улучшению кода
class Loader { public DataSet _data = null; public int...

какие альтернативы GOTO можете предложить?
ситуация следующая. есть главное меню: 1. Список Блюд 2. Список напитков 3. Выход При...

Какие альтернативы goto можете предложить?
ситуация следующая. есть главное меню: 1. Список Блюд 2. Список напитков 3. Выход При...

Дать рекомендации по улучшению проекта
Уважаемые разработчики! Прошу кинуть ваш профессиональный взгляд на сей маленький проект. Его...

5
CoderHuligan
833 / 570 / 206
Регистрация: 30.06.2015
Сообщений: 3,182
Записей в блоге: 28
02.11.2018, 11:40 2
2 подчёркивания однозначно не рекомендуется.
цифра количества параметров вообще лишняя, так как и так хорошо видно сколько параметров принимает функция. Избыточность только отвлекает внимание.
0
Соколиный глаз
C#
280 / 220 / 123
Регистрация: 25.07.2014
Сообщений: 4,181
Записей в блоге: 6
Завершенные тесты: 4
02.11.2018, 17:36  [ТС] 3
CoderHuligan, цифры использовал, так как нет перегрузки функций в Си.
0
sty4ent
44 / 20 / 14
Регистрация: 23.10.2018
Сообщений: 101
03.11.2018, 01:47 4
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
CoderHuligan, цифры использовал, так как нет перегрузки функций в Си.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
int f_i(int x) {
    printf("f_i\n");
    return x;
}
 
double f_d(double x) {
    printf("f_d\n");
    return x;
}
 
#define f(x)      \
    _Generic((x), \
    int: f_i,     \
    double: f_d   \
    )(x)          \
 
int main() {
    f(1);
    f(1.0);
    return 0;
}
0
Peoples
Эксперт С++
1427 / 896 / 773
Регистрация: 06.02.2016
Сообщений: 2,350
Записей в блоге: 19
Завершенные тесты: 5
03.11.2018, 10:23 5
Соколиный глаз, Есть Generic в стандарте C99
1
sharpey
374 / 164 / 37
Регистрация: 21.09.2008
Сообщений: 551
04.11.2018, 19:30 6
Соколиный глаз, есть прекрасная монография Столярова Андрея Викторовича "Оформление программного кода. Методическое пособие". Настоятельно рекомендую к прочтению, осмыслению и активному применению.
2
04.11.2018, 19:30
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2018, 19:30

Нужна оценка и возможные рекомендации по улучшению ПК.
Нужна оценка и возможные рекомендации по улучшению ПК. Системная плата: Тип ЦП ...

Какой можете предложить монитор!
Подскажите монитор для игр (бюджет 50к) буду благодарен за помощь :)

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.