Программирование

Ответить в тред Ответить в тред
C Programming Language #67 /clang/ Аноним # OP 08/01/21 Птн 20:41:22 19049541
C Propaganda.jpg 1965Кб, 2000x2610
2000x2610
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь https://ideone.com/ https://wandbox.org/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [​i​] или ∗.

Что читать:

- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- Черновик стандарта ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2479.pdf (февраль, с диффами)
- Последний черновик ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2583.pdf (октябрь)

Чем компилировать:

- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.

Что еще почитать:

http://c-faq.com/
FAQ из comp.lang.c. Древний, но все еще актуален.

Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.

Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).

Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.

Ben Klemens "21st Century C: C Tips from the New School" (2012)

Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)

Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)

MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard и http://web.archive.org/web/20190213011655/homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf

Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C

https://github.com/kozross/awesome-c

Онлайн-утилиты:

- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.

Прошлые треды:

- №64: https://arhivach.net/thread/623166/
- №65: https://arhivach.net/thread/637465/
- №66: https://arhivach.net/thread/637469/ >>1873113 (OP)
Аноним 08/01/21 Птн 21:04:45 19049702
>>1904813 →
>ch = st;
Ты пишешь значение байта (т.е. 0x20) в адрес. Если нужно в ch зафиксировать адрес то: ch = st + i * sizeof(char);

И возможно далее fputs(0x20, stdout) приводит к сигсгеву. Асло если ты хочешь "поймать" правый крайний пробел, то очевидно лучше начинать с конца массива.

Аноним 08/01/21 Птн 21:07:48 19049733
>>1904970
>ch = st + i * sizeof(char);
или же ch = &st;
Аноним 08/01/21 Птн 21:19:06 19049794
>>1904970
В таких тонкостях памяти процесса я ещё не разбирался (и не особо знаю где инфу взять).
>ch = st + i * sizeof(char)
А зачем i + sizeof есть квадратные скобки могут разыменовать?
>Асло если ты хочешь "поймать" правый крайний пробел
По Прате надо было первый попавшийся.

>>1904973
>или же ch = &st;
Так это же вроде взятие адреса самой переменной указателя, а не значения по нему хранящегося.
Аноним 08/01/21 Птн 21:31:33 19049855
>>1904979
>Так это же вроде взятие адреса самой переменной указателя
А, блять, так и надо было.
Аноним 08/01/21 Птн 21:38:39 19049906
>>1904979
Макаба зачем-то съедает квадратные скобки.
Должно так:
ch = &st(i);
Только скобки разумеется квадратные. Так ты берешь адрес байта с пробелом. Без амперсанда - просто записываешь значение (0х20) этого байта в возвращаемый адрес.

>По Прате надо было первый попавшийся.
Тогда после лайна с получением адреса первого пробела напиши break; И как вариант - https://pastebin.com/wK2rePHk

Я правда так и не понял, чем тебе strchr() не угодил.
Аноним 08/01/21 Птн 21:49:15 19050057
>>1904990
>Я правда так и не понял, чем тебе strchr() не угодил.
Угодил, на нём и переписал, просто было интересно в чём дело - в долбёжке в глаза.
Аноним 08/01/21 Птн 22:23:33 19050558
не заебало пердолиться?
Аноним 08/01/21 Птн 23:40:41 19051329
Меня вот заинтересовало почему бы просто не использовать типы из Rust в C? Они ведь действительно очень лаконичны и могуть быть определены, если typedef'нуть через громоздкие аналоги в inttypes.h? Ну и за'define'ить спецификаторы для scanf и printf. По типу https://pastebin.com/3hPbqxur

Как людям норм работать с int при написании целых ОС, когда там то 2 байта, то 4? Или вся суть заключается в том, чтобы взять самый быстрый тип int (обычно) и от него плясать беря чуть меньше или чуть больше уже в зависимости от ситуации?
Аноним 09/01/21 Суб 01:40:29 190523710
>>1905132

Люди давно придумали stdint.h: uint8_t, uint64_t и прочее. А еще в ядре определены всякие __u8

Раст тут не новатор нихуя. Хотя мне тоже кажется странным килотонны UB закладывать в стандарт языка изначально.
Аноним 09/01/21 Суб 01:41:06 190523811
>>1905237

Самофикс: разная размерность типов - не UB, а просто неопределенность, зависящая от платформы, разумеется.
Аноним 09/01/21 Суб 15:52:28 190553912
>>1904954 (OP)
Есть желающие заработать 500р? Меня заебало мучаться с этим языком, хочу сдать и забыть уже, ибо это 1 предмет, все остальное мы пишем на человеческих языках.

Нужно на СИ написать функцию, аналог линуксовой команды find без использования system()
Нужно чтобы эта функция проходила по каталогу, который передан как параметр, выглядеть должна вот так
void find(char path, char type, charname){...}
Соответственно к примеру, find("Folder/", "-name", ".txt)" должна находить все файлы в Folder с расширением .txt. и выводить их в консоль. обозначает все файлы, find ("Folder/", "-type d", "t*"), должна найти в Folder все каталоги начинающиеся с t и вывести в консоль.

А , да, без всяких конченных либ, без conio.h, windows.h и тд, чисто либы, которые заложены в линуксовой среде так скажем, соответственно, это компилировалось с помощью команды gcc -ansi -Wall -o main main.c к примеру пусть файл называется main

Кому интересно - оставляйте свою телегу. Думаю, для людей, которые любят этот язык тут работы на минут 15-20.
Аноним 09/01/21 Суб 15:56:36 190554413
>>1905539
двач удаляет звездочку, ну вы поняли короч, что 'звездочка.txt' это все файлы с расширением txt
Аноним 09/01/21 Суб 16:23:16 190558814
09/01/21 Суб 16:37:11 190560215
>>1905539
>аналог линуксовой команды find
Хуясе ты ибанат))00)
Find может даже твою мать найти и трахнуть прямо в консоле.
Аноним 09/01/21 Суб 16:43:29 190561016
Снимок экрана 2[...].png 72Кб, 909x664
909x664
>>1905602
Ну это хорошо, в нашем случае версия упрощенная, остальной функционал я сам уж.
>>1905588
спасибо, это решает мою задачу. Так то у меня проект написан, основная ебля была с тем, чтобы искать все файлы, то бишь аналог звездочка.txt реализовать.
Еще вопрос.
Как добиться вывода в таком виде? Просто не очень понимаю, как динамически такие штуки делать.
Аноним 09/01/21 Суб 18:04:05 190568917
>>1905610
Обмазать счетчиками и ифами. Ничего сложного.
Аноним 10/01/21 Вск 03:25:46 190629218
Пишу по-фану файловый менеджер. Соответственно для открытия файлов нужно вызывать nano/vim/etc...

Интересуют 2 вопроса:

Как узнать у системы наличие одного из этих редакторов, кроме поиска бинарника?

Как вызвать запуск бинарника не через system("...").
По второму нарыл только всякие exec* функции, но у них не удаётся разобраться с передачей параметров запуска редактора, а именно пути к файлу. Т.е. я смог вызвать только запуск nano без аргументов.

Буду благодарен за ответ на любой из вопросов!
Аноним 10/01/21 Вск 03:35:16 190629319
>>1906292
В линуксах дефолтный для юзера редактор лежит в переменной окружения EDITOR - его и используй.

А в чём проблема сделать строку с нужными аргументами и вызвать system ("$EDITOR путь-к-хуйне")
Аноним 10/01/21 Вск 08:22:50 190634520
Есть один тупой вопрос, извините: в чистом си можно объявить и инициировать массив с нулями? На стаковерфло пишут, что можно int i[n] = {0}; но у меня компилятор не пропускает.
Аноним 10/01/21 Вск 08:44:38 190634621
>>1906345
У тебя компилятор не пропускает потому скорее потому что n не константа
Аноним 10/01/21 Вск 09:25:55 190634722
>>1906346
n - переменная, в неё значение до этого считается. Прикрутить фор и забивать им нули - решение неочинь, да?
Аноним 10/01/21 Вск 09:28:26 190635023
>>1906347
Ты не можешь без фокусов в си создать массив размером с переменную.
В любом случае почему бы тебе не написать конкретную ошибку компилятора
Аноним 10/01/21 Вск 10:12:34 190635924
>>1906347
memset(arr, 0, sizeof(arr));
Либо же для массива, объявленного где-то и переданного в функцию:
memset(arr, 0, sizeof(×arr) × length);
Аноним 10/01/21 Вск 15:14:52 190648025
>>1905237
В чем Раст новатор так это в удобных названиях для точных типов, мне кажется в C людям просто лень вбивать uint64_t и PRId64, SCNd64, и все просто пользуются long long и прочими стандартными типами. Ну Расту было проще, не надо было поддерживать legacy. Я ждал, что кто-то недостатки перечислит такого подхода как я выше описал, но мне кажется даже если код выкладывать с такими забиндеными Растовыми типами вместо uint64_t, то все даже очевиднее будет, чем разбирать все эти (num)_t в конце, просто u64 и ничего лишнего.
Аноним 10/01/21 Вск 15:15:28 190648126
>>1906480
PRIu64, SCNu64 соответствуют uint64_t фикс*
Аноним 10/01/21 Вск 15:33:20 190649527
>>1906480
Это да, названия отбитые. Тут уже вопросы к дедушкам, какого хрена они не сделали жесткую размерность типов, а нахуевертили черти что.
Аноним 10/01/21 Вск 18:15:14 190669528
>>1906495
>какого хрена они не сделали жесткую размерность типов
Мультиплатформенный язык программирования. У разного железа разные размерности.
А растоговно, как и любая скриптопараша, работает само в себе, в своем манямирке, безотносительно железа, поэтому там и можно сделать одно фиксированное навсегда и навезде.
Аноним 10/01/21 Вск 18:26:39 190670629
>>1906695
Все всегда можно сделать фиксированным. Вопрос в том, как оно будет адресоваться и сколько инструкций потребует для выполнения.
Аноним 10/01/21 Вск 18:31:04 190671230
>>1906695
Хочешь сказать логично из 8 16 32 64 битных репрезентаций сделать не 4 точных типа, а 5 где два из них будут иметь одну размерность на стыке и не будет очевидно до проверки, где это происходит? В стиле либо int = long, либо long = long long. У C просто плохая историческая практика закрепилась из-за того что все добавляли постепенно как тот же long long в C99 и по-разному определяли типы постепенно поднимая размерности. Вне этого подхода сейчас на любом железе будут и 8 16 32 64 битные варианты хранения чисел, кроме совсем экзотического legacy.
Аноним 10/01/21 Вск 18:38:15 190672131
>>1906712
А еще бывает short = int. Тоже прекрасно.
Аноним 10/01/21 Вск 18:44:51 190672832
>>1906712
Людям не нужна разрядность. Людям нужен тип целое число. Например количество аргументов в строке, количество строчек в меню.
Разрядность нужна единицам байтоебов с хитрыми битовыми алгоритмами.
Аноним 10/01/21 Вск 18:49:27 190673333
>>1906728
Людям надо знать, сколько в их целое число поместится. А то можно сделать int, а окажется, что он размером в два байта и хопа - переполнение.
Аноним 10/01/21 Вск 18:52:47 190673834
Аноним 10/01/21 Вск 18:52:47 190673935
>>1906733
Вот когда окажется что тебе нужно большое целое, тогда ты возьмешь long.
Аноним 10/01/21 Вск 18:54:43 190674036
>>1906738
Ну и опять мы возвращаемся к тому, что нужно указание размерности.

>>1906739
Который может быть равен int. Отлично.
Аноним 10/01/21 Вск 23:39:58 190693837
>>1906293
Пасиба, не знал о такой переменной окружения. А exec'ом как пользоваться не знаешь? Пишут, что system уязвим.
Аноним 11/01/21 Пнд 04:40:53 190702738
>>1906712
int это размер соответствующий железу. На 32-битном проце будет 32 бита, и т.п. Это значит, что один и тот же код на любом железе будет аналогичный, т.е. код предсказуемый, ты знаешь какой код пишешь.

Если же int привязать к размеру (возьмем к примеру 32 бит), тогда на 16-битном процессоре, который не может оперировать 32 битными числами, сгенерится лишний код, чтобы выполнить это уже в два прохода, а на 64-битном проце, который всё равно оперирует только 64-битными числами, ты тупо просрешь в никуда половину размера.
И то и другое получается непредсказуемый говнокод. Такое говно никому не нужно.

Повторяю. Си - язык програмиирования железа, это значит, важен код который ты пишешь, ты должен знать какой код пишешь. Если же ты предпочитаешь результат, а какой код там высрется тебе похуй, это будет не программирование (железа), а алгоритмический скриптомакакинг.

Скриптомакака - как плохой начальник. Не знает и не понимает что делают подчиненные и срать хотел. Его волнует только результат "чтобы было сделано, ведь нужно отчитаться перед высшим начальством/заказчиком/инвесторами". А что там у работников, которые это реалдьно делают, емук позуй, какая у них нагрузка, и вообще. Он делает так, если сделано, хорошо, если не сделано, надо нанять других, кто может, а этих уволить.
Вот и у скриптомакак такое же отношение к компьютьеру. Если не работает, нужно выкинуть компьютер и заменить на новый, коиторый сможет.
Аноним 11/01/21 Пнд 04:50:50 190702939
>>1907027
> Если не работает
Если не справляется
Аноним 11/01/21 Пнд 04:54:00 190703040
download (1).jpeg 9Кб, 252x200
252x200
>>1907027
> int соответствует железу
> Си язык программирования железа
> ПУК СРЕНЬК АЛГОРИТМ CRC32 не работает потому что на этом железе int 16 битный
Аноним 11/01/21 Пнд 09:00:08 190705541
Аноним 11/01/21 Пнд 09:42:32 190706042
>>1907030
Что не так?
Шаблон порвало, ньюфак?
Аноним 11/01/21 Пнд 13:37:55 190723543
>>1907027
Разговор не о том, что нефиксированные типы не нужны, а о том, что фиксированные очевидно нужно было делать из коробки, а не костылем сбоку.
Аноним 11/01/21 Пнд 14:10:53 190725944
Размеры типов устанавливает производитель процессора, и естественно руководствуется исключительно прибылью, а не соответствием стандарту.
https://news.ycombinator.com/item?id=3112704
Аноним 11/01/21 Пнд 14:26:43 190728145
>>1907235
В этом языке все реализуется костылем сбоку
Аноним 11/01/21 Пнд 15:39:46 190744346
>>1907235
Пердопроблемы. В винде всю жизнь есть DWORD, BYTE и т.д. Пользуйся наздоровье, всё из коробки.
Аноним 11/01/21 Пнд 15:57:03 190746647
>>1907443
Единственное, что в винде нормально сделали. И то названия всратые. DWORD это сколько, блядь? Раньше это было 16 бит, щас в MSDN написано, что это 32.
Аноним 11/01/21 Пнд 16:07:14 190747448
>>1907466
Так, я обосрался. Это раньше слово было 16 бит, двойное 32, а сейчас слово 32, но DWORD==32 оставлен из соображений совместимости.
Аноним 11/01/21 Пнд 16:14:39 190748849
>>1907466
>DWORD это сколько, блядь?
sizeof() в помощь. А вот пихать цифры в названия типов это плохая идея, слова лучше запоминаются и меньше путаются и мельтешат.
Аноним 11/01/21 Пнд 19:15:08 190763450
>>1907488
u64 плохо запоминается?
Аноним 11/01/21 Пнд 20:20:47 190775651
Как в мейкфайле прописать клинер, чтобы мейк не срал в stderr, типа файл хуйня.с не найдет в директории?
Аноним 11/01/21 Пнд 20:52:12 190779452
Аноним 12/01/21 Втр 01:14:39 190795953
Можно ли вкатитьсы в си без корочки? Что "учи язык" - это понятно. Но си ж низкоуровневый, нужно трогать штуки, опасно близкие к фатальной ошибке. Дипломированное знание устройства компа обязательно или шансы есть? Подводные? Истории успехов?
Аноним 12/01/21 Втр 02:08:09 190797854
>>1907959
Можно запросто, в 80-е 12-летние песдюки вкатывались даже в ассемблер - такие потом игры писали на продажу. Читай книжки, их для начала достаточно.

Что касается подводных.

Пока не поймёшь указатели и представление данных в памяти - в сишники путь тебе закрыт. Это не очевидно, но преподы считают это самой сложной темой для вкатунов.

Далее, язык Си ненавидит людей и ищет любую возможность нам поднасрать. Мы называем это "неопределенное поведение", "undefined behavior", или просто "UB". На примере. Допустим, ты пишешь a=b+с, и результат не помещается в a. В нормальном языке - Жабе - происходит переполнение и у тебя в a просто неправильный, но ожидаемый результат. Си не таков: компилятор считает, что ты обязан быть богом программирования, и UB в твоём коде означает лишь, что этот код просто никогда не должен исполняться. И он запросто может взять и убрать из итоговой программы огромную простыню кода, потому что в ней содержится это самое UB. А ты потом ищи, где в программе из сотен тысяч строк спряталась неочевидная лажа.

Последнее - в чистом виде на Си новые проекты уже практически не встречаются. Практически весь код на Си - старьё типа nginx или linux, где и без тебя всё збс. Причин писать на нём что-то новое очень мало. Даже микроконтроллеры с 1КБ памяти на борту уже, бывает, поддерживают C++. Поэтому сколько бы ты Си не задрачивал, зарплату это тебе не прибавит.
Аноним 12/01/21 Втр 02:26:34 190798855
>>1907978
Я сходу могу назвать новый проект на сишке - janus-gateway. Как раз щас с ним разбираюсь.

На самом деле сишники охуенно востребованы. С оговоркой: сишные боги. Крупные компании используют сишку. Либо патчат ядра, либо пилят какие-то свои нахлобучки для сетей, или что-то еще подобное.

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

>>1907959
Я в свое время вкатился в программирования, изучая сишку, пока был школием. Потом активно изучал питон и сишку подзабросил. Однако опыт разработки на питоне был полезен, когда я вернулся в сишку, потому что в сишке как нигде необходимо хорошо уметь в проектирование, иначе у тебя получится кривое падучее говно. Ну и еще всякие штуки типа параллелизма на питоне несколько проще изучать в силу наличия большого количества высокоуровневых абстракций.

Но вообще, ящитаю, одна сишка с высокой долей вероятности будет бесполезна, если только ты не ядерщик или эмбеддер. Вероятнее всего тебе потребуется знать еще два-три языка. На скриптухе или высокоуровневом писать бизнес-логику, на сишке - критичные к производительности вещи.
Аноним 12/01/21 Втр 02:42:02 190799456
>>1907978
>Допустим, ты пишешь a=b+с, и результат не помещается в a. В нормальном языке - Жабе - происходит переполнение и у тебя в a просто неправильный, но ожидаемый результат. Си не таков: компилятор считает, что ты обязан быть богом программирования, и UB в твоём коде означает лишь, что этот код просто никогда не должен исполняться. И он запросто может взять и убрать из итоговой программы огромную простыню кода, потому что в ней содержится это самое UB.
По-моему ты гонишь, не может компилятор в таком случае выкинуть код. UB значит, что результат может быть любым, условно ты можешь получить число по модулю, а можешь 0.
Но это скорее про случаи m[x++] = m[x++] + n[x++]. Просто вот так не надо писать и всё, одни какие-то подобные случаи прописаны в стандартах, другие нет.

Просто сложение с переполнением будет транслировано в обычную ассемблерную команду, предсказуемую, и компилятор просто предполагает, что ты знаешь, что делаешь, и переполнения не будет, это не случай UB.

>Причин писать на нём что-то новое очень мало.
Тут ты тоже не прав, поскольку Си это один из основных языков для расширений, а плюсы тут плохо стыкуются, и реально много пишут на Си, без плюсов.
Аноним 12/01/21 Втр 04:59:31 190804057
>>1907994
Это местный форсер, который срет примером со сложением повсюду. В компиляторах есть флаги чтобы отлавливать целочисленные переполнения, в стандарте это UB потому что на разных аппаратных платформах это работает по разному, а сишка, в отличие от джавы, должна работать везде.
Аноним 12/01/21 Втр 10:01:00 190808658
Почему вылетает ошибка сегментрования?

char ar[ROWS][COLS] = .....
char (звезда)ptrs[ROWS]

ptrs[0] = &ar[0][0]
Аноним 12/01/21 Втр 10:05:55 190808859
>>1908086
Ложная тревога, вывод был по строкам.
Аноним 12/01/21 Втр 10:07:56 190809160
>>1908040
Ты описываешь implementation defined, а не UB. Это явления другой категории.
При UB компилятор действительно может убирать инструкции. Условный пример, ты делаешь какое то UB, а потом пишешь if(cond) {...} компилятор волен полностью выкинуть этот код, потому что по его мнению cond никогда не выполнится, потому что считается что UB в программе отсутствуют.
Аноним 12/01/21 Втр 10:13:02 190809761
Я что-то не могу додуматься, почему так не работает ?

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

void FillPtr(int arr, int n)
{
arr = (int
)malloc(n sizeof(int));
for (int i = 0; i < n; i++)
{
arr = (int)malloc(n sizeof(int));
}
}

int main()
{
int arr;
int n;
scanf_s("%d", &n);
FillPtr(arr, n);
}
Аноним 12/01/21 Втр 10:16:55 190810162
>>1908097
Найс код скопировался конечно
Аноним 12/01/21 Втр 10:18:25 190810263
>>1908097
А зачем ты 1 раз и потом еще n раз малочишь арр?
Аноним 12/01/21 Втр 10:20:38 190810464
>>1908101
А, ну перезаливай.

[code lang="C"]
#include <stdio.h>

int main()
{
\t printf("test\n");
}
[/code]
Аноним 12/01/21 Втр 10:23:47 190810765
>>1908104
Найс, поставил эту вашу макабукоду.
Аноним 12/01/21 Втр 10:31:12 190811666
>>1908097

#include <stdio.h>
#include <malloc.h>

void FillPtr(int arr, int n)
{
arr = (int
)malloc(n sizeof(int));
for(int i = 0 ; i < n; i++)
{
arr = (int)malloc(n sizeof(int));
}
}

int main()
{
int arr;
int n;
scanf_s("%d", &n);
FillPtr(arr, n);
}
Аноним 12/01/21 Втр 10:31:40 190811767
>>1908086
А теперь собственно ошибка вылезает на этом моменте

for(i = 1;i < rows;i++)
{
if(ar[0] < (звезда)ptrs[i-1])
{
ptrs[i-1] = &ar[0];
ptrs = &ar[i-1][0];
}
if(ar[0] > (звезда)ptrs[i-1])
continue;
}
Аноним 12/01/21 Втр 10:31:50 190811868
>>1908116
Да снова нормально не скопировалось
Аноним 12/01/21 Втр 10:49:48 190811969
Аноним 12/01/21 Втр 11:09:10 190812570
>>1908119
А сама цель:

указатель 0 = &элемент обычного двумерного массива 0 0
Как пример:
Обычный массив: c b a d f
Массив указателей: 0 1 2 34
if(b < 0) в данном случае меньше
{
0 = &b;
1 = &c;
}
Аноним 12/01/21 Втр 12:04:33 190814671
>>1908125
То есть сортировка строк из двумерного массива в алфавитном порядке без изменения исходного массива.
Аноним 12/01/21 Втр 12:49:08 190817372
Ты бы лабу хоть отформатировал.
Аноним 12/01/21 Втр 15:58:18 190830373
>>1907988
> Я сходу могу назвать новый проект на сишке - janus-gateway. Как раз щас с ним разбираюсь.
Ну да, писать на Сишке можно и сейчас, но нахуя? Этот проект по описанию просто идеален для Go или Rust, а они, поди, решили, что без языка 50-летней давности им ощущения не те.

> На самом деле сишники охуенно востребованы. С оговоркой: сишные боги.
Может где и востребованы, а в наших ебенях (ДС, то есть) сишный мидл получает 70к, а гошный - 140, при гораздо менее мозгоебной и более перспективной работе последнего.

> Тут ты тоже не прав, поскольку Си это один из основных языков для расширений, а плюсы тут плохо стыкуются, и реально много пишут на Си, без плюсов.
Нормально они стыкуются, в них встроена совместимость с Си в обе стороны. То, что интерфейсы библиотек принято описывать сишным хидером не значит, что в новых проектах следует использовать ебанутый язык, в котором типовые структуры данных каждый раз приходится изобретать заново.

> По-моему ты гонишь, не может компилятор в таком случае выкинуть код. UB значит, что результат может быть любым, условно ты можешь получить число по модулю, а можешь 0.
Нет, не гоню. Сам посмотри вот эту статью: https://dspace.mit.edu/bitstream/handle/1721.1/86949/Kaashoek_Undefined%20behavior.pdf - суть в том, что Си (а с ним и Си++) может удалить вообще весь код, который сам по себе может привести к UB. В том числе проверки, этот UB предотвращающие! Учитывая, что в стандарте Си UB упоминается больше 500 раз, язык этот стоит воспринимать как язык ковбоев, ищущих острых ощущений в области седалища.

>>1908040
Ага, а вот и ковбой Горбатой горы подоспел. Я тебе напомню, что платформы, в которых числа не представлены в виде two's complement, устарели ещё до твоего рождения, и с тех пор весь дрочь на оптимизацию при помощи UB идёт строго в убыток. Но ты-то на Си не пишешь, а только пиздишь, так что убеждать тебя в чем-то бесперспективно. Пару раз проведешь неделю овертаймов в поиске ебанутых UB - поумнеешь.

>>1908091
Дело-то в том, что в Си переполнения действительно UB. Вот пидорок выше правильно пишет, что есть в компиляторах флаги, переводящие некоторые UB в implementation defined. В этом и дело - ты приличный человек и предполагаешь, что и Си проектировали приличные люди. А они уёбки, понатыкавшие в языке сотни ждущих своего часа мин. И всё ради 10% производительности в 10% микробенчмарков. Казалось бы, студенческого уровня косяк - ради пары процентов скорости сломать программу - а оказывается, там целый комитет старых гондонов сидит, стандарты пишет.
Аноним 12/01/21 Втр 16:32:25 190831774
>>1908303
Хуя тебе печет от сишки
Аноним 12/01/21 Втр 17:05:18 190833075
>>1908303
> Этот проект по описанию просто идеален для Go
Сборка мусора вызовет непредсказуемые задержки в передаче видео. Я хоть и обеими руками за гошечку для микросервисов, но тут она явно не к месту. Для своего сервера я выбрал сишку именно по этой причине.

> Rust
Уже лучше, но слишком сырой слишком для продакшна как по мне.

> Может где и востребованы, а в наших ебенях (ДС, то есть) сишный мидл получает 70к
Я же написал: сишные боги. В яндексе/мейле/етц топовый сишник стартует с 200k и идет дальше. Это я тебе как экс-яндексоид говорю.
Аноним 12/01/21 Втр 17:36:51 190834676
>>1908330
Топовый пхпшник лол сука тоже с 200к стартует, только он вообще не ебет что такое память, потоки, процессы и так далее, тупо пишет дтохи, контроллеры, говносервисы да говновалидацию да в базу лазает.
Аноним 12/01/21 Втр 17:48:53 190835177
>>1908346
Сишку стоит изучить только ради того, чтобы таким тупым говном не заниматься
Аноним 12/01/21 Втр 17:52:56 190835378
>>1908351
Кому что, многим ебать байты не уперлось, а вот писать бизнес логику на пыхе норм. Совершенно разные задачи.
Аноним 12/01/21 Втр 18:08:09 190837979
>>1908353
Очевидно что этим людям нужно сидеть в пхп треде, а не расказывать нам как им неинтересна сишка
Аноним 12/01/21 Втр 18:13:07 190838680
Говнопрогер на пыхе решил изучить итерналы своего языка и понял, что зенд енджайн написан на сишке. Бля, поцоны, а реально на си работу найти? Меня заебала уже эта пыха, хоть вешайся...
Аноним 12/01/21 Втр 18:28:45 190841681
>>1908379
Так речь вообще о другом шла.
Аноним 12/01/21 Втр 18:34:54 190842782
>>1908346
Я ничего не знаю о рынке пхпшников, но мне кажется что топовый должен как раз знать сишку, чтобы фиксить ядро этого говна. Имхо, за пхп можно получать столько только если удачно примазаться на старте и сидеть сеньером в техкомитете, либо работая на западного барина. Кто вообще наймет пхпшника-онли с улицы за что-то большее 100к?
Аноним 12/01/21 Втр 18:42:29 190843683
>>1908427
> Кто вообще наймет пхпшника-онли с улицы за что-то большее 100к?
Любая крупная компания у которой есть бэк на пыхе?
Аноним 12/01/21 Втр 19:15:34 190847084
>>1908436
Не, ты не понял мой вопрос. Допустим, в компании есть бек на пыхе. Зачем компании нанимать пыхомакаку за зарплату больше миски риса, если кроме пыха она ничего не умеет?

В яндексе есть racktables, который написан на пыхе. Соответственно, есть несколько человек, которые его поддерживают. Так вот у них у всех кроме пыха еще пяток языков в запасе, и пых далеко не основной. Зарплата соответствующая.
Аноним 12/01/21 Втр 19:20:32 190847185
>>1908470
Ну а нахуй компании, у которой кроме пыхи и гошки на бэке нихуя нет, нанимать такого спеца?
Аноним 12/01/21 Втр 19:22:56 190847586
>>1908470
> Зачем компании нанимать пыхомакаку за зарплату больше миски риса
Потому что нормальный бэкендер не пойдет работать за миску риса.
> если кроме пыха она ничего не умеет?
А что он должен уметь еще? Ну само собой он может в БД, брокеры, кеши, куберы и прочее, ведь он бэкенд разработчик. Зачем ему знать 5 языков? каждый одинаково хуево
У вас сишников своя реальность где 200к деньжища?
Аноним 12/01/21 Втр 19:26:59 190848187
>>1908475
Нормальный бекендер будет знать не только пых.

> У вас сишников своя реальность где 200к деньжища?
Я тебе просто пример привел. Сишник, работающий на западного барина, поднимает гораздо больше. Но таких сишников нужно ограниченное количество.
Аноним 12/01/21 Втр 19:29:05 190848288
>>1908481
Поясни за нормального бэкендера, мне аж интересно стало, лол.

мимопроходил
Аноним 12/01/21 Втр 19:30:36 190848689
>>1908481
> Нормальный бекендер будет знать не только пых.
Ну будет знать пыху + го или пыху + питон/ноду, зачем ему 5 языков?
Или SQL, HTML и прочее тоже идет в счет?
> Сишник, работающий на западного барина, поднимает гораздо больше.
Кто угодно получает больше на западном рынке.
Аноним 12/01/21 Втр 19:35:36 190849090
>>1908482
Ща тебе нонейм с двача пояснит, что твой опыт не опыт, а сам ты сисадмин, если не знаешь... делаем ставки чего. Я бы поставил на кложу/элексир. Или раст.
Аноним 12/01/21 Втр 19:41:49 190849591
>>1908490
Примерно это и ожидал, читаешь мои мысли. Он бы меня сразу в еникейщики определил
Аноним 12/01/21 Втр 19:48:12 190850292
>>1908486
>>1908482
Господа, чтобы сразу не было ко мне претензий. Я сужу с позиции большого тырпрайза, поскольку работал в основном именно там, пока не ушел на вольные хлеба.

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

Опция два. Сидят ядерщики и пишут какие-то ядерные модули на сях. Стоят дорого.

Опция три. Программиста берут на конкретный проект. Обычно он знает полтора языка, нужных проекту. Платят ему не очень много.

Что до моего личного определения "нормального бекендера" - это человек, который не только может что-то писать на каком-то языке, но понимает еще и тонкости оптимизации, сеть, ось и умеет в архитектуру. При необходимости может пойти и попатчить ядро или любой опенсорс, чтобы решить свою локальную проблему.
Аноним 12/01/21 Втр 19:53:07 190851093
>>1908495
Да ну бросьте оба. Я же не фанбой отбитый. Просто пересказываю то, что видел сам. Просто если чел не может докопаться до глубинной проблемы, связанной с интерпретатором того же пыха, то что он будет делать? Заведет тикет на гитхабе что ли? Будет по форумам ходить?

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

Я не говорю, что PHP+SQL+JS-онли ребята не нужны. Нужны, конечно. Просто получают они меньше чем тот класс, который я привел в первой опции.
Аноним 12/01/21 Втр 20:01:37 190852094
>>1908510
> Просто если чел не может докопаться до глубинной проблемы, связанной с интерпретатором того же пыха
Тут вообще орнул, как часто ты лезешь чинить интерпретатор? Так и вижу как e-commerce или банк пишет патчи для интерпретатора пыхи, там большинство кодеров пишут на жабе или пхп и никогда подобным не занимались, а зп могут быть вполне норм.
> Я не говорю, что PHP+SQL+JS-онли ребята не нужны. Нужны, конечно. Просто получают они меньше чем тот класс, который я привел в первой опции.
Ну 200к они легко получают, про работу на запад за доллары я вообще молчу.
Аноним 12/01/21 Втр 20:07:12 190852695
>>1908520
> как часто ты лезешь чинить интерпретатор?
PHP не чинил ни разу, так как не пишу на нем. Раза три чинил питон, и за последний год нашел несколько багов в ядре, которые аффектят юзерспейс. Один из них весьма древний.
Аноним 12/01/21 Втр 20:09:03 190852996
>>1908510
Ты наглухо ебанутый и оторванный от реальности как будто, если 200к для тебя деньги, то их получают, 300к тимлиды тоже получают, тупо за крудошлепские сервисы с пыхой да симфони, да там кафка, кубернетес и прочая хуйня, но сам язык там пхп и другой язык там не нужен, никакой интерпретатор там никто не дописывает. На джаваскрипте так же, никто лезть в v8 не будет переписывать, а пишут бэк там вчерашние формошлепы фронтендеры, еще хуже чем на пхп в плане архитектуры.

Джава мир вообще в себя погружен, если в пхп мире еще го стал популярен где пыха говно, так джава в принципе в вебе все может делать кроме ебанутого числодробления наверное. Джава тимлид в крупной компании в ДС получает за свой говноспринг 300-400к.

На запад же можно как бы и вордпресс говно за 3к баксов в мес делать, можно и за 7к в мес говноконсумеры на ноде к кафке приделывать. Без какого либо там си, FFI, JNI и так далее

Аноним 12/01/21 Втр 20:12:57 190853297
>>1908526
>Раза три чинил питон, и за последний год нашел несколько багов в ядре, которые аффектят юзерспейс
У меня есть знакомый питонист, не знает как в питоне gc работает, получает 200к.
Аноним 12/01/21 Втр 20:14:33 190853598
>>1908529
Глаза разуй, еблан. Я тебе сказал, что СИШНИК получат ОТ 200к. Поскольку сумма обсуждается в рублях, то речь, очевидно, идет о рашке.
Аноним 12/01/21 Втр 20:16:30 190853699
>>1908532
Ну, всякое бывает. Речь изначально шла о том, что сишка дает преимущества в работае и позволяет поднять себе ценник.
Аноним 12/01/21 Втр 20:17:35 1908539100
>>1908535
Так ты же про толкового и в крупной компании, пока таким станешь уже седым станешь.
Аноним 12/01/21 Втр 20:20:05 1908541101
>>1908536
>и позволяет поднять себе ценник.
Очень сомнительно, если проект байтоебский то да. А когда ты пишешь условный маркетплейс, банкинг или агрегатор какой нибудь хуйни, то это вообще непонятно зачем нужно.
Аноним 12/01/21 Втр 20:21:22 1908542102
>>1908539
Ну почему же. Знаю челика, ему 35. Работает в яндексе, в основном хуярит ядро, по мелочи пишет на питоне и гошечке. Стоит дорого.

Толковость появляется от опыта работы. Если годами json`ы перекладывать, то понятно, можно до седых мудей таким не стать. Если вписаться в технически сложный проект и не сидеть в нем до скончания времен, то опыт и наберется.
Аноним 12/01/21 Втр 20:22:59 1908545103
>>1908541
А тут уже вопрос, чем именно ты хочешь заниматься. Если маркетплейсами - то да, необходимость почти нулевая. А если какой-нибудь сверхвысокий асинхронный хайлоад (r) (c) (tm), то там это нужно. Деньги уже другие, разумеется. Полмиллиона и выше.
Аноним 12/01/21 Втр 20:25:10 1908548104
>>1908545
А уже 500к+, ставки повышаются.
Аноним 12/01/21 Втр 20:26:00 1908551105
>>1908548
Долбиться в глаза прекращай, тебе говорят.
Аноним 12/01/21 Втр 20:28:03 1908554106
Аноним 12/01/21 Втр 20:30:29 1908555107
Аноним 12/01/21 Втр 20:33:00 1908557108
Ну и к чему вы в итоге пришли? Нахуй было спорить, если вы кроме своего мнения других не приемлите..

пойду дальше другие срачи посмотрю
Аноним 12/01/21 Втр 21:48:04 1908637109
как подключить библиотеку которую я скачал и скомпилировать?
хочу подключить <xxxxxx> вот так через <>

как в codeblocks или в терминале єто делать?
Аноним 13/01/21 Срд 10:09:03 1908890110
>>1908502
>Что до моего личного определения "нормального бекендера" - это человек, который не только может что-то писать на каком-то языке, но понимает еще и тонкости оптимизации, сеть, ось и умеет в архитектуру. При необходимости может пойти и попатчить ядро или любой опенсорс, чтобы решить свою локальную проблему.
Ты таких ИРЛ вообще встречал хоть раз?
Аноним 13/01/21 Срд 12:51:14 1908948111
>>1908890
Да
Причем без шуток. Знакомый погромист и либы чужие патчил, когда находил дефекты в них, и архитектурой занимался, оптимизацией производительности, а сам по себе мастер по написанию кода для бэкэнда.
Аноним 13/01/21 Срд 15:51:24 1909066112
>>1908890
Да. Работал с такими челиками в разных командах. Как правило после рашкинских компаний они перекатываются куда-то в более интересные места. Например, челик со знанием сей, плюсов, питона и тонкостей сетей (плюс цисок, жуниперов и хуевеев) укатился в спейсикс. Другой челик с таким же набором - в фейсбук. Родственник мой пилил распределенные системы. Ну и я тоже, т.к. работал в упомянутых командах. Я в сетях особо не разбираюсь, но у меня прокачан скилл проектирования архитектуры и распределенных систем. Укатился в свой софтово-железячный стартап.
Аноним 13/01/21 Срд 18:07:44 1909171113
>>1909066
>в свой пиздобольский угол
пофиксил, не благодари!
Аноним 13/01/21 Срд 18:13:45 1909175114
>>1909171
Если ты - дно, то не думай, что тут все такие же, манька.
Аноним 13/01/21 Срд 18:46:55 1909211115
>>1909175
не плакай, стартапер-архитектор-двачер
Аноним 13/01/21 Срд 19:01:29 1909224116
Аноним 13/01/21 Срд 19:17:07 1909239117
image.png 374Кб, 757x477
757x477
>>1909211
В чем проблема, маня?
Аноним 13/01/21 Срд 19:24:08 1909257118
Аноним 13/01/21 Срд 21:52:19 1909388119
Аноним 14/01/21 Чтв 02:21:39 1909600120
>>1909388
Перемешивает биты в числе особым образом, чтобы вышло число с симметрией относительно центра? Хуй знает, запутанный обмен, лень разбираться больше 5 минут, такое прямо в IOCCC отправлять после должной доработки, лол.
Аноним 14/01/21 Чтв 15:30:04 1909873121
Как внутри printf() вывести еще функцию чтобы получилось что-то вида printf(fn(), fn2(), fn3())?
Аноним 14/01/21 Чтв 15:49:12 1909890122
Аноним 14/01/21 Чтв 15:56:11 1909896123
Чем вы быстрее плюсов? Зачем вы вообще нужны?
Аноним 14/01/21 Чтв 16:59:10 1909930124
>>1908097

Потому что хуйня какая-то. Зачем ты малок засунул в фор, что ты пытаешся сделать?
Аноним 14/01/21 Чтв 18:34:15 1910016125
>>1907027
Мне кажется, что такой подход был уместен, когда были архитектуры условно 16-битные и 15-битные, 32-битные и 27-битные, двоичные и экспериментальные троичные.
Но когда на ПК int 32-битный, а на ардуине 16-битный и алгоритм перестаёт работать, то это плохо.
Аноним 14/01/21 Чтв 19:45:27 1910080126
image.png 297Кб, 1100x616
1100x616
Аноним 15/01/21 Птн 04:27:42 1910423127
Безымянный-файл[...].jpg 258Кб, 1200x898
1200x898
Если в буфер размером K прочитать поток размером N, то N-K байт останутся в стдин (например по exit() вылезут в консолечке).
Аноним 15/01/21 Птн 05:33:42 1910432128
42oh6fa3crq21.jpg 1513Кб, 3024x4032
3024x4032
Capture.PNG 761Кб, 521x701
521x701
>>1910016
Да, такой подход не уместен, он единственно возможен, ибо других не может быть.
Посмотри на пики. Есть два робота, большой и маленький, и язык программирования роботов. Ты пишешь команду:
>сделать_шаг();
В результате, оба робота должны одинаково сделать шаг, и похуй что первый робот выполнит поставленную задачу - раздавить вон того тупого еблана вроде тебя слева, а второй шагнет на пару сантиметров и ничего не добьется. Это нормально, так и должно быть. А вот игнорировать спецификации роботов и хотеть чтобы любой робот одной командой выполнял одинаковую задачу, т.е. одной командой первый робот просто делает шаг, а второй разбегается, подпрыгивает, достает нож и втыкает его в шею цели, т.к. весом убить еблана не может, зато задача выполнена. Такая поебень - не программирование, и никому не нужна, кроме тупых ебланов, которых надо вычистить как вредные органические отходы, заражающие планету.
Аноним 15/01/21 Птн 17:10:49 1910808129
>>1910432
Бред. Современный мир омонополен несколькими крупными производителями микроэлектроники и все они двоичные, а их регистры в большинстве своём кратны восьми и являются степенью двойки. И очевидно, что каждое 32-битное число, когда к нему добавляется 1 должно либо увеличено на единицу, либо переполнено и обнулено. А когда один и тот же тип ведёт себя как сумасшедший на разных машинах, это очень плохо. Представь, написал ты машине variable++, а она вместо того, чтобы увеличить значения на единицу, вызывает rm -rf /*. Нарушаются все принципы, которые только можно.
Зачем вообще в таком случае программировать на сижке, если можно сразу на ассемблере? Там и изучения спецификации машин, и библиотеки можно оптимизировать под готовые инструкции. В одной машине не будет инструкции для синуса и придётся функцией посчитать. А в другой будет, но значение плюс-минус 0.1, ещё и рандомное каждый раз, потому что считается через аналоговую электронику. Вот будет веселье программисту! Все графические и физические движки будет переписывать на ассемблер. Настоящее программирование, как положено настоящему мужику!
Я не мужик, так что я такое не выбираю. Мои алгоритмы должны работать одинаково на всех машинах. Чтобы один и тот же код можно было запустить хоть на ПК, хоть на микроконтроллере и он исполнился правильно.
И, даже, на разных типах, для чего в современных языках программирования есть дженерики и темплейты (сишные макросы до них не дорастут).
То, что ты описал не нужно нормальным людям, но я не считаю, что вас надо уничтожать. У вас есть право на своё мнение и вы можете заниматься байтоёбством сколько хотите.

Хотя, действительно, есть ряд задач, где можно типы сделать не совсем ясными. Например, флоат для 3D-графики. Не всегда важно, будет single или double считаться в шейдере, потому что в большинстве программ отображение графики будет почти одинаковым. Ну, может цвета пикселей или их расположение будет немного другим. В таком случае уместно вводить отдельный тип, который может себя вести как халф, сингл или дабл.
Аноним 15/01/21 Птн 17:35:18 1910843130
>>1910808
>Бред
Ридинг компрехенсион скрипто-дебила. Катись обратно в свои скриптотреды, там давно типы все одинаковые. Зачем сюда, в программирование лезешь? А понимаешь, что выродок, подсознательно понимаешь, что тут умные люди, не чета таким как ты, вот и пытаешься примазаться. Но это бесполезно, говно не умеет ничего кроме как срать, лучше от этого не станешь.

>Мои алгоритмы
Си - язык программирования железа, а не алгоритмическая параша для первоклашек и сходных с ними по интеллекту дегенератов.
Езе раз: СИ - НЕ АЛГОРИТМИЧЕСКАЯ ПАРАША. Ферштейн?
Аноним 15/01/21 Птн 18:44:55 1910929131
>>1910808
> Бред. Современный мир омонополен несколькими крупными производителями микроэлектроники и все они двоичные, а их регистры в большинстве своём кратны восьми и являются степенью двойки. И очевидно, что каждое 32-битное число, когда к нему добавляется 1 должно либо увеличено на единицу, либо переполнено и обнулено. А когда один и тот же тип ведёт себя как сумасшедший на разных машинах, это очень плохо.
А прям много таких машин где int ведёт себя как сумасшедший?
> Представь, написал ты машине variable++, а она вместо того, чтобы увеличить значения на единицу, вызывает rm -rf /*. Нарушаются все принципы, которые только можно.
Поехавший пример однако.
> Зачем вообще в таком случае программировать на сижке, если можно сразу на ассемблере?
Лучше сразу на сигаре.
> Там и изучения спецификации машин, и библиотеки можно оптимизировать под готовые инструкции. В одной машине не будет инструкции для синуса и придётся функцией посчитать. А в другой будет, но значение плюс-минус 0.1, ещё и рандомное каждый раз, потому что считается через аналоговую электронику. Вот будет веселье программисту! Все графические и физические движки будет переписывать на ассемблер. Настоящее программирование, как положено настоящему мужику!
Чтоб такой хуйни не было и пилят более комплексные языки программирования.
А если какая-то функция на железке неадекватная, и не ведёт себя так как на другом железе - ее выносят в specific функционал, и делают реализацию чтобы вело оно себя так как и везде.
> Я не мужик, так что я такое не выбираю. Мои алгоритмы должны работать одинаково на всех машинах. Чтобы один и тот же код можно было запустить хоть на ПК, хоть на микроконтроллере и он исполнился правильно.
Замечу ты это про предыдущий абзац, а там сказано тобой же про ассемблер. А где собственно Си тут?
> И, даже, на разных типах, для чего в современных языках программирования есть дженерики и темплейты (сишные макросы до них не дорастут).
Не понял к чему это тут.
> То, что ты описал не нужно нормальным людям, но я не считаю, что вас надо уничтожать. У вас есть право на своё мнение и вы можете заниматься байтоёбством сколько хотите.
Да ты поехавший. Привел в пример ассемблер. И рассказывает что мы какие-то не такие.
> Хотя, действительно, есть ряд задач, где можно типы сделать не совсем ясными. Например, флоат для 3D-графики. Не всегда важно, будет single или double считаться в шейдере, потому что в большинстве программ отображение графики будет почти одинаковым. Ну, может цвета пикселей или их расположение будет немного другим. В таком случае уместно вводить отдельный тип, который может себя вести как халф, сингл или дабл.
Вообще разница есть между float и double в графике. Как минимум в производительности, и в точности. Особенно когда считаешь геометрию. Или сраное сглаживание.
Аноним 15/01/21 Птн 19:13:29 1910959132
yoba.png 5Кб, 129x129
129x129
>>1910016
Тебе стандарт и традиция гарантируют для инта +-32767. Если ты знаешь, что в алгоритме нужен больший диапазон, не используй инт. И тогда не будет никакого "перестает работать".

Гораздо опасней существование в языке unsigned.
Аноним 16/01/21 Суб 06:40:50 1911480133
джава и оопе - некст абстракшен левл. всё.
Аноним 16/01/21 Суб 15:34:17 1911791134
Почему функция принимающая двумерный массив по сигнатуре может принять одномерный массив в качестве аргумента и и разместить его как первую строку?
Аноним 16/01/21 Суб 16:59:09 1911937135
>>1911791
В си нет двумерных массивов в полноценном смысле (например вида [ , ])
Так что по сути у тебя массив массивов.
Аноним 16/01/21 Суб 17:06:01 1911951136
image.png 77Кб, 705x767
705x767
>>1911937
Я знаю. Функция по сигнатуре принимает переменную хранящую указатель на указатель. Но поему-то в качестве аргумента можно просто прописать указатель на строку и он запишется в локальный массив указателей на указатели т.е в двумерный массив функции. По-моему это какая-то очень неочевидная хуйня.
Аноним 16/01/21 Суб 17:07:36 1911955137
image.png 23Кб, 452x208
452x208
>>1911951
переменную хранящую указатель на массив указателей
фикс
Аноним 16/01/21 Суб 17:16:09 1911971138
>>1911951
Короче в качестве аргумента был передан одномерный массив, но поему то он автоматически был записан в первую строку локального двумерного.
Аноним 16/01/21 Суб 18:41:18 1912041139
C помощь read как-то можно считать символы не передвигая при этом позицию в файле? То есть записало в строку, но при следующем read начинало бы с того-же места?
Аноним 17/01/21 Вск 02:29:47 1912357140
>>1910808
братишь, занимаешься графикой?
Аноним 17/01/21 Вск 02:33:22 1912359141
>>1910843
ты какой-то обиженка
есть железо, есть алгоритмы - в чем проблема? Одно без другого - как ручка без чернил (ну или чернила без ручки)
Нам как фронтендеры нужны с их красивыми сайтиками, или питонисты с их джанко и мл
так и хардварники с их управлением памятью, оптимизацией и прочим
выпей уже таблеток, а?
Аноним 17/01/21 Вск 02:34:16 1912361142
>>1910959
> Гораздо опасней существование в языке unsigned.
поясни плз
Аноним 17/01/21 Вск 03:58:07 1912386143
>>1912361
Скорее всего он имеет в виду, что при декременте оно не может уйти в отрицательные числа и вызовет где-нибудь переполнение.

Вообще было бы здорово иметь возможность отлавливать такое, как с делением на ноль.
Аноним 17/01/21 Вск 03:59:16 1912387144
>>1912041
fseek или lseek
Читать и возвращать позицию на количество прочитанных байт.
Аноним 17/01/21 Вск 05:44:36 1912424145
maxresdefault.jpg 44Кб, 1280x720
1280x720
maxresdefault.jpg 96Кб, 1280x720
1280x720
>>1912361
Поясняю: пикрил 1 - опасно; пикрил 2 - безопасно.

>>1912386
> было бы здорово иметь возможность отлавливать такое
Возможность есть, отлавливай наздоровье.
Аноним 17/01/21 Вск 06:32:41 1912433146
>>1912424
> Возможность есть, отлавливай наздоровье.
Это как?
Аноним 17/01/21 Вск 07:08:16 1912435147
А в каком случае оверфлоу может что-то там повредить, если конпелятор прежде чем декрементировать memx, кидает это в соотетствующий блок регистра?
И даже для машины subb, subd, subl и subq это разные инструкции, работающие с соотвествующим размером.
Аноним 17/01/21 Вск 10:40:09 1912471148
>>1912386
>Скорее всего он имеет в виду, что при декременте оно не может уйти в отрицательные числа и вызовет где-нибудь переполнение.
Ровным счётом та же проблема с signed.

ХЗ, давно не писал на Си, но вроде как хорошим тоном считается использовать int32_t/uint32_t
Аноним 17/01/21 Вск 11:57:06 1912492149
Аноним 17/01/21 Вск 12:24:00 1912502150
>>1912492
Без ассемблера возможно понять?
Аноним 17/01/21 Вск 12:39:30 1912505151
16034677706730.jpg 10Кб, 200x200
200x200
Аноним 17/01/21 Вск 12:54:14 1912515152
kKqHfJnYZs4-b-a[...].jpg 165Кб, 1079x1233
1079x1233
БЛЯТЬ, поясните нюфаку чем всё-таки опасны эти ваши овер/андерфлоу? Я раньше думал, что соседние байтики и битики страдают, но как оказалось, это не так.
>>1912424
>Поясняю: пикрил 1 - опасно; пикрил 2 - безопасно.
И первое, и второе - опасно, если воткнуть в анус.
Аноним 17/01/21 Вск 13:06:01 1912528153
>>1912424
>Возможность есть, отлавливай наздоровье.
Это про interrupt_overflow?
Аноним 17/01/21 Вск 13:13:14 1912536154
kitty.jpeg 51Кб, 750x646
750x646
>>1912515
f(i) { if (i+1<0) puts("f"); }
g(i) { if (i<0) puts("g"); }
main()
{
f(0x7fffffff);
g(0x7fffffff+1);
}
Аноним 17/01/21 Вск 13:21:05 1912540155
>>1912536
f() и g() должны прокнуть. Что не так?
Аноним 17/01/21 Вск 13:24:18 1912547156
16034677706730.jpg 10Кб, 200x200
200x200
>>1912540
Печатает только g (GCC с оптимизацией или без).
Аноним 17/01/21 Вск 13:37:33 1912575157
nope.png 90Кб, 764x481
764x481
Аноним 17/01/21 Вск 14:51:19 1912710158
>>1912515
Тем что это UB (undefined behaviour) то есть компилятор может считать что ты написал некорректный код и выкинуть его или поменять на другой. Хуже того, вся программа считается UB.
Аноним 17/01/21 Вск 15:08:18 1912737159
>>1912710
>Тем что это UB (undefined behaviour)
А где здесь ЮБ? Если сегментация не нарушается, а переполнение только-только зажигает OF и сама память меняет значение с TYPE_MAX на TYPE_MIN (и наоборот). Я конечно понимаю, что такое посредственно может вызвать перезапись буффера (например записать 0х7ff байт вместо одного), но эта проблема вроде как отдельно решается.

>то есть компилятор может считать что ты написал некорректный код и выкинуть его или поменять на другой.

Это как? Конпелятор будет предугадывать или даже вычислять, что там случится в рантайме? Меня траллируют, да?
Аноним 17/01/21 Вск 15:32:25 1912783160
setjmp
Аноним 17/01/21 Вск 16:23:59 1912869161
>>1912737
UB в ящыке Си, никаких О флагов в языке не существует. Это не ассемблер.
Аноним 17/01/21 Вск 20:03:02 1913222162
yoba.png 5Кб, 129x129
129x129
>>1912710
Конпелятор делает оптимизации, которые меняют поведение кода в случае переполнений.
Вот это
> if (i+1<0)
может заменить на
> if (i < -1)
сэкономив одну инструкцию.
Подставь maxint на место i. Первый иф будет истина, второй ложь.
Аноним 17/01/21 Вск 22:45:28 1913495163
Стикер 0Кб, 512x512
512x512
>>1913222
>if (i < -1)
То есть при -1 все ок?))))
Аноним 17/01/21 Вск 23:06:43 1913531164
>>1912433
Обыкновенно. Включи голову: int не отлавливает переполнение, значит что нужно сделать? Нуууу!? Конечно же написать свой manyaint который будет отлавливать. Ты программист или кто? Кто еще за тебя будет программировать твои маняхотелки, кроме тебя самого? Язык имеет все средства для реализации чего угодно, так что вперед и с песней.
Аноним 18/01/21 Пнд 08:53:09 1913856165
image.png 118Кб, 288x254
288x254
>>1913531
Бля, охуительная история. Я думал ты что-нибудь умное расскажешь, а ты предложил навернуть абстракцию поверх обычной переменной.
Аноним 18/01/21 Пнд 11:15:20 1913924166
image.png 14Кб, 747x194
747x194
Почему прога не робит? Я просто блять тупой и не понимаю, схуяли доступа на изменение массива нет?
Аноним 18/01/21 Пнд 13:25:06 1914002167
>>1913924
>>1913924
Не шарю за сихи ваши, мб потому что s продекларирована но проинициализирована?
Аноним 18/01/21 Пнд 13:56:57 1914022168
>>1913924
А что ты передаешь в функцию? "stroka", я угадал?
Аноним 18/01/21 Пнд 14:33:31 1914065169
Аноним 18/01/21 Пнд 14:38:08 1914071170
>>1913856
>дайте мне абстракцию, мам
>ну на, держи
>бля, охуительные истории, абстракцию предлагают
С дефектами мышления в программировании делать нечего.
Аноним 18/01/21 Пнд 14:40:18 1914076171
>>1914022
Кстати да, есть вероятность что он передает внутрь строку указателем из .data, из-за этого ловит сегфолт.
Аноним 18/01/21 Пнд 17:26:27 1914207172
>>1914071
Где ты в моем сообщении увидел слово "абстракция", клоун?

> С дефектами мышления в программировании делать нечего

Вот именно, пиздуй из профессии. Мало ли что ты там увидишь в следующий раз в коде, вдруг тебе послание с нибиру мерещиться начнет.
Аноним 18/01/21 Пнд 17:34:32 1914220173
sshot-2021-01-1[...].png 9Кб, 433x269
433x269
Аноним 18/01/21 Пнд 18:45:36 1914341174
Аноним 18/01/21 Пнд 18:51:37 1914356175
>>1914220
компилятор поменяй
Аноним 18/01/21 Пнд 18:58:34 1914366176
>>1914341
Ну, дебилом бы я тебя не назвал. Просто не очень умный.
Аноним 18/01/21 Пнд 22:33:26 1914606177
>>1906345
Читай что такое динамическое выделение памяти, а конкретно calloc.
Аноним 19/01/21 Втр 17:46:05 1915393178
>>1913924
Stephen Prata, C Primer Plus
Chapter 11: Character Strings and String Functions
Досконально раздраконена тема, просто досконально. Прочитай и все вопросы про массивы/ссылки/строки отпадут начисто.
Аноним 19/01/21 Втр 17:48:22 1915401179
descent.jpg 36Кб, 640x480
640x480
Надеюсь здесь сидят шарящие анончики.
Вопрос тупой, и мне заранее стыдно, но не у кого спросить.
Смотрю на сорс моей любимой игрули детства:
https://github.com/videogamepreservation/descent
ГДЕ ТОЧКА ВХОДА?
Типа main.c или что-то такое?
Аноним 19/01/21 Втр 18:30:21 1915433180
>>1915393
Не отпадут.
передача одномерного массива в функцию с параметром двумерного-кун/тян
Аноним 19/01/21 Втр 19:10:07 1915492181
>>1915433
>передача одномерного массива в функцию с параметром двумерного-кун/тян
Шизоид?
Аноним 19/01/21 Втр 19:15:08 1915504182
Аноним 19/01/21 Втр 19:31:28 1915519183
>>1915401
MAIN/INFERNO.C если я не ошибаюсь
Аноним 19/01/21 Втр 19:43:40 1915528184
>>1915401


To build the executable, you should be able to just run maked1.bat.
Descentr.exe should be built in the main subdirectory.
Аноним 19/01/21 Втр 22:58:47 1915787185
sshot-2021-01-1[...].png 120Кб, 952x428
952x428
Для сишечки оказывается есть простенький вывод графики через эту библиотеку http://openbgi.sourceforge.net Можно даже игру небольшую накодить.
Аноним 19/01/21 Втр 23:08:56 1915795186
Аноним 19/01/21 Втр 23:16:18 1915801187
>>1915795
Да, вывод получается очень медленный, но зато кодить просто - для начального нубоуровня сойдет.
Аноним 20/01/21 Срд 00:28:15 1915865188
>>1915528
>Descentr.exe should be built in the main subdirectory.
Ну и нахуй мне экзешник? Я же про код спрашиваю.

>>1915519
Лол, точно
int main(int argc,char argv)
Аноним 20/01/21 Срд 03:25:35 1915962189
20/01/21 Срд 06:47:48 1916062190
>>1915962
Тем, что про него даже гугл не знает.
Аноним 20/01/21 Срд 12:13:58 1916151191
Аноним 20/01/21 Срд 15:47:15 1916309192
>>1916151
>MiniLibX
Всегда удивляло, откуда берут такое васянское говнище (поддерживает даже BSD! ебать) без нормальной документации, сделанное на коленке даунами, которое даже скомпилироваться не может нормально?
Аноним 20/01/21 Срд 21:46:39 1916662193
Аноним 22/01/21 Птн 00:04:31 1917661194
>>1916662
> Вот это говнокод, пиздец
Вся суть. Раньше писали крутые игры, а теперь пишут красивый код и дрочат на историю комитов, на тесты, на линтеры... что угодно, только бы не заниматься делом.
Аноним 22/01/21 Птн 09:28:54 1917847195
>>1917661
Можно писать красивый код и не дрочить на коммиты. Лично я обмазываюсь линтерами из параноидальных соображений.
Аноним 22/01/21 Птн 17:15:43 1918182196
sshot-2021-01-2[...].png 27Кб, 419x439
419x439
>>1915787
Закодил змейку. Пипец сложновато. Ели кто хочет оценить уровень говнокода, то архив с бинарниками и исходниками прилагаю в картинке.
Аноним 22/01/21 Птн 18:23:27 1918229197
>>1918182
как это в картинке?
Аноним 22/01/21 Птн 18:30:58 1918236198
>>1918229
Ну типа как рар-жипег, только это зип-пнг.
Аноним 22/01/21 Птн 18:39:32 1918249199
>>1918236
а как ты так сделол
Аноним 22/01/21 Птн 18:53:53 1918255200
>>1918249
Раньше каритнку и архив склеивали просто вместе. Но сейчас хитрый Абу что то там нашатал и теперь его макаба вырезает все архивы у раржипегов. Сейчас надо разобраться в структуре формата джипег или пнг, покурить документацию, и встраивать архивы в подходящие для этого места внутри файла. Я так сделол.
Аноним 22/01/21 Птн 19:28:22 1918280201
>>1918255
Ах тыж вредоносный анон
Аноним 22/01/21 Птн 19:41:09 1918293202
15142286142860.png 240Кб, 738x405
738x405
>>1916309
>без нормальной документации
>скомпилироваться не может нормально
Так и пиши что не осилил
Аноним 22/01/21 Птн 19:46:31 1918300203
mcpp.PNG 301Кб, 339x423
339x423
Аноны, пиздец тупой реквест, но тем не менее.
Хочу Borland C/С++ IDE настроить на win10.
Какие варианты? Вроде нагуглил сборку от Раджеша Шрияпутры, но хуй я позволю этому говну ступить на мой пека.
Аноним 22/01/21 Птн 20:01:54 1918320204
2n9pt8.jpg 46Кб, 600x450
600x450
Аноним 23/01/21 Суб 08:41:04 1918898205
Если возвращать объекты из сегмента данных или стэка, то энивей будет ЮБ? Следовательно возвращать можно только кучу?
Аноним 23/01/21 Суб 08:41:47 1918899206
>>1918293
Пиздос какие страшные куклы!
Аноним 23/01/21 Суб 12:43:25 1918966207
>>1918898
Что такое сегмент данных в Си?
Аноним 23/01/21 Суб 12:44:50 1918968208
>>1918898
Что почитать чтобы стать таким же умным как ты?
Аноним 23/01/21 Суб 12:52:45 1918973209
>>1918898
А вот в каком сегменте си размещает структуры?
23/01/21 Суб 16:56:34 1919191210
Подскажите, плез, как быстро заполнить поля структуры, указанной по линку?

https://pastebin.com/etpP4MdD

По одному очень долго и много.

heater_plates_t heaters;
heaters.plate[0].profile[0].id = 1; // например

Не пойму, как присобавить заполнение, как у массива структур:
temp_profile_t heater[] = { // массив структур
{0, "Profile 1", true, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0},
1, "Profile 2", true, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0},
2, "Profile 3", true, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0},
3, "Profile 4", true, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0},
4, "Profile 5", true, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0}
},
{0, "Profile 1", true, {0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},
1, "Profile 2", true, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0},
2, "Profile 3", true, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0},
3, "Profile 4", true, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0},
4, "Profile 5", true, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0}
},
};
Аноним 23/01/21 Суб 16:58:50 1919194211
А тут кроме юмористов, кто-то ещё остался?
>>1918968
Ветхий Завет и Кернигана&Ритчи.
>>1918966
Всё что декларировано за пределами функций.
>>1918973
Где объявишь, там и разместит.
23/01/21 Суб 22:32:36 1919421212
>>1919191
(type){ initializer }, зовется compound literal.

> По одному очень долго и много.
Сделай функцию.

>>1918898
Возвращать нельзя только массивы, являющиеся автоматическими переменными. Т.е., которые лежат в стеке, и которые нельзя возвратить по значению из-за того, что в выражениях (в том числе и в return) массив деградирует до указателя. Например, если обернуть в структуру, то уже можно.

>>1919194
> кто-то ещё остался
Мне кажется, что тред себя исчерпал или вся борда?. Но кое-кто остался, и они иногда еще отвечают.
Аноним 24/01/21 Вск 05:13:26 1919684213
Настройки X
Ответить в тред X
15000
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов