vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2020-04-11 02:39 pm

Си++ вам не Си

В частности, передавать массивы в качестве параметров лучше всего по ссылке:
void foo(int (&array)[10])
{
    //...
}

Такую процедуру не удастся вызвать с параметром - массивом другого, неподходящего размера.
Если же написать, как в Си:
void bar(int array[10])
{
    //...
}

то такой параметр фактически обрабатывается как "int *array", и никакой проверки размера массива не делается.
vlkamov: Рембрандт. Автопортрет с широко открытыми глазами. (Default)

[personal profile] vlkamov 2020-04-16 06:59 am (UTC)(link)
Howdo - это само собой.

Просто я люблю, чтобы код был читабелен даже козе, например
https://vlkamov.livejournal.com/685130.html

Если массив всегда из 10 элементов, то 10-ка должна быть прописана в коде функции.
Тогда ею вообще не следует захламлять вызов и объявление, например

void bar(int array[])
или для ясности
void bar(int array_10[])

Но если массив то там то сям разной длины, функции следует сообщить, сколько чего, например
void bar(int array[], 10)
...
void bar(int array[], 22)

Хотя не уверен, что компилятор напрямую скушает такие конструкции.
Edited 2020-04-16 07:05 (UTC)
pappadeux: (Default)

[personal profile] pappadeux 2020-04-17 03:55 am (UTC)(link)
> void bar(int array[10])
> или для ясности
> void bar(int array_10[])

так проблема в том, что человеку, возможно, это и помогает, а железяке - нет. Нет возможности громко закричать если юсер запулил туда массив из 9ти элементов.

> void bar(int array[], 22)


это Фортран с точки зрения С