169 похожих чатов

Парни, а есть бэк на Си?

37 ответов

85 просмотров

да

nikita css-ㅤ Автор вопроса
NonProgger
да

на нем норм бэк или как у линуксяши с плюсами, где костыль на костыле?

supabase

Бэк? Может быть ты имел в виду Бэг? Ну, структура данных такая... Или бык? Самец коровы? Бэк это спина, "парни, а есть спина на Си?" - не имеет смысла...

Стикер

λᵃᵐ
полагаю, что бек - сокращение бекенд

Конец спины? То есть жопа? "Есть жопа на С? " - подходит! Есть жопа, почти весь язык одна сплошная жопа! Массив передать в функции нельзя, из функции вернуть массив тоже нельзя, локальных функций нет, printf параметры не проверяет, да и вообще одно сплошное UB вокруг!

На любом языке можно сделать бэк

Видел на асм даже

Ilya Zviagin
Конец спины? То есть жопа? "Есть жопа на С? " -...

1. Льзя (через указатель + размер/количество элементов) 2. Льзя (выделить из кучи и вернуть указатель) 3. Нормальные компиляторы проверяют вызов printf 4. Нам платят за избегание UB. Нормальный язык.

Влад Каверов
1. Льзя (через указатель + размер/количество элеме...

нельзя нельзя САМА ФУНКЦИЯ не проверяет аааа, нууу! Вывод: Плохо знаешь язык!

Ilya Zviagin
Конец спины? То есть жопа? "Есть жопа на С? " -...

Так, си - это жопа, значит си++ это жопа и два кочегара. Массив передать в функции можно. Из функции тоже массив вернуть можно. Локальные функции для файла есть, локальные функции для скоупа других функций есть в расширениях. Любой уважающий себя компилятор проверяет параметры принтфа. А уб и в плюсах есть, выходит, плюсы это одно уб чуть поменьше, вложенное в другое уб побольше.

Денис Rabbit
Так, си - это жопа, значит си++ это жопа и два коч...

Ну что вы как маленькие нельзя передать массив функцию можно передать указатель на массив это не одно и то же

Ilya Zviagin
Ну что вы как маленькие нельзя передать массив фун...

struct array { uint8_t values[32]; }; void func(struct array arg) { for (size_t i = 0; i < sizeof(arg); i++) { uint8_t byte = arg.values[i]; ... } }

Влад Каверов
struct array { uint8_t values[32]; }; void func...

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

Ilya Zviagin
Ну что вы как маленькие нельзя передать массив фун...

Ооо, ну это ты зря, помнишь ведь, что такое массив? Верно, структура данных, обладающая тремя инвариантами - линейное целочисленное индексирование в заданном диапазоне по элементам определённого типа. А теперь думаем, чего же не хватает указателю - именно, интерфейса для проверки диапазона, а также размера. Смекаешь? Так можно ли передавать массив в функцию?)) P.S. вариант выше, к сожалению, не жизнеспособен, т.к. для каждого массива определённого типа и определённой длины требуется собственная структурка.

Sam Semenov
Костылем попахивает. Хотя, можно ввести еще поле с...

Just4lulz же. А вот struct buffer_t { uint8_t *array; size_t length; size_t capacity; }; у меня крутится в проде.

Влад Каверов
Just4lulz же. А вот struct buffer_t { uint8_t *a...

Вот тут более осмысленно. В первом примере массив был определеннлй длины. Тут же передается указатель и инфа о длине. В ядре линуха так тоже работает. Встречал такие констрцкции.

Ilya Zviagin
Это структура , не массив

Но "физически"-то массив передан в функцию. %)

Влад Каверов
Но "физически"-то массив передан в функцию. %)

вы чё там все такие умные, а чего тогда строем не ходите ? Я вам ПРО ЯЗЫК говорю, а не про уловки как его использовать. ВСЕ параметры в функции в С передаются ТОЛЬКО ПО ЗНАЧЕНИЮ. И возвращаются из функции в виде значения функции только по значению. Кроме массивов, которые ни передать в функцию, ни вернуть невозможно.

Ilya Zviagin
вы чё там все такие умные, а чего тогда строем не ...

Вот только встречный вопрос - а на кой нужна возможность передачи массива по значению?

Влад Каверов
Вот только встречный вопрос - а на кой нужна возмо...

чтобы передавать массив в функцию и не объяснять глупым студентам ЧТО ТАК ДЕЛАТЬ НЕЛЬЗЯ

Влад Каверов
Вот только встречный вопрос - а на кой нужна возмо...

Вообще, какая проблема передать массив по значению ? И вернуть ? СТРУКТУРУ с массивом - можно. А сам массив - нельзя. Ну чё за бред ?

Ilya Zviagin
Вообще, какая проблема передать массив по значению...

Ну ты же бред пишешь! Какая проблема? Ну наверное проблема в том, что никто не хочет копипастить тонну данных только ради того, чтобы передать их в функцию. Это было ещё в 72 году очевидной. Если вопрос в том, почему нельзя было сохранять инвариант размера при передаче в функцию, то дело всего лишь в унификации, т.к. гораздо удобнее написать функцию, которая работает с любым массивом, а не с массивом конкретной длины, к тому же, даже если такое может понадобиться, в си есть квалификатор статик для размера массива, который будет следить за корректность передаваемого массива в функцию (>=).

Ilya Zviagin
Вообще, какая проблема передать массив по значению...

Осталось, завести шарманку про рестрикт и план на день выполнен.

Денис Rabbit
32 * sizeof(int)

У меня там uint8_t. Так что 32 байта.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта