Был обновлён парсер тредов Двача, просим анонов обращать внимание и сообщать об аномалиях с содержанием сохраняемых тредов.

C Programming Language #56 /clang/

 Аноним OP 17/04/20 Птн 20:21:49 #1 №1660319 
C Propaganda.jpg
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь 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/n2385.pdf
- man/Dash/zealdocs

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

- Очевидный 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. [email protected] "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 помогает читать сложные сишные декларации.

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

- №53: http://arhivach.ng/thread/529929/
- №54: http://arhivach.ng/thread/535256/
- №55: http://arhivach.ng/thread/543511/ >>1634080 (OP)
Loading...
Аноним 18/04/20 Суб 00:08:41 #2 №1660539 
Вкатился.
Аноним 18/04/20 Суб 00:23:40 #3 №1660553 
Интересно че там будет в новом стандарте
sageАноним 18/04/20 Суб 01:19:03 #4 №1660602 
>>1660553
Так вон же он, черновик в шапке. Будут атрибуты и по мелочи еще. Ничего из того, что хотелось бы получить.
Аноним 18/04/20 Суб 02:09:09 #5 №1660618 
>>1660602
ты так пишешь, как если бы было что-то что хотелось получить.
Аноним 18/04/20 Суб 04:24:06 #6 №1660640 
>>1660618
Скорость. Сделайте хеллоуворлд в пять раз меньше, перепишите библиотеки на ассемблере.
Аноним 18/04/20 Суб 10:54:05 #7 №1660724 
>>1660640
Это не входит в стандарт. Алсо, glib даже на стандарт хуй клали, и только в 2.28 завезли <thread.h>
Аноним 18/04/20 Суб 15:35:39 #8 №1661011 
>>1660724
>и только в 2.28 завезли <thread.h>
потому что оно не нужно в стандарте.

>на стандарт хуй клали
это опциональная фича. всё по стандарту.
Аноним 18/04/20 Суб 19:44:49 #9 №1661238 
>>1660602
Там 600 страниц. Можешь вкратце описать основные изменения?
sageАноним 18/04/20 Суб 21:06:02 #10 №1661322 
>>1660724
> glib
glibc

>>1661238
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2386.pdf версия с диффами (не уверен, что последняя), список изменений в самом начале.
Аноним 18/04/20 Суб 21:15:55 #11 №1661332 
В Америке работают, если платят хорошо. В России работают. Если платят - хорошо.

Аноним 18/04/20 Суб 23:51:24 #12 №1661458 
>>1661332
Не работаю, не платят - хорошо.
Аноним 19/04/20 Вск 00:13:21 #13 №1661466 
Есть кто-нибудь, кто байтоебит на GPU?
Есть какой-нибудь путь, писать и тестировать код локально на маке с видюхой Radeon, а потом без лишней головной боли запустить тоже самое в датацентре с видюхой Nvidia на Linux?
Аноним 19/04/20 Вск 02:21:23 #14 №1661495 
>>1661322
>Abstract
Дальше не читал. Отвлеченное пиздабольство вместо технической документации не нужно.
Аноним 19/04/20 Вск 09:40:45 #15 №1661573 
>>1661466
> Есть кто-нибудь, кто байтоебит на GPU?
Ты один и тот же?
Общее АПИ юзай, вопросы с пакетами решай шэллом или просто интересуйся заранее.
Аноним 19/04/20 Вск 19:34:20 #16 №1662261 
Паршу командную строку с glibc (argp).
Код парсинга прямо в main и складывать в локальные переменные main()?
Вообще, слышал, что функция должна делать предельно мало и иметь мало переменных, но судя по всему main() исключение в основном...
Мне вообще не хватает мудрости на тему что должна делать main().
Аноним 19/04/20 Вск 20:52:00 #17 №1662343 
>>1662261
Разобрался, спасибо.
Теперь интересует сугубо практический вопрос.
Вижу два вара для вывода ошибок в простой (5-10 CLI-параметров) программы:
- написать большую функцию, много массивов со стандартными сообщениями. В теории обработка не нужна, каждая ошибка - смерть проги. Функцию в отдельный хедер, вызывать её всегда, если результат malloc NULL и прочее, прочее.
- просто макрос/мини-функция в main() с чем-то из glibc типа perror/strerror + своя обработка ошибок при парсинге аргументов
Сразу хочу сказать, что источники ошибок либо в аргументах программы, либо функции glibc.
Аноним 20/04/20 Пнд 06:25:18 #18 №1662576 
Реквестирую олимпиадные задания по C.
Аноним 20/04/20 Пнд 09:22:40 #19 №1662607 
2020-04-20 [email protected] mnteDistribDocuments[...].png
До main() нельзя так объявлять переменные или что он от меня хочет?
Аноним 20/04/20 Пнд 10:26:46 #20 №1662629 
>>1662607
Переменные вне функции - statiс, должны либо нулями инициализироваться, либо значениями, известными во время компиляции.
Если ты хочешь разово инициализировать переменную в рантайме, используй static в функции.
Аноним 20/04/20 Пнд 13:40:15 #21 №1662807 
2020-04-20 153633-main.c - VSCodium.png
18ps27.jpg
>>1662629
Спасибо ананасик.
Аноним 20/04/20 Пнд 17:15:14 #22 №1663090 
Аноны, а как в коде записывается постоянное нажатие одной кнопки? Ну в тех же играх к примеру чтобы персонаж всё время шёл нужно одну кнопку зажимать, или в конференции микрофон работает до тех пока ты удерживаешь кнопку. Как это записать в коде?
Аноним 20/04/20 Пнд 17:15:44 #23 №1663091 
>>1662807
что за gui у тебя?
Аноним 20/04/20 Пнд 17:43:47 #24 №1663101 
>>1663090
Методами ос.
Аноним 20/04/20 Пнд 17:45:52 #25 №1663102 
>>1663101
операционной системы чтоли?
Аноним 20/04/20 Пнд 17:54:00 #26 №1663107 
>>1663102
Ну мы тут вроде не энтомологией занимаемся.
Аноним 20/04/20 Пнд 18:06:42 #27 №1663119 
>>1663090
Просто работаешь напрямую с клавиатурой, или какой-то фреймворк для этого ищешь. До этого с клавиатурой работал терминал, а ты у него только готовый поток символов брал.
Аноним 20/04/20 Пнд 18:21:01 #28 №1663135 
>>1663091
windows 10 + wsl debian
Аноним 20/04/20 Пнд 18:25:01 #29 №1663139 
>>1663090
у кнопки два события (event) press_down press_up

гуглишь на чем пишешь как это у тебя реализовано
Аноним 20/04/20 Пнд 19:34:43 #30 №1663196 
>>1663139
>>1663119
>>1663107
спасибo, анчoусы

>>1663135
спасибo,
>debian
линуксoвская пoраша какая-тo да? чoму не win api юзаешь? ты ж пoд oкнами сидишь
Аноним 20/04/20 Пнд 19:46:06 #31 №1663215 
>>1663196
>win api
чтобы прибить себя гвоздями к шиндовсу?
Аноним 20/04/20 Пнд 20:45:03 #32 №1663275 
>>1663215
ну а зачем под линукс что-то писать? чтобы чесать чсв среди задротов и школоты. денег не заработаешь если будешь опенсорсом заниматься, всё в win упирается. тёти сраки, малолетние геймеры, студенты и прочие личности на линуксе не сидят
Аноним 20/04/20 Пнд 22:08:42 #33 №1663359 
>>1663275
>студенты
пиздеш
Аноним 20/04/20 Пнд 22:29:11 #34 №1663371 
K&R подходит для ньюфагов или это троллинг?
Аноним 20/04/20 Пнд 22:31:27 #35 №1663373 
>>1663371
Подходит, не троллинг.
Язык несильно поменялся, книга лаконичная и учит языку без навязывания стиля.
Аноним 21/04/20 Втр 00:16:19 #36 №1663425 
>>1663359
айти задрoтoв в расчёт не берём же
Аноним 21/04/20 Втр 00:17:24 #37 №1663426 
>>1663371
для совсем ньюфагов которые вообще ничего не знают о погромировании не подходит. подходит если ты допустим писал на каком-нибудь питоне, потом начал си учить вот тогда подходит. если ты уже знаешь что такое рекурсии, массивы и т.д.
ВАЛЕРА 21/04/20 Втр 00:25:35 #38 №1663430 
А тут можно попросить помощи с вопросами по лабе из универа?
4 вопроса тут у препода возникло, хочу сдать пока есть возможность.
ВАЛЕРА 21/04/20 Втр 00:31:03 #39 №1663433 
>>1663430
1. Что передается в аргументах функции main()? ( argc / argv там в main у меня )

2. Значение, которое возвращается из функции main(). Можно его каким-то образом получить там, откуда была запущена программа (например, в терминале)?

3. С помощью каких функций стандартной библиотеки можно преобразовать строки в числа? Перечислить как минимум три группы функций.

4. Чем статическое выделение памяти в программе на C отличается от динамического? Привеcти примеры
Аноним 21/04/20 Втр 00:37:54 #40 №1663434 
>>1663433
Это же элементарные вопросы. Нахуй ты вообще там учишься?
Аноним 21/04/20 Втр 00:45:39 #41 №1663437 
>>1663434
Не успел просто освоить Си, восстановился недавно.
Аноним 21/04/20 Втр 03:18:47 #42 №1663470 
>>1663433
1. Что хочешь то и передаётся, можешь ничего не передавать и поставить туда void впринципе всё как у всех функций.

2. Да, main всегда возвращает что-то в окружение, даже если ты не поставишь return в коде он вернёт какой-то код.

3. Блин, усложнил. Пришлось открыть книгу k&r и вспоминать. Это atoi из библиотеки stdlib.h по поводу трёх групп сам ищи в этот бессмысленный и беспонтовый вузиковский дроч углубляться смысла нет, ибо если ты даже выучишь то если не будешь использовать это то забудешь.

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

Но опять же это всё не факт, т.к. смотри строки ниже

учу си с 10-го января 2020, 22 лвл, птушное образование, 2,5 года сижу на мамкиной шее из дома не выхожу
Аноним 21/04/20 Втр 03:25:22 #43 №1663471 
>>1663470
хотя по поводу третьего я не понял про группы, но есть ещё 2 функции которые переводят в числа символы это atof и atol как там просто разные выходные типы есть long, int и double надеюсь ты это имел в виду
Аноним 21/04/20 Втр 04:58:28 #44 №1663477 
>>1663470
>Да, main всегда возвращает что-то в окружение, даже если ты не поставишь return в коде он вернёт какой-то код.
А получить то его как?
Аноним 21/04/20 Втр 04:59:18 #45 №1663478 
>>1663477
echo $?
Аноним 21/04/20 Втр 04:59:54 #46 №1663479 
>>1663478
хз, о чем ты
Аноним 21/04/20 Втр 05:02:59 #47 №1663480 
>>1663479
вот именно.
Аноним 21/04/20 Втр 05:13:28 #48 №1663481 
>>1663433
4. Статическая выделяется во время компиляции, хранится в стеке, не может быть изменена после компиляции.
Динамическая выделяется во время выполнения, хранится в куче, может изменять размер во время выполнения.
int a; // статическая
int a = (int) malloc(sizeof(int)); // динамическая
Аноним 21/04/20 Втр 05:14:04 #49 №1663482 
>>1663481
ебаная двачеразметка съела звездочки
Аноним 21/04/20 Втр 06:37:22 #50 №1663490 
Реализовал состояние программы глобальной структурой, о которой все знают. Норм практика? А то указатель неудобно перекидывать.
Аноним 21/04/20 Втр 06:40:10 #51 №1663492 
>>1663490
>Норм практика?
нет. смысл в этом есть только на старых и ограниченных системах.

главная проблема, что глобальные переменные ухудшают понимание программы.
Аноним 21/04/20 Втр 08:07:25 #52 №1663511 
>>1663492
>главная проблема, что глобальные переменные ухудшают понимание программы.

Лол, поаккуратнее, ты очень близок к призыву из Рльеха пердоли-байтоёба с его "РРРЯЯ ПИДОРЫ-ФУНКЦИОНАЛЬЩИКИ НЕ ХОТЯТ В СИШЕЧКЕ ГОВНО ЖРАТЬ. ДИДЫ ЖРАЛИ И МЫ БУДЕМ ЖРАТЬ. ТОЛЬКО ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ. ТОЛЬОК ХАРДКОР"
Аноним 21/04/20 Втр 08:18:55 #53 №1663514 
>>1663511
На самом деле сама программа ухудшает понимание программы. Все функции сделаны под другие функции, они не переносимы, они больше не вызовутся ниоткуда. Для крестов проблема звучала бы: использовать синглтон, или нет.
Аноним 21/04/20 Втр 08:42:20 #54 №1663521 
>>1663514
На самом деле проблема звучит так: дегенераты навкатывались в программирование и хотят чтобы язык за них писал хорошие понятные программы, ведь сами не могут, да и не хотят.
Аноним 21/04/20 Втр 09:19:45 #55 №1663525 
>>1663425
А кого ты собрался брать в расчёт в С-тхреаде?
Аноним 21/04/20 Втр 09:37:05 #56 №1663526 
Как возвращать новую строку, не засирая память новыми строками? Никак.
Аноним 21/04/20 Втр 09:41:45 #57 №1663528 
>>1663526
Даже вопрос непонятен.
Аноним 21/04/20 Втр 09:56:14 #58 №1663530 
>>1663528
Ломаю голову над тем, где чистить память под строку, которую возвращает создающая её функция. Если слепо смотреть на функцию, можно пропустить этот момент. Если использовать эту функцию, нужно чистить строку после использования. Если строка остаётся до конца использования программы, нужно чистить это при sigterm, чтобы не было ничего неучтённого.

Всё это неудобно.

Альтенативно можно инициализировать буфер char* x[MAX] = {}; и использовать только его либо внутри функции, либо извне, но во втором случае, нужно передавать дополнительные параметры в виде размера, а это усложняет код
Аноним 21/04/20 Втр 10:32:33 #59 №1663536 
>>1663530
Короче придумал.
В функции локально массив x[MAX] = {0};
Функция возвращает std::string, но на самом деле char*
Я беру новый std::string и в него вызываю функцию, инициализируя.
Аноним 21/04/20 Втр 10:34:50 #60 №1663537 
>>1663536
у меня есть некоторые сомнения, как лучше инициализировать в этой ситуации. Мож лучше таки memset-ом, вдруг массив инициализируется только по первому вызову
Аноним 21/04/20 Втр 10:52:13 #61 №1663541 
image.png
>>1663536
Крч хуй его знает чё там внутри происходит, если у меня в программах будут утечки памяти, мне похуй
Аноним 21/04/20 Втр 11:01:38 #62 №1663546 
image.png
>>1663541
sageАноним 21/04/20 Втр 11:17:45 #63 №1663551 
>>1663546
>The c_str() result becomes invalid if the std::string is destroyed or if a non-const member function of the string is called. So, usually you will want to make a copy of it if you need to keep it around.
Хмм.
Аноним 21/04/20 Втр 11:24:51 #64 №1663554 
>>1663546
>free
>A block of memory previously allocated by a call to malloc, calloc or realloc is deallocated, making it available again for further allocations.
Хмм.
Аноним 21/04/20 Втр 11:27:43 #65 №1663560 
>>1663546
>printf("%d", free(y));
>free Return Value: none
Хмм.
Аноним 21/04/20 Втр 11:33:35 #66 №1663564 
>>1663541
>>1663546
Уважаемый, ты тредом не ошибся?
Аноним 21/04/20 Втр 18:35:47 #67 №1663852 
>>1663514
кстати в продолжении темы. я мельком пролистал наса-код-стайл. они предлагают глобальные переменные объявлять extern'ом в начале каждой функции их использующих. но что делать, если ты назначаешь переменным адреса сам, типа так:

#define gl_screen_status (@(volatile [email protected])0xD800)
#define gl_sprites_left (@(volatile [email protected])0xD801)
#define gl_task_rem (@(volatile struct [email protected])(0xD802))
#define gl_task_add (@(volatile struct [email protected]) \
(0xD802 + sizeof(struct dlist_head)))

...

это же единственный стандартный способ это сделать?
Аноним 22/04/20 Срд 02:32:52 #68 №1664197 
Ку, байтоебач
Как линуксовый форк дружит с мультитредингом?
Допустим, я хочу запустить N отдельных процессов (1 батя у которого N сынок-корзинок), чтобы не было зомби-процессов, мне в куске батиного кода нужно от каждого сына ждать сигнал с помощью сисколла wait(или waitpid), проблема в том, что он ждет каждый процесс по отдельности (сначала сын 1 завершился, потом сын 2, сын 3 и т.п.), а я хочу расфоркаться и чтобы эти N форков ебашили параллельно, а wait был типа асинхронным. Это возможно?
Аноним 22/04/20 Срд 02:36:24 #69 №1664198 
>>1663546
Ты на что делаешь free? У тебя нет ничего на куче, начнем с этого. Ты в курсе как отличаются стэк и куча? Знаешь что такое malloc/calloc?
Аноним 22/04/20 Срд 02:51:12 #70 №1664199 
>>1664197
Сначала расфоркайся, а потом жди, в чём проблема?
Аноним 22/04/20 Срд 02:55:18 #71 №1664200 
>>1664199
Бляха-муха, так я ж говорю
Я не хочу ситуацию, где я с расфорканным хлебалом жду каждого сына по отдельности, я хочу чтобы расфорканные процессы-сыновья выполнялись параллельно. То бишь, чтобы цпу прыгал между ними, выполняя по сути все N процессов-сыновей параллельно.
Аноним 22/04/20 Срд 03:05:11 #72 №1664201 
>>1664200
Так он так и делает? Это отдельные процессы, когда ты их отправил выполняться, ос между ними будет переключаться, а родитель пока ждёт.
Аноним 22/04/20 Срд 03:09:51 #73 №1664203 
>>1664201
Нет, братан.
Батя будет ждать каждый процесс по отдельности через wait, я тестил. А без wait там получается салат с UB и зомби-сыновьями, что при долгом исполнении могут задедлочить прогу. Отака хуйня
Аноним 22/04/20 Срд 03:25:15 #74 №1664204 
>>1664203
Ещё раз, ждать он будет каждый по-отдельности, но работать они будут все (кроме родительского процесса) параллельно, если ты сначала расфоркаешься, а потом будешь ждать.
Аноним 22/04/20 Срд 03:59:17 #75 №1664209 
>>1664203
Нет никакого смысла ждать сразу, если ты хочешь параллельные задачи. Лови SIGCHILD, чтобы узнать, что ребенок умер, и уже тогда делай ему wait.
Аноним 22/04/20 Срд 04:40:36 #76 №1664213 
>>1664209
Это понятно, что ему можно и сигнал обработать, но зачем? Из его описания я понял, что он просто распадается на процессы, что-то делает в них, а потом все их завершает. Тут даже ловить ничего не надо, просто все ожидания повесить в конец программы, и всё.
Аноним 22/04/20 Срд 07:17:54 #77 №1664230 
>>1664198
Это говномакака с другого языка.
Аноним 22/04/20 Срд 08:32:55 #78 №1664245 
>>1664198
>>1664230
Поясняю: я хотел понять, что делает объект крестов при вызове c_str, чтобы узнать, как долго этот объект хранится в памяти, чтобы понимать, когда зачищать память.
По итогам я понял, что c_str возвращает указатель, привязанный к объекту std::string и зависящий от его существования, т.е. конструкции/деструкции. Его не надо освобождать через free, он сам себя освобождает при delete std::string. Это должно было быть очевидно, но не было.

Уже нашёл лучшее решение первоначальной проблемы разметки памяти под строку через метод strdup. Однако так кодировку можно проебать, ибо 256 значений.
Аноним 22/04/20 Срд 08:35:40 #79 №1664247 
>>1664245
альсо я не с другого языка, я давно забытое вспоминаю.
Аноним 22/04/20 Срд 09:03:00 #80 №1664257 
>>1664245
> кодировку можно проебать, ибо 256 значений
Доброе утро. Вы находитесь в 2020 году, какие нахуй кодировки, если у нас уже много лет UTF-8 повсюду!
Аноним 22/04/20 Срд 09:20:30 #81 №1664268 
image.png
>>1664257
>utf-8 внутри объекта, который не предназначен для него
Интуитивно казалось плохой идеей, но обосновать не могу.
Аноним 22/04/20 Срд 09:52:23 #82 №1664280 
mi9ZOMmd.png
>>1663546
>printf("%d", free(y))
Аноним 22/04/20 Срд 10:04:44 #83 №1664286 
>>1664268
> utf-8 внутри объекта, который не предназначен для него
UTF-8 изначально дизайнился так, чтобы быть совместимым с сишными строками.
Аноним 22/04/20 Срд 10:29:33 #84 №1664293 
>>1664286
Ну да, и там и там набор байт, полная совместимость!
Аноним 22/04/20 Срд 10:40:51 #85 №1664295 
>>1664280
>void free
>void
неинтуитивно, ну и ладно.
Аноним 22/04/20 Срд 10:51:50 #86 №1664297 
>>1664257
>в 2020 году, какие нахуй кодировки
Если вылезти из манямира, то обнаружится туева хуча древнего но вполне актуального прикладного софта, разработка которого корнями уходит аж в 80-е, и относительно которого внезапно есть запрос на поддержку и расширение, но никак не на переписывание единственно-правильным-как-на-дваче-сказали способом.
Аноним 22/04/20 Срд 12:23:05 #87 №1664353 
>>1664213
Ну нет же
https://pastebin.com/SMmhhabn - на сам проверь
Если лень запускать, то вот какой аупут дает программа:
Random activity from child PID 45659
Random activity from child PID 45659
Random activity from child PID 45659
Random activity from child PID 45659
Random activity from child PID 45659
And now some other activity, still from 45659, outside of the loop
Random activity from child PID 45660
Yeah, 45659 is still outside of the loop and is going to die NOW
Random activity from child PID 45660
Random activity from child PID 45660
Random activity from child PID 45660
Random activity from child PID 45660
And now some other activity, still from 45660, outside of the loop
Yeah, 45660 is still outside of the loop and is going to die NOW
Random activity from child PID 45661
Random activity from child PID 45661
Random activity from child PID 45661
Random activity from child PID 45661
Random activity from child PID 45661
And now some other activity, still from 45661, outside of the loop
Yeah, 45661 is still outside of the loop and is going to die NOW
This child [45659] is dead :(
This child [45660] is dead :(
This child [45661] is dead :(
Dad passes away peacefully...


И где здесь параллельное выполнение процессов? Если бы оно имело место быть, то то, что происходит внутри процессов-детей, не шло бы одно за другим, как видно в аутпуте, а было бы вперемешку, ибо если бы был context switch, то цпу сначала исполнял бы код процесса X, а потом переключался бы на процесс Y и исполнял какой-то кусок кода у него, и так далее. Тут же ясно видно, что создается ребенок, исполняется весь код внутри процесса-ребенка от А до Я, потом следующий ребенок то же самое и так до ребенка N, потом батя получает оповещения о смерти всех N детей один за другим, причем в том порядке, в котором они исполнялись, а потом умирает сам. Где именно здесь параллельное выполнение процессов происходит?
Аноним 22/04/20 Срд 12:26:46 #88 №1664354 
>>1664353
ой бля, я обосрался с подливой, я заметил, что тут в некоторых моментах да происходит context switch, хоть и не такой активный, как хотелось бы. А до этого было аутпуты без него, клянусь! Хуета какая-то происходит, ну или я глючу.

Энивей, контекст свич слабоват, процесс ребенка почти полностью выполняется до того, как наступает исполнение следующего. В идеале хотелось бы, чтобы аж посередине цикла был контекст свитч на следущего ребенка, но яхз как это сделать, да и возможно ли
Аноним 22/04/20 Срд 12:38:18 #89 №1664366 
>>1664354
Потому что ос так решила. Ты лучше ос знаешь, когда контекст переключать? Это во-первых. Во-вторых, ты принтфами это не проверишь, потому что они буферизуются.
Аноним 22/04/20 Срд 12:40:24 #90 №1664367 
>>1664366
Ну, буферы можно флашнуть, поэтому это не проблема
А как буферизация влияет на это дело?
Аноним 22/04/20 Срд 12:44:10 #91 №1664373 
>>1664367
Это в любом случае сискол, их компилятор изо всех сил будет делать как можно меньше.
Аноним 22/04/20 Срд 12:47:00 #92 №1664376 
>>1664373
Причем здесь компилятор?
Аноним 22/04/20 Срд 12:59:33 #93 №1664380 
>>1664197
Не еби мозг напиши в пару строчек на хаскеле
Аноним 22/04/20 Срд 13:20:54 #94 №1664391 
пoчему некoтoрые загoлoвoчные файлы пишутся как <stdio.h> а некoтoрые как "calc.h" в чём разница между кавычками и скoбками?
Аноним 22/04/20 Срд 13:32:41 #95 №1664406 
>>1664391
Если имя-файла заключено в двойные кавычки, то, как правило, файл ищется среди исходных файлов программы; если такового не оказалось или имя-файла заключено в угловые скобки <и >, то поиск осуществляется по определенным в реализации правилам.

>>1663477
ну у меня на винде oн всегда сам вoзвращается стрoкoй "Прoграмма была заверешна с кoдoм: ..." и вoт этoт кoд и есть ретурн в oкружение. Тoт ктo прo echo писал видимo линукс имел в виду.
Аноним 22/04/20 Срд 14:29:36 #96 №1664444 
>>1664376
Компилятор слепит твои принтфы в кучу, чтобы не делать много сисколов.
Аноним 22/04/20 Срд 16:33:59 #97 №1664595 
Привет всем
Скажите, а может случиться ситуация, что баги в легаси софте закончатся? Как бы я вижу, что каждый год ловят по пару сотен, а то и тысяч, багов в сишном и плюсовом коде, но баги связанные с памятью (разные переполнения и проблемы с указателями) такое ощущение будто не пропадают, создается иллюзия того, что их бесчисленное множество. Кто шарит и может сказать почему так и почему это не заканчивается? И если когда-нибудь закончится, то когда? 20 лет, а может через 50 лет?
Аноним 23/04/20 Чтв 05:14:57 #98 №1665129 
>>1664354

Ну так сделай у каждого ребёнка вычисление пожирнее, пердоля.
Аноним 23/04/20 Чтв 07:23:51 #99 №1665141 
Бамп
Аноним 23/04/20 Чтв 08:23:04 #100 №1665155 
>>1664595
Потому что пофиксив 1 баг, создают еще 10 и так по экспоненте
Аноним 23/04/20 Чтв 11:06:42 #101 №1665211 
>>1665155
Как писать без багов? Может ли модульное тестирование и контрактное программирование решить проблему?
Аноним 23/04/20 Чтв 12:53:11 #102 №1665272 
>>1665129
у меня сейчас performance-critical личный проект, пердолиться я просто обязан.
Аноним 23/04/20 Чтв 12:57:03 #103 №1665277 
>>1665155
Интересная теория. Этому есть какое-то подтверждение/математическое объяснение? Или хотя бы статистика? Сам факт бесконечного наличия багов в сотфах косвенно на это указывает?
Аноним 23/04/20 Чтв 13:43:00 #104 №1665350 
>>1665272
>у меня сейчас performance-critical личный проект, пердолиться я просто обязан.

Я думал, тебе чисто поиграться, продемонстрировать себе.
Тогда, судя по твои жалобам, ты пытаешься параллелизовать хуёво. У тебя оверхед на отпочковываие процесса сопоставим с полезными вычислениями, в нём проводимыми. Придумывай как нормально раскидывать. Перформанс критикал, май эсс...
Аноним 23/04/20 Чтв 17:30:09 #105 №1665663 
>>1665211
Никак. Макаки все равно умудрятся на говнокодить. Для них собственно и созданы такие япы как js/rust итд.
Аноним 23/04/20 Чтв 18:11:33 #106 №1665693 
>>1665663
Но софт с багами, про который говорит >>1664595 очевидно был написан сертифицированными профессионалами за немалую зарплату, разве нет?
Аноним 23/04/20 Чтв 18:23:04 #107 №1665700 
>>1665211
Опыт. Даже прекрасно понимая суть сей, некоторые особенности узнаешь только в работе. Я вот сегодня-вчера понял, что запись в файл не работает из-за отсутствия fflush. Везде в функцию сунул логгирование и так ничего и не выявил, а решение было такое.

>>1665663
Самоуверенность поприбери плиз.
Аноним 23/04/20 Чтв 18:27:41 #108 №1665702 
>>1665700
Мой стиль кода на C - писать большую программу, абстрагируя всё что надо с учётом особенностей языка, а когда этот заготовок готов, в нём предсказуемо что-то не работает, и ты как голодный пёс ищешь решения в интернете, а они нихуя не описывают твой случай, поэтому идёшь нахуй.
Аноним 23/04/20 Чтв 18:45:28 #109 №1665717 
>>1665702
Это пиздец отстойный подход. Практиковал такое будучи мидлом, потом понял что это всё хуйня, и нужно делать всё bottom-up, иначе всегда есть шанс капитально насосаться.
Аноним 23/04/20 Чтв 20:03:49 #110 №1665810 
>>1665350
Как тогда быстрее работать одновременно с N процессами, если не дохуя форков у одного бати? Мультитрединг не катит, ибо тред исполняется в контексте конкретного процесса, а в треде я не смогу вызвать execve. Поэтому без высирания какого-то гипервизора с кастомизированным IO, я не думаю, что есть способ получше работать с большим кол-вом процессов (не тредов!) одновременно. Отака хуйня.
Аноним 23/04/20 Чтв 20:08:30 #111 №1665819 
>>1665700
>Опыт.
Хуёпыт. Баги в софте будут всегда, и чем больше кодовая база, тем больше багов, причем зависимость там экспоненциальная.
>Никак. Макаки все равно умудрятся на говнокодить. Для них собственно и созданы такие япы как js/rust итд.
Даже качественный код в больших кодовых базах имеет баги. В говнокоде они очевидные и легкодетектируемые, в хорошем коде они нетривиальные, но они были, есть и будут. Это часть реальности.
Аноним 23/04/20 Чтв 21:38:29 #112 №1665878 
>>1665810
>performance-critical
>хуярит execve кучи процессов
Поддерживаю анона выше, тут даже разговора уже нет про перформанс всей этой конструкции.
Аноним 23/04/20 Чтв 21:43:12 #113 №1665885 
>>1665693
Софт с багами написан джунами, за которыми не уследили. Или профессионалами, которым не дали времени, чтобы писать нормально. Или это легаси с тех времен, когда всем было похуй. Или это опенсорс, где всем похуй перманентно, и код никто не читает, максимум диффы комита посмотрят. И гораздо реже это новые классы атак, о которых раньше никто не думал.

>>1665810
Ты лучше расскажи, какую конкретно задачу ты решаешь.
Аноним 24/04/20 Птн 01:58:15 #114 №1666034 
>>1665878
У тебя есть задача иметь N процессов (повторюсь, именно процессов, не тредов), которые исполняются параллельно и делают что-то. Что бы ты сделал?
Аноним 24/04/20 Птн 02:04:29 #115 №1666036 
>>1666034
>У тебя есть задача иметь N процессов
Что это за задача такая? Конечный результат какой? "N процессов существуют"?
Аноним 24/04/20 Птн 02:09:08 #116 №1666037 
>>1666036
Я пишу фаззер. Я хочу добиться того, чтобы каждый из N процессов хавал свою версию мутированного файла, который им скармливает батёк.
Аноним 24/04/20 Птн 02:56:18 #117 №1666044 
>>1666037
И как тебе в таком случае поможет постоянное переключение контекста? Чтобы помедленнее тестирование было хочешь? Переключение, это дорогая и вынужденная операция, стремиться к ней, довольно странная идея.

А так батей нужно распасться на треды, и ораганизовывать постоянную мельницу съедания и запуска детей, для чего man 3 sigaction придётся изучить.
Аноним 24/04/20 Птн 02:59:48 #118 №1666046 
>>1666044
Как ты из треда (не процесса) запустишь отдельную программу через execve? (в данном случае тестируемую) Это так не работает, тебе process image тестируемой программы перекроет фаззер и все.
Аноним 24/04/20 Птн 03:03:52 #119 №1666047 
>>1666046
форк-экзеком, как и из процесса?
Аноним 24/04/20 Птн 08:08:44 #120 №1666084 
main1.png
main2.png
main3.png
А можно ли как-то в С (С99 если важно) проверить есть ли реализация функции или нет?

Подробно что именно нужно:
пик 1) Вот есть объявление функции, реализация и вызов, все работает, что логично
пик 2) Есть только объявление функции, но не написана ее реализация, вызвать ее не можем, но без нее тоже все работает, т.е. можно просто объявить
пик 3) Основной вопрос, можно ли как-то чекнуть наличие реализации и только в том случае, если есть, тогда сделать вызов функции
Аноним 24/04/20 Птн 08:12:36 #121 №1666086 
>>1666084
Я не знаю работает ли это, но можно декларировать вызываемую функцию, а затем сравнивать её как переменную с нулём.
Аноним 24/04/20 Птн 08:13:27 #122 №1666087 
>>1666086
тому що функция это просто указатель
Аноним 24/04/20 Птн 08:18:46 #123 №1666089 
main4.png
>>1666086
Нет, ну если раскомментировать с третьего пика реализацию функции, то проверка что указатель есть сработает, это понятно.

А тут именно в рантайме проверять есть ли реализация, а не на этапе компиляции.
Аноним 24/04/20 Птн 08:20:34 #124 №1666090 
По идее в тех же OpenGL-ях как-то чекают есть ли та или иная функция именно в рантайме, чтобы задать разное поведение.
Аноним 24/04/20 Птн 08:24:10 #125 №1666094 
дублирую вопрос раз советуют
>>1666085 →
>>1666093 →
Аноним 24/04/20 Птн 10:30:28 #126 №1666168 
>>1666084
В компиляторах обычно есть поддержка weak-символов. Для гцц можно так: https://pastebin.com/raw/AndYnqYB (попробуй собрать просто так и с -DWITH_FOO).

> можно ли как-то чекнуть наличие реализации
По-хорошему этим должен заниматься твой ./configure, ну или другая часть системы сборки. Или ты можешь вынести такие функции в разделяемую библиотеку и использовать dlopen/dlsym, чтобы искать функции.

>>1666094
В студии в свойствах проекта выбери шланговый фронтенд в качестве компилятора (поставь инсталлятором той же студии, если нету). Перед последним аргументом в select поставь &, тебе адрес нужен, а ты в него структуры толкаешь.
Аноним 24/04/20 Птн 13:39:03 #127 №1666329 
Есть структура example, хочу создать динамический одномерный массив таких структур.

В main у меня

example *array = NULL;

Получается мне никак его не передать в функцию?
Т.е. надо писать функцию которая возвращает что-то, чтобы можно было написать

array = myFunction();?
Аноним 24/04/20 Птн 14:11:10 #128 №1666370 
>>1660319 (OP)
Привет СиТредик, есть тут матеры Си кодеры которые именно работают Си программистами, расскажи что делаете и какой стек надо знать
Аноним 24/04/20 Птн 14:19:49 #129 №1666384 
>>1666329
Я чет нихуя не понял, что ты хочешь, можешь нормально расписать ?
Аноним 24/04/20 Птн 14:38:36 #130 №1666397 
>>1666329
Передача параметров и возврат происходят через копирование в стек. Копировать без надобности большие структуры медленно и плохо, и засирать стек тоже плохо, поэтому по значению передаются только элементарные маленькие типы вроде чисел или отдельных символов. Большие же структуры не передаются, только указатели на них, которые простые числа.

Динамический массив это не массив, а простой указатель на буфер памяти, который ты выделил для своих данных (структур). Если ты выделил память до вызова функции, тогда просто передай указатель в функцию и она с данными через него будет работать.
example ★array = malloc(sizeof(example) ★ ARRAY_SIZE);
myFunction(array);

Если же хочешь чтобы выделение произошло внутри функции, тогда нужно передать указатель на указатель. Функция выделит буфер и присвоит его адрес внешнему указателю через указатель на него.
example ★array = NULL;
myFunction(&array);

void myFunction(example ★★parray)
{
example ★array = malloc(sizeof(example) ★ ARRAY_SIZE);
★parray = array; // вернули указатель наружу
array[0].member1 = ...;
array[0].member2 = ...;

// или так
★parray = malloc(sizeof(example) ★ ARRAY_SIZE);
(★parray)[0].member1 = ...;
(★parray)[0].member2 = ...;
}


Аноним 24/04/20 Птн 15:12:43 #131 №1666423 
>>1666397
>тогда нужно передать указатель на указатель
Не думал что так можно сделать, а NULL передавать бессмыслено. Собственно поэтому вопрос и назрел.
>Если же хочешь чтобы выделение произошло внутри функции, тогда нужно передать указатель на указатель.
До того как я прочитал ответ сделал без передачи через возврат.

Получилось условно:

В майн у меня так и осталось:
example array = NULL;
array = myFunction(99);

Функция приобрела вид:

example myFunction(int count) {
example array_func = NULL;
// Присвоил указателю указатель на выделенный кусок памяти
array_func = (example)malloc(sizeof(example)*count;
// Возвратил получившийся указатель
return(array_func);
}

Выглядит вроде бы корректно.

Сейчас попробую переписать под передачу указателя на указатель, чтобы внутри функции сразу можно было проверять что массив еще не был выделен, а если был очищать его и выделять заново.
Аноним 24/04/20 Птн 15:14:37 #132 №1666426 
>>1666423
... и тут я понял почему звезды

example ★array = NULL;
array = myFunction(99);

example ★myFunction(int count) {
example ★array_func = NULL;
array_func = (example★)malloc(sizeof(example)*count;
return(array_func);
}
Аноним 24/04/20 Птн 15:28:54 #133 №1666445 
Стикер
>>1666090
>именно в рантайме
Как может получиться, что ты во время компиляции не знаешь, есть у тебя функция или нет?
Аноним 24/04/20 Птн 15:54:53 #134 №1666469 
>>1666397
Спасибо, все получилось.

Корректно будет если я в функции напишу
if (★parray != NULL)
free(★parray);

?
free работает с адресами которые были выделены malloc'ом? Т.е. он пройдет по указателю, увидит адрес и сопоставит с тем что было выделено?
Аноним 24/04/20 Птн 17:21:52 #135 №1666545 
>>1666445
Например, ты пишешь статическую либу. Если пользователь либы реализовал функцию (например, логирование ошибок), ты ее вызываешь. Если нет - предоставляешь реализацию по умолчанию. Хотя обычно делают просто mylib_set_error_log(&user_func).
Аноним 24/04/20 Птн 17:23:21 #136 №1666546 
>>1666469
>free работает с адресами которые были выделены malloc
Да, и только с ними. И еще тебе там не нужен if, потому что free(NULL) делать разрешено.
Аноним 24/04/20 Птн 17:46:08 #137 №1666568 
>>1666545
Так функция и так и так есть, иначе твоя либа или не либа не соберется из за ошибки линковщика.
Аноним 24/04/20 Птн 17:47:02 #138 №1666570 
>>1666445
Вот это и уточнял можно ли как-то определять наличие реализации функции в рантайме или возможности ее переопределения. Ни того ни другого в сишечке нет, чтобы не было привязки к компиляторам.
Поэтому буду через колбеки видимо.
Аноним 24/04/20 Птн 17:51:23 #139 №1666573 
>>1666570
Ты не понимаешь что такое компиляция, скриптомакака.
Аноним 24/04/20 Птн 18:06:52 #140 №1666583 
>>1666568
А можно программу написать, допустим с GUI и консольным выводом в одном исполняемом файле?

Допустим если нет библиотек для gui на компьютере где ее запускают, то можно было ее запустить в консольном режиме.

другой анон
Аноним 24/04/20 Птн 18:22:33 #141 №1666595 
>>1666568
И чё? Указатель на функцию должен быть по здравому смыслу.

либа:

void handler(int user, char name, char value);

int initreghandlers() {
// ...
if (handler = 0x0) return 1;
// ...
}

пользователь:

#include "либа.х"

void handler(int user, char name, char value) {
return;
}
Аноним 24/04/20 Птн 18:23:29 #142 №1666596 
>>1666595
>handler = 0x0
handler == 0x0
Аноним 24/04/20 Птн 18:25:58 #143 №1666600 
>>1666595
так вейт, по идее либа должна требовать внешний заголовок, в котором дефайним хендлер.
Аноним 24/04/20 Птн 19:05:37 #144 №1666642 
>>1666568
> не соберется из за ошибки линковщика
Я же показал пример: >>1666168 Все соберется, все давно придумано до вас.

>>1666583
> А можно программу написать, допустим с GUI и консольным выводом в одном исполняемом файле?
В линуксе никто тебе не мешает. А вот в винде GUI/CUI жестко прибито гвоздями в формате исполняемых файлов, и даже если сделать консольное по сути приложение, которое создает окно и прячет консоль, все равно будут вылезать всевозможные косяки, если такое приложение запускать из уже существующей консоли, и еще больше косяков, если запускать его, например, из FAR-а.
Аноним 24/04/20 Птн 19:07:53 #145 №1666643 
>>1666642
Все будет хорошо. Можешь создавать окна из консольного приложения, и можешь создать окно консоли из оконного приложения.

Все отлично работает.
Аноним 24/04/20 Птн 19:13:35 #146 №1666645 
>>1666643
> можешь создать окно консоли из оконного приложения.
Я открыл консоль и написал yoba.exe. Твоя йоба создает окно консоли, НОВОЕ окно. Ты можешь AttachConsole, но так как шелл не блокируется после запуска GUI-приложения, вы с шеллом будете конкурентно срать в консоль, и там наступит полный и совершенно нечитаемый пиздец.

> Можешь создавать окна из консольного приложения
А тут наоборот нельзя вменяемо detach-нуться, чтобы сымитировать поведение GUI-приложения. Т.е., ты запустил Blender.exe из фара, и вне зависимости от того, как ты там настроишь блендер (приложение, у которого subsystem=console), весь фар будет ждать его завершения.
Аноним 24/04/20 Птн 20:09:41 #147 №1666695 
На каком сайте читать справку по модулям из стандартной библиотеки Си? Для C++ есть cplusplus.com, там же справка по <c*> модулям, но неужели нет сайта, посвященного исключительно C reference?
зо тупой вопрос извените
Аноним 24/04/20 Птн 20:17:01 #148 №1666702 
Как силами glibc argp обеспечить порядок парсинга опций?
Я всего-то хочу, чтобы -f парсилась после -b, чтобы ради одного конфликта не писать функцию предобработки аргументов последующим звеньям.
В доках нашел ток одно упоминание order, там про другое... Думаю, мб дочернюю структуру argp присоединить с одной из опций, которую хочу позже? Но нигде гарантий не нашел по этому поводу.
Аноним 24/04/20 Птн 21:59:11 #149 №1666758 
опять я и мои тупые ошибки
asctime(gmtime(time(0x0)))
>argument of type "time_t" is incompatible with parameter of type "const type_t"
asctime(gmtime(time((time_t)0x0)))
>та же ошибка

>>1666695
https://en.cppreference.com/w/c
Аноним 24/04/20 Птн 22:03:18 #150 №1666762 
>>1666758
разобрался
asctime(gmtime((const time_t*)time(0x0)))
Аноним 24/04/20 Птн 22:19:37 #151 №1666777 
С чем связано это предупреждение? Как правильно вывести на экран size_t?
warning: unknown conversion type character 'z' in format [-Wformat=]
printf("%zu\n", s);


Стандарт C11,
gcc version 7.3.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
Аноним 24/04/20 Птн 23:23:32 #152 №1666828 
>>1666777
%lu
?
Аноним 24/04/20 Птн 23:34:01 #153 №1666845 
>>1666828
Это long unsigned. Насколько я понимаю, в стандарте не говорится, какого размера должен быть size_t. По идее, он может не совпадать с long long unsigned, это не так?
Аноним 24/04/20 Птн 23:35:46 #154 №1666847 
Чё за пиздец? Вот есть у меня func(unsigned char matrix[SIZE][SIZE]). Снаружи есть unsigned char ptr; Выделяю память под матрицу, передаю выделенную память в ptr, перед тем как передать в func кастую ptr к ((unsigned char (*)[SIZE]) а то компилятор ругается. Но когда запускаю программа в рантайме умирает с дереференсом нулла. Причем если выделить память на стеке все норм работает. Каст что как то данные изменяет или что? Поч программа может крашиться?
Аноним 24/04/20 Птн 23:37:53 #155 №1666854 
>>1666845
your only option is to cast your variables to unsigned long long and use %llu to be maximally portable.
Аноним 24/04/20 Птн 23:38:33 #156 №1666855 
>>1666847
unsigned char`` ptr;
имелось ввиду
Аноним 24/04/20 Птн 23:39:06 #157 №1666857 
>>1666855
бля я идиот короче там 2 звездочки вы поняли
Аноним 24/04/20 Птн 23:41:16 #158 №1666859 
>>1666857
Очевидного говна нет, кода бы немного проблемного
Аноним 24/04/20 Птн 23:49:18 #159 №1666869 
>>1666854
Okey, got it, thank you. But, actually, I don't really understand, why %zu, described in the reference, doesn't work.

https://en.cppreference.com/w/c/io/fprintf
http://cplusplus.com/reference/cstdio/printf/
Аноним 24/04/20 Птн 23:51:30 #160 №1666873 
>>1666762
Лол, это надо в рамку и на стену. Поведение этой программы на самом деле зависит от фазы луны.

>>1666777
> С чем связано это предупреждение?
С отсутствующим флагом -std=c11 при компиляции.

>>1666857
> бля я идиот короче там 2 звездочки вы поняли
А должна быть одна, это непрерывный массив. Из-за особенностей Си, matrix[SIZE][SIZE] в аргументах функции кастится к указателю, т.е., к unsigned char (∗)[SIZE], т.е., к указателю на массив из SIZE unsigned char-ов. Если внутри функции ты обращаешься к нему по двум индексам, matrix[a], то первый индекс делает прибавляет к адресу matrix sizeof(unsigned char (∗)[SIZE]) ∗ индекс, а второй дереференсит массив. Т.е., массив должен быть непрерывным куском памяти, а не массивом указателей на массив char как у тебя.
Аноним 24/04/20 Птн 23:56:47 #161 №1666879 
image.png
>>1666873
>С отсутствующим флагом -std=c11 при компиляции.
Пробовал ставить, не помогает.
Аноним 24/04/20 Птн 23:59:31 #162 №1666881 
Ананасы, а помогите мне с ебаным в рот simd парадоксом?

Почему-то компилятор (clang 10) векторизует простые операции на 4*u32 в виде массивов, но лепит скалярные __u128_t, оба из одного union-а. gcc вообще пиздец, про него даже не вспоминаю. Подозревал лажу с alignment-ом, но он, как и положено, у неупакованный struct-ов естественный.

Вот код: https://godbolt.org/z/zJ7ZUB

Мне, собсна, зачем: я пишу эмулятор второй плойки, и у её проца куча инструкций типа "параллельно сложи 16 u8 из одного регистра 128" и "сделай xor двух регистров u128". Если компилятор не может из этой нудятины сделать sse2, мне придется дропнуть Си в пользу Крестов, потому что я ебанусь колхозить под них simd библиотеку.
Аноним 25/04/20 Суб 00:01:12 #163 №1666883 
>>1666879
> Пробовал ставить, не помогает.
Должно работать. В гцц поддержка символов форматирования из C99 сделана несколько через жопу, но она уже много версий подряд существует, вряд ли ее сейчас сломали. Ты #include <stdio.h> точно не забыл? Хотя...
> Built by MinGW-W64
вот эти могли. Мне сейчас потестить mingw-w64 не на чем, а вот настоящем mingw все точно было ок.
Аноним 25/04/20 Суб 00:04:57 #164 №1666887 
>>1666883
Только сейчас узнал, что ненастоящим mingw пользовался. Спасибо, анон.
Аноним 25/04/20 Суб 00:08:54 #165 №1666892 
>>1666887
А какой настоящий?
В мсус настоящий? На sourgeforge настоящий?
Аноним 25/04/20 Суб 00:12:08 #166 №1666897 
>>1666892
WSL с убунтой и mingw-w64 поставь и не парься. MinGW-W64 с появлением WSL идёт внахуй.
Аноним 25/04/20 Суб 00:27:08 #167 №1666901 
>>1666887
Да я не это имел в виду. mingw-w64 более норм, но под "настоящим" имел в виду "классический" mingw, который с сорсфоржа.

>>1666881
Такова жизнь. Унеси uint128_t, принеси __m128i. А чтобы не было сюрпризов, и не приходилось дрочить на дизасм, лучше взять интринсики.
Аноним 25/04/20 Суб 00:44:58 #168 №1666907 
>>1666901
Да похоже придётся. Самое хуёвое, что штатно оберток над simd и нет нигде: ни в Крестах, ни в Ржавом, ни в Зиге. Ржавый вот уже два года мучает жопу, но не выходит каменный цветок. Повезло ещё, что sse2 и neon почти везде есть, не придется городить cpu dispatch.
Аноним 25/04/20 Суб 01:14:47 #169 №1666920 
>>1666645
Ты даун криворукий и не можешь =/= нельзя сделать. Я постоянно пользуюсь консольной программой создающей графическое окно. Если тыкнуть из проводника создается окно консоли и графическое, если запустить из консоли, занимает консоль пока не выйдет как любая консольная программа, а создается только графическое окно.
sageАноним 25/04/20 Суб 01:42:37 #170 №1666927 
>>1666920
> Ты даун криворукий и не можешь
Ты вот прочитать не можешь даже.

> занимает консоль пока не выйдет как любая консольная программа, а создается только графическое окно
Как раз об этом я и говорю. Есть такие требования: иметь опциональную консоль для отладочного вывода. Т.е., чтобы была некая галочка "вкл-выкл консоль" в настройках или соответствующий аргумент командной строки, потому что обычному юзеру консоль нахуй не всралась.

И вот представим, что эта галочка снята, консоль не нужна. Спрятать консоль при запуске с десктопа не проблема, это умеют и делают многие приложения, как, например, тот же Blender. Но нужно еще освободить родительскую консоль, если нас из консоли запустили (FreeConsole()? хуй там!). Вот, например, ты запустил cmd, написал notepad.exe, и у тебя есть нотепад, и его никто не ждет, можешь еще один запустить. Нужно сделать так же. И вот тут ты начинаешь сосать или городить пиздецовые костыли с двумя бинарниками есть еще более костыльный способ - менять подсистему прямо в заголовках собственного exe-шника, но на него возбуждаются антивирусы, поэтому он неприменим на практике.
Аноним 25/04/20 Суб 02:43:47 #171 №1666942 
>>1666927
AllocConsole вкл @ FreeConsole выкл. Если выкл не получается, ищи, кто ещё использует твою консоль. А вообще, ты занимаешься хуйнёй - пиши в log-файл и не шатай анонам мозги.
Аноним 25/04/20 Суб 07:00:44 #172 №1666968 
C.png
Как обойти такую проблему, чтобы компилятор выдавал хотя бы предупреждение о несоответствии передаваемого типа.

Накидал пример в виде типа либы для векторов. Понятно, что пользователь сможет задать какой-то несуществующий параметр у вектора типа v[666] и запорот данные. Но как оформить так, чтобы хотя бы уберечь пользователя от ввода вектора разных размерностей?

Пока только вижу, что вектора определять как структуры x,y и x,y,z и там уже внутри он ругнется, когда будет z присваивать.
Аноним 25/04/20 Суб 07:16:07 #173 №1666972 
>>1666968
>передаем другой тип в функцию
>typedef
Аноним 25/04/20 Суб 07:20:47 #174 №1666973 
>>1666972
ну так я и говорю, что понимаю, что новый тип таким методом не создается. Вот и спрашиваю каким методом сделать, чтобы пользователю выдавалось предупреждение, кроме как сделать через структуры. Может есть еще какой-то хитрый способ/общепринятый и гуру.
Аноним 25/04/20 Суб 07:24:36 #175 №1666974 
>>1666973
В сишке классов не завезли, поэтому да - структуры.
-Warray-bounds для предупреждения при выходе за границы
Аноним 25/04/20 Суб 07:29:34 #176 №1666975 
>>1666973
Можно ещё конечно явно передавать длину вектора, как в каком-нибудь memset и проверять длину, но это на любителя.

Кстати, в курсе, что у тебя вектора копируются?
Аноним 25/04/20 Суб 07:35:21 #177 №1666976 
>>1666975
>Можно ещё конечно явно передавать длину вектора, как в каком-нибудь memset и проверять длину, но это на любителя.
ну да, это либо еще передавать длину каждого вектора в функцию, либо завести структуру, которая содержит массив размерностей и размерность
>Кстати, в курсе, что у тебя вектора копируются?
в курсе, это просто пример для вопроса
Аноним 25/04/20 Суб 07:58:29 #178 №1666982 
C.png
Ну да, надо спать идти.. Можно ж было сделать так, тогда если передавать вектор другой размерности, то будет выдавать "from incompatible pointer type [-Wincompatible-pointer-types]"
Аноним 25/04/20 Суб 10:20:43 #179 №1667029 
Двощ, помоги. Начал интересоваться CUDA c синтаксисом C для курсача. Выбрал банальные задачки (сложение векторов и расчет интеграла), но нихуя все равно не работает блять, я уже на стену лезу и не понимаю.
https://pastebin.com/vcE2tsYC - вектора
https://pastebin.com/DtiEFeG4 - интеграл
Подсобите че к чему, пожалуйста
Аноним 25/04/20 Суб 11:41:07 #180 №1667061 
Объясните ущербному как разбить main на несколько файлов. Проект перевалил за 500 строк, надоело скролить.

У меня сейчас проект:
main.c
functions.c //Функции
types.h //Глобальные переменные и описания структур


в main.c

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

#include "functions.c"


в funtions.c
#include "types.h"

По моей логике должно быть так:
После стандартных stdio.h и т.д. должен вставится текст из types.h (т.к. он идет вложенным в functions), затем должен вставится текст из functions.c потом то что написано в main, т.е. должен получится единый длинный файл.

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

>In file included from functions.c:1,
> from main.c:8:
>types.h:17:3: note: previous declaration of ‘GAME_Symbol’ was here
>} GAME_Symbol;
Аноним 25/04/20 Суб 11:43:37 #181 №1667062 
>>1667061
выреди из середины файла кусок и сохрани его в файл filename
потом вместо него в своем мэйне впиши #include "filename"
sageАноним 25/04/20 Суб 12:25:39 #182 №1667095 
>>1667061
> Компилятор ругается на структуры в майн, будто я их создаю заново и их не было в types.h
Судя по тому куску, у тебя тайпдеф в main.c. ЗАЧЕМ ты создаешь его заново, если он уже есть в types.h?

Алсо, так никто на файлы не разбивает. Сделай как люди:
functions.c: функции, инклудит functions.h
functions.h: декларации функций из functions.c, инклудит types.h
globals.c: глобальные переменные, инклудит globals.h
globals.h: декларации глобальных переменных с ключевым словом extern, инклудит types.h
types.h: типы (заодно можешь еще почитать, как через тайпдефы incomplete структур скрывать реализацию)
main.c: остальной говнокод, инклудит все .h (но не .c). Собираешь все это говно cc *.c
Аноним 25/04/20 Суб 12:44:25 #183 №1667104 
>>1667095
>ЗАЧЕМ ты создаешь его заново, если он уже есть в types.h?
я не создавал его заново, там в майн было просто:
GAME_Symbol variable = ...;
оно ругалось на все структуры

>Алсо, так никто на файлы не разбивает. Сделай как люди:
Приму к сведению. пока обратно в один файл собрал
Аноним 25/04/20 Суб 12:49:18 #184 №1667106 
>>1667029

Ты че вообще делаешь, разве в куде не надо кернелы загонять
на хост, как в OpenGL?
Аноним 25/04/20 Суб 13:02:10 #185 №1667117 
>>1667106
да я сам только две минуты как занимаюсь этим. А че ты сказал, куда и что загонять надо?
Аноним 25/04/20 Суб 13:50:43 #186 №1667161 
>>1666927
Сама консоль позволяет запускать в ждущем режиме или прямо сразу продолжать дальше.
Аноним 25/04/20 Суб 14:48:09 #187 №1667195 
>>1667117
А почему ты думаешь, что вычисления неправильные? С чем сравниваешь?
Аноним 25/04/20 Суб 17:11:30 #188 №1667261 
>>1666968
Зачем ты используешь массивы, если можно использовать структуры? Что такое b[0] b[1] и b[2] не понятно, в отличие от b.x, b.y и b.z.
Аноним 25/04/20 Суб 17:16:09 #189 №1667266 
>>1667261
Таков путь заказчик.
Аноним 25/04/20 Суб 18:08:13 #190 №1667313 
>>1667266
Зачем ты за того антончика отвечаешь, это же явно laba1.
Аноним 26/04/20 Вск 00:53:13 #191 №1667737 
>>1667261
Почему-то червей в учебках всегда учам массивам, вот они их и суют везде в своих домашках. Наверное от ебанутой манеры, что программирование это математика, а в математике часто массивы, структур же в математике нет, вот и шизанутые учителя математики так заливают в тупые бошки школоты.
Аноним 26/04/20 Вск 03:56:02 #192 №1667784 
cglm.png
>>1667737
а мужики-то и не знали
https://github.com/recp/cglm/blob/master/include/cglm/types.h
Аноним 26/04/20 Вск 04:41:25 #193 №1667787 
>>1667784
>вектор матрица
Я и говорю, матиматюхи головного мозга, суют массивы, ведь в математике структур нет.
Аноним 26/04/20 Вск 05:34:27 #194 №1667796 
c.png
c2.png
>>1667787
еще поэтому:
https://cglm.readthedocs.io/en/latest/opengl.html
еще, чтобы писать как на пике 1.

А когда-то лучше как на пике 2.

Аноним 26/04/20 Вск 05:44:51 #195 №1667797 
>>1667796
Вот с юнионом другое дело. Я понимаю, что массив может быть удобен для например автоматического присваивания всех элементов (по индексу удобнее, чем по имени), но это крайние случаи, нормальные имена членов должны быть в первую очередь, а плюшки с индексами только потом.
Аноним 26/04/20 Вск 06:23:46 #196 №1667798 
image.png
>>1666975
Так, секунду. А почему это они копируются? Разве запись const Vec3 a в данном случае не аналогично записи const float a[3]? То есть, передается указатель, разве нет?
Аноним 26/04/20 Вск 06:27:12 #197 №1667799 
>>1667798
когда передаешь массив, передается указатель
со структурой или классом создается копия, если параметр явно не передается по ссылке или указателю
Аноним 26/04/20 Вск 06:29:09 #198 №1667800 
>>1667799
Так у него не структура
> typedef float Vec3[3]
Аноним 26/04/20 Вск 07:18:52 #199 №1667806 
>>1667061
Вангую ругается на глобалку.
в main.c создаёшь её инстанс
в main.h декларируешь её и сразу же после пишешь extern глобалка
Аноним 26/04/20 Вск 07:19:53 #200 №1667807 
>>1667806
ну и да, кажется её не мешает статической делать
Аноним 26/04/20 Вск 09:28:21 #201 №1667827 
>>1667797
Макакыч, не рвись, когда-нибудь и ты математику поймешь.
Аноним 26/04/20 Вск 09:47:32 #202 №1667830 
>>1667798
The more you know.

Шаблон порвался чет, думал все выделенное на стаке максимум должно жить внутри одной функции, а по указателям надо передавать все остальное.
Аноним 26/04/20 Вск 09:53:27 #203 №1667833 
А когда передаешь union с этого пика >>1667796 в функцию в виде
func(Vec2 vec), то он копирует структуру или указатель передает?
Аноним 26/04/20 Вск 10:46:56 #204 №1667852 
>>1667833
Union передается по значению. Структуры по значению. Все аргументы в сишке всегда передаются по значению, т.е., копируются.
Единственный нюанс в том, что массивы при использовании в коде автоматически кастятся к указателю на первый элемент (исключение: когда массив является операндом для &, sizeof или _Alignof, он не кастится). Именно это происходит тогда, когда ты пишешь имя массива в аргументах функции: в Си нельзя никак передать массив по значению, потому что на тот момент, когда ты пытаешься это сделать, этот массив уже деградировал до указателя. Зато этот указатель, как и все остальное в Си передается по значению.
Аноним 26/04/20 Вск 11:02:37 #205 №1667858 
image.png
>>1667852
>Зато этот указатель, как и все остальное в Си передается по значению.
Т.е. копируется? Кайф объясняешь.

>>1667833
Посмотри на пикрелейтед и подумай что он выведет и почему.
Аноним 26/04/20 Вск 14:50:01 #206 №1668005 
>>1667797
>Вот с юнионом другое дело.

UB тебе в сраку
Аноним 26/04/20 Вск 15:35:58 #207 №1668067 
ptr.png
>>1667833
Копирует. В Си при передаче аргумента в функцию всегда делается его копия. На самом деле, передача указателя (читай, адреса) это передача копии указателя (копии его значения, то бишь, если в указателе есть адрес 0xdeadbeef, то значение 0xdeadbeef КОПИРУЕТСЯ в функцию). А имея значение указателя (указатель == адрес), вызываемая функция напрямую редактирует данные по указателю, ибо обращается по адресу. Но само цифровое значение указателя при передаче оного в функцию все равно копируется.
Пикрил объясняет эту тему. Ты передаешь указатель в функцию, инкрементишь его значение там (с каждой итерацией он указывает на следующий байт), но при возврате обратно, тот же самый указатель опять указывает на начало строки, в данном случае на букву "Р". Что показывает что РЕАЛЬНО происходит при передаче по указателю (само значение самого УКАЗАТЕЛЯ энивей копируется, прост ов итоге в вызванной функции есть прямой доступ к памяти, но сам адрес энивей копируется). Вывод - в Си копируется абсолютно все (как и, впрочем, в других языках, под капотом оно по одинаковым законам работает)
Аноним 26/04/20 Вск 15:45:55 #208 №1668078 
>>1668067
Спасибо.
Аноним 26/04/20 Вск 15:53:02 #209 №1668087 
>>1668067
Значит получается что, если любой тип данных превышает размер указателя на данной машине, то надо передавать в функцию указатель на него, а если меньше - само значение.
Т.е. например указатель на данной машине занимает 4 байта, тогда char, short, структуру из трех char и т.д. - передаем сам этот тип, а для long long или больших структур - передаем уже указатель на них?
Аноним 26/04/20 Вск 15:57:47 #210 №1668096 
image.png
>>1668067
Пиздец, указатель у него копируется.
Указатель - это есть ссылка на ресурс(память), по нему из функции можно найти объект в куче и изменить.
Какие-то хеллоуворлды разбираем, ебемся с семантикой, лучше линукс форкни.
Аноним 26/04/20 Вск 16:11:45 #211 №1668112 
image.png
>>1668087
Нет, смотри листинг из годболта выше.
long long ll[3];
Это массив на стаке, неявно он и указатель.

Мы можем получить конкретный элемент через subscript(квадратные скобки) или через *(ll+1), смотри пикрил;

Указатель - это ссылка на объект, а не сам объект. Поэтому при передаче указателя в функцию можно редактировать сам объект.

Чтобы получить указатель на юнион или структуру надо явно взять адрес с помощью &, иначе объект внутри функции будет копией и все изменения не отразятся на изначальном объекте.

Зачем же нужны указатели, кроме как передавать объекты напрямую?

Место на стаке у нас ограниченно, а в куче нет, поэтому используй стак, для локальных операций, которые используют недолговременные объекты, живущие в одной области видимости, а кучу для долгоживущих объектов.
Аноним 26/04/20 Вск 16:48:21 #212 №1668146 
>>1668096
>Указатель - это есть ссылка
Почитай что такое ссылка, она даже записывается не так. И естественно указатель это не ссылка, а обычная числовая переменная без знака, и само собой разумеется она копируется когда передается по значению, как любая переменная.
Аноним 26/04/20 Вск 16:50:48 #213 №1668147 
>>1668087
> Значит получается что, если любой тип данных превышает размер указателя на данной машине, то надо передавать в функцию указатель на него, а если меньше - само значение.
Указатель - это накладные расходы на дереференс и возможно проеб по кэшу, это ограничения оптимизации из-за алиасинга для компилятора.

Я бы вот так исправил твою эвристику: если у тебя размер структуры равен одному или двум sizeof(uintptr_t) - имеет смысл передавать и возвращать по значению. Если это не противоречит сигнатурам других подобных функций в проекте, т.е., чтобы не получилось так, что vec3 у тебя через указатели, а vec2 копируется. Если нет - используй указатели, если нет препятствий к их использованию.

>>1668146
> обычная числовая переменная
Привет, шизик, где пропадал? Fat pointers слышал? Far pointers в 16-битном x86 слышал?
Аноним 26/04/20 Вск 17:21:10 #214 №1668181 
>>1668096
Что ты несешь, макака? Указатель - это тип переменной, который хранит адрес. Причем здесь куча вообще? Ты можешь передать массив (массив - указатель на нулевой элемент по сути), который находится на стэке, в другую функцию, чтобы проводить над ним манипуляции, причем здесь блять куча? Про кучу здесь речи вообще не шло.
Ты глаза раззуй и посмотри на код еще раз - когда ты передаешь указатель в функцию, ЗНАЧЕНИЕ указателя (значение указателя == адрес) КОПИРУЕТСЯ в вызываемую функцию (не то, что находится ПО адресу, а числовое значение адреса). Именно поэтому по возврату из функции, где ты этот указатель инкрементил, ты ВНЕЗАПНО обнаружишь, что после возврата он все еще указывает на первый элемент строки, а не на нуль-терминатор, а в предыдущем стэковом фрейме. Вывод - значение указателя КОПИРУЕТСЯ в вызываемую функцию. А из-за того, что вызванная функция имеет значение адреса, она может по этому адресу записывать изменения в данные непосредственно по полученному в аргументе адресу. Если ты не понимаешь сути посыла, то земля тебе джаваскриптом.
Аноним 26/04/20 Вск 17:35:54 #215 №1668202 
Нужен мудрый совет.
Студентоте не париться со всяким спортпрогом или мастхэв циферки рейтинга?
Просто в будущем хочется 100% вкатиться в С, сам читаю всякие нюансы С, системное, сетевое прог.
Сам я нахожу это полезней решать по фасту какую-то поеботину, хотя и полезно для мозга. Не знаю даже...
С другой стороны, специальность у меня не прогерская, у меня спросят, откуда я вообще нахуй вылез без диплома и рейтингов...
Не понимаю.
Аноним 26/04/20 Вск 17:36:50 #216 №1668205 
>>1668202
>сап я нахожу бесполезным - решать...
Аноним 26/04/20 Вск 18:34:24 #217 №1668262 
rot01.png
rot02.png
Анончики, в gd сидят немного странные люди, да и вопрос ближе к математике, а тут как раз разговоры идут про вектора и библиотеки векторные типа cglm.

Решать ничего не прошу, только подсказать, куда копать.

Есть условная игровая камера, у которое есть ветора: позиции в пространстве, куда смотрит и верхнего вектора.
Есть функция, которая передает угол, на который надо повернуть камеру вокруг какой-нибудь оси (в конкретном примере вокруг оси её правого вектора) [картинка 1]
Но камера вращается только не больше чем на 90 градусов в любую сторону от изначального направления. [картинка 2] Серым - мировые оси, красным - начальное положение, зеленым до куда происходит вращение.
Полагаю, что это особенности поворота вектора вокруг оси на заданный градус. Конкретно в этой либе считается через формулу Родрига:
https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula
Написал свою, которая через обычную матрицу поворота вокруг оси:
https://wikimedia.org/api/rest_v1/media/math/render/svg/7dc67eaa6d74f6629767726f854a5ff8bf7e5477
выдает идентичные результаты. Может мне нужно определять в какую полуплоскость и что-то еще проверять..
Аноним 26/04/20 Вск 19:16:20 #218 №1668305 
>>1668181
Да, да я вкурил уже, хотел извиниться, но подумал, что ты этот
>>1668146
И не стал
Аноним 26/04/20 Вск 20:05:47 #219 №1668335 
rod.jpg
>>1668262
>Но камера вращается только не больше чем на 90 градусов в любую сторону от изначального направления.
Ты что-то делаешь не так.
Аноним 26/04/20 Вск 20:18:21 #220 №1668342 
>>1668262
>gd
Не упоминай эту парашу здесь.
Аноним 26/04/20 Вск 20:25:48 #221 №1668346 
>>1668305
понял
Главное, что вкурил, на остальное похуй с:
Аноним 26/04/20 Вск 20:26:42 #222 №1668348 
rot03.png
>>1668335
Да я понимаю, но не могу понять что)
Сейчас по сути на нажатие кнопочки повешена та функция поворота, в которую передаю маленькое число. Сама камера - просто структура. Крутил и той функцией библиотечной glm_vec3_rotate и для теста накидал по матрице поворота.
Если вот задавать этот угол по нажатию другим, например , как на твоей картинке, то он при единичном нажатии переместится на него, но потом все равно после последовательных нажатий упирается в границы того диапазона в 90 градусов от изначального.
Ладно буду дальше искать свой косяк)
Аноним 26/04/20 Вск 21:00:48 #223 №1668370 
>>1668348
Я не стоял говорить, но у тебя в CameraRotate нужно бы ещё и up повернуть, ты же вращаешь вокруг R, подумал, что так задумано, просто проверь с понятными значениями, что там в D, ошибки в CameraRotate не видно, но перепроверь.
Аноним 26/04/20 Вск 21:08:38 #224 №1668382 
>>1668370
Спасибо тебе добрый человек! Решилось добавлением
glm_vec3_rotate( Camera->up, angle, R );
Вот как всегда забываешь что-то очевидное и в упор сам не видишь..
Аноним 26/04/20 Вск 21:53:10 #225 №1668431 
image.png
Подскажите как перевести Букву в ее фысшш код atoi я так понял работает только с цифрами и буквы переводит как 0, еще видел решение с использованием адреса в памяти вместо значения, но я думаю что это будет адрес из моего массива, а не из таблицы ascii
Аноним 26/04/20 Вск 21:54:05 #226 №1668434 
>>1668431
фысшш >> ascii
Аноним 26/04/20 Вск 21:56:56 #227 №1668437 
>>1668431
int(char_character)
Аноним 26/04/20 Вск 22:13:55 #228 №1668447 
image.png
>>1668437
Это же работает только для цифр, или я как-то не так пользуюсь?
Аноним 26/04/20 Вск 22:42:32 #229 №1668475 
>>1668447
ты делаешь int к char* объекту (масиву)
а надо к одному элементу
Аноним 26/04/20 Вск 23:13:48 #230 №1668513 
>>1668475
Гранд мерси, я понял что мне нужно суммировать значение каждого int(str), завтра попробую запилить
Аноним 26/04/20 Вск 23:45:14 #231 №1668529 
>>1668447
щас бы scanf без проверки со строками юзать, мммм
Аноним 27/04/20 Пнд 11:57:04 #232 №1668856 
Что можно почитать, если я хочу написать гипервизор первого типа? Знания по матчасти ОС имеются.
Аноним 27/04/20 Пнд 20:35:49 #233 №1669499 
2020-04-27 [email protected] mnteDistribDocuments[...].png
Есть функция (на основе документации) читающая pixel с surface, почему оно показывает только первые 8 бит?
http://sdl.beuc.net/sdl.wiki/Pixel_Access
Аноним 28/04/20 Втр 00:43:43 #234 №1669717 
>>1668447
"Input login" не будет выведено на экран.
Аноним 28/04/20 Втр 02:00:30 #235 №1669771 
Если мне нужно передать в функцию константый указатель на массив, то как следует писать: void func(const int arr[]) или void func(const int* arr)? Правильно ли я понимаю, что между этими двумя записями нет никакой фактической разницы?
Аноним 28/04/20 Втр 04:58:01 #236 №1669812 
>>1666695
https://pubs.opengroup.org/onlinepubs/9699919799/
Аноним 28/04/20 Втр 04:58:47 #237 №1669813 
>>1669812
https://pubs.opengroup.org/onlinepubs/9699919799/idx/headers.html
Аноним 28/04/20 Втр 09:22:03 #238 №1669875 
>>1669771
Нет разницы. Но константный указатель на массив - это все же int *const arr. А у тебя указатель на массив констант.
Аноним 28/04/20 Втр 10:00:43 #239 №1669897 
1588057241874.jpg
Сап, надеюсь, здесь есть драйверописцы.
Сейчас делается устройство на плис, которая делает расчет и формирует инфу, ну хз, 10 4б слов. Связанную инфу, это всё поля одного свойства.
Как лучше сделать регистры чтения? Первый вариант: (размер регистров пусть 4б) 10# регистров, содержащие нужные поля, а регистр статуса - счетчика, показывающий глубину ФИФО данных, декрментируется только тогда, когда будут прочитаны все 10 полей. Если одно поле прочитать дважды, то на второе чтение будет та же инфа.
Второй вариант: хранить в одном регистре данных всю сериализованную инфу, и получается, счётчик декрментируется только через 10 считываний из этого единственного регистра.

Первый вариант мне кажется наиболее предпочтительным, так как хорошо ложится на любой ДМА, но я опасаюсь, не будет ли коллизий или какого-то такого говна.
Аноним 28/04/20 Втр 10:17:16 #240 №1669912 
>>1669499
Pitch возможно в байтах
Аноним 28/04/20 Втр 10:35:31 #241 №1669926 
>>1669875
Насколько я знаю, константным указателем называется указатель, через который можно осуществлять только чтение, но не запись. Это я имел ввиду.
Аноним 28/04/20 Втр 13:22:08 #242 №1670106 
>>1669926
Подожди. А разве у них sizeof не будет отличаться?
То есть мы можем определить длину массива - sizeof(arr)/sizeof(arr[0]), а с обычным указателем не должно сработать.
Мимо залетный нуб-плюсовик. В C++ это точно два разных способа передачи, хотя я погуглил, пишут, что одно и то же в C.
Аноним 28/04/20 Втр 13:22:48 #243 №1670109 
>>1669926
Не совсем верно.
const int arr <- запрет на запись, но можно указать на другой адрес (в случае массива , например, на следующий элемент)
int
const arr <- нет запрета на запись, но сам адрес константен (диаметрально противоположно предыдущему)
const int * const arr <- нельзя ни записывать, ни указывать на другой адрес.
Аноним 28/04/20 Втр 13:25:20 #244 №1670118 
>>1670106
Ты прав. Но в случае с плюсами лучше использовать std::array, нежели сишный массив, ты же все-такт на крестах пишешь, а не на си. А в std::array есть встроенный метод size, который даст тебе размер массива без сишных выкрутасов.
Аноним 28/04/20 Втр 13:27:08 #245 №1670120 
>>1670109
Бля, звездочки стерлись

Не совсем верно.
const int (звездочка) arr <- запрет на запись, но можно указать на другой адрес (в случае массива , например, на следующий элемент)
int (звездочка) const arr <- нет запрета на запись, но сам адрес константен (диаметрально противоположно предыдущему)
const int (звездочка) const arr <- нельзя ни записывать, ни указывать на другой адрес.
Аноним 28/04/20 Втр 13:29:46 #246 №1670128 
>>1670118
Я другой анон, не который вопрошал.
Мне просто стало интересно, так ли сильно отличаются способы передачи.
Так-то я пока не пишу мегаоптимизированный код и пользуюсь векторами, а не std::array.
Аноним 28/04/20 Втр 14:15:40 #247 №1670208 
двощ, вкатываюсь в этот движ и такой вопрос, запускаю код в среде разработке там все окей (делаю в эклипсе), запускаю через терминал пишет ворнинги, почему так? вопрос второй, задал функцию отдельно от main и написал, что в return она должна свои значения умножать между собой, в мейне я эти значения ввожу с помощью scanf, после прогона ответ будет ноль, значения не сохраняются, почему так?
Аноним 28/04/20 Втр 15:07:22 #248 №1670279 
>>1670109
Я понимаю разницу между const перед звездочкой и после звездочки. Но то, что
>можно указать на другой адрес
неправда. Если ты попытаешься сделать что-то вроде ×(arr+3), ты поймаешь ошибку, потому что arr+3 имеет тип const T×, и не может быть разыменован. Ты, конечно, можешь написать
T× ptr = arr;
но компилятор си за такое, скорее всего, выдаст предупреждение.
Аноним 28/04/20 Втр 15:20:40 #249 №1670293 
>>1669912
Разобрался после какой функции это происходит, почему-то когда SDL переделывает AGBR8888 в RGBA8888 происходит такая петрушка.
Если изначально делать поверхность в одном из форматов, то функция чтения пикселя работает нормально.
Но мне надо все привести к единому RGBA8888 (uint32 0xRR GGBBAA)

Вопрос такой тогда, как мне вручную сделать из пикселя AGBR8888 RGBA8888, т.е. поменять байты местами?

Решение как разобрать переменную побайтово у меня есть:
uint8_t r = (pixel_input) & 0xff;
uint8_t g = (pixel_input>>8) & 0xff;
uint8_t b = (pixel_input>>16) & 0xff;
uint8_t a = (pixel_input>>24) & 0xff;


Как слепить потом это обратно в uint32. Надо к указателю на uint32 прибавлять по uint8 и записывать туда эти байты?
Аноним 28/04/20 Втр 16:32:19 #250 №1670397 
>>1670293
Изобретаю велосипед, написал его, а оказывается на >>1669499 оно просто нули не пишет. Гениально.
Аноним 28/04/20 Втр 18:04:34 #251 №1670552 
>>1670208
потому что ты хуесос
Аноним 28/04/20 Втр 18:10:50 #252 №1670558 
>>1670106
> мы можем определить длину массива - sizeof(arr)/sizeof(arr[0])
Не можем. Будет sizeof(uintptr_t). Вы заебали, каждые 10 постов одни и те же вопросы: >>1667852

>>1670208
> пишет ворнинги, почему так
Так исправь их, чего ты жалуешься?

>>1670279
> тип const T×, и не может быть разыменован
Охуеть, кто запретит разыменовывать?

> компилятор си за такое, скорее всего, выдаст предупреждение
Можно убирать const явным кастом, это нормально и документировано. Но если исходный объект все же const, ты сам себе буратино. Т.е., int x = 1; const int ∗x_ptr = &x; ∗(int ∗)x_ptr = 2; ок, а вот const int y = 1; const int ∗y_ptr = &y; ∗(int ∗)y_ptr = 2; уже не ок.
Аноним 28/04/20 Втр 18:37:23 #253 №1670586 
>>1670397
@мобератор, можно удалить >>1670397 >>1670293 >>1669499 и это сообщение, это какая-то тупая херня со мной приключилась, заклинило на то что цветной текст не обрезался, оказалось что в SDL2, если цветной текст, он зачем то пустые пикселы подкрашивает, но оставляет прозрачность в 00, а я голову тренировал т.к. у меня вначале была проверка всего пиксела, если он весь (rgba) 0x00000000 то пустой, а когда глиф цветной SDL2 выдает для красного 0xFF000000, короче я теперь по первому байту ориентируюсь.
sageАноним 28/04/20 Втр 19:24:18 #254 №1670634 
>>1670586
А зачем тереть-то, если, может быть, кому-то будет полезно узнать.
Аноним 29/04/20 Срд 00:46:44 #255 №1671064 
>>1670558
>> тип const T×, и не может быть разыменован
>Охуеть, кто запретит разыменовывать?
Неправильно выразился, разыменовать, конечно, можно. Я имею ввиду, значение ты не перепишешь. Я отвечал на
>const int× arr <- запрет на запись, но можно указать на другой адрес (в случае массива , например, на следующий элемент)
Я так понял, по мнению >>1670109, const перед звездочкой запрещает переписывать только значение, которое записано в указателе.

>> компилятор си за такое, скорее всего, выдаст предупреждение
>Можно убирать const явным кастом, это нормально и документировано. Но если исходный объект все же const, ты сам себе буратино.
Так с этим я согласен. Кстати, можно и не делать явный каст: на си, в отличие от си++, это скомпилируется без ошибок, но с варнингом.
Аноним 29/04/20 Срд 02:23:17 #256 №1671093 
Когда имеет смысл использовать size_t? Как выбирать между size_t и unsigned?
Аноним 29/04/20 Срд 03:55:27 #257 №1671101 
>>1669499
>>1670293
>>1670586
Во первых ты путаешь две разные библиотеки: SDL и SDL2.
Официальная документация по SDL2 находится тут:
https://wiki.libsdl.org/
Если тебе нужно поменять местами значения rgba у пикселя, то:
считываешь их SDL_GetRGBA() затем меняешь в любом нужном порядке SDL_MapRGBA()
И если уж ты делал по той ссылке, что скинул, то ты точно не забыл заблокировать и разблокировать surface для прямого доступа к пикселям через SDL_LockSurface() и SDL_UnlockSurface()
Короче не путай и тем более не смешивай одновременно обе либы. Используй только SDL2.

Аноним 29/04/20 Срд 05:10:55 #258 №1671104 
>>1670120
Охуеть, не знал
Аноним 29/04/20 Срд 11:02:35 #259 №1671224 
>>1671093
> Когда имеет смысл использовать size_t
Когда переменная имеет отношение к количеству или размеру объектов в памяти. Гарантируется, что нет возможности создать такой массив, чтобы его размер не влез в size_t.

> unsigned
Теоретически может быть меньше size_t, используй для обычных вычислений.
Аноним 29/04/20 Срд 15:39:48 #260 №1671451 
51RJSN183SL.jpg
Добрый день уважаемые.
Подхожу к 75% Праты, не подскажите ли где достать пик? Гугл выдает стремоту.
Благодарю.
Аноним 29/04/20 Срд 15:52:32 #261 №1671468 
>>1671451
Вроде как на Libgen есть
Аноним 29/04/20 Срд 16:27:45 #262 №1671523 
>>1671468
Ах ты ж пирожок!
Спасибо!
Аноним 29/04/20 Срд 16:33:00 #263 №1671538 
image.png
>>1668475
не как не пойму как этим пользоваться
Аноним 29/04/20 Срд 16:38:43 #264 №1671549 
>>1671538
Я обращаюсь не к массиву, а к конкретному элементу, как указал анон, делаю как в примере из stack overflow, что я делаю не так?
Аноним 29/04/20 Срд 16:38:51 #265 №1671550 
>>1671523
Я тебе не пирожок, крендель. Но сайт годный, запомни его.
Аноним 29/04/20 Срд 16:39:08 #266 №1671551 
image.png
>>1671549
пикчу забыл
Аноним 29/04/20 Срд 16:44:36 #267 №1671570 
1 GHFLYFB3vDQeakMyUGPglw.png
Интересно, но ни в одной книге я не нашел подобия кода Линуса на пике. Все разбирают списки через if/else.
Здесь парниша дает ссылку на “C Interfaces and Implementations”:
https://medium.com/@bartobri/the-pointers-to-pointers-idiom-7b15aaafafca

Речь об этом, кто не понял:
https://medium.com/@bartobri/applying-the-linus-tarvolds-good-taste-coding-requirement-99749f37684a
перевод с хабра идет нахуй, потому что хабр идет нахуй с говнорастом
Аноним 29/04/20 Срд 17:19:30 #268 №1671631 
yoba.jpg
>>1663107
Аноним 29/04/20 Срд 18:40:46 #269 №1671698 
изображение.png
>>1671549
>>1671551

Во-первых, читай про приведение типов.
Во-вторых, читай про то, что такое char и какое он имеет представление.
В-третьих, почитай как работают циклы for и как они оформляются.

https://godbolt.org/z/daVcGR

Аноним 29/04/20 Срд 19:15:54 #270 №1671718 
image.png
>>1671698
Как же мне стыдно делать такие глупые ошибки, спасибо анон
Аноним 29/04/20 Срд 19:40:12 #271 №1671734 
>>1671570
В прате есть.
Аноним 29/04/20 Срд 21:56:26 #272 №1671866 
>>1671734
Бля, Прата просто СОТОНА
Джуном можно устроиться после него?
Аноним 29/04/20 Срд 22:47:31 #273 №1671912 
https://habr.com/ru/post/471038/

Тут сегодня анон про материнские и дочерние процессы писал и их параллелизацию. Нашел статью про файловые дескрипторы на хабре, может кому будет интересно.
Аноним 29/04/20 Срд 22:59:23 #274 №1671924 
>>1671570

В твоём говнокоде память утекает: entry->next нужно освободить.
Аноним 29/04/20 Срд 23:47:14 #275 №1671961 
>>1668431
char a = '1'
int d = a - '0'
Аноним 30/04/20 Чтв 00:09:01 #276 №1671978 
>>1671924
Это говнокод прыщебати, не мой.
Аноним 30/04/20 Чтв 00:12:25 #277 №1671980 
>>1671924
Это лист на массиве. Сипайтон вон везде такие использует.
Аноним 30/04/20 Чтв 01:30:18 #278 №1672038 
2020-04-30 030217-SDL Sudoku.png
2020-04-30 031912-Яндекс.Музыка.png
>>1671101
>Во первых ты путаешь две разные библиотеки: SDL и SDL2.
Доступ к пикселю и записи рабочий.

Сурфейсы лочу и разлочиваю.

Суть в том что я не могу избавится после обрезки от неприятной фигни у прозрачных пикселов (пикрилейтед 1), вместо прозрачности они затемняются. Сначала я думал что из-за порядка ABGR сурфейса который я вписываю (обрезаю) в RGBA сурфейс командой SDL_BlitSurface. Я нашел функцию которой можно превратить в RGBA SDL_ConvertSurfaceFormat из за которой я тригернулся, т.к. вместо FF000000 у меня получились пикселы FF. Из-за этого затупа я написал свою функцию конвертер, которая вернула мне тоже самое FF (и тогда до меня дошло). Потом я заметил что прозрачные пикселы плохо рисуются после функции SDL_BlitSurface, и написал свою функцию которая делает тоже самое. Но блет ничего не поменялось, как были уродские пикселы с прозрачностью так и остались. Пикрл 2, вывод до обрезки и после, вроде одно и то же, а отображаются по разному (как на пикрл 1).
SDL_SetSurfaceBlendMode(surface_output, SDL_BLENDMODE_BLEND); не помогает.
Аноним 30/04/20 Чтв 01:33:58 #279 №1672040 
2020-04-30 033113-SDL Sudoku.png
>>1672038
Пс чтобы было понятно. Слева нормальный, справа получающийся после обрезки.
Аноним 30/04/20 Чтв 05:47:49 #280 №1672095 
>1671924
почему утекает? там же нет выделения
Аноним 30/04/20 Чтв 14:36:25 #281 №1672353 
2020-04-30 [email protected] mnteDistribDocuments[...].png
>>1672040
Разобрался, все таки SDL_BlitSurface портит пикселы, я забыл что использую эту функцию для вставки.
Уверен что в мануале написано как сделать, но я так и не понял как.
Игра с SDL_SetSurfaceBlendMode(surface_output или input, SDL_BLENDMODE_разные); ни к чему не приведа. Да и вообще какого черта это должно было влиять? У меня есть чистая сурфейс с нулями поверх которой я записываю глиф, т.е. там даже при наложении ничего меняться не должно было.
Переписал заново. Изучение продолжается.
Аноним 30/04/20 Чтв 19:22:58 #282 №1672746 
>>1666897
>mingw-w64 поставь и не парься. MinGW-W64 с появлением WSL идёт внахуй.

Извини,
Так что поставить и что идет нахуй?
Другой анон.
Аноним 30/04/20 Чтв 21:16:01 #283 №1672903 
>>1672746
Если кодишь простые приложения в консоли, можно не ставить MinGW, а поставить debian WSL (или другой дистриб), который доступен в microsoft store.
https://docs.microsoft.com/ru-ru/windows/wsl/install-win10

После установки можно открывать консоль линукса в винде зайдя в папку и нажав SHIFT + правая кнопка мыши. Наряду с "Открыть здесь окно Power Shell" там появится "Отрыть оболочку Linux". Если у тебя debian based, ставишь пакет build-essential.

Для удобства создаешь в папке простой makefile который будет компилить твой main.c

Ставишь vs code + c/с++ intellisens, он автоматом должен инклуды линуксовые подсосать и подсвечивать ошибки.

MinGW-W64 все еще актуален для компилирования под винду.
Аноним 30/04/20 Чтв 21:45:04 #284 №1672917 
У вас в треде была платиновая паста про вкат в программирование через большой труд и самообразование. Паста была довольно объемная, но с хорошей последовательностью действий.
Аноним 30/04/20 Чтв 21:47:11 #285 №1672920 
>>1672917
Мне вот 31 и я вкатываюсь в Си и системное программирование. Вот, что угодно мне будут говорить, но я с большим усердием буду изучать все, что необходимо для вкатывания. Постепенно, день за днем.
Аноним 30/04/20 Чтв 21:49:33 #286 №1672926 
>>1672920
Мне просто паста нужна, я не собираюсь в него вкатываться.
Аноним 30/04/20 Чтв 22:21:53 #287 №1672951 
Здравствуйте.
Вопрос немного не по теме, но, скорее всего, не все жырные ide одинаково любят C. Я хочу разобраться с одной тяжелой функцией из очень многослойной библиотеки. И вот тут мой подход с блокнотом провалился. Ну вы понимаете, инклюдов десятки, потом еще и еще... Хотеть наиболее продвинутую в плане навигации по проекту (быстрые джампы по файлам, поиск где только можно различных структур и определений) IDE. Желательно, свободную %чтобы я, бля, на её коде тестил%.
Аноним 30/04/20 Чтв 22:59:43 #288 №1672990 
>>1672951
Code Blocks?
sageАноним 30/04/20 Чтв 23:02:10 #289 №1672992 
>>1672951
Source Insight.
Аноним 30/04/20 Чтв 23:57:43 #290 №1673054 
>>1672990
>>1672992
Спасибо, добра. Попробую.
Аноним 01/05/20 Птн 00:19:24 #291 №1673096 
Зачем printf(L"Text");

чтo буква L делает?
Аноним 01/05/20 Птн 00:19:56 #292 №1673100 
>>1672353
чтo за гуй у тебя?
Аноним 01/05/20 Птн 00:41:14 #293 №1673150 
2020-05-01 023834-Greenshot.png
>>1673100
W10 + WSL debian
Аноним 01/05/20 Птн 01:29:06 #294 №1673249 
Untitled.png
>>1672903
А обязательно через PowerShell?
У меня есть иконка как на пике 1, оттуда запускается, как app.
Xorg это я пытался гуй установить xfce4, он мне выдал на пике 2, ВОУВОУ ПАЛЕГЧЕ, только установил а уже ПЕРДОЛИНГ.
Аноним 01/05/20 Птн 01:31:11 #295 №1673251 
Capture.PNG
>>1673249
Отвалился пик
Аноним 01/05/20 Птн 02:00:14 #296 №1673268 
2020-05-01 [email protected] mnteDistribDocuments[...].png
>>1673249
>А обязательно через PowerShell?
Там не через повер шел а рядом появляется, пикрл, и он сразу открывает путь этой папки в консоли. Открыл так консоль в папке которой makefile лежит, и сразу набрал make.

>Xorg это я пытался гуй установить xfce4, он мне выдал на пике 2, ВОУВОУ ПАЛЕГЧЕ, только установил а уже ПЕРДОЛИНГ.

Я в том сообщении написал что это в основном для консольных разработок. Можешь запустить эмулятор Xservera - VcXsrv, который ставится отдельно, потом в консольке набрать export DISPLAY=localhost:0.0 и пробовать запускать рабочий стол. Я не пробовал, мне это не нужно, но говорят работает.

Зачем запускать линуксовый декстоп, если можно по человечески поставить дистрибутив? Мне нужны просто инструменты разработчика из линукс, т.к. они более понятны для нубаса, и качаются пакетами, а не по интернету разбросаны.

Аноним 01/05/20 Птн 02:31:23 #297 №1673283 
>>1673268
>Там не через повер шел а рядом появляется, пикрл, и он сразу открывает путь этой папки в консоли. Открыл так консоль в папке которой makefile лежит, и сразу набрал make.
Ах ты ж пирожок! Спасибо!
Их можно несколько запустить найс.

>Зачем запускать линуксовый декстоп, если можно по человечески поставить дистрибутив?
Ну, на той картинке с судоку, была же графика?
Аноним 01/05/20 Птн 03:35:59 #298 №1673290 
>>1673283
Для этого достаточно VcXsrv, окружение качать не надо.
У SDL зависимостей не так много, как у окружения.

Просто запускаю его после компиляции ./sudoku и оно появляется как в виндовом окне.

По советам из интернета вписал export DISPLAY=localhost:0.0 в конец .bashrc в домашней папке (попасть в которую можно cd ~), чтобы постоянно не вводить
Аноним 01/05/20 Птн 05:17:31 #299 №1673299 
>>1673268
> Мне нужны просто инструменты разработчика из линукс, т.к. они более понятны для нубаса
Теперь ясно посему линуксоиды такие тупые. Тольк тупой будет лениться поставить что-то чуть сложнее, но зато потом как сыр в масле кататься с удобствами, нет, он лучше поставит консольку и будет ебаться в неё как инвалид вечно, зато ставить проще, меньше страшных кнопочек и галочек.
Аноним 01/05/20 Птн 05:24:09 #300 №1673301 
>>1673299
>Тольк тупой будет лениться поставить что-то чуть сложнее, но зато потом как сыр в масле кататься с удобствами
Без примеров почему твое видение имеет право на жизнь, ты просто пукнул в воздух.
Аноним 01/05/20 Птн 05:57:46 #301 №1673315 
>>1673301
Какие примеры, довен? Вот нубис втыкает в язык, в нормальном ИДЕ ему подсветятся ошибки, а линуксодебил будет пыриться в портянку высранную в консоль, выискивать номера строк, открывать свой блокнот, выискивать там по номеру эту строчку. Больше делать нечего, такое продуктивное занятие, каждому нубису обязательно пройти, как "не служил - не мужик", то есть "не жрал говно - не программист".
Аноним 01/05/20 Птн 06:22:07 #302 №1673325 
>>1673315
примерно этим отличается академическое обучение от реальной работы
Аноним 01/05/20 Птн 07:05:21 #303 №1673334 
>>1673315
Ты не понимаешь о чем говоришь, поэтому мелишь пургу про консоль, и сидение в блокноте, думая что там какие-то другие IDE.
Аноним 01/05/20 Птн 07:26:41 #304 №1673336 
>>1673334
Человек в си треде не понимает разницы между ос, что ты от него хочешь?
Аноним 01/05/20 Птн 13:11:20 #305 №1673478 
>>1673315
Что мешает линуксмэну поставить тот же VSCode или саблайм, обвешанный плагинами? Имхо, хуйню несешь.
Аноним 01/05/20 Птн 13:14:03 #306 №1673480 
>>1672917
Бамп вопросу, ну скиньте, анончики, прошу.
Аноним OP 01/05/20 Птн 14:02:23 #307 №1673529 
>>1673480 >>1672917 >>1672920
> Мне вот 31 и я вкатываюсь в Си и системное программирование
С этой фразой за все 56 тредов ничего не было. Разве что отдельно ссылкой скидывали.
Аноним 01/05/20 Птн 14:50:46 #308 №1673563 
>>1673529
Пиздос, мне уже 40 и я только вкатываюсь.
Аноним 01/05/20 Птн 15:25:38 #309 №1673600 
>>1673290
Ты прав, снёс XFCE, будет только соснолечка с VcXsrv
Аноним 01/05/20 Птн 15:48:20 #310 №1673623 
>>1672917
>про вкат в программирование через большой труд и самообразование
С петухонотредом перепутал?

Завтра ищешь в интернете книжку Керниган, Ричи. Язык C. Похуй если ничего не поймешь. Затем идешь на http://www.utas.edu.au/infosys/info/documentation/C/CStdLib.html и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию сишного кода - 1TBS, чтобы от зубов отскакивало. Когда напишешь свою первую сортировку Хоара, по пути изучив ассемблер инлайном, скачиваешь и изучаешь любую олдовую среду разработки, рекомендую Turbo C. Как переделаешь сортировку, чтобы была по меньшей мере итеративной, а не рекурсивной, можешь идти дальше - тебя ждет увлекательный мир байтоёбства. Хипсорт, сверхбыстрые асинхронные B-деревья, xor-связные списки. Отсос у хиккующих выблядков / просто неудачников типа рейфага или сисярп/джава-богов, которые работают в тёплом офисе за приличную зарплату не заставит себя ждать и уже через пол года ты будешь так редко мыться, что любая баба будет брезгливо закрывать нос платком при одном упоминании твоей одежды.
Аноним 01/05/20 Птн 16:01:27 #311 №1673641 
>>1673623
> книжку Керниган, Ричи. Язык C
почему у них в книге все операторы большими буквами?
Аноним 01/05/20 Птн 16:01:28 #312 №1673643 
>>1673623
>Turbo C
Бля, прослезился.
Аноним 01/05/20 Птн 16:02:35 #313 №1673647 
red eyes.png
Просто хотел прочитать про Make.
220 страниц, ебать..
Аноним 01/05/20 Птн 16:03:51 #314 №1673652 
>>1673623
не слушайте его, всего этого знать невомзожно. достаточно иметь общие представления и когдав процессе разработки возникают вопросы обращаться к соотвествующей литературе. шизиком стать можно если дрочить это всё.

таким образом можно учиться 10 лет и не написать ни одной программы.
Аноним 01/05/20 Птн 16:04:23 #315 №1673654 
Cап, двачаны.
Мне нужно написать на Сишке простенькую систему занятия очереди онлайн. Там есть некоторые требования и лишь одно я не знаю как реализовать. Как сделать чтобы система брала информацию из файла какого-нибудь? Допустим, просмотреть кто еще со мной стоит в очереди и система заполняла строки случайными именами из текстового файла например.
Аноним 01/05/20 Птн 16:07:59 #316 №1673664 
Capture.PNG
>>1673654
Элементарно же. Открыаешь текстовый файл и пишешь код как его читать, что читать и т.д.
Аноним 01/05/20 Птн 16:14:17 #317 №1673673 
>>1673664
Я не правильно выразился. Смотри, я пишу код в билдере и при запуске он выводится в командной строке. Я хочу чтобы когда я уже встал в очередь, мне предлагали "Хотите посмотреть всю очередь?", я ввожу да или нет, если да то система берет с файла рандомные имена и выводит список с ними и с именем, под которым я встал в очередь, в конце.
Аноним 01/05/20 Птн 16:21:19 #318 №1673684 
>>1673673
Ну. Программа должна после да, обратиться к истоничку где лежат файлы и там по соотвествующим итендификаторам выбивать тебе имена которые в списке. Мне что тебе код написать готовый? Ты элементарный вопрос задаёшь по языку.
Аноним 01/05/20 Птн 16:24:19 #319 №1673689 
>>1673684
Я никак не смог сформулировать свою потребность чтобы загуглить и обратился сюда, код я и сам напишу только подскажите какой или функцию для этого чтобы ее загуглить и изучить.
Аноним 01/05/20 Птн 16:25:19 #320 №1673693 
>>1673689
Ну я же скинул. Функция чтения файла, нет такой функциии "ВЗЯТЬ ИЗ ФАЙЛА И ВЫВЕСТИ ОЧЕРЕДЬ"
Аноним 01/05/20 Птн 16:29:25 #321 №1673698 
>>1673693
Ну то есть оно откроет и выведет то что написано в файле, никакого рандома, я хотел для правоподобности просто чтобы оно брало случайные строки и выводило в случайном порядке и в конце еще и имя введенное до этого. Это не обязательно конечно, но желательно бы.
Аноним 01/05/20 Птн 16:33:37 #322 №1673703 
>>1673689
Свою домашку делай сам, петушило.
Аноним 01/05/20 Птн 16:35:06 #323 №1673705 
>>1673703
Та блять я не прошу за меня написать код, всего лишь одну функцию захотел узнать от вас. Спасибо и на том.
Аноним 01/05/20 Птн 16:51:10 #324 №1673734 
>>1673698
Нет. Ничего подобного ты только переключаешь что инпут идёт оттуда а дальше сам решаешь что она будет выводить.
Аноним 01/05/20 Птн 16:51:37 #325 №1673735 
>>1673705
Чувак, это первые главы в книге k&r ты языка не знаешь раз так думаешь >>1673698
Аноним 01/05/20 Птн 17:51:46 #326 №1673793 
>>1673705
Функции узнаются не от нас, а из документации. И я рад что ты не отрицаешь домашку. Тут тред программирования, "помогать" петухам с домашкой, которым плевать на программирование, нелепо, по теме нужно таких слать подальше.
Аноним 01/05/20 Птн 18:26:27 #327 №1673816 
>>1673705
Та функция что тебе выше скинули, она ничего не выводит. Просто поток переводит на текстовый файл, а далее ты уже пишешь обычный код как если бы вводил с клавы, только ввод идёт не с клавы, а из файла твоего. Я уже не знаю как тебе объяснить кроме как код готовый с комментами написать.
Аноним 01/05/20 Птн 18:46:04 #328 №1673837 
>>1673816
Я погуглил уже и разобрался, спасибо.
>>1673793
>>1673735
Вы правы.
Аноним 01/05/20 Птн 20:36:25 #329 №1673907 
>>1673623
>сортировку Хоара
и зачем так называть квиксорт? чтоб страшнее стало?
Аноним 01/05/20 Птн 20:42:22 #330 №1673910 
>>1673907
Чтобы отличать её от десятка других быстрых сортировок?
Аноним 01/05/20 Птн 22:27:51 #331 №1674019 
Question 13.PNG
Answer 13.PNG
Аноны,
Прата поехавший что-ли?
Почему инициализация через const double, а вызов через int?
Что происходит??
Аноним 01/05/20 Птн 22:29:30 #332 №1674020 
>>1673907
>квиксорт
Разве это не когда бабы кончают так называется?
Аноним 01/05/20 Птн 22:47:02 #333 №1674024 
out.mp4
>>1673623
>>1673907
>>1673910
>сортировка
Есть несколько однонаправленных списков, или как это правильно называется, когда указатель first на первый элемент, и у каждого элемента указатель next на следующий. Все элементы в каждом списке уже отсортированы по int index, который уникален для каждого элемента. Как побыстрее все цепочки объединить в одну с сортировкой по тому же критерию и с исключением повторяющихся элементов? Есть какой-нибудь грязный хак?
Аноним 01/05/20 Птн 22:55:22 #334 №1674027 
>>1674024
Блин, пока думал, как лучше спросить у анона, сам допер.
Аноним 01/05/20 Птн 23:04:14 #335 №1674030 
eastwood.jpg
>>1660319 (OP)
>- Черновик стандарта ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2385.pdf
620 страниц.
Как только перейдет планку в 700, смысл в изучении "простого и лаконичного" языка испарится, лучше сразу начинать с плюсов.
Пиздец.
Простой и лаконичный пиздец.
Аноним 01/05/20 Птн 23:06:50 #336 №1674032 
>>1674030
Плюсы все еще очень многословные по сравнению со скриптами. Лучше базу делать на чистой сишечке, а нужно больше - скрипт.
Аноним 01/05/20 Птн 23:28:35 #337 №1674039 
>>1674030
>си - говно, одно ub
>си - говно, слишком длинный стандарт
>си - говно, слишком мало умеет
Аноним 01/05/20 Птн 23:58:28 #338 №1674051 
Аноны, скроллю код просто в целях знакомства, как часть учебы.
Не раз вижу такое:
#define NGINX_VERSION "0.5.4"
#define NGINX_VER "nginx/" NGINX_VERSION

Нахуя такое делают?
И то и другое практически одинаково.
Аноним 02/05/20 Суб 00:00:02 #339 №1674054 
>>1674030
Лол, это ты еще буст плюсовый не трогал и все его глубинные фичи, челики 20 лет на нем прогают и до сих пор знают на 5 из 10
Страусиный труп оценил свои знания сипипи на 7/10, это финиш. В мире есть 2.5 человека, которые могут сказать, что они РЕАЛЬНО знают плюсы (и это главные разрабы плюсовых компиляторов, лол), остальные просто могут писать на нем какой-никакой код.
Аноним 02/05/20 Суб 00:18:11 #340 №1674060 
>>1674054
>Страусиный труп оценил свои знания сипипи на 7/10
Это фейк, ты понимаешь, да?
Аноним 02/05/20 Суб 00:19:21 #341 №1674061 
>>1674019
Бамп, я что-то не так понял? Что-то упустил?
Repl.it ругается, так что я вроде прав..
Аноним 02/05/20 Суб 00:26:43 #342 №1674067 
>>1674061
Да просто опечатка, в одном издании было так, потом поменяли, а в ответах осталось. Должен к этой главе уже сам соображать.
Аноним 02/05/20 Суб 00:27:47 #343 №1674069 
>>1674067
Да я так и думал, просто уже мозг вытекает. Собираюсь добить эту главу.
Аноним 02/05/20 Суб 00:57:03 #344 №1674078 
>>1674030
> лучше сразу начинать с плюсов
Там стандарт короче, да? И легаси нет, и разницы в подходах между C++98/11/14/17/20?
Аноним 02/05/20 Суб 01:08:15 #345 №1674080 
>>1673623
1TBS в этой пасте можно для солидности заменить на SEI CERT C
Аноним 02/05/20 Суб 17:10:58 #346 №1674522 
>>1673096
wstring делает
Аноним 02/05/20 Суб 20:14:37 #347 №1674742 
>>1674522
спасибо, понял. думал уже ответа никто не даст
sageАноним 02/05/20 Суб 20:35:06 #348 №1674748 
>>1674742
Никто не ответил, потому что это идиотский вопрос. printf хочет обычную строку, кормить в него L"" - ошибка, об этом тебе мог сказать компилятор, если бы ты потрудился сам эту строку попробовать.
Аноним 02/05/20 Суб 20:54:02 #349 №1674758 
>>1674748
да извини, я перепутал прoстo. этo в либе windows.h в функции messagebox испoльзуется в аргументах
Аноним 02/05/20 Суб 22:11:47 #350 №1674837 
image.png
>>1674742
>>1674758
Может тебе wprintf нужен, не знаю, есть ли он в винде, вроде должен быть.
Аноним 02/05/20 Суб 22:19:14 #351 №1674848 
>>1674837
нет. мне ничегo не нужнo я прoстo разбирал winapiшный кoд и не пoнял чтo значит L здесь, теперь, пoнял. спс

MessageBoxW(NULL, szCmdLine, L"Title", 0);
Аноним 03/05/20 Вск 05:27:21 #352 №1675153 
>>1674848
https://en.cppreference.com/w/c/language/string_literal
https://docs.microsoft.com/ru-ru/cpp/c-language/c-string-literals
тоже может пригодиться
https://docs.microsoft.com/ru-ru/cpp/cpp/string-and-character-literals-cpp?view=vs-2019
Аноним 03/05/20 Вск 10:53:41 #353 №1675222 
>>1668342
Сереженька)
Аноним 03/05/20 Вск 16:10:21 #354 №1675522 
>>1675153
спасибo, я сам читаю там регулярнo дoкументацию лучше на англ ставить, ибo на русскoм там машинный перевoд
Аноним 03/05/20 Вск 20:28:30 #355 №1675727 
IMG20200503221328.jpg
Screenshot2020-05-03-22-13-09-525com.google.android.apps.do[...].png
Привет, программач, недавно вкатился в си, начал читать книгу и столкнулся с такой ситуацией: автор утверждает, что аргументы функций в си находятся во временных переменных, то есть передаваемые аргументы в ходе выполнения функции остаются неизменными, изменяется лишь их временная копия, как в питоне, например (пик 1). Далее автор привод в пример код (пик 2), в котором все совсем наоборот. В функцию copy() передаются два символьных массива, в один из которых записывается копия другого(очевидно). Почему у этот код должен работать, если изменяется значеине временной переменной to,никак не связанной с передаваемым в функцию аргументом longest? Объясните, пожалуйста, что я не понимаю.
И да, каким образом работает следующий код: (to = from) != '\0' ?
Почему присваивание значения элементу массива возвращает результат?
Аноним 03/05/20 Вск 20:29:28 #356 №1675729 
Screenshot2020-05-03-22-12-02-002com.google.android.apps.do[...].png
>>1675727
Обосрался с пик 2, вот код
Аноним 03/05/20 Вск 20:30:12 #357 №1675730 
Screenshot2020-05-03-22-12-02-002com.google.android.apps.do[...].png
>>1675729
Ебучий дашчан
Аноним 03/05/20 Вск 20:30:29 #358 №1675731 
>>1675727
ну если автор утверждает чот значит так и есть ибо автор создал этот язык и пиздецть он не будет
Аноним 03/05/20 Вск 20:33:50 #359 №1675732 
IMG20200503223221.jpg
>>1675727

> И да, каким образом работает следующий код: (to = from) != '\0' ?
Разметка съела индесы
sageАноним 03/05/20 Вск 21:13:54 #360 №1675756 
>>1675727
> Почему у этот код должен работать, если изменяется значеине временной переменной to
У тебя там вообще значение to не изменяется. Смотри сюда: >>1667852
Аноним 03/05/20 Вск 21:20:33 #361 №1675759 
>>1675756
Спасибо, стало теперь стало понятно. Автор книги почему-то решил умолчать об этом
Аноним 03/05/20 Вск 22:35:13 #362 №1675842 
>>1675727
Аргументы запихуются в регистры и стек. Попробуй хелловорлд на ассемблере написать по тьюториалу, потратишь час, но все поймешь. Согласно стандарту аргумент type arg[] это эквивалент type *arg, то есть передается указатель. Конечно, строка перезаписывается.
Аноним 03/05/20 Вск 23:24:53 #363 №1675870 
>>1675727
>В функцию copy() передаются два символьных массива
Потому что массивы — это не переменные.
Аноним 04/05/20 Пнд 01:39:02 #364 №1675897 
>>1667852
Ты охуенен, анонче!
Аноним 04/05/20 Пнд 01:58:37 #365 №1675906 
Что нового пишут на Си? Или это строго язык для поддержания бескрайнего легаси?
Аноним 04/05/20 Пнд 02:53:16 #366 №1675911 
Можно как-нибудь организовать доступ с динамическому двухмерному массиву, чтобы можно было обратиться и через номер элемента [x+y*n] и через индекс формата [x][x]?
Аноним 04/05/20 Пнд 04:31:45 #367 №1675923 
>>1675911
Тупанул, просто создам доп массив указателей.
Аноним 04/05/20 Пнд 07:04:48 #368 №1675936 
>>1675923

используй указатели на VLA и будет тебе щастье

double (жmas) = malloc (a ж sizeof(*mas));
mas[x][y] = 14.88;
free(mas);
Аноним 04/05/20 Пнд 07:07:26 #369 №1675937 
>>1675936[>>1675936
>double (жmas) = malloc (a ж sizeof(mas));
double (жmas)[l] = malloc (k ж sizeof(mas));

Аноним 04/05/20 Пнд 07:22:32 #370 №1675938 
А для реализации ассоциативного массива:
если приоритет время поиска, то надо делать через хеш-таблицы
если приоритет время вставки, то красно-черное дерево
примерно так понимаю?

И если мне заранее известны все ключи, но важно, чтобы поиск был самым быстрым, то как лучше реализовывать?
Аноним 04/05/20 Пнд 07:43:10 #371 №1675942 
>>1675938
upd:
наверное, если ключ в ассоциативном массиве может быть строкой, символы которой состоят только из алфавита в N букв, то самый быстрый поиск - это N-арное дерево, но недостаток, что размер будет больше, вроде так понимаю
Аноним 04/05/20 Пнд 09:54:37 #372 №1675961 
Аноны, объясните пожалуйста, почему когда я объявляю массив char arr[64], то я могу записать в него больше чем 64 символа?
Аноним 04/05/20 Пнд 10:14:18 #373 №1675972 
>>1675961
Потому, что во-первых, массив - это указатель на первый его элемент, а у указателя нет границ (условно). Во-вторых, в си по стандарту нет требования проверки выхода за границы массива.
Аноним 04/05/20 Пнд 10:23:27 #374 №1675977 
>>1675961
можешь взять c11 и там отслеживать/реагировать
Аноним 04/05/20 Пнд 12:10:29 #375 №1676042 
>>1675938
> И если мне заранее известны все ключи
perfect hash
Аноним 04/05/20 Пнд 12:15:52 #376 №1676047 
>>1676042
а N деревом разве не быстрее? Там же по сути побайтово ключ разбираешь и почти всегда нужен не весь, а тут придется сразу у всего ключа хеш искать
Аноним 04/05/20 Пнд 12:21:27 #377 №1676053 
>>1675961
Потому что запись это просто запись по адресу, проверок на границы тут нет. Нужны проверки, сам напиши.
Аноним 04/05/20 Пнд 13:33:33 #378 №1676100 
>>1676053
>Нужны проверки, сам напиши
Я?
>>1675977
А что изменилось в C11?

Алсо, есть ли инструменты, которые будут указывать на ошибку например в следующем коде:
int i = 10;
double ★x = malloc (i * sizeof(double));
x[10] = 1;
Аноним 04/05/20 Пнд 13:55:47 #379 №1676118 
Аноны, какой смысл писать новые проекты на С/С++? Не проще писать их на безопасном расте? Офк легаси на С/С++ никуда не денется, слишком много софта было написано на этих языках, но новые проекты-то зачем писать на С/С++? Да и пишутся ли они вообще?
Аноним 04/05/20 Пнд 14:48:25 #380 №1676199 
>>1676118
пишутся еще как, раст еще молод, чтобы на него повально переходили
Аноним 04/05/20 Пнд 14:54:14 #381 №1676216 
>>1676118
>Не проще писать их на безопасном расте?
лет через 5-10, когда раст заматереет нормально
Аноним 04/05/20 Пнд 16:11:08 #382 №1676306 
>>1676100
> А что изменилось в C11?
На этот счет - ничего.

> есть ли инструменты, которые будут указывать на ошибку
cc -fsanitize=address hello.c && ./a.out
=================================================================
==79267==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x607000000070 at pc 0x555f0c9161c5 bp 0x7fff99c205b0 sp 0x7fff99c205a0
WRITE of size 8 at 0x607000000070 thread T0
#0 0x555f0c9161c4 in main (/home/anon/a.out+0x11c4)
#1 0x7f23a0979152 in __libc_start_main (/usr/lib/libc.so.6+0x27152)
#2 0x555f0c9160ad in _start (/home/anon/a.out+0x10ad)

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

>>1676216
> лет через 5-10, когда раст заматереет
Лет через 10 раст давно будет мертв.
Аноним 04/05/20 Пнд 16:16:41 #383 №1676310 
>>1676306
>Лет через 10 раст давно будет мертв.
Можешь обосновать? Потому что в общем просматриваются диаметрально противоположные перспективы. Раст: 1) Молниеносно быстр, он в бенчмарках был на равне с плюсами и иногда даже обгонял плюсы. 2) Безопасен. Прощай, произвольное исполнение кода, проблема которая терзала мир инфосека более 30-ти лет. 3) Лаконичнее крестов и гибче, чем Си. Можно разрабатывать лоу-лвл софт гораздо быстрее, чем на си крестах.

С какого перепугу он умрет-то? Перспектива вырисовывается такая, что новый софт будет писаться на расте (уже начал писаться на нем), а С и С++ останется на легаси-продуктах, которые переписать практически нереально (то же ядро Линукса). Но новый софт будет на расте. Почему нет-то? Какие-нибудь железные аргументы есть?
Аноним 04/05/20 Пнд 16:21:46 #384 №1676326 
>>1676310
Он все равно не будет быстрее С или в плане потребления ресурсов или в плане портативных систем или новых плат/устройств. Потому что все первым делом пишут компилятор С для своего нового железа.
Аноним 04/05/20 Пнд 16:23:23 #385 №1676329 
>>1676118
>на безопасном расте?
Чтобы написать на безопасном раст нужно вначале написать программу на Coq.
>легаси на С/С++
В расте возможно никогда не будет криптолибы на расте, такие дела, и это лишь один пример, будешь свои программы писать через ffi легаси, туда сюда поинтеры кастить, а мог бы сразу написать программу на C и не мучать жопу.
Аноним 04/05/20 Пнд 16:32:02 #386 №1676358 
>>1676310
> Можно разрабатывать лоу-лвл софт гораздо быстрее
Проиграл. Сколько часов (и строк) тебе потребуется на анальное ублажение раста, чтобы написать сложную структуру данных, чуть более чем полностью состоящую из укозателей? Ах ты ансейф сделаешь? Тогда
> Прощай, привет произвольное исполнение кода, проблема которая терзала мир инфосека более 30-ти лет.

Итак, мы имеем два стула: либо ты никого не ублажаешь и пишешь на проверенном десятилетиями языке, где все подводные камни давно известны и понятны. Либо ты ублажаешь компилятор в простых случаях (т.е., тратишь больше времени на написание менее читаемого кода там, где на самом деле ошибиться сложно) и ничего не приобретаешь в сложных. При этом у тебя гораздо меньше поддерживаемых платформ, у тебя пляски с бубном для вызова сишного кода (которого охуеть как много в современном мире), у тебя несовместимости между версиями, и впридачу у тебя неадекватное сообщество, которое в основном тратит время на проповеди и на "давайте перепишем это на расте".

>>1676326
> Он все равно не будет быстрее С
Будет, но возможный выигрыш не стоит всех этих неудобств.
Аноним 04/05/20 Пнд 16:59:07 #387 №1676386 
>>1676118
>Аноны, какой смысл писать новые проекты на С/С++?
Когда у тебя НОВЫЙ проект, тебе нужно как можно быстрее запилить прототип и похуй на его надежность - она должна быть приемлемой. А после этого у тебя проект взлетает, обастает фичами, и уже у тебя внезапно ЛЕГАСИ.
Чтобы что-то взлетело, оно должно быть не безопаснее, а удобнее. У раста есть достоинства типа cargo, но сам язык сильно на любителя, какие-то блядь -> &mut *yoba unwrap(), что это такое вообще и зачем, не программа, а кишки буста какие-то
Аноним 04/05/20 Пнд 17:31:42 #388 №1676421 
>>1676118
Растодауны - это сектанты, и поведение у них соответсвующее. Безопасность раста - это миф, просто вдумайся в это. Чтобы написать что-то выходящее за рамки хеллоуворда, код будет состоять на 95% из unsafe. А это смешивает с говном говна любую аргументацию.
Мозилла обосралась, но так и не нашла в себе мужества признаться в этом.
Аноним 04/05/20 Пнд 17:35:56 #389 №1676425 
>Некоторые плохие вещи не запрещены в безопасном Rust. Например, разрешено с точки зрения компилятора:
> вызвать deadlock в программе
> совершить утечку произвольно большого объема памяти
> не суметь закрыть хендлы файлов, соединения баз данных или крышки ракетных шахт

ОРУУ СУУКАА

БЕЗОПАСНЫЙ РАСТ
ПИЗДЕЕЦ
Аноним 04/05/20 Пнд 17:37:48 #390 №1676426 
>Мы приходим к сделанному раньше утверждению — да, полезность кода на Rust основана на небезопасном коде.

РАСТ ХОРОНИТ С/С++ СПЕШИТЕ ВИДЕТЬ
Аноним 04/05/20 Пнд 17:59:14 #391 №1676437 
>>1676358
а еще у раста своеобразный синтаксис неудобный с кучей "-> => ::"
Аноним 04/05/20 Пнд 19:36:49 #392 №1676540 
Парни, недавно вкатился, поэтому можете хуесосить, мне похуй (нет).
Кароче ща курю b-tree, думаю запилить свою реализацию (тупо для обучения). И суть в том что b-tree вроде как придуман под работу с большими данными на диске. Типо ебошим размер ноды в дереве размером со страницу которую читаем разово с диска, и таким образом уменьшаем количество чтений с диска. Так вот собственно вопрос, каким хуем можно узнать, какое максимальное количество байт я могу прочитать с файла? именно не вызовом функции, а за одно дрочение головки диска. И где вообще можно почитать как в линухе реализованно чтение с диска. Сам же вызов read читает с буфера в который страницами загружиются данные с диска?
Я даже хз как гуглить это, нифига не гуглится.
Аноним 04/05/20 Пнд 19:39:58 #393 №1676544 
>>1676425
>вызвать deadlock в программе
Это нерешаемая проблема тащемта (чекни что такое проблема остановки), но дедлоки не ведут к произвольному исполнению кода, где тебе в очко залетает реверс шелл и полный обоссалити всей системы на выходе.
>совершить утечку произвольно большого объема памяти
Это что еще за бред?
>не суметь закрыть хендлы файлов, соединения баз данных или крышки ракетных шахт
Что не приводит как удаленному исполнению кода.
Я говорил не про то, что этот язык не позволяет написать неуязвимый код, я говорил, что это язык позволяет нивелировать проблемы с памятью (переполнения и дабл фри идут нахуй)
>>1676421
Это справедливо для СУПЕРлоулвл софта, где тебе нужно выдрачивать собственную имплементацию связных списков и прочей ебанины, но зачем? Это есть в самом языке, уже реализовано. Куча проектов на 5-10к строк кода без единого ансейфа, ты просто преувеличиваешь.
>>1676358
Имея ансейф, ты знаешь где делать аудит кода для поиска возможных дыр, С/С++ - один сплошной UB, особенно С.
>Будет, но возможный выигрыш не стоит всех этих неудобств.
А вот тут не соглашусь, у раста есть рантайм проверки (иначе то же переполнение кучи было бы возможно, ибо там хранятся динамические буферы, размер которых неизвестен во время компиляции). Если весь полностью код на ансейф написать, то он будет быстрый как Си, но быстрее чем Си - вряд ли
>>1676326
Ну это сейчас, а потом платформы обрастут компиляторами на раст и все.
Аноним 04/05/20 Пнд 19:44:59 #394 №1676556 
>>1676437
Обычный синтаксис, аннотации функций и стрелки из жс.
Аноним 04/05/20 Пнд 20:00:12 #395 №1676594 
>>1676540
кароче для линукса нагуглил 4kb
Аноним 04/05/20 Пнд 20:09:25 #396 №1676620 
>>1676540
> какое максимальное количество байт я могу прочитать с файла
Незачем оптимизировать 100% случаев. Чаще всего, если ты выберешь относительно небольшой размер страницы (единицы килобайт), физические сектора, которые ее представляют, все равно будут расположены последовательно, потому что драйвер фс стремится по возможности устранить фрагментацию. Алсо, ты можешь спросить размер сектора/кластера в томе у ОС. Или можешь дать юзеру выбор - так, например, делает SQLite.

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

>>1676544
> Это нерешаемая проблема тащемта
Нерешаемая в целом, решаемая в частных случаях, как и все остальное в айти. Алсо, в сишке очень просто притащить локфри-структуры, уменьшив количество возможных блокировок.

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

> А вот тут не соглашусь
Сишные компиляторы сильно упираются в alias analysis при попытке векторизовать/реордерить вычисления/откладывать записи и т. д. Существующих strict aliasing и restrict всегда будет недостаточно (даже если будут атрибуты из C2x, ты заебешься ими все обмазывать), и вот тут у раста все шансы.
Аноним 04/05/20 Пнд 20:29:30 #397 №1676639 
>>1676544
>реверс Шелл
Ты либо из 2010, либо вообще ни малейшего представления не имеешь о чем говоришь, дальше не читал.
Аноним 04/05/20 Пнд 20:41:52 #398 №1676653 
>>1676620
Спс за ответ, но я все равно нихуя не понял.
> Во-первых, у нас кроме жестких дисков с головками есть SSD, а там все очень непросто, и разброс размеров физических страниц достаточно большой. Во-вторых, у жестких дисков наружу тоже торчит абстракция, и реальный размер сектора узнать не всегда возможно.

так как же тогда поступать, тупо взять какое-либо значение близкое к реальности и не париться? Опросил я ОС сказала 4кб размер сектора.

Бля, кто знает, где можно почитать от том как ОС работает с диском и как вытаскивает/засовывает данные через системные вызовы? Я так понимаю что возможно последовательность расположение узлов дерева в файле будет тоже играть роль но производительность? или я уже поехал?
Аноним 04/05/20 Пнд 20:42:08 #399 №1676654 
>>1676639
ты еще скажи что это невозможно, лол, ору
CVE-2019-11932 приятного аппетита, почитай про этот CVE, охуеешь. И это еще просто громкий случай, таких дыр еще миллион в самом разном коде, будь то ядра ос, будь то какая-то либа, будь то просто прога на с/с++. Да что уж там говорить, у меня у самого на счету 2 CVE, один из которых zero click remote code execution. Поучи меня еще тут, щенок
Аноним 05/05/20 Втр 03:37:54 #400 №1676993 
>>1676653
> Бля, кто знает, где можно почитать от том как ОС работает с диском
Почитай ридми Виктории, там черным по белому написано, что с диском работать можно только в XP, 7 уже ограничивает доступ, а 10 тем более, они даже программу ухудшают из за ограничений десятки, прямо так в изменениях написано "мы ограничили функционал программы из за проблем в windows 10".
Аноним 05/05/20 Втр 06:30:03 #401 №1677018 
>>1676654
Так а как шелл то в итоге выполнить? Стек и куча неисполняемы. Искать адреса необходимых функций в подгруженных, так это не тоже самое, что произвольный шелл запустить, абсолютные адреса могут меняться, повезет - не повезет.

Я не тот кому ты отвечал, так мимокрокодил.
Была мысль давно сериализацию в Си для себя замутить, но потом ее оставил, как раз из-за того, что произвольный шелл неисполняем при стандартных настройках ОС. Вот интересно стало
Аноним 05/05/20 Втр 12:10:24 #402 №1677200 
>>1677018
Никто уже не впендюривает в тупую шеллкод в стэк и не прыгает на него через скомпрометированный адрес возврата или указатель на рандомную функцию. Есть замечательная вещь под названием возвратно-ориентированное программирование, почитай на досуге, если интересно, это обходит data execution prevention (то, что ты назвал неисполняемым стэком и кучей). А его современная модификация полностью обходит Control Flow Integrity - самую современную технику антиэксплуатации. Насчет адресов - information leak. Рандомизация адресного пространства - сильная вещь, но полностью разбивается об примитив произвольного чтения. Если ты можешь спиздить со стэка/кучи/откуда-либо угодно адрес - ты можешь посчитать любой другой адрес в сегменте откуда был спизжен адрес (при рандомизации адресного пространства рандомится базовый адрес, а не все по отдельности, а если бинарь не был скомпилен как position independent executable, то образ бинаря в памяти, то бишь секция кода и данных, не подвержена рандомизации адресного пространства). Причем не всегда нужно прибегать только к технике возвратно-ориентированного программирования, можно через примитив произвольной записи подготовить данные на стэке для вызова функции, которая добавляет флаг исполняемости конкретной странице памяти (в Линуксе этот сисколл называется mprotect, хз как в винде) и тогда вуаля - стэк/куча вновь исполняемы, прямом как в начале нулевых. Различных техник и их комбинаций - бесчисленное множество.
И это только верхушка айсберга, к тому же я не могу в одном посте написать о всех нюансах, это целая наука.
Аноним 05/05/20 Втр 12:12:08 #403 №1677202 
>>1676993
Я спрашивал, подразумевая линуху. Не думал что тут в шиндоузе сидит кто-то. Шиндоуз еще жив?
Аноним 05/05/20 Втр 14:24:56 #404 №1677447 
>>1677202
А, точно, си же не мейнстрим, вот и притягивает хипсторов повыебываться нитакими какфсе. Социошлюхи ради социоблядства лезут в якобы программирование. Тупой мерзкий цирк уродов.
Аноним 05/05/20 Втр 14:35:21 #405 №1677477 
немного не по теме, но скажите. это нормально что я кусками копипащу gui в свою программу? ну я gui плохо владею и когда мне что-то надо я ищу в тырнете как прикрутить ту или иную хуйню. и копипащу тупо её код. это сильно плохо?
Аноним 05/05/20 Втр 14:37:44 #406 №1677482 
>>1677447
я не понял что ты спизданул. как по мне, хуйню какую-то
Аноним 05/05/20 Втр 14:39:45 #407 №1677484 
>>1677447
Вот это тебя порвало на ровном месте.
Аноним 05/05/20 Втр 14:40:52 #408 №1677488 
>>1677447
>>1677202
линуксо-мразь, ты? недавно один такой хуесос красноглазый пришёл и выёбывался "А ПАЩИМУ У ВАС ПРАЕКТ НА ВИНДОВС ЭТО ЧТО НЕОБХОДИМАЯ ОСОБЕННОСТЬ ПАЩИМУ" потому что долбаёб ебаный ВСЕ АБСОЛЮТНО ВСЕ БУХГАЛТЕРА И ПРОЧИЕ ТЁТИ СРАКИ СИДЯТ НА WINDOWS И ПОКУПАЮТ ПРОГРАММЫ НАПИСАННЫЕ ПОД ОКНА ДЕГЕНЕРАТ ТУПОЙ БЛЯДЬ НАХУЙ

СОВСЕМ ПИНГИВИНЫ ЕБАНУТЫЕ МРАЗИ. ВНЕЗАПНО ВАЙТИ ЭТО НЕ ТОЛЬКО ЕБУЧЕЕ АДМИНИСТРИРОВАНИЕ НА ОБОССАНОМ КОНСОЛЬНОМ ПОРАШНОМ ПИНГИВИНЕ ДЛЯ НИТАКИХ КАК ФСЕ ДЕГЕНЕРАТОВ ЕБУЧИЙ ОБОССАНЫХ ЛИНУКСОИД МРАЗЬ СДОХНИ ГНИДА ЕБАНАЯ
Аноним 05/05/20 Втр 14:48:58 #409 №1677500 
>>1677488
ты сидишь на щиндоузе потому что бабки сраки на нем сидят? Земля пухом, брат
Аноним 05/05/20 Втр 14:49:56 #410 №1677501 
>>1677447
>си же не мейнстрим
>в топ 1-3 TIOBE на протяжении десятилетий
>охуилярд софта написано и все еще пишется на си
>ядра всех известных ОСей, драйвера, прошивки, новомодный IOT, рилтайм, системный софт
>lingua franca языков программирования, альфа и омега всего мира компьютерных технологий
>не мейнстрим
Красиво стелишь, фраерок :-)
Аноним 05/05/20 Втр 14:52:22 #411 №1677506 
>>1677488
Лол блядь, вы кроссплатформу не можете бабкам написать а линуксе?
Аноним 05/05/20 Втр 14:52:54 #412 №1677507 
>>1677488
тише, петушок, иди лучше телеметрию в своем тормознутом говношиндоусе выруби. Заодно проверься на наличие криптомайнера, не помешает.
Аноним 05/05/20 Втр 14:54:20 #413 №1677511 
>>1677506
> кроссплатформу
Потратить десяток тысяч человекочасов, чтобы полтора аутиста-линупшодебила смогло воспользоваться продуктом? Нет, спасибо
Аноним 05/05/20 Втр 15:01:34 #414 №1677527 
>>1677507
На линуксе софта вообще нет, даже майнеры никто не хочет под это говно писать, потому что у 80% линуксоидов слабые компы.
Аноним 05/05/20 Втр 15:06:28 #415 №1677539 
stallman.jpg
>>1677488
Вот бомбануло-то чела
Аноним 05/05/20 Втр 15:07:48 #416 №1677543 
>>1677511
А макосеры?
Аноним 05/05/20 Втр 15:17:34 #417 №1677569 
=>>1677511
двачую

>>1677500
я сижу потому что всё что я разрабатываю сейчас делается онли для окон. это же маразм на линуксе тестировать .exeшники которые ещё написаны на winapi
Аноним 05/05/20 Втр 15:25:54 #418 №1677590 
>>1677506
>>1677500
Кстати стоит отметить, что про баб-срак я образно выразился, ибо софт для бухгатлерии поделил уже давно 1С. А вот конкретно я пишу софт для всевозможных лабораторий химических. Инженерный грубоговоря, наша компания числится в списке партнёров лукойла и мы продаём софт за дохуищные деньги непосредственно им под их заказ на их компы.

И нас никто и никогда не просил писать под линукс в требованиях всегда стояла возможность запуска win7\10 Линуксы ваши нахуй никому не нужны, программы должны быть ещё с гуи к тому же ты бы ещё приебался нахуй гуи чому сосноль не прикрутили. Потому что люди которые ими пользуются не знают про линукс и про консоль, это инженера которым нужно в 2 клика вбить значения и нажать кнпоку рассчитать всё. И ПРОСТО БЛЯДЬ ВЫСШАЯ СТЕПЕНЬ ДЕГЕНЕРАТИВИЗМА КРАСНОГЛАЗОГО ПИСАТЬ СОФТИНУ КОТОРАЯ ИСПОЛЬЗУЕТ GUI ОТ ОКОН И БУДЕТ РАБОТАТЬ ТОЛЬКО ПОД ОКНАМИ НА ЛИНУКСЕ, СУКА ТЫ ДЕГЕНЕРАТИВНАЯ.
Аноним 05/05/20 Втр 15:30:33 #419 №1677598 
>>1677590
Это всё здорово, но из твоих слов очевидно, почему в требованиях к вашей фирме линукса нет. Под линукс просто в менее боеготовой фирме заказывают.
Аноним 05/05/20 Втр 15:30:51 #420 №1677600 
>>1677590
СУКА ТУПАЯ скоро всех переведут на русский линукс и надо будет весь софт переписывать, и тут на сцену выйдем МЫ.
Аноним 05/05/20 Втр 17:23:28 #421 №1677795 
>>1677590
Мы тут о высоком. А ты опять свои говнозадачи для быдломасс притащил. Зачем?
Аноним 05/05/20 Втр 17:36:23 #422 №1677839 
>>1677795
Он уже выше начал за обе стороны играть, зачем ты его кормишь?
Аноним 05/05/20 Втр 17:50:40 #423 №1677868 
Нахуя нужны эти ваши enum'ы?
Аноним 05/05/20 Втр 17:54:21 #424 №1677874 
>>1677868
Очень часто нечто может находиться в конечном наборе состояний. Если нужно прыгнуть в N участков, то удобно switch делать. switch красиво с enum
Это безопасно, чтобы ты не присвоил чертовщину и не попал в default: блок зря.
Ещё это отличный способ объявить константы в хедере, без необходимости обсуждать это с линкером.
define надо избегать, если можно сделать через enum.
Аноним 05/05/20 Втр 18:37:20 #425 №1677930 
>>1677868
В том виде, в котором они есть в языке - нахуй не нужны, максимально кривая фича. Если бы идентификаторы скрывались в отдельном неймспейсе своего enum, и если бы можно было задавать типы для самого enum, тогда в них был бы смысл.

>>1677874
> Это безопасно, чтобы ты не присвоил чертовщину и не попал в default: блок зря
Это если ты константу присвоишь. А если значение в компайл-тайме не известно, ты понадеешься на компилятор, и он тебе не поможет, но ты об этом не узнаешь.

> define надо избегать
Вот да, еще одна проблема enum в том, что ты токой
enum myenum { SOME_FLAG = 0x40000000, SOME_OTHER_FLAG = 0x80000000 }, и компилятор токой WARNING: ISO C RESTRICTS ENUMERATOR VALUES TO RANGE OF 'INT' (2147483648 IS TOO LARGE)!!!111 Поэтому максимум, что можно пихать в енумы - вот эти самые имена состояний конечных автоматов или там теги для юнионов. Как только в твоем enum появляется явный = с хотя бы одним фиксированным значением, стоит задуматься о дефайне, потому что дальше будет только хуже.
Аноним 05/05/20 Втр 19:37:19 #426 №1678006 
>>1677590
окей, работа работой. ну заставляют тебя хуй лизать и жопу сосать, но чтобы пользоваться этой парашей в свободное время, я этого не понимаю.
Аноним 05/05/20 Втр 20:00:08 #427 №1678046 
>>1677488
>недавно один такой хуесос красноглазый пришёл и выёбывался "А ПАЩИМУ У ВАС ПРАЕКТ НА ВИНДОВС ЭТО ЧТО НЕОБХОДИМАЯ ОСОБЕННОСТЬ ПАЩИМУ"
Потому что говноеды тупые, с профессионализмом как у хлебушка. Кроссплатформа это не только линукс, это в принципе гарантия отсутствия любых проблем с твоим кодом в будущем.
А на поделия подобных говноедов я за 20 лет насмотрелся, еще начиная с досбоксов и патчинга софта в 6 студии, потому что в более новой не заведется. То есть говноед заранее расписывается, что он пишет распильный софт со временем жизни 1-2 года. А многие люди свой код для вечности пишут.
Аноним 05/05/20 Втр 20:09:25 #428 №1678060 
>>1678046
> Кроссплатформа это не только линукс, это в принципе гарантия отсутствия любых проблем
Это миф. Не существует кроссплатформенного кода сложнее хелловорлда. Тебе нужно работать с файлами, рисовать окошки, звук играть, интернеты асинхронно дергать. И на каждой платформе все это реализуется по-разному и содержит кучу нюансов. Поэтому написать под конкретную платформу вменяемую прослойку-абстракцию иногда сложнее, чем основную логику программы, которой эта прослойка нужна.
Аноним 05/05/20 Втр 20:59:52 #429 №1678142 
>>1678060
Так все уже написано. Поэтому все и сводится к заплывшим жиром кузьмичам с синдором NIH, нежеланием разбираться и "я 20 лет под винапи пишу, что мне переучиваться что ли". Хули, лукойл, место пригретое, левых бабок много и каждый заинтересован попилить с них кусок.
Аноним 05/05/20 Втр 21:25:49 #430 №1678169 
>>1678142
> Так все уже написано
Это только так кажется. А потом ты такой опа, и хочешь узнать, не являются ли два файла хардлинками одних и тех же данных, или расположены ли они на одном физическом томе, или является ли filename валидным именем файла, или >>1676540
... и, короче, либо у тебя тонны зависимостей, у каждой из которых собственная проблема, либо ты пишешь решение под задачу сам.

> все и сводится к заплывшим жиром кузьмичам с синдором NIH
Со временем у тебя накапливается количество случаев, когда ты взял вот эту крутую либу, которая решает твою проблему, и ты ее используешь, и все заебись. Но сильно позже в ней обнаруживается фатальный недостаток, который удается обойти только дикими костылями. При этом авторы либы не считают это проблемой. И с опытом ты начинаешь гораздо более скептически относиться к модным крутым либам.
Аноним 05/05/20 Втр 21:35:20 #431 №1678179 
>>1678142
>Так все уже написано.
Вот из-за таких педерастов как ты сейчас все пишется на высокоуровневой залупе типа электрона,все жрет по полтора-два гигабайта на пустом месте и лагает
Аноним 05/05/20 Втр 21:40:08 #432 №1678185 
>>1678179
А ведь были времена, когда не лагало! (никогда не было)
Аноним 05/05/20 Втр 21:44:09 #433 №1678192 
>>1678185
причины лагов разные
Аноним 05/05/20 Втр 21:50:29 #434 №1678202 
>>1678192
Конечно разные. Раньше педерасты на высокоуровневой залупе типа С писали, вместо нормального ассемблера.
Аноним 05/05/20 Втр 21:52:45 #435 №1678205 
>>1678202
хуйня,предпочитаю писать на перфокартах для максимального перфоманса
Аноним 05/05/20 Втр 22:11:21 #436 №1678227 
>>1678169
Ну так берешь SDL2 + imgui и пишешь нормальный кроссплатформенный софт для инженегров, чтобы они ввели значения в поля и ткнули кнопочку "рассчитать". Логику ты пишешь сам всех этих лукойлов, что тебе заказывают, кроссплатформенное у тебя только создание и рендер окна, устройства ввода-вывода, сеть, gui
sageАноним 05/05/20 Втр 22:29:54 #437 №1678243 
>>1678227
> SDL2 + imgui
Лол, использование ненативного гуи, да еще требующего аппаратного ускорения для двух кнопочек (привет, remote desktop) - это прямо классический детектор эталонного студентософта.
Аноним 05/05/20 Втр 23:17:43 #438 №1678278 
>>1678243
Что за бред ты написал, потрудись объяснить человеческим языком.
Аноним 05/05/20 Втр 23:29:58 #439 №1678286 
https://pastebin.com/Ps3Qg5Z6
Насколько эта реализация очереди хуёва?
Аноним 05/05/20 Втр 23:33:29 #440 №1678287 
>>1678286
научись писать чистый и читабельный код для начала, там дрисня какая-то несусветная
Аноним 05/05/20 Втр 23:37:28 #441 №1678293 
>>1678286
>void init(void);
Норм. ))
Аноним 05/05/20 Втр 23:39:44 #442 №1678298 
>>1678293
Я читал в C primer plus, что это каким-то хуем должно помочь компилятору
Аноним 05/05/20 Втр 23:44:55 #443 №1678302 
>>1678169
Спросите профессионального программиста, как устроена система Windows, и вы услышите горестный вздох. В лучшем случае вам еще сообщат, что лучше бы вам этого не знать.

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

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

Осмелюсь напомнить тем, кто забыл, как выглядит DOS, что для его функционирования достаточно наличия всего трех файлов общим объемом чуть более ста килобайт (я лично после работы с мастдайкой - Windows 95 - стал путать килобайты с мегабайтами), а все необходимые драйвера устанавливаются очевидным образом. Только в DOS чувствуешь себя полновластным хозяином собственного компьютера.

Часто достоинством Windows считается унифицированный графический интерфейс, например, общие шрифты. Но стоило ли огород городить, если оные шрифты с тем же успехом могут использоваться и в DOS, достаточно распространить средства их отображения в виде драйвера для DOS. Что же касается пресловутого OLE, гипотетическая его реализация под DOS наверняка работала бы быстрее и стабильнее; тем же, кто обвинит меня в притягивании за уши, отвечу, что OLE именно за уши Мелкософтом и притянут - так не лучше ли было притянуть его к DOS?
Аноним 06/05/20 Срд 00:04:44 #444 №1678329 
>>1678298
А почему ты там не прочитал, как очередь сделать?
Аноним 06/05/20 Срд 00:13:30 #445 №1678339 
>>1678329
> А почему ты там не прочитал, как очередь сделать?
Не дочитал ещё до этого. Хотел сам как-то изъебнуться
Аноним 06/05/20 Срд 00:31:31 #446 №1678364 
>>1678339
Получилось плохо.
Аноним 06/05/20 Срд 00:39:07 #447 №1678368 
>>1678364
А в чем именно ошибки?
Аноним 06/05/20 Срд 00:54:23 #448 №1678372 
Стикер
>>1678368
Аноним 06/05/20 Срд 01:41:22 #449 №1678389 
>>1678185
Никогда не лагало. Лагали только игры с графоном если не купить видеокарту. Сейчас же лагает всё, даже игры без графона при наличии видеокарты (они теперь в процессоры встроены). А звук лагает вообще безальтернативно, ведь микрософт выпилила звуковые карты, оставив полусофтверные затычки. Раньше кстати быди подобные затычки, только диалап-модемы, полусофтверная параша. В результате пошла мода на юэсби-бирюльки с лампочками, вообще высеры с хрипом пердежом и отсутствием звука, ведь официальной поддержки нет, даже в DOS было намного лучше.
Аноним 06/05/20 Срд 02:03:48 #450 №1678394 
>>1678389
>Никогда не лагало
Ты зумер или алкаш, который остатки мозга пропил? Можно ведь просто взять ретрокомп и понаслаждаться этой нелагающей работой и, конечно же, стабильностью всего этого говнософта
Аноним 06/05/20 Срд 03:22:12 #451 №1678403 
>>1678394
Так и делаю. Проблемы?
Аноним 06/05/20 Срд 06:53:57 #452 №1678423 
>>1678286
Я тоже вкатывальщик, решил как анон реализовать очередь. Поревьювьте кто плз https://pastebin.com/Zxm465qx.

Еще такой вопрос, я выделяю память для новой ноды при добавлении елемента. Я так понимаю каждое новое выделение памяти - это минус производительность. Есть ли какой паттерн, чтобы все время не выделять память, а один раз выделить допустим на 100 елементов, и потом динамически перевыделять если количество елементов больше 100 стало?
Аноним 06/05/20 Срд 07:51:19 #453 №1678428 
2020-05-06 093208-● sdlsudoku.c - VSCodium.png
2020-05-06 093331-● sdlsudoku.c - VSCodium.png
typedef struct GAME_Grid {
{
GAME_Cell ★★cell;
GAME_Cell ★★cell_xy;
}

Анончик, есть структура сетки, внутри которой есть указатель на ячейки. Первый это для доступа к ячейкам как одномерный массив [N], второе как к двумерному массиву по [n][n]. Основным является [n][n], в [N] хранятся указатели на ячейки из [n][n]. Это дело инициализируется кодом пикрл 1.

Почему у меня не работает код на пикрл 2, для перестановки двух ячеек между собой?
Допустим при перестановке [0][0] = 1 и [0][8] = 9 на выходе получаю:

[0][0] = 9, [0] = 9 (верно)
[0][8] = 1, [8] = 9 (при доступе в одномерном массиве старое значение).

Т.е. в одномерном массиве у меня ссылается на старое значение, но я же вроде бы в функции копирую значение, т.е. адрес должен остаться старым, а значение должно измениться.
Что я делают не так?
Аноним 06/05/20 Срд 08:00:58 #454 №1678434 
>>1678423
Стракты сломаны, один тайпдеф, другой не тайпдеф, название тайпдефа совпадает с названием структуры (компилятору-то понятно, что где, а человеку?).
Нейминг конвеншн какой-то рандомный, что за внезапная "__prev" с двумя подчёркиваниями, когда ни одной другой такого вида переменной нет? К чему это?
Подход с void × element довольно странный. Если ты организовываешь очеред, то, предположительно, ты данные откуда-то получаешь, и после прохождения очереди, они куда-то уходят. А тебе придётся ещё административную логику их хранения где-то отдельно городить.
Никакого хендлинга ошибок.
Зачем маллокать кью на куче, когда она состоит из одного указателя и одного инта? (и бай дизайн, в такой структуре максимум может ещё пара указателей появится) На стеке её оставляй.
Ну и по мелочи, указатели без констов, хотя в функции ты ничего не меняешь.

И у тебя очередь LIFO получилась, это точно то, чего ты хотел? (поэтому комментарии нужны). Обычно лифо стеком называют, а очередью FIFO.

>Есть ли какой паттерн, чтобы все время не выделять память, а один раз выделить допустим на 100 елементов, и потом динамически перевыделять если количество елементов больше 100 стало?
Есть такой паттерн, реаоизовывай.
Аноним 06/05/20 Срд 08:04:23 #455 №1678436 
>>1678428
тебе же вроде просто указатели поменять надо, зачем тогда Game_cell buffer..
Аноним 06/05/20 Срд 08:10:30 #456 №1678438 
>>1678434
лол, точно, я же ебаный стэк сделал. Надо проспаться.
Аноним 06/05/20 Срд 08:11:49 #457 №1678439 
>>1678428
Ты же два раза маллокаешь место для геймгрида, это два разных участка памяти. В ините() ты копируешь двумерный грид в плоский, но когда ты их местами меняешь, ты же больше не в ините(). У тебя где-то должны быть юнионы вместо страктов, но без ide чужой код читать не хочется, а качать и открывать его хочется ещё меньше.
Аноним 06/05/20 Срд 08:39:09 #458 №1678449 
>>1678436
>>1678439

Забейте пацаны, я ущербный, все правильно, все работает, просто я принте выбрал [0][0], [0] и [8], [0][8] вместо [8][0]

Пусть мой позор останется в этом треде.
Аноним 06/05/20 Срд 09:03:33 #459 №1678462 
>>1678449
Всё равно лучше переделай архитектуру, у тебя сейчас очень странно всё.
Аноним 06/05/20 Срд 09:25:02 #460 №1678470 
>>1678428
Импотент делает игру - The Code
Забавно как психика у людишек работает. По факту сделано всё возможное, чтобы не делать игру, но поциэнт считает наоборот, что делает игру.
Аноним 06/05/20 Срд 11:49:48 #461 №1678525 
>>1677200
Спасибо за подробный ответ. В качестве техник обхода что-то похожее и пердставлял. Про возвратно-ориентированное почитаю - интересно.
Аноним 06/05/20 Срд 11:59:55 #462 №1678540 
>>1678403
Пиздабол
Аноним 06/05/20 Срд 12:14:56 #463 №1678555 
>>1678423
>Еще такой вопрос, я выделяю память для новой ноды при добавлении елемента.
Можно арену ебануть.
Аноним 06/05/20 Срд 13:53:49 #464 №1678669 
>>1678555
Это как?
Аноним 06/05/20 Срд 13:59:07 #465 №1678676 
>>1678669
Зогугли allocation arena/slab/zone
Аноним 06/05/20 Срд 20:55:48 #466 №1679079 
Чекнул лениво трейд ваш, понравилось мне тут у вас, своеобразная атмосфера. Пожалуй поселюсь здесь и почитаю что нибудь интересного с ОП-поста.
мимо-питоноблядь
Аноним 07/05/20 Чтв 01:56:24 #467 №1679219 
Насколько возможно самоучке написать на C какую-нибудь небольшую утилиту, без говнокода и всяких утечек? Куда двигаться в изучении, чтобы избежать этого?
Аноним 07/05/20 Чтв 02:05:17 #468 №1679223 
>>1678060
> Это миф. Не существует кроссплатформенного кода сложнее хелловорлда. Тебе нужно работать с файлами, рисовать окошки, звук играть, интернеты асинхронно дергать. И на каждой платформе все это реализуется по-разному и содержит кучу нюансов.
Не на каждой. Это винда стоит боком и не следует стандартам POSIX.
Аноним 07/05/20 Чтв 03:19:49 #469 №1679244 
>>1679219
Просто берёшь и пишешь, потом прогоняешь валгриндом.
Аноним 07/05/20 Чтв 03:46:21 #470 №1679249 
>>1679223
покажи мне месседж бокс на никсах с помощью позикса.
Аноним 07/05/20 Чтв 03:49:32 #471 №1679251 
>>1679249
Для окон gtk/qt, прочее.
Аноним 07/05/20 Чтв 04:01:26 #472 №1679254 
>>1679251
>с помощью позикса
Аноним 07/05/20 Чтв 05:16:40 #473 №1679262 
>>1679223
> Это винда стоит боком
Этот реверт лилипута. Соит только винда, в всё остальное жмется по углам как крысы ненужные, а то и вредные.
Аноним 07/05/20 Чтв 08:59:06 #474 №1679342 
>>1678676
о бля, спс, анончек, это то что я хотел
Аноним 07/05/20 Чтв 11:43:33 #475 №1679450 
>>1679254
Любитель придираться, да.
Аноним 07/05/20 Чтв 13:44:07 #476 №1679597 
>>1673647
make - говно, но ничего лучше нету.
Аноним 07/05/20 Чтв 13:45:00 #477 №1679602 
>>1674030
Это же стандарт, для любителей компиляторы писать. Простые смертные читают k&r и он всё ещё актуален.
Аноним 07/05/20 Чтв 13:48:41 #478 №1679605 
>>1676544
> Это что еще за бред?
Память разметил, но не освободил. Хроническая проблема мозилки с 2000х годов, буквально багрепорт такой давности открыт, но в расте не разрешили.
Хромоговно сейчас может работать аптайм неделю. Лиса не может, лиса обсирается.
Аноним 07/05/20 Чтв 14:02:08 #479 №1679625 
>>1679223
> Не на каждой. Это винда стоит боком
Конечно. У меня от тебя epoll/kqueue. inb4 select в 2020
Аноним 07/05/20 Чтв 14:52:43 #480 №1679682 
>>1679625
На всех суперкомпьютерах мира стоит Linux. На роутерах и большинстве серверов тоже. Что сказать-то хотел?
Аноним 07/05/20 Чтв 14:59:12 #481 №1679689 
>>1679682
Хотел сказать, что есть больше двух операционных систем, а серверами мир не ограничивается.
Аноним 07/05/20 Чтв 15:03:13 #482 №1679695 
>>1679689
весь Интернет держится на Линуксе, пчел. Тебе этого уже должно быть достаточно, чтобы прекратить бессмысленный и смешной спор.
Аноним 07/05/20 Чтв 15:54:23 #483 №1679767 
>>1679695
А как же FreeBSD, NetBSD, OpenBSD?
Аноним 07/05/20 Чтв 16:03:26 #484 №1679781 
>>1679695
А весь десктоп на виндоусе
Аноним 07/05/20 Чтв 16:04:34 #485 №1679783 
>>1679767
И? GTK на них не работает? Может, они posix не совместимы и приходится переписывать? Нет, не приходится.
Аноним 07/05/20 Чтв 16:11:27 #486 №1679794 
>>1679783
Ммм, таки множество функций и не работает, есть make-флаги, есть linux compatibility layer в ядре netbsd, есть ядро линукса и линус со своим "люди важнее стандартов", что порождает некоторые линукс-специфичные фичи, на которые люди опираются. Короче говоря, пакеты под бзди нередко требуют портинга. Причём проссать что не заводится не всегда возможно, т.к. в бздях make расцветает невиданными бутонами, если конечно вам что-то захотелось собрать самому
Аноним 07/05/20 Чтв 16:16:18 #487 №1679803 
>>1679783
Попробуй, кстати, под линухом скомпилировать какой-нибудь kde 20 летней давности, потом раскажи как пройдет.
Аноним 07/05/20 Чтв 16:17:59 #488 №1679807 
>>1679794
>make-флаги
под этим я подразумеваю отдельные ifdefы на линуксы, бзди и всё остальное
Аноним 07/05/20 Чтв 16:55:58 #489 №1679873 
>>1679803
Так библиотеки уже другие.
Аноним 07/05/20 Чтв 17:21:54 #490 №1679896 
>>1679873
>библиотеки на линуксе не библиотеки и не считаются
Вот вот, на линуксах все проблемы решаются по принципу неуловимого джо - если есть проблемаа, значит она неправильнаяч и не считается, а значит проблемы нет. В результате проблем не существует, идеальная система шизомирка дебилов
Аноним 07/05/20 Чтв 17:23:08 #491 №1679898 
>>1679682
>>1679695
https://www.atraining.ru/trainers/karmanov/hint/
прям классические отмазки
Аноним 07/05/20 Чтв 17:27:09 #492 №1679903 
>>1679896
> >библиотеки на линуксе не библиотеки и не считаются
Ты не понял. У новых версий может быть несовместимость со старыми.
Аноним 07/05/20 Чтв 17:29:55 #493 №1679905 
>>1679898
Это не отмазка, а факт. По ссылке шиза, признаю. И СПО – это не один Linux.
Аноним 07/05/20 Чтв 17:41:43 #494 №1679920 
>>1679903
Ну да, поэтому старые версии не нужны и не существуют, а значит и проблем с ними связанных нет.

>У новых версий может быть несовместимость со старыми
>может быть
Всегда есть. Потому что новое это прогресс, а старое - говно и нинужно. Причем процесс обновления идет беспрерывно и что было прогрессом сегодня, завтра уже нинужное и не существует. И это замечательно, а вот в "дерьмовой винде" совместимость зоть 30 лет назад, вот же куча говна, ха ха.
Аноним 07/05/20 Чтв 17:52:42 #495 №1679935 
>>1679920
Есть книга Петцольда "Programming Windows 95". Все примеры оттуда запустятся на десятке, и практически весь контент актуально и сейчас.

Раскажите мне про "код для вечность" в линухах.
Аноним 07/05/20 Чтв 19:51:19 #496 №1680089 
Коммерческие дистры типо ред хата, центоса, опен суса кстати имеют двоичную совместимость экспортируемых символов разных версий ядра, так что по идее то что компилилось 10 лет назад скомпилится и щас
Аноним 07/05/20 Чтв 20:01:54 #497 №1680105 
>>1680089
>дистры
Дальше не читал
Аноним 07/05/20 Чтв 20:07:31 #498 №1680114 
Лол, щас бы включаться в холивары в си треде, где 70% населения это ебики студенты и всякий мусор из школы 21, который код сложнее меседжбокс('анус') в жизни не видел
Аноним 07/05/20 Чтв 21:08:28 #499 №1680194 
>>1680114
Независимо от треда фанбои линукса это студенты и админы низкого уровня (которые остаются в душе студентами до пенсии).
Аноним 07/05/20 Чтв 21:21:54 #500 №1680215 
>>1679935
>Все примеры
Это не ты в треде про "сложнее хелловорлда" заливал?
Аноним 07/05/20 Чтв 21:36:30 #501 №1680232 
>>1680105

Дальше не читал
Аноним 07/05/20 Чтв 21:50:02 #502 №1680242 
>>1680215
Красноглазик, принеси-ка книжку по разработке гуи под линух 90х годов и попробуй запустить что-то оттуда на современной убунте.
Аноним 07/05/20 Чтв 21:59:52 #503 №1680252 
>>1679898
>https://www.atraining.ru/trainers/karmanov/hint/
>Если линуксовый драйвер уже несколько лет не поддерживает какой-либо функционал в железе, то мало того, что функционал нинужен, так ещё и производитель железа – урод и может довести торвальдса до слёз и публичной истерики (см. случай с nVidia).
Другой анон на проводе.
Вот нынешним студентам смешно это читать и могут даже не понять. А у меня реально подгорело. 8 лет назад пытался на ноут compaq установить пинус. Естественно, нихуя нормально не работало и я полез на форумы. БЛЯДЬ, мне отвечали слово в слово как выше БЛЯДЬ!

Аноним 07/05/20 Чтв 22:01:20 #504 №1680254 
>>1680242
Значит ты. Понятно-понятно, мистер лицемер.
Аноним 07/05/20 Чтв 22:12:45 #505 №1680265 
>>1680254
Красноглазик, тебе сказали что делать:
>книжку по разработке гуи под линух 90х годов и попробуй запустить что-то оттуда на современной убунте.

Покажи свой "код для вечности"
Аноним 07/05/20 Чтв 22:22:14 #506 №1680275 
>>1680265
Не знаю, на что ты рассчитываешь, учитывая, что *никсы всё никак с говна из 80х для своей графики слезть не могут
https://en.wikipedia.org/wiki/X_Window_System#Release_history
(а прослойка совместимости с ним скорее всего теперь вообще не уйдёт никогда)
Но, почему-то мне кажется, что спорить с человеком, который для "победы" готов свой же аргумент на 180° развернуть, довольно бессмысленно. Мои аргументы ты будешь крутить, как фингерспиннер.
Аноним 07/05/20 Чтв 22:31:35 #507 №1680289 
>>1679898
Карманов - птушник-кинфоцыган, а с какого-то времени и пропагандон, нашел кого приносить приличным людям.
Аноним 07/05/20 Чтв 22:53:19 #508 №1680314 
>>1680289
Это я писал для тебя >>1680252
Тебе 18 лет, да?

Аноним 07/05/20 Чтв 22:56:26 #509 №1680317 
Screenshot2020-05-0722-51-25.png
Screenshot2020-05-0722-53-41.png
Screenshot2020-05-0722-54-35.png
>>1679935
>Есть книга Петцольда "Programming Windows 95". Все примеры оттуда запустятся на десятке, и практически весь контент актуально и сейчас.
И как же автор этого добился? А он выкинул нахуй visual studio и сказал людям ебаться с командной строкой и мейкфайлами. Потому что Петцольд умный, а ты нет.

Изначально-то речь была о том, что нет никакой причины в 2020 не писать кроссплатформенно и так делают только непрофессиональные васяны. Кроссплатформенно - это значит не закладываться ни на какую платформу. Ну то есть, не надо ни использовать winapi, ни xwindows, не надо в гуе писать важную для программы логику, и так далее. Понятно, что васянам это сложно - ну на то они и васяны. Тупые-с.
Аноним 07/05/20 Чтв 23:19:24 #510 №1680339 
Аноны,
Учусь по Прате.

Использую devc++, но не тот который на bloodshed а новый, с
https://sourceforge.net/projects/orwelldevcpp/
Почему? Потому что проскакивал в тредах, начал и понравилось, т.к. он довольно прост - что хорошо для новичка.

Зашел как-то посмотреть сорцы, внезапно оказалось что они на делфи.
Еще оказалось, что фронтенд программы - это формочки! Для тебя это наверное естественно, а для меня одной магической штукой меньше.

Я решил в свой "дипломный проект" перегнать это в си. Соответсвенно, GTK.
Меня очень удивил main.pas:
https://sourceforge.net/p/orwelldevcpp/code/ci/master/tree/Source/main.pas#l11
6656 lines (5916 with data)

+6k строк в одном файле! Чому так??
Почему не вынести часть в отдельные файлы, а потом подключить через extern хз как это в делфи?
Хотя, может gtk тоже высрет 9000 строк в один файл, не знаю.

Я кончел.
Просто хотел поделится.
Аноним 07/05/20 Чтв 23:27:39 #511 №1680346 
>>1680339
> Чому так?
Ну так в делфи принято: form.dfm для самой формы, и form.pas соответствующий класс к ней. Кое-что вынести, конечно, можно, но для этого телодвижения нужны, а делфи так удобно позволяет создавать методы полутора кликами. Вот и получилось.
Аноним 07/05/20 Чтв 23:29:29 #512 №1680348 
>>1680314
Мне 31, хотя какая разница, васян? Это за тобой, васян, кроме возраста, нихуя нет. Так же как у карманова, гоблина, рандомного специалиста по ремонту ваз 2106 и прочих одноклеточных. Такие не умеют спорить с аргументами, вот и выдумывают себе противника. И это удобно, потому что молодые и неопытные бывают где угодно, поэтому спорить нужно, естественно, выдумывая именно их.
Обиженку обосрали на русском форуме - как будто на других русских форумах того времени такого не было. Ну да, линукс виноват в токсичной атмосфере на русских форумах. То ли дело форумы по винде - там все в деловых костюмах занимаются делом.
Аноним 07/05/20 Чтв 23:33:47 #513 №1680354 
>>1680317
>А он выкинул нахуй visual studio
Красноглазик, ты свои картинки-то читал? Он использует MSVS 4, и мейкфайлы. В то время это было обычной практикой.

>Изначально-то речь была о том, что нет никакой причины в 2020 не писать кроссплатформенно
Есть причина, например чтобы использовать нативные хорошо документированые АПИ, а не убогие "кросплатформенные" библиотеки. Чтобы использовать DX12 вместо уебанского Vulkan, и т.п. Если ты пишешь под десктоп, ничего кроме Windows тебе поддержить не нужно.

>так делают только непрофессиональные васяны.
Тебе-то то откуда знать, васян?

>не надо в гуе писать важную для программы логику
Охуеть откровение.
sageАноним 07/05/20 Чтв 23:35:24 #514 №1680355 
>>1680348
> спорить с аргументами
> васян
> васян
> васян
> ни одного аргумента, только чужие мысли про кроссплатформенность, зачем-то смешанные в одну кучу с разделением логики и интерфейса
> а ваши аргументы не аргументы
Аноним 07/05/20 Чтв 23:35:37 #515 №1680356 
>>1680339
>Почему не вынести часть в отдельные файлы, а потом подключить через extern хз как это в делфи?
Нахуя? Это имеет смысл при командной разработке.
Когда ты один, хуячишь себе и хуячишь, при случае ctrl-f работает.
sageАноним 07/05/20 Чтв 23:36:18 #516 №1680357 
>>1680348
Ах да, еще обязательно нужно упомянуть линукс на суперкомпьютерах, как будто ты вот только сегодня свой говнокод там запускал.
Аноним 07/05/20 Чтв 23:51:22 #517 №1680366 
>>1680354
> Он использует MSVS 4, и мейкфайлы
А я напомню, что Visual Studio сама мейкфайлы использовала. Ее проекты с расширением .mak (4 студия) и позднее .dsp (как минимум 6 студия) - это точно такие же мейкфайлы, с расширенным синтаксисом для nmake.
Аноним 08/05/20 Птн 00:57:13 #518 №1680429 
1328554698663.jpg
>>1680357
Содомит
Аноним 08/05/20 Птн 00:58:37 #519 №1680431 
>>1680356
Не знаю, у меня просто травма с qbasic, читать длиннющие простыни с go-to. Да, я альтфак.
Аноним 08/05/20 Птн 01:00:38 #520 №1680434 
Анонсы, а нужно ли читать кнута? Вот прям необходимо? Уж очень далеко он от того что я хочу говнокодить.
Аноним 08/05/20 Птн 01:45:59 #521 №1680452 
>>1680434
Именно Кнута необязательно, но что-нибудь по алгоритмам все равно почитай, Седжевика того же.
Аноним 08/05/20 Птн 02:33:49 #522 №1680460 
>>1680357
Я запускал на суперкомпьютере свой говнокод только раз, это был код на паскале через зеленый монохромный терминал с кнопками почти как на пишущей машинке. И кстати, линукса там не было, даже командной строки классической не было, а была графическая табличка-меню в аски-графике, и ты из этого меню выбирал вводя номер пункта ниже, называлось кажется "командник", мы даже сами делали свои взамен стандартного. Вот, наже в дедовскмх шкафах с жесткими дисками как грампластинки, и то были графические интерфейсы.
ПЕРЕКАТ Аноним OP 08/05/20 Птн 02:38:39 #523 №1680463 
>>1680461 (OP)
>>1680461 (OP)
>>1680461 (OP)
>>1680461 (OP)
>>1680461 (OP)
Аноним 10/05/20 Вск 11:36:44 #524 №1682934 
>>1680434
Советую книгу "Грокаем алгоритмы". Там на уровне детей, с картинками, объяснено минимально нужное.
Потом уже можно какого-нибудь Кормана навернуть
Аноним 11/05/20 Пнд 06:29:38 #525 №1683710 
>>1678540
Смотри на ютубе канал OLD ROBOT — это я.
Аноним 12/05/20 Втр 03:58:16 #526 №1684608 
>>1662576
exercism.io
codewars.com
hackerrank.com
https://app.codility.com/programmers/lessons/1-iterations/
Аноним 12/05/20 Втр 14:33:20 #527 №1685021 
Как динамически замаллочить матричный массив?
Типа
struct huyna h = {
{"sghdfgh","dfghdfgh"},
{"dfghdnb","dfjghkldjgh"}
};


Мне нужно чтобы освобождать переназначенную маллоком память было удобно, тому що если вызывать free() на статическую память, выходит UB. Решение - маллочить всё и освобождать всё, но как маллочить хз.
Аноним 12/05/20 Втр 14:34:51 #528 №1685026 
>>1685021
квад скобки забыл
>struct huyna h[] = {
Аноним 12/05/20 Втр 14:38:54 #529 №1685034 
>>1685021
я конечно могу ручками каждую переменную маллочить, но это чёт говнокод какой-то.
Аноним 12/05/20 Втр 14:42:02 #530 №1685041 
>>1685034
Хотя маллочить что есть в статике это изначально говнокод. Программа запускается и что делает? Делает strdup'ы строк, которые есть в статике.
Хмм.
Аноним 12/05/20 Втр 18:35:10 #531 №1685481 
>>1685021
Ну выделяешь malloc(sizeof(struct huyna) * count), в чем вопрос-то? Строки можешь хранить в таблице (string pool) - выделить большой кусок, (опционально) искать там строку, а если ее нет - дописывать в конец. Когда кусок кончится - выделить новый, и т. д.
comments powered by Disqus

Отзывы и предложения