- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
/**
* Копирует первое большое число во второе.
*
* @param a большое число приемник
* @param b большое число источник
* @param n длинна больших чисел в словах
*
* @return FALSE - четное, TRUE - нечетное
*/
void int_copy(uword_t *a, const uword_t *b, const int n)
{
memcpy(a, b, sizeof(a[0]) * n);
}
guest 12.10.2009 12:08 # +1
guest 12.10.2009 12:39 # 0
guest 12.10.2009 12:56 # +3
guest 12.10.2009 12:58 # +5
ДОКОЛЕ!? Сколько можно это слово с двумя 'н' писать?
Barmaglot 12.10.2009 13:12 # −3.2
Что же касается других аспектов кода: конечно, не хватает проверок и по моему мнению комментарии - это зло. Особенно как в приведенном фрагменте. Код не должен требовать комментариев для того, чтобы его можно было прочесть. Отсюда и забытый return в шапке функции. Почему не писать так:
void copy(uword_t* destination, const uword_t* source, const int elements_count)
{
ASSERT(destination!=NULL);
ASSERT(source!=NULL);
memcpy(destination, source, sizeof(destination[0]) * elements_count);
}
Достаточно того, что приходится поддерживать код. Не заставляйте людей поддерживать еще и комментарии.
pvkr2 12.10.2009 14:02 # +1
А если сущности будут не elements_count, а elliptic_curve_over_galois_field_gf2m_ct x к примеру?
ASSERT тоже темный)
Barmaglot 12.10.2009 19:29 # 0
Вероятно, не понял вопроса. А зачем вообще пишутся функции? Что не устраивает в названиях?
Пример:
typedef struct
{
unsigned int low;
unsigned int high;
} uword_t;
uword_t* some_data, some_another_data;
...
copy(some_data, some_another_data);
> А если сущности будут не elements_count, а elliptic_curve_over_galois_field_gf2m_ct x к примеру?
значит пора выспаться :-)
Такие сущности исчезают при декомпозиции кода. Тип объекта (структуры, сущности) не нужно указывать в имени.
> ASSERT тоже темный)
дык, а каким ему быть? Тут многое зависит от проекта, платформы и режимов тестирования. Я обычно пишу макрос наиболее подходящий для проекта. Суть в том, что проверка должна быть
gavenkoa 13.10.2009 09:29 # 0
pvkr2 13.10.2009 09:36 # +1
Я к тому что можно использовать memcpy вместо int_copy, последняя ничего нового не привносит.
> А если сущности будут не elements_count, а elliptic_curve_over_galois_field_gf2m_ct x к примеру?
Это я к тому что переменные можно и покороче называть (elements_count -> n,len,cnt,count,size).
>ASSERT тоже темный)
Это я к тому что вы не проверяете на (void*)1, (void*)2,..., ИМХО пригодилось бы:)
Barmaglot 13.10.2009 16:01 # +1
Кроме одного маленького отличия: строгой типизации аргументов. То есть небольшую часть работы по проверке ошибок автор переложил на компилятор. Это плюс.
> Это я к тому что переменные можно и покороче называть
Можно. По русски тоже можно писать и говорить сокращениями.
"Краткость с. т."
Вопрос зачем. Компилятор не понимает длинных имен?
Вот, например, можно назвать сущность elliptic_curve_over_galois_field_gf2m_ct _x
x
Это сделает код более читаемым? ИМХО косметика над говнокодом. Такие сущности просто не должны появляться. А говнокод - должен выглядеть говнокодом. Это просто :-)
pvkr2 13.10.2009 18:46 # +1
2) Думаю мы расфлудились,
- я за краткость, но в разумной степени;
- я за комментарии - это сугубо моё мнение и никому его не навязываю, главное чтобы код был читабельным.
Barmaglot 14.10.2009 13:41 # +1
guest 12.10.2009 18:38 # 0
Вот лучше сделать проверку на то, чтобы интервалы в памяти не пересекались.
Barmaglot 12.10.2009 19:34 # 0
> Нахрена нужны проверки указателя на NULL?
например так: copy(some_data, NULL, 0);
Думаешь так сойдет? ;-)
Да и в релизе можно придумать поведение логичней рантайм еррора )
guest 12.10.2009 22:16 # 0
Чтение/запись по нулевому адресу в дебаге всегда отлавливается средой.
pvkr2 13.10.2009 09:40 # 0
Imperfectum 13.10.2009 09:11 # +3
1) const int size;
2) sizeof(a[0]) если тип данных фиксированный;
3) да и вообще зачем такая функция?
А то умничают тут по поводу проверок и т.п., может вам еще проверять температуру тела при компиляции кода? Ведь если повышенная, то вероятность ошибочности вашего кода велика О_О
Imperfectum 13.10.2009 09:14 # +1
bool is_true (bool a)
{
if (a)
return true;
else
return false;
}
Так, вдруг пригодится...
guest 14.10.2009 20:54 # 0
guest 19.10.2009 18:31 # 0
guest 19.10.2009 18:34 # 0
guest 19.10.2009 18:37 # 0
А если a=false, то с некоторой вероятностью =false, а может =true. Кто знает. Пути программистов неисповедимы...
Imperfectum 21.10.2009 12:45 # 0
guest 22.10.2009 16:54 # 0
Imperfectum 21.10.2009 12:43 # 0
Кто будет использовать такую функцию и для чего?
Если это написано на полном серьезе, то вы явно не на тот сайт зашли.
xaionaro 15.11.2009 11:34 # −1
xaionaro 15.11.2009 11:36 # 0
guest 19.10.2009 18:47 # −1
guest 07.11.2009 21:56 # 0
guest 18.11.2009 15:32 # 0
guest 13.11.2009 09:22 # −1
Для хранения длинных чисел, вероятно, используются массивы, поэтому куда быстрее скопировать участок памяти, чем в цикле копировать отдельные цифры.
Хотя, блядь, ещё быстрее (и намного быстрее) было бы поменять указатели массивов.
crox 11.03.2010 11:28 # 0
говнокодер детектед :D