М.Двач / Программирование

Этого треда уже нет.
Это копия, сохраненная 12 мая 2016 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

78 Кб, 792x1023

C Programming Language #5 11 Мар, 12:43 #683573 В конец треда | Веб

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

Что читать:

- Классика от Отцов: http://www.ime.usp.br/~pf/Kernighan-Ritchie/C-Programming-Ebook.pdf
- Годное пособие для гуманитариев: http://c.learncodethehardway.org/book/
- Немного примеров хорошего стиля: 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 (драфт)
- man/Dash/zealdocs

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

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

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

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

Stephen Prata "C Primer Plus, 6th Edition" (2014)
Свежая знает про C89, C99, C11, описывает различия, объемная около тысячи страниц, годная хотя есть некоторые шероховатости, с вопросами, упражнениями и ответами. Читать после K&R или до.

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? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).

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

Stephen G. Kochan "Programming in C (4th Edition)" (2014)

Jon Erickson "Hacking: The Art of Exploitation, 2nd Edition" (2008)
Анон из предыдущего треда рекомендует например, в качестве примера применения Си на практике.

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

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

- https://arhivach.org/thread/106153/
- https://arhivach.org/thread/131949/
- https://arhivach.org/thread/140570/
- https://arhivach.org/thread/153698/

Шапка: http://piratepad.net/bJ1SdmkZyu

Ответы>>685800>>688839>>691201>>691354>>692466>>694860>>695169>>705087>>710272>>718254>>719733>>721207

11 Мар, 19:07 #2 #684023

Имеет ли значение: писать if(NULL == (p = malloc(sizeof(int)))) или if((p = malloc(sizeof(int))) == NULL)?

Ответы>>684129

11 Мар, 19:56 #3 #684129

>>684023
Первый вариант лишь частично защищает от = вместо ==, а воспринимается намного хуже. И смысла в нем нет - сейчас на присваивание внутри условия ругается каждый первый компилятор.
Второй вариант норм, но он не очень удобен, если вместо malloc вызов с большим количеством аргументов (привет, Windows API). Можно либо смириться с этим, либо писать так:
p = malloc(sizeof(int))
if (!p)
Этот вариант хорош еще и тем, что заодно с C99 позволяет определить p в месте использования и сразу же его инициализировать.
Алсо, вместо sizeof для типа в malloc лучше использовать sizeof(∗p). Если в будущем ты поменяешь тип p, у тебя ничего не свалится от того, что ты забыл поправить malloc.

Ответы>>684190

11 Мар, 20:17 #4 #684190

>>684129
>сейчас на присваивание внутри условия ругается каждый первый компилятор
GCC не ругается. А что можно почитать о различных компиляторах для прокачки скилла реверсинга и оптимизации?

Ответы>>684285

11 Мар, 21:12 #5 #684285

>>684190
> GCC не ругается
-Wall же http://ideone.com/WHCLLp

> для прокачки скилла реверсинга и оптимизации
По реверсингу beginners.re и Криса Касперски по вкусу (про оптимизацию тоже немного будет). Ну и потом мануал к своему компилеру, наверное.

Ответы>>684302>>684452>>685140

11 Мар, 21:24 #6 #684302

>>684285
Еще в одни скобки условие оберни -- перестанет.

Ответы>>684463

11 Мар, 22:36 #7 #684452

>>684285
>beginners.re
О, спасибо. Иногда все-таки не жалею, что заходу на этот парашный чан.

11 Мар, 22:40 #8 #684463

>>684302
Скобки - это неофициальная, но опять же поддерживающаяся большинством магия для тех, кто упорно хочет писать if (p = malloc(...)). Но суть не в скобках, суть в том, что писать константу слева от == незачем, потому что диагностика давно есть.

12 Мар, 00:58 #9 #684634

>int main(int argc, char *argv[])

Почему к массиву указателей argv может применяться инкремент argv++? Ведь именам массивов нельзя присваивать новые значения, их нельзя изменять.

Пример кода:
>while((p = #argv++ != NULL)
Здесь сначала указателю p присваивается разыменованный argv, а затем argv увеличивается на единицу.

Ответы>>684763>>684836

12 Мар, 08:11 #10 #684763

>>684634
argv это указатель просто. Если аргументом функции является массив, то он преобразуется в указатель на первый элемент. В сях вообще в принципе нельзя передать в функцию массив как таковой, только указатель на один из его элементов (ну или указатель на массив из n элементов, но это крайне редко используют).

Ответы>>684823>>684838>>684842>>684866

12 Мар, 11:31 #11 #684823

>>684763
Ну так имя массива - это тоже указатель на ег нулевой элемент, только имя массива нельзя изменять. При компиляции адрес массива везде подставляется в виде адреса.

12 Мар, 11:51 #12 #684836

>>684634
> Ну так имя массива - это тоже указатель на ег нулевой элемент
Нет. Имя массива - это массив с размерностью, сколько ты там указал и с типом, какой ты там указал. Но если ты используешь имя массива там, где по контексту ожидается указатель, Си для тебя делает из него указатель, причём это рекурсивный процесс, поэтому работает для массивов любой размерности кстати, если ожидается НЕ указатель, то Си НЕ выполняет преобразований, поэтому для int foo[3] выражение &foo получает указатель на int[3], а не на int. А с аргументами для функции по-другому: Си всегда делает из аргумента-массива указатель соответствующего типа, это одна из проблем языка, которая часто приводит к ошибкам например, в коде типа int foo(int args[3]) { memset(args, 0, sizeof(args)); ... }.

> При компиляции адрес массива везде подставляется
При компиляции массив вообще может исчезнуть как кусок памяти и целиком перекочевать в инструкции. Не думай про компиляцию, думай про сам язык.

12 Мар, 11:54 #13 #684838

>>684763
>указатель на массив из n элементов
вроде он трансформируется в обычный указатель
http://ideone.com/RZq2UX

12 Мар, 12:06 #14 #684842

> указатель на массив из n элементов
У тебя просто массив, который трансформируется в указатель на элемент. А >>684763 говорит про указатель на массив, это было бы int (∗s)[1].

12 Мар, 12:40 #15 #684866

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

Ответы>>684871>>685163

12 Мар, 12:46 #16 #684871

>>684866
Гонять структуру, а не массив.

12 Мар, 13:11 #17 #684888

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

То есть, например, функция вставки: void insert(node *root, int value). Пидорасы в книгах пишут, что внутри функции обязательно надо делать копию root в качестве итератора. Но я всегда обхожу дерево при помощи переданного указателя root, и дерево, однако, не портится.

Ведь аргумент root - это просто адрес корня в стеке. Сам корень находится где-то в другом месте, фукнция его не портит.

Ответы>>684895

12 Мар, 13:20 #18 #684895

>>684888
Не нужно. Вот если ты дерево перебалансируешь при вставке, и поэтому у тебя insert(node ∗∗root, int value), тогда аккуратнее с дереференснутым root. А так, в сишечке все передается по значению, поэтому root - твоя локальная переменная, с которой ты можешь делать все, что хочешь, сохранять ее незачем.

Ответы>>684896

12 Мар, 13:23 #19 #684896

>>684895
Для чего у тебя в сигнатуре указатель на указатель? На сайте с задачами система мне передает просто указатель на корень. Часто вижу, что деревья на си пишутся именно с указателями на указателями.

Ответы>>684902

12 Мар, 13:30 #20 #684902

>>684896
Если ты дерево перебалансируешь, у тебя может смениться корень. Его надо вернуть тому, кто попросил сделать insert. Можно просто вернуть, а можно сразу записать туда, откуда взяли. Так же, как и с insert в linked list, например.

12 Мар, 17:48 #21 #685140

>>684285
>beginners.re
Чем компилировать и отлаживать программы под ARM и другие архитектуры, отличные от x86, под линуксом?

Ответы>>685162

12 Мар, 18:04 #22 #685162

>>685140
(Кросс-)компилировать gcc, отлаживать чем придется, зависит от устройства.

Ответы>>685379

12 Мар, 18:05 #23 #685163

>>684866
>массив обернуть структурой
Что значит "массив обернуть структурой"?

Ответы>>685169>>685191

12 Мар, 18:08 #24 #685169

>>685163
struct somestruct {
int somearray[123];
};

Ответы>>685196>>685225

12 Мар, 18:16 #25 #685191

>>685163
Это значит переходить на C++.

Ответы>>685192

12 Мар, 18:16 #26 #685192

>>685191
Изыди.

12 Мар, 18:18 #27 #685196

>>685169
Всё, понял. Бля, почему это нельзя было пофиксить в С11?
Я просто не вижу никакого рационального объяснения, почему так массив передать можно, а как собственно массив нельзя.

Ответы>>685221>>685225

12 Мар, 18:31 #28 #685221

>>685196
Потому что это не баг, а фича.
>Я просто не вижу никакого рационального объяснения
Потому что залупа. Семантически вся работа с массивами – работа с указателями.

Ответы>>685293

12 Мар, 18:33 #29 #685225

>>685196
> почему это нельзя было пофиксить
Совместимость же. Рациональные объяснения (буквально абзац) есть в https://www.bell-labs.com/usr/dmr/www/chist.html (раздел Critique). Тащемта, статья заслуживает прочтения целиком может, ее в шапку запихать?.
Алсо, в C11 есть вот такой ебанутый синтаксис:
int foo(int bar[static 16]) { ... } который помогает компилятору, но, к сожалению, все равно не "чинит" sizeof.

> почему так массив >>685169 передать можно
> int foo(struct somestruct arg);
Так ты передаешь структуру по значению. Это чаще всего не нужно и очень медленно (более медленно только структуры возвращать по значению). Если бы можно было передавать массив таким же образом, не совсем понятно было бы, по значению ли массив передавать или передавать неявно указатель на массив.

12 Мар, 19:30 #30 #685293

>>685221
Семантически и вся работа с переменными - работа с указателями. И со структурами тоже.

12 Мар, 20:24 #31 #685379

>>685162
А стоит ли в этой книге изучать другие архитектуры, если меня больше интересует x86-64? Улучшит ли это навыки реверса x86?

Ответы>>685405

12 Мар, 20:42 #32 #685405

>>685379
А почему тебя только x86-64 интересует? Арм сейчас везде, куда же без него, да и с мипсами лично я часто встречаюсь. Алсо, иногда один и тот же код на x86 и ARM очень приятно параллельно реверсить. Поэтому не вижу причин пропускать что-то. Юзермодный асм простой ведь, пока это не какой-нибудь итаниум.

Ответы>>685415

12 Мар, 20:48 #33 #685415

>>685405
>Арм сейчас везде, куда же без него, да и с мипсами лично я часто встречаюсь
Мне не на чем работать с этими микросхемами.

Ответы>>685425

12 Мар, 20:51 #34 #685421

Сосоны, как запустить ебаный CreateThread? Я просто не понимат как это в сишке делается. Как передать указатель на функцию?

Ответы>>685430

12 Мар, 20:52 #35 #685425

>>685415
никто не заставляет компилировать и запускать в обязательном порядке все примеры

Ответы>>685473

12 Мар, 20:54 #36 #685430

>>685421
>Как передать указатель на функцию?
Можно просто имя функции написать на месте аргумента.

Ответы>>685432

12 Мар, 20:56 #37 #685432

>>685430
148 C:\Documents and Settings\shiiiieeeet\My Documents\projects\kek\main.c [Warning] passing arg 3 of `CreateThread' from incompatible pointer type

Ответы>>685435

12 Мар, 20:58 #38 #685435

>>685432
Сигнатура какая у функции?

Ответы>>685439

12 Мар, 21:00 #39 #685439

>>685435
int search(LPSTR lpszPath)
м?

Ответы>>685457

12 Мар, 21:07 #40 #685457

>>685439
На всякий случай попробуй с такой как в документации (что-то типа DWORD WINAPI MyThreadFunction( LPVOID lpParam );), хотя твоя вроде тоже должна пролезть. Может проблема с тем что возвращаемый тип должен беззнаковым быть.

Ответы>>685458>>685481

12 Мар, 21:08 #41 #685458

>>685457

Я пробовал так
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)search, disk, 0, NULL);
Но мне выдает Access Violation

Ответы>>685481

12 Мар, 21:14 #42 #685473

>>685425
Я же все равно не смогу выучить набор инструкций без программирования реальной микросхемы.

Ответы>>685476>>685481

12 Мар, 21:17 #43 #685476

>>685473
Вася. У тебя один хер компилятор на рабочей машине будет, если я не ошибаюсь. Берешь и компилируешь. Микросхем дохуя и больше. Ну под одну архитектуру покодил, а потом ныть будешь, что в другой архитектуре другие ассемблерные инструкции? Притом, что ты на сишке пишешь, тебе вообще похуй на язык ассемблера, который нужно использовать для ебаной микросхемы. Так что оно один хуй тоже самое, что и под разные оси писать. Берешь документацию - пишешь. Компилируешь на локальной машине, а там на микросхему программатором заливаешь. Все, ептыть.

Ответы>>685482

12 Мар, 21:20 #44 #685481

>>685458
Твоя функция __cdecl, а Windows хочет __stdcall как минимум. Не используй касты бездумно, определи функцию верного типа, сигнатуру тебе >>685457 написал, а внутри уже касти LPVOID в нужный тебе в LPCSTR. Или, как вариант, у тебя после создания треда у тебя протухает этот твой lpszPath (ты не дожидаешься, пока тред стартанет, ведь правда?).

>>685473
Окей. Возьми любой дешёвый роутер (длинк, асус). Как думаешь, что за проц внутри? Ну или симуляторы/эмуляторы ищи в интернетах. Банально тот же QEMU умеет в мипсы.

Ответы>>685493

12 Мар, 21:21 #45 #685482

>>685476
Убедил. Просто я до этого писал свои говноподелия на чистом асм чаще, чем на сишке, поэтому сразу же подумал, как я буду писать на асме, если даже запустить программу не смогу.

Ответы>>685488

12 Мар, 21:23 #46 #685488

>>685482
>на чистом асм чаще
Ой не пизди мне только. Чистый асм - это блядь ОПкодами писать. Другое дело, когда ты в масме или фасме макросредой пользуешься и т.д. Я сам на масме всегда пишу, потому и спрашиваю тупые вопросы про то, как блядь указатель на функцию передать, так бы легко просто в eax засунул адрес функции запустил бы все без всякой хуйни. Просто мне было лень рекурсивный поиск файлов реализовывать на масме, я и начал на сишке пейсать.

12 Мар, 21:25 #47 #685493

>>685481
> (ты не дожидаешься, пока тред стартанет, ведь правда?).
А вот это ты молодец, спасибо.

12 Мар, 21:39 #48 #685508

http://pastebin.com/savc8Xt2
В общем я не ебу вообще, что происходит. Однозначно можно заявить лишь то, что я туплю.

Ответы>>685529

12 Мар, 21:52 #49 #685529

>>685508
1) Sleep не гарантия, а путь к сложноуловимым багом, это ты знаешь? Не жадничай, выдели памяти под строку и выдай треду указатель. Потом пусть или сам тред указатель память освободит, или ты освободишь, когда все закончится.
2) При отсутствии бита ты должен пропускать CreateThread, а ты что делаешь?
3) Угадай, что происходит, когда while отработает? А происходит выход из main, и винда делает что? Правильно, ExitProcess. Определи массив хэндлов для максимального количества параллельных тредов (или сразу 26 лол) и сделай WaitForMultipleObjects, чтобы дождаться тредов.

Код почти не читал. Может быть, там еще где-то проблемы.

13 Мар, 02:50 #50 #685800

>>683573 (OP)
есть кто под линуксом сидит? в чём работате?

Ответы>>685847>>685867>>685882>>685945>>685995

13 Мар, 06:16 #51 #685847

>>685800
code::blocks

Ответы>>685866

13 Мар, 07:23 #52 #685866

>>685847
Vim + YouCompleteMe

Ответы>>685867>>685954

13 Мар, 07:24 #53 #685867

>>685866 -> >>685800

13 Мар, 08:03 #54 #685882

>>685800
Sublime Text, если проект маленький, и без подсказок по аргументам функций можно обойтись.

13 Мар, 08:19 #55 #685886

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

(Я не изобретаю шаблоны в плюсах?)
Как это сделать?

Ответы>>685887>>685898>>685944>>686110

13 Мар, 08:25 #56 #685887

>>685886
Ты изобретаешь лисп. Гугли tagged union.

Ответы>>685892>>685897

13 Мар, 08:47 #57 #685892

>>685887
Ничего не понял, но независимо от тебя нашел void*

Ответы>>685894

13 Мар, 08:51 #58 #685894

>>685892
struct{ int tag; void* data;};

13 Мар, 09:03 #59 #685897

>>685887
Кстати в программы на Common Lisp можно вставлять код на сишке.

13 Мар, 09:05 #60 #685898

>>685886
>То есть мой двусвязный список или куча могли содержать разнородные данные.
То есть первый элемент содержит инты, второй элемент содержит массивы символов, так что ли?
>одинаковые данные, но принимать тип поля как аргумент при создании.
В смысле создавать произвольное количество элементов произвольного типа внутри какой-нибудь структуры?

Ответы>>685899>>685993

13 Мар, 09:14 #61 #685899

>>685898
Ну он же сказал - шаблоны. Он хочет оптимальный типизированный контейнер. И нет, так на сишке сделать нельзя. Можно или пердолиться в C11 _Generic, или делать теги, юнионы и огромные свитчи, или запоминать размер элемента и пердолиться с указателями на void.

Ответы>>685993

13 Мар, 10:48 #62 #685944

>>685886
http://www.makelinux.net/ldd3/chp-11-sect-5

Ответы>>686111

13 Мар, 10:48 #63 #685945

>>685800
vim

Ответы>>685954

13 Мар, 10:57 #64 #685954

>>685945
>>685866
ёбу дали?
там хотя бы поиск есть по тексту?

Ответы>>686126

13 Мар, 12:03 #65 #685993

>>685898
Да, примерно так. Я хотел и типизированный контейнер, и "общий", ну, как списки в Петоне.
>>685899
Правильно понимаю, что свитчи/юнионы/дженерик, это если у меня есть определенный набор типов, с которыми я бы хотел работать?
А если хочу обобщенный алгоритм, только с void* и size_t?

И почему в няшной нет шаблонов?

Ответы>>686002>>686016>>686109

13 Мар, 12:04 #66 #685995

>>685800
nano

Ответы>>719992

13 Мар, 12:14 #67 #686002

>>685993
>А если хочу обобщенный алгоритм, только с void* и size_t?
Обобщенного алгоритма не может существовать, потому что чтобы работать с какими-то данными, тебе нужно знать, что это за данные. В любом динамическом языке программирования всегда есть набор built-in типов, по сути это как раз то, по чему идут свитчи. Потенциальная бесконечность типов данных там делается за счет того, что есть какой-то йоба-тип навроде словаря, на базе которого можно многое сделать. Но общее число типов все равно ограничено.
>И почему в няшной нет шаблонов?
Есть, но они тебе не помогут, это чисто для компайл-тайма.

13 Мар, 12:31 #68 #686016

>>685993
>И почему в няшной нет шаблонов?
Потому что этот язык старше твоей мамаши. За шаблонами gcc заменяешь на g++ и пишешь на сишечке с шаблонами и строгой типизацией.

Ответы>>686045

13 Мар, 13:32 #69 #686045

>>686016
Ну это ты зря. Плюсы тоже немолодой язык во времена, когда Страуструп писал этот свой "глубокомысленный комментарий + 2", в плюсах тоже никаких шаблонов не было.

Ответы>>686112

13 Мар, 14:29 #70 #686109

>>685993
>И почему в няшной нет шаблонов?
Потому что нет перегрузки функций.

13 Мар, 14:30 #71 #686110

>>685886
>Я хочу написать структуру данных, который было бы все равно, с каким типом работать.
void★

13 Мар, 14:31 #72 #686111

>>685944
Сказано же "произвольные".

13 Мар, 14:31 #73 #686112

>>686045
Когда там не было шаблонов, это был именно си с классами, так и назывался.
Понятно что не молодой, но явно моложе переносимого ассемблера.

13 Мар, 14:42 #74 #686126

>>685954
лол, да

14 Мар, 00:40 #75 #687032

Посоветуйте что-нибудь по кодстайлу в современном Си

Ответы>>687808>>688867

14 Мар, 18:43 #76 #687808

>>687032
https://www.kernel.org/doc/Documentation/CodingStyle

15 Мар, 16:00 #77 #688839

>>683573 (OP)
Как прокачаться до крутого сишника, при упоминании зарплат которого тянки начинают течь?

15 Мар, 16:21 #78 #688867

>>687032
https://matt.sh/howto-c

Ответы>>688882>>688892>>689057

15 Мар, 16:41 #79 #688882

>>688867
Куча бреда.

Ответы>>688892

15 Мар, 16:52 #80 #688892

>>688867
>>688882
Хотя нет. Более-менее нормальные советы, кроме бреда про "используйте только (u)intX_t"

15 Мар, 19:02 #81 #689057

>>688867
Эту статью обоссали все, кто мог. Самое простое, что можно с ней сделать, чтобы не пришлось долго и мучительно разбираться, что там правильно и что нет - не читать ее вообще.

Ответы>>689307

15 Мар, 22:24 #82 #689271

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

Ответы>>689288>>689354

15 Мар, 22:46 #83 #689283

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

Ответы>>689354

15 Мар, 22:55 #84 #689288

>>689271
Я не знаю как насчет другой параши, но всегда удобно иметь С обычные и еще какой-нибудь говно язык.

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

Нужно написать драйвер, хуяк-хуяк и готово.

Модуль-плагин к апачу, да не вопрос.

Насчет связки с джавой, как-то сомнительно. Лучше в Джава-Треде спросить.

Ответы>>689354

15 Мар, 23:18 #85 #689307

>>689057
Что там не так? Нормальный совет про коды возврата, также я не знал про почти всегда равную скорость calloc и malloc, и про padding в структурах (впрочем, нахуй надо занулять пед-байты, я так и не понял)

Ответы>>689354

15 Мар, 23:41 #86 #689338

Анон я не тролль и вероятнее всего не пидарас но у меня довольно странный вопрос: В юности учил С как язык программирования просто что бы знать. Сейчас знаю C# и соответственно понимаю С на уровне общих конструкций и каких то остаточных воспоминаний. Зачем сейчас используют С? какая польза от него может быть в реальном мире. Стоит ли переучиваться на него? Чем я смогу заниматься? какие перед-мной откроются горизонты?

Ответы>>689377

15 Мар, 23:49 #87 #689354

>>689307
> Что там не так?
Хуй знает, я помню только свою попоболь, когда читал это. Там в первых строках есть ссылка на how-to-c-response с более адекватным мнением.

> нахуй надо занулять пед-байты
Я бы тебе запилил кулстори, но рассказывать не умею. Суть в том, что структурку ты можешь сохранить в файл, а паддинг может достигать 4 байт, и паддингов может быть несколько, и в эти несколько групп по 4 байта могут попасть интересные вещи со стека. А если ты послал такое по сети, то могут утечь адреса и нивелировать ASLR в ОС. Много чего может случиться. На самом деле просто не стоит посылать структурки по сети, делая простой memcpy в массив байтов. Надо каждое поле отдельно писать - так и лишнее не утечет, и проблем с порядком байтов не будет.

>>689283
> Сейчас все компиляторы поддерживают C11
На десктопах и распространенных платформах актуальные версии компиляторов могут в C11. Но есть проблемы с либами (тот же пресловутый snprintf в студии). В ембеддед по обыкновению все плохо.

>>689271
>>689288
Ну JNI же. Все верно, в джаву периодически втыкаются нативные либы (когда ждава сама не может во что-то, или просто тупит), которые пишутся на няшной и на плюсах.

Ответы>>689399

16 Мар, 00:17 #88 #689377

>>689338
>Зачем сейчас используют С?
На нём пишут программы.

Ответы>>718409

16 Мар, 00:36 #89 #689399

>>689354
Почему в embedded всё плохо?

Ответы>>689597

16 Мар, 01:37 #90 #689442

https://ideone.com/TVOJ8j
Что я делаю не так? tcpdump говорит, что у моего icmp неправильная чексума.

Ответы>>689463>>689479

16 Мар, 01:56 #91 #689463

>>689442
Сам спросил - сам ответил.

16 Мар, 02:53 #92 #689479

>>689442
> Что я делаю не так?
Документацию не читаешь, сука.

ICMP Header Checksum. 16 bits. The 16-bit one's complement of the one's complement sum of the ICMP message, starting with the ICMP Type field. When the checksum is computed, the checksum field should first be cleared to 0. When the data packet is transmitted, the checksum is computed and inserted into this field. When the data packet is received, the checksum is again computed and verified against the checksum field. If the two checksums do not match then an error has occurred.

16 Мар, 10:58 #93 #689585

Писал в ньюфаг тред. Напишу и сюда.
Что вообще сложного в кодинге? У меня есть 2 друга, оба программисты, один пишет сайты, другой как он мне сказал "Software Engineer, пишу на C++ в основном". Так вот я решил приобщиться, выбор пал на Си, прочитал пару книжке.
И мне говорили пиздец как тяжело. Но код просто делает, то что я и только быстро, получается я просто записываю свои мысли в виде команд. Хули они орут что сложно?
Последнее что я написал по просьбе моего друга это
1) Херня, которая ищет самый короткий путь в графе
2) Херня, которая складывает двумерные массивы
Обе я сделал довольно быстро и просто, сначала написал на бумаге как я делал задачу, потом перенес в компилятор. Мой друг после того как я их решил взбугуртил и дал мне задание, цитирую "Алгоритм, который будет сжимать jpeg без потери качества, с коээфициентом минимум 2".
Пока не знаю как делать, вообще даже куда двигаться, вообще почитать про алгоритмы Хаффмана и Шенона-Фано, но понятного мало. Подскажите по этой теме.
Сам я занимаюсь математикой, программировал только в школе, ну и сейчас около 3 недель. Работаю в местной шараге, учу детей. Самому мне 26, взяли меня сразу, нехватка у них кадров.

Ответы>>689628>>689630>>689705>>690013>>690336>>710497

16 Мар, 11:37 #94 #689597

>>689399
Потому что не везде гцц свежий?

16 Мар, 12:24 #95 #689628

>>689585
Jpeg работает так: картинка делится на блоки, к блокам применяется дискретное косинусное преобразование, далее низкие частоты забиваются нулями (поэтому это сжатие с потерями) и далее сжимается алгоритмом сжатия без потерь (про которые ты зачем-то решил читать, хотя это не так важно).
Улучшить в 2 раза без потери качества можно, например, заменив ДКП на вейвлеты, получится алгоритм jpeg2000.

Ответы>>689659

16 Мар, 12:32 #96 #689630

>>689585
>написал на бумаге как я делал задачу
Да, вот эта часть сложная. Математикам как правило хорошо дается программирование.

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

Ответы>>690013

25 Кб, 643x192

16 Мар, 13:00 #97 #689650

Подскажите пожалуйста, где я просчитался? Тоже вот решил сырыми сокетами увлечься.
https://ideone.com/geVltB
И выхлоп tcpdump'а.

Ответы>>689656>>689766

31 Кб, 640x152

16 Мар, 13:07 #98 #689656

>>689650
Немного не тот выхлоп (без данных). Вот тот, хотя ничего не изменилось почти.

Ответы>>689766

16 Мар, 13:12 #99 #689659

>>689628
Звучит сложновато, ладно, пойду читать и пытаться делать.

16 Мар, 14:19 #100 #689705

>>689585
>Что вообще сложного в кодинге?
Планировать и писать что-то большое, например больше 10-100к строк (у всех разный уровень, когда все разваливаться начинает). А алгоритмы - хуйня, их просто в голове целиком держать.

The Strict Aliasing Situation is Pretty Bad 16 Мар, 14:44 #101 #689726

Может быть, кому-то будет интересно: http://blog.regehr.org/archives/1307

Ответы>>689728

16 Мар, 14:45 #102 #689728

>>689726
Мне страшно туда заходить. Что там?

Ответы>>689729

16 Мар, 14:47 #103 #689729

>>689728
Очередной пост о том, что программа, собранная без -fno-strict-aliasing, может сломаться в любой момент.

16 Мар, 15:47 #104 #689766

>>689650
>>689656
https://ideone.com/yx4kxK
Решил свою проблему. Дело оказалось в псевдозаголовке.

Ответы>>690026

16 Мар, 20:14 #105 #690013

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

>>689585
>И мне говорили пиздец как тяжело. Но код просто делает, то что я и только быстро, получается я просто записываю свои мысли в виде команд. Хули они орут что сложно?
https://ru.wikipedia.org/wiki/Эффект_Даннинга_—_Крюгера

Ответы>>690025>>690191>>690331>>690779

16 Мар, 20:23 #106 #690021

Почему такая строчка скомпилировалась на маке?
unsigned char* array[str.length()];

Ответы>>690056>>690091

16 Мар, 20:31 #107 #690025

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

Реквестирую в этот ИТТ тред говнокод математиков, который невозможно сопровождать.

Ответы>>690115>>690197

16 Мар, 20:32 #108 #690026

>>689766
Теперь реализуй idle-scan.

16 Мар, 20:51 #109 #690056

>>690021
Потому что это пидарская строчка.

sage 16 Мар, 21:15 #110 #690091

>>690021
потому что в c99 добавили variable-length arrays. только msvc их до сих пор не поддерживает

Ответы>>690237

16 Мар, 21:36 #111 #690115

>>690025
>Реквестирую в этот ИТТ тред говнокод математиков, который невозможно сопровождать.
Давай ты сначала свой выложишь, может, он как раз подойдёт.

16 Мар, 22:40 #112 #690191

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

16 Мар, 22:45 #113 #690197

>>690025
>то осилил книгу про чистый код.
Прочитать это одно дело. А вот используют на практике полученные знания, не многие. Мне кажется, что ты весьма высокого мнения о себе. То, что тебе кажется, что ты хороший программист, не значит что так оно и есть. Будь немножко по скромнее. Я понимаю, что каждому хочется чувствовать себя гением, но все же.

Ответы>>690205

16 Мар, 22:51 #114 #690205

>>690197
>Мне кажется, что ты весьма высокого мнения о себе. То, что тебе кажется, что ты хороший программист, не значит что так оно и есть. Будь немножко по скромнее
С чего ты это взял? Я вообще в последние годы испытываю мало эмоций, а программистом хорошим себя не считаю. О личностных качествах программиста при улучшении своих скиллов когда-то охуенно написал Зомби, лучше не скажешь.

Ответы>>690221>>690225

16 Мар, 23:10 #115 #690221

>>690205
>С чего ты это взял?
Отсюда:
>Хорошим программистом я себя не считаю
>Я математик, и код неплохой писал с 15 лет
Это уже противоречии самому себе. И вообще ты не можешь судить о своем коде объективно.
А здесь, ты просишь у людей предоставить доказательства по сути факта:
>Реквестирую в этот ИТТ тред говнокод математиков
Зачем начинать бессмысленный спор. Докажи людям, что ты хороший программист. Чтобы глядя на твой код говорили: "Оу! Посмотрите на этот замечательный код! А ведь он математик! А я всегда считал, что математики не могут писать нормальный код.... Как же я ошибался!".
Поищи кстати исходники на фортране. Гарантирую, тебе доставит.

>Я вообще в последние годы испытываю мало эмоций
К чему ты говоришь это? Думаешь, кого-нибудь здесь интересует твое психологическое состояние?

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

Ответы>>690225

16 Мар, 23:12 #116 #690225

>>690221
Забыл дополнить.
Впрочем, мы уже отклоняемся от тематики раздела, и начинать споры у меня желания нет. Добра тебе >>690205

24 Кб, 1095x415

16 Мар, 23:20 #117 #690237

>>690091
> добавили variable-length arrays
> msvc их до сих пор не поддерживает
Это зло, которое в C11 уже наполовину выпилили. И студия, если шланговый парсер выставить, как бы поддерживает только, судя по тому, что подчеркивает, как ошибку, она сама об этом не знает. А вот с их собственным парсером даже __STDC_NO_VLA__ не дефайнит, что, конечно, очень и очень печально.

Ответы>>690252

16 Мар, 23:28 #118 #690252

>>690237
>Это зло, которое в C11 уже наполовину выпилили.
Пруфани. Я просто не помню, чтобы в стандарте С11 было что-то об этом сказано. По крайней мере GCC с флагами -std=c99 и с -std=c11 собирает нормально все.

Ответы>>690265

16 Мар, 23:33 #119 #690265

>>690252
> Пруфани
Зло, потому что хуй знает, сколько его там, этого стека. А "наполовину выпилили" - я имел в виду, что VLA ввели в C99, а в С11 осознали и сделали уже опциональной фичей.

Ответы>>690320

17 Мар, 00:15 #120 #690320

>>690265
ебать ты конченный, анон.
Миллион байт стека для каждого треда. Ты просто, блять, представь, миллион байт! Понятное дело, что если ты олень и все пихаешь в стек, то и никакой памяти тебе не хватит, но для временных структур, например, для строк и около того - просто идеально.

Ответы>>690739

17 Мар, 00:34 #121 #690331

>>690013
Умные слова и термиты, круто, безусловно. Но что ты такого можешь делать чему нельзя так просто научится?

17 Мар, 00:46 #122 #690336

>>689585
>2) Херня, которая складывает двумерные массивы
А ты это тоже записывал на бумаге? А? Математик!
>1) Херня, которая ищет самый короткий путь в графе
Никогда не имел дела с графами, но думаю это тоже очень просто. Мне вспоминается алгоритм Дейкстры.
>потом перенес в компилятор
Надеюсь, ты просто не правильно выразился.
>почитать про алгоритмы Хаффмана и Шенона-Фано, но понятного мало
Постой. Ты же математик! Как тебе такое может быть слишком сложный. Я правда тоже не осилил (желания наверное не было), но я и не математик далеко.
>программировал только в школе
Тогда это все объясняет. Ты даже не сталкивался с программированием и не в курсе о многих технических моментах. Проблемы далеко не всегда в алгоритмах...

Ответы>>690340>>690353

17 Мар, 00:53 #123 #690340

>>690336
>Никогда не имел дела с графами, но думаю это тоже очень просто. Мне вспоминается алгоритм Дейкстры.
Если он сам вывел алгоритм без помощи литературы, это довольно круто, ящитаю. Другой вопрос, что к самому программированию это относится довольно косвенно.

Ответы>>690346>>690353

17 Мар, 00:58 #124 #690346

>>690340
>Если он сам вывел алгоритм без помощи
Ну да. Я согласен с этим. Я бы врятли быстро смог вывести алгоритм, при условии если раньше я не знал других алгоритмов. А вот по поводу косвенного отношения. Ну как сказать. Уметь в алгоритмы дорогого стоит, так как позволяет решать задачи гораздо быстрее и возможно более оптимальным путем.

Ответы>>690357

17 Мар, 01:12 #125 #690353

>>690336
> А ты это тоже записывал на бумаге? А? Математик!
Ну да, сложил пару матриц, посмотрел, записал как это делается подробно, а потом просто перепечатал в vs.
> Никогда не имел дела с графами, но думаю это тоже очень просто. Мне вспоминается алгоритм Дейкстры.
Прям такого заоблачно тяжелого ничего нет.
> Постой. Ты же математик! Как тебе такое может быть слишком сложный. Я правда тоже не осилил (желания наверное не было), но я и не математик далеко.
Само кодирование простое. Даже пару слов закодировал чтобы понять суть, я имел ввиду непонятно как jpeg сжимать.
> Тогда это все объясняет. Ты даже не сталкивался с программированием и не в курсе о многих технических моментах. Проблемы далеко не всегда в алгоритмах...
Ну память надо контролировать, ну что еще? Ну те аспекты, которые я знаю не такие уж и тяжелые.
>>690340
> Если он сам вывел алгоритм без помощи литературы
Сидел на парах, пока эти решали задачки я написал его. Сложного прям такого, мало если честно.

Ответы>>690359>>690363

17 Мар, 01:15 #126 #690357

>>690346
>Уметь в алгоритмы дорогого стоит
Я не спорю, но как часто среднестатистическому программисту приходиться корпеть над созданием какого-нибудь хитровыебанного алгоритма. Как правило, это единичные случаи. Ну или это может требоваться только в какой-нибудь узкоспециализированной области.

Ответы>>690359

17 Мар, 01:17 #127 #690359

>>690353
>Ну память надо контролировать, ну что еще?
Это только вершина айсберга!

>>690357
У меня от этого:
ПЕРЕВЕРНИТЕ СВЯЗНЫЙ СПИСОК
@
list.reverse()

Ответы>>690364

17 Мар, 01:19 #128 #690363

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

Ответы>>690412

17 Мар, 01:22 #129 #690364

>>690359
>list.reverse()
Если ты считаешь, что задача по переворачиванию связного списка относится к хитровыебанным алгоритмам, то у меня для тебя плохие новости. Решение такого рода задач достаточно прозрачно в отличие от поиска наикратчайшего пути в графе. По крайней мере, для меня.

Ответы>>690366

17 Мар, 01:24 #130 #690366

>>690364
>Если ты считаешь, что задача по переворачиванию связного списка относится к хитровыебанным алгоритмам,
Я как раз к тому, что многие "программисты" даже этого не знают. Что уж говорить о работе с графами или еще чем-либо.

17 Мар, 02:35 #131 #690412

>>690363
Точь в точь Дейкстры. Логика у меня такая же. Мне даже кажется, что я уже видел его, но забыл.

Ответы>>690524

17 Мар, 10:28 #132 #690524

>>690412
> Мне даже кажется, что я уже видел его, но забыл.
Мне тоже так кажется. Вероятность того, чтобы точь в точь совпало в том случае, когда сам создаёшь алгоритм без посторонней литературы, крайне мала.

17 Мар, 15:22 #133 #690739

>>690320
> для временных структур, например, для строк и около того
Тогда ты либо не ограничиваешь максимальный размер VLA, и привет, неотлавливаемый ни в рантайме stack overflow (или, того хуже, его отсутствие - см. примеры ниже). Либо у тебя есть некий лимит (например, ты знаешь, что максимальная длина этой строки не превысит MAX_PATH, или ты считаешь, что больше тысячи структур тебе не понадобится), тогда ты сразу делаешь массив нужного константного размера и не ебешь себе мозг спорными технологиями. Вот три примера, отличаются константой. Веселой отладки, так сказать расчитано на сборку без оптимизации - мне было лень, но ты можешь обосновать для оптимизатора использование array и memset, и попробовать собрать с оптимизациями.
http://ideone.com/kXaCQy http://ideone.com/926nPb http://ideone.com/KuR1B8

> Миллион байт стека для каждого треда
Зависит от архитектуры, зависит от ОС, зависит от настроек ОС, зависит от способа создания треда, если он не основной.

Ответы>>690818>>690871>>690874

17 Мар, 16:02 #134 #690779

>>690013
Двачую. Встречал пару выродков, которые говорили, что они матиматики, а программирование для плебеев.

Ответы>>690863

17 Мар, 16:40 #135 #690818

>>690739
>2016
>stack overflow

17 Мар, 17:56 #136 #690863

>>690779
Лол! А они точно с математикой были знакомы или они просто говорили так? Просто любой, хоть немного соображающий человек поймет, что сравнивать их нельзя и программирование лишь инструмент для реализации задачи/алгоритма.

17 Мар, 18:13 #137 #690871

>>690739
Блять, долбоеб, пиздуй отседова нахуй, на кресты, на джаву, но только не няшную.
Ты пиздец долбоеб, ты хочешь создать на стеке массив с ебанутыми размерами и интовыми элементами, сука, блять, дай я тебе ебало обоссу, какой же ты мудааааак, сука, это еще компиль молодец, долбоеба такого терпит, уххх сук не могу, долбоеб блять.
>зависит от способа создания треда
Что ты за хуйню несешь, малохольный блять?
Понятное дело, что размер стека зависит от многих факторов
Ой иди на хуй, сука блять.

Ответы>>690880

17 Мар, 18:19 #138 #690874

>>690739
> Веселой отладки, так сказать
Черт ебаный, ты хоть раз Сишечку отлаживал, блять, сука? Это проще, чем твою мамашу пялить, сука, в отличие от ебущих крестов с их ебучим бустом, это просто сказка, блять, иди на хуй опять сука.
>ты знаешь, что максимальная длина этой строки не превысит MAX_PATH
Блять, как рекурсивно обойти дерево каталогов при этом не пердолясь с маллоком? Сука, иди опять на хуй.

Ответы>>690880>>691978

17 Мар, 18:33 #139 #690880

>>690874
>>690871
БАБАХ!!!
Какой сильный багет у тебя!

17 Мар, 22:40 #140 #691141

А нам, тем временем, предлагают short float и break 2 в 2021 году успей ознакомиться с C11, пока он еще не протух!

Ответы>>691287>>691442

39 Кб, 600x600

17 Мар, 23:52 #141 #691201

>>683573 (OP)
>2016
>MANUAL GARBAGE COLLECTION

Ответы>>691286

18 Мар, 02:20 #142 #691286

>>691201
>2016
>GC все еще работает через жопу и приходится пердолится с его настройкой, чтобы хоть как-то облегчить положение.

18 Мар, 02:21 #143 #691287

>>691141
>успей ознакомиться с C11, пока он еще не протух
Многие еще на С99 пишут. Так что протухнет С11, лет через 30 как минимум.

130 Кб, 1920x1040

18 Мар, 07:56 #144 #691354

>>683573 (OP)
>Чем конпелировать:
http://www.programarts.com/cfree_en/index.htm

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

Ответы>>691360>>691413>>691419

18 Мар, 08:09 #145 #691360

>>691354
Vim+GCC+[GDB].
Для любых проектов, самое то, набрал и запустил, шустрый как удар серпом по яйцам, кроссплатформенный, только на винде в виде MinGW.
Есть бесплатная полнофункциональная версия с открытым исходным кодом.

18 Мар, 10:03 #146 #691413

>>691354
А как же Pelles C?

18 Мар, 10:28 #147 #691419

>>691354
Как я понял, это IDE без собственного компилятора, которая, к тому же, 6 лет не обновлялась. А у нас в шапке именно компиляторы студия и Pelles C там потому, что у Microsoft на тот момент актуального компилера отдельно не было, а Pelles C автор не хочет распространять по частям. Не нравится, и хочешь запилить список IDE - вперед, ссылка в последней строке шапки.

18 Мар, 11:08 #148 #691442

>>691141
>short float
half-precision? Есть в GCC.
>break 2
goto

Ответы>>691472

18 Мар, 11:45 #149 #691472

>>691442
> goto
Ну на самом деле, break с цифрами неудобный, а вот от именованных циклов я бы не отказался. Но так-то да, goto хватает, но у некоторых СТРАХИ.

18 Мар, 16:33 #150 #691756

А ещё можно clang + msvc/mingw
анальный раб

Ответы>>691768

sage 18 Мар, 17:09 #151 #691768

>>691756
Вут?

Ответы>>691824

18 Мар, 19:01 #152 #691824

>>691768
Clang сам по себе под виндой не пашет, нада или msvc, или mingw.
И текстовый редактор, саблайм например.

Ответы>>691918>>691942

18 Мар, 20:32 #153 #691918

>>691824
Ну clang-то пашет, просто хедеров и либ в комплекте нет.

18 Мар, 20:45 #154 #691942

>>691824
>clang потому, что круто
>И текстовый редактор, саблайм
>msvc для Си
С км я сижу в одном треде...

Ответы>>691973

18 Мар, 21:12 #155 #691963

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

Ответы>>691966

18 Мар, 21:15 #156 #691966

>>691963
man gdb, gdb.gnu.org, сука!

Ответы>>692010

18 Мар, 21:19 #157 #691973

>>691942
Шланг для крестов оче хорош - такие то вменяемые сообщения об ошибках, особенно на шаблонах.

Ответы>>692029

18 Мар, 21:28 #158 #691978

>>690874
>Черт ебаный, ты хоть раз Сишечку отлаживал, блять, сука? Это проще, чем твою мамашу пялить, сука, в отличие от ебущих крестов с их ебучим бустом, это просто сказка, блять, иди на хуй опять сука.
ты тупое говно
промышленный код на крестах ЛЕГЧЕ отлаживать чем аналогичный на сишки
почему? да потому что любая си-прога, решающая реальные задачи обмазана макросами и с вырубленой типизацией в добавок, половина говна там будет сделана на void*
в крестах же будут шаблоны, а шаблонизированный код хотя бы будет сожран отладчиком без дополнительных приседаний

Ответы>>691981>>691986>>691988>>692006

18 Мар, 21:32 #159 #691981

>>691978
Ебать ты дебил...

Ответы>>691983

18 Мар, 21:37 #160 #691983

>>691981
аргументируй или сдохни

Ответы>>692001

18 Мар, 21:41 #161 #691986

>>691978
>промышленный код на крестах ЛЕГЧЕ отлаживать чем аналогичный на сишки
Лол. То-то в крестотреде анон жалуется, что у них компилятор падает от имен функций по 10к символов.

Ответы>>691987>>692000

18 Мар, 21:42 #162 #691987

>>691986
Ты в курсе о разнице между компиляцией и отладкой? Отладка происходит в райнтайме.

Ответы>>691993

18 Мар, 21:43 #163 #691988

>>691978
>обмазана макросами и с вырубленой типизацией в добавок
Сосунок на форте еще не кодил.

Ответы>>691989

18 Мар, 21:43 #164 #691989

>>691988
Как будто ты кодил за деньги на форте.

Ответы>>691991

18 Мар, 21:44 #165 #691991

>>691989
Как будто ты на коболе за деньги когда-то пейсал.

18 Мар, 21:45 #166 #691993

>>691987
>Отладка происходит в райнтайме
Чтобы в рантайме что-то отладить надо это скомпилировать сначала, так ведь. А потом попытаться разобраться, как шаблоны разворачиваются.

Ответы>>692000

18 Мар, 21:49 #167 #692000

>>691986
Падал от бага, найс пересказываешь, маня.
>>691993
Ну если ты не буст-александерску-степанов-даун – тащемта там всё проста.

Ответы>>692009

18 Мар, 21:50 #168 #692001

>>691983
Да ты уже и сам привел доказательство своей глупости!

18 Мар, 21:52 #169 #692005

Это все, конечно, интересно, но вы тредом не ошиблись, случаем?

18 Мар, 21:52 #170 #692006

>>691978
Крестоблядок, съеби в свой загон. Здесь тред белых людей.

18 Мар, 21:55 #171 #692009

>>692000
>Падал от бага
10к символов токен - уже диагноз. Даже если бы не падало.
>буст-александерску-степанов-даун
Сейчас такая шаблонная магия - обыденный код на крестах. Подключи эйген какой-нибудь, и посмотри на ошибки в шаблонах на пять экранов. А потом посмотри на экзешник на 20 мегабайт.

Ответы>>692012>>692014

18 Мар, 21:56 #172 #692010

>>691966
Что-то я тут http://linux.die.net/man/1/gdb и тут https://www.opennet.ru/man.shtml?topic=gdb&category=1 нихуя не нашел, даже поиском по слову command, а у меня в консоли SOSNOOLEY:

~# man GDB
No manual entry for GDB

Ответы>>692020>>692069

18 Мар, 21:57 #173 #692012

>>692009
>Подключи эйген какой-нибудь, и посмотри на ошибки в шаблонах на пять экранов. А потом посмотри на экзешник на 20 мегабайт.
А потом подключи GSL и заплачь от убогости происходящего.

18 Мар, 21:59 #174 #692013

А почему еще никто не сказал, что среднестатистический код С++ является не читабильным говном, которое невозможно отлаживать?

Ответы>>692014>>692018

18 Мар, 22:00 #175 #692014

>>692009
>Даже если бы не падало.
Баг – это диагноз, даже если его бы не было. Сам-то понял, что написал?
>>692013
Наверно потому, что это унаследовано от старшего брата-байтослесаря?

Ответы>>692021

18 Мар, 22:02 #176 #692018

>>692013
Почему ещё никто не сказал, сколько ошибок вроде последней в openssl получалось с ахуенного сишного препроцессора?

Ответы>>692021

18 Мар, 22:05 #177 #692020

>>692010
Вроде, set args мне подойдет, попробую.

Ответы>>692022

18 Мар, 22:05 #178 #692021

>>692014
Брат-байтослесарь не ходит блядовать на право и на лево. Поэтому его легко отследить. А вот младшенький постоянно уходит куда-нибудь а при разговоре меняет тему. Хуй поймешь чего он хочет в общем.
>>692018
Почему еще никто не сказал, почему подобные серьезные вещи, которые лежат в основе всего, крайне редко пишут не на Си?

Ответы>>692026>>692028

18 Мар, 22:06 #179 #692022

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

18 Мар, 22:07 #180 #692024

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

Ответы>>692033>>692037>>692042

18 Мар, 22:09 #181 #692026

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

Ответы>>692040

18 Мар, 22:10 #182 #692028

>>692021
Потому что это переносимый ассемблер, под который везде есть компиляторы (и их легче писать/дополнять), abi можно потянуть хоть из пуревасика, средств для запутывания кода упоротыми даунами вроде авторов буста (что отлично в основном для опенсорса).

Ответы>>692030

18 Мар, 22:10 #183 #692029

>>691973
Чтобы шаблоны отлаживать есть metashell, а не этот ваш clang.

18 Мар, 22:11 #184 #692030

>>692028
>средств для запутывания кода упоротыми даунами вроде авторов буста
Нету*

18 Мар, 22:12 #185 #692033

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

>На крестах - только клиентское говно вроде текучих гюлчных браузеров с дырявым флешом.
А браузеры используют смесь языков. GUI на GTK к примеру и у хрома и у лисы.

18 Мар, 22:15 #186 #692037

>>692024
>Кресты- катана с примотанным скотчем гранотометом. И калашниковым. И штык-нож на всякий случай.
И всё функционально шо пиздетс.

18 Мар, 22:18 #187 #692040

>>692026
Читай внимательнее, что цитируешь. Алсо, флеш частично написан на си. Алсо, языкосрачи ненужны. Лучше proposal для C2x напишите, лол.

Ответы>>692127

1553 Кб, 480x272

18 Мар, 22:18 #188 #692042

>>692024
> Кресты это

Ответы>>692054

18 Мар, 22:34 #189 #692054

>>692042
Отлично подходит к примеру с катаной! Вся суть!

18 Мар, 23:05 #190 #692069

>>692010
>~# man GDB
>No manual entry for GDB
попробуй man gdb сука откуда вы только лезете

19 Мар, 00:09 #191 #692127

>>692040
> флеш частично написан на си
О, мы помним тонны говна от пользователей флеша.
Тупорылые разработчики флеша не прочитали, что memcpy нельзя использовать на перекрывающихся диапазонах. До поры-до времени всё работало, а потом в libc поменяли реализацию memcpy и оно стало портить память при неправильном использовании.

Самое что меня тогда шокировало — что 95% ругали разработчиков libc, мол вот они какие говнюки, ради говнофлеша не могут запилить "работающий" memcpy обратно.

Ответы>>692178

19 Мар, 01:48 #192 #692178

>>692127
>Самое что меня тогда шокировало — что 95% ругали разработчиков libc, мол вот они какие говнюки, ради говнофлеша не могут запилить "работающий" memcpy обратно.
О да, в прошлых тредах как-то эта тема проскакивала. Вроде там даже пришлось какой-то воркэраунд приделывать.

Ответы>>692218

19 Мар, 03:59 #193 #692218

>>692178
У адоби же корпоративное рабство и вся хуйня. После покупки макромедии в конторе одни индусы, о каком качестве кода можно говорить вообще?

19 Мар, 16:28 #194 #692466

>>683573 (OP)
Сосоны, что я делаю не так?
[Linker error] undefined reference to `fput'
fputs((const char *)buf, f);

Ответы>>692479>>692532>>692582>>693105

19 Мар, 16:37 #195 #692479

>>692466
Именно на fput? Что-то странное. Что за компилятор?

Ответы>>692507

19 Мар, 17:07 #196 #692507

>>692479
gcc в dev c++

19 Мар, 17:26 #197 #692532

>>692466
Либки проебал.

Ответы>>692536

19 Мар, 17:31 #198 #692536

>>692532
Ну это-то понятно (неправильный library path или еще по каким-то причинам -lmsvcrt и -lmingwex не указываются автоматически или отсутствует). Непонятно, почему fput. В mingw вроде таких макросов не было никогда.

Ответы>>692568

19 Мар, 18:02 #199 #692568

>>692536
Флаги компилятору задаёшь или линковщику? С printf'ом линкуется?

Ответы>>692577

19 Мар, 18:08 #200 #692577

>>692568
С printf все нормально. А вот с fputs фуфло какое-то.

19 Мар, 18:11 #201 #692582

>>692466
>[Linker error] undefined reference to `fput'
>fputs((const char *)buf, f);
> fput, fputs?
Кто-то здесь пиздит.

Ответы>>692723>>693149

9 Кб, 394x131

3 Кб, 321x56

19 Мар, 19:06 #202 #692642

Да вы ебанулись. GCC нормально видит и без пердолинга все это дело. Он либо проебал stdio.h либо пиздит. Насколько я помню, в devcpp, не было вообще никаких проблем ни с чем.

Ответы>>692723

19 Мар, 19:25 #203 #692656

Есть комплюхтер A, он пытается соединиться с приложением на 0.0.0.0, я хочу, чтобы моя программа слушала всё на этом адресе и чтобы наружу ничего не протекало. Какая библиотека?

Ответы>>692658>>692675

19 Мар, 19:26 #204 #692658

>>692656
unix*

Ответы>>692675

19 Мар, 19:51 #205 #692675

>>692658
>>692656
Так, я упоролся, игнорируйте сообщения.

Ответы>>692855

19 Мар, 20:41 #206 #692723

>>692642
>>692582
Короче, анон нюфак, компилит плюсовый код, а без extern "C" у него протекает.

Ответы>>692753

19 Мар, 21:02 #207 #692753

>>692723
Тогда бы было либо замангленное имя в выхлопе, либо прототип.

19 Мар, 22:33 #208 #692855

>>692675
Скажи как сделал в итоге

20 Мар, 03:34 #209 #693105

>>692466
попробуй с -lc скомпилировать

288 Кб, 1280x1024

139 Кб, 1280x1024

20 Мар, 09:22 #210 #693149

>>692582

Ответы>>693151

20 Мар, 09:55 #211 #693151

>>693149
Ctrl+F -> fput -> PROFIT!!!
Если не кинешь сюда весь код, ты зачисляешься в почетные врунишки и можешь уходить отсюда.

Ответы>>693154

20 Мар, 10:04 #212 #693154

>>693151
лол, а рили, там выше был fput. Сорян, сосоны.

Ответы>>693226

20 Мар, 13:15 #213 #693225

Ребят, есть ошибка:
http://pastebin.com/ma2BsVbR

Есть sep_crypto.c:
http://pastebin.com/Pdd8aPRs

И есть sep_driver_api.h:
http://pastebin.com/sZ0TcNFg

Собственно, никак не могу пофиксить. Помогите профану, пожалуйста, и подскажите, как в будущем фиксить подобное.

20 Мар, 13:16 #214 #693226

>>693154
А знаешь, какая тут мораль? Собирать надо обязательно с -Wall -Wextra и прочими -W по вкусу. Тогда бы тебе сказали про implicit function declaration, и не пришлось бы столько выяснять, откуда взялся fput.

Ответы>>693540

20 Мар, 19:50 #215 #693540

>>693226
-Wereverything -Werror
мимошланг

Ответы>>693555

20 Мар, 20:16 #216 #693555

>>693540
>foo.c:5:10: error: expansion of date or time macro is not reproducible [-Werror,-Wdate-time]
> puts(__DATE__);

Нахуй. Пока когтеед жив, пока шланг вместе с гцц следуют его глупому предложению, никаких -Weverything рядом с -Werror. У него возникнет очередная ебанутая идея, а билд сломается у меня. Нахуй. Да, это батхерт.

20 Мар, 22:24 #217 #693649

Ананасы, прочитал на досуге книжку "TDD for embedded c" загорелся идеей вставлять тесты везде где можно. Обмазался Unity, разобрался, как его прикрутить к проекту. Но вот что дальше - в душе не ебу. Есть ли где примеры или туториалы, где показано, как можно сишный быдлокод покрывать тестами. Не обязательно с Unity, можно любой другой фреймворк.

Ответы>>693712

20 Мар, 23:17 #218 #693712

>>693649
>Есть ли где примеры или туториалы, где показано, как можно сишный быдлокод покрывать тестами.
Если он с глобальными переменными, то не надо его уже покрывать тестами, это бесполезно уже, подробности на fprog.ru

Ответы>>694199

21 Мар, 16:00 #219 #694199

>>693712
> то не надо его уже покрывать тестами, это бесполезно уже
У нас за такое на Therac облучают и F18 шасси убирают.

4 Кб, 400x400

21 Мар, 18:09 #220 #694418

Аноны, вопрос:
У меня есть символьная строка (с буквами)
Мне надо вывести определенный элемент массива
printf("%d\n", line[5])
Программа вывод не саму букву, а её код.
Если писать %s, то завершает работу
Как сделать так, что бы именно саму букву выводил?
мимоличинус

Ответы>>694420>>694423

21 Мар, 18:10 #221 #694420

>>694418
%c

Ответы>>694425

21 Мар, 18:11 #222 #694423

>>694418
%c (character)

Ответы>>694425

21 Мар, 18:11 #223 #694425

>>694420
>>694423
Благодарю

22 Мар, 02:23 #224 #694860

>>683573 (OP)
Ребят, извиняюсь за оффтоп. Подскажите, Сишка и ARM сейчас в тренде? В какой стране легче всего работу найти, просто в моей белорашке нихуя нет. Вот и остановился я на распутье, изучать дальше арм или перекатывать.

Ответы>>694881>>719773

22 Мар, 06:06 #225 #694881

>>694860
Тебе переезжать не впадлу из-за работы? Вообще в тренде. В дсах вакансии есть

Ответы>>695037

22 Мар, 13:51 #226 #695037

>>694881
Я бы не сказал, что прямо "в тренде" - удаленку, например, найти сложнго. Но вообще работа есть.

Ответы>>695705

67 Кб, 420x640

22 Мар, 16:52 #227 #695169

>>683573 (OP)
Пацаны, есть сборочка GCC образца 2002 года заточенная под компиляюцию для GBA (приставка такая) ARM. Как заставить его жрать пробелы в путях? Под винду, конечно. inb4: сделай бочку, сосни хуйца, убери пробелы
Я делаю так:
gcc "C:\Vasya Pupkin\gba\main.c" -c -O3 -mthumb -mthumb-interwork
Компилятор ругается:
gcc: No file: C:\Vasya
gcc: No file: Pupkin\gba\main.c
Без пробелов все собирается, потом линкуется отдельной софтиной и запускается. С пробелами вылазит это говно.
Как я понимаю, оно воспринимает путь с пробелом как два отдельных файла, даже в кавычках? Можно это как-то обойти?

Ответы>>695189

22 Мар, 17:29 #228 #695189

>>695169
> С пробелами вылазит это говно.
А запускаешь напрямую команду из консоли, или IDE запускает? Или батник какой-нибудь? Никаких start перед gcc? У виндовой консоли крайне ебанутые правила парсинга кавычек. Если не удастся разобраться, кто неправильно парсит кавычки, можно и обойти - например, сделать симлинк на проблемную папку или вообще ее примонтировать как новый том, или просто использовать относительные пути (запускать компиляцию с текущей папкой C:\Vasya Pupkin\gba командой gcc main.c ...).
Можешь еще https://blogs.msdn.microsoft.com/twistylittlepassagesallalike/2011/04/23/everyone-quotes-command-line-arguments-the-wrong-way/ посмотреть, вдруг найдешь решение там.

Ответы>>695213

22 Мар, 18:07 #229 #695213

>>695189
> А запускаешь напрямую команду из консоли, или IDE запускает? Или батник какой-нибудь? Никаких start перед gcc?
Батник, вот так:
for /r %file% i in (*) do (
echo Compiling "i"…
gcc "%%i" -c -O3 -mthumb -mthumb-interwork
)

> например, сделать симлинк на проблемную папку
Лол, я так и сделал, но хочется нормального решения, а не костылей.

Ответы>>695215>>695236

22 Мар, 18:08 #230 #695215

>>695213
Макаба сожрала проценты, вот, короче:
http://pastebin.com/Kjfb33nq

Ответы>>695236>>695242

22 Мар, 18:37 #231 #695236

>>695213
>>695215
Ну и да, чтобы не было лишних вопросов:
%file% — местоположение папки с сорцами, gcc прописывается в PATH в начале батника, то же самое и с CPATH.

22 Мар, 18:41 #232 #695242

>>695215
Напиши однострочник с GetCommandLine (и заодно с итерацией по argv), посмотри, что получается. У меня вот получается вроде норм разбивается, в argv[1] попадает имя файла с пробелами - проблема в гцц? Возможно, gcc.exe парсит правильно, а в cc1.exe уходит уже не то? Возьми Process Explorer от SysInternals, посмотри опять же. Если найдешь причину ошибки, можно или откопать исходники старые и поправить, или просто даже бинарник пропатчить.

Ответы>>695249>>695264>>695397

sage 22 Мар, 18:44 #233 #695249

>>695242
Бля, Process Monitor, конечно.

Ответы>>695264

41 Кб, 671x552

22 Мар, 18:56 #234 #695264

>>695242
>>695249
Попробовал запустить из консоли — то же самое. Это что получается?

Ответы>>695272>>695273>>695710

22 Мар, 19:00 #235 #695268

Получается, что дело в гцц. Новый-то собрать никак?

Ответы>>695270

79 Кб, 246x232

22 Мар, 19:02 #236 #695270

>>695268
Я что-то очкую. Это как первый секс почти.

22 Мар, 19:03 #237 #695272

>>695264
Создай нового пользователя без пробелов в имени.

Ответы>>695275>>695397

22 Мар, 19:04 #238 #695273

>>695264
Добавь в PATH путь до gcc c либками.

Ответы>>695276>>695397

22 Мар, 19:05 #239 #695275

>>695272
Блин, я же писал уже, что это костыль. Я спокойно и симлинкнуть могу, и в другую папку конпелятор и сорцы перенести — но хочется именно разобраться в настройке, а не идти на уступки.

Ответы>>695290

3 Кб, 371x118

22 Мар, 19:06 #240 #695276

>>695273
Лол, это вторая строка моего батника, первая — @echo off.

22 Мар, 19:14 #241 #695290

>>695275
В линукс-мире принято экранировать проблел обратным слешем, а не заковычивать ввод: gcc yoba\ s\ probelom.c

Ответы>>695397>>695661

99 Кб, 202x202

22 Мар, 20:09 #242 #695397

>>695290
>>695273
>>695272
>>695242
Лол, разобрался. Надо было в батнике длинное имя преобразовать в короткую версию формата 8.3.
Какие-нибудь подводные камни есть?

Ответы>>695924

22 Мар, 22:29 #243 #695661

>>695290
И очень плохо. Лучше лишний раз заковычить параметр, чем потом удивляться, куда делся весь /usr/ после установки Bumblebee

22 Мар, 23:07 #244 #695705

>>695037
Удалёнку в эмбеде найти сложно по всему мира, потому что прибор это физический объект, и эмбед тесно связан с фищическим пердоленьем.

22 Мар, 23:10 #245 #695710

>>695264
> ls в виндовой консоли
Is this real life.jpg

Ответы>>695764

22 Мар, 23:49 #246 #695764

>>695710
Научите линковать. Допустим, есть два файла, main.c и foo.c:
main.c:
void foo(); // Вместо хедера
void main() { foo(); return 0; }
foo.c
void foo() { / какая-то магия / }
Вот скомпилировал их в два отдельных .о с помощью GCC. А как дальше линковать?
Так?
gcc -o final.elf foo.o main.o
Или так?
gcc -o final.elf main.o foo.o
Можно как-то сделать так, чтобы было насрать на порядок компиляции?

Ответы>>695768>>695788>>695912

22 Мар, 23:49 #247 #695768

>>695764
Ссылка приклеилась.

23 Мар, 00:01 #248 #695788

>>695764
>Можно как-то сделать так, чтобы было насрать на порядок компиляции?
По-моему если не использовать .so и .a либы, то на порядок насрать.

23 Мар, 02:54 #249 #695912

>>695764
И так насрать. А вообще пиши makefile с implicit правилами, пусть он сам думает.

Ответы>>695917

23 Мар, 03:18 #250 #695917

>>695912
cmake надо использовать, ну сколько можно-то

Ответы>>696168

23 Мар, 04:58 #251 #695924

>>695397
На SO нашёл решение?

Ответы>>696573

23 Мар, 10:57 #252 #696000

Антонусы, поясните ньюфагу про скрипты для линковщика. Их обычно в ручную пишут?

Ответы>>696049>>696066

23 Мар, 12:40 #253 #696049

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

23 Мар, 12:55 #254 #696066

>>696000
То есть, он даже не хранится в виде отдельного файла, а встроен в линкер.

Ответы>>696175

23 Мар, 15:41 #255 #696168

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

23 Мар, 15:45 #256 #696175

>>696066
В тех линкерах, которые умеют в скрипты, в том числе и в ld, скрипты лежат в файлах. В более узко специализированных линкерах, типа MS-ового link.exe алгоритмы работы захардкожены.

Ответы>>696563

23 Мар, 16:27 #257 #696227

Ещё вопросик, объявляю строку типа char* str = "Blablabla"
Почему sizeof(str) возвращает размер указателя 4, а не размерность массива?

Ответы>>696230>>696234>>696571

23 Мар, 16:29 #258 #696230

>>696227
Потому что str это указатель.

Ответы>>696233

23 Мар, 16:31 #259 #696233

>>696230
Спасибо, нагуглил ответ и понял свою ошибку.

23 Мар, 16:32 #260 #696234

>>696227
Посмотри выше по тредику про массивы. Ты объявляешь указатель на анонимный массив (const) char. Чтобы объявить именно массив, делай так: static const char str[] = "Blablabla"; - так sizeof будет работать, как ты ожидаешь. static тут затем, чтобы массив попал в сегмент данных, а не создавался каждый раз при входе в функцию, а const, чтобы не было неожиданностей.

23 Мар, 21:14 #261 #696542

Чую что вопрос мега очевидный, но все равно задаю т.к. мне нужен на него ответ.

Ответы>>696544

23 Мар, 21:15 #262 #696544

>>696542
Нет.

23 Мар, 21:28 #263 #696563

>>696175
Ну и где лежит дефолтный линкер, котрым ld пользуется?
Прогнал ld --verbose под strace, он нихрена похожего на ld-скрипт не открывал.

Ответы>>696617

23 Мар, 21:32 #264 #696571

>>696227
Кекнул с тебя.

23 Мар, 21:33 #265 #696573

>>695924
Ты про порядок линкования?

Ответы>>696576

23 Мар, 21:33 #266 #696576

>>696573
Какой порядок, я на сообщение про 8.3 отвечал

Ответы>>697282

23 Мар, 22:18 #267 #696617

>>696563
Ну так-то скрипты просто и банально лежат в /lib/ldscripts/, но, возможно, я ошибаюсь, и какой-то дефолтный вариант и правда вшит.

Ответы>>696625

23 Мар, 22:23 #268 #696625

>>696617
> -Wl,-verbose
>> using internal linker script
Прошу прощения, ты был прав.

Ответы>>696696

23 Мар, 23:25 #269 #696696

>>696625
Нет, ты был прав. Я имел в виду дефолтный, но забыл про это явно написать.

350 Кб, 1280x942

23 Мар, 23:35 #270 #696703

2000 российских рублей на киви тому, кто покажет-расскажет как получать https странички

умею нешифрованные сокетами

для связи - forsQH(sl123ANUSmPA{ailPUNCTUMr$I}u

Ответы>>696705

23 Мар, 23:36 #271 #696705

>>696703
curl https://example.com

Отправил номер кошелька на почту.

Ответы>>696708

23 Мар, 23:41 #272 #696708

>>696705
не умею эти ваши английские

хочу что бы рабочий пример с комментариями

Ответы>>696714>>697006

23 Мар, 23:49 #273 #696714

>>696708
Отправил тебе за щёку.
Проверяй.

24 Мар, 13:47 #274 #697006

>>696708
https://curl.haxx.se/libcurl/c/https.html рабочий и с комментариями.
> не умею эти ваши английские
На 2000 купи себе словарь.

Ответы>>697084

24 Мар, 15:59 #275 #697084

>>697006
а post тоже может?

Ответы>>697086

24 Мар, 16:03 #276 #697086

>>697084
Он во многое может. Тыкни там огромную ссылку Examples, и сам увидишь.

24 Мар, 20:04 #277 #697282

>>696576
А, я понял, сам доэкспериментировался.

26 Мар, 20:05 #278 #699203

Господа, может пояснить за такой вот пример?
https://ideone.com/ZR1bsW
(увидел в местном прочитал-проиграл треде)

Ответы>>699237

26 Мар, 20:32 #279 #699237

>>699203
А что тут пояснять? Всё очевидно же. В scanf нельзя указать размер буфера, что позволяет этот самый буфер переполнить используем fgets, парсим руками. В check_authentification размер буфера еще меньше, чем в main, но при этом используется strcpy, которой тоже нельзя указать максимальный размер тут чуть сложнее, потому что очевидный выбор новичка - strncpy - внезапно тоже сломана, что позволяет переполнить буфер и возможно затереть auth_flag. Ну и мелочи всякие еще, типа паролей открытым текстом в коде, при наличии которых даже переполнять ничего не нужно храним соленые хэши, притом в конфиге, потому что хардкод тоже зло, хотя за Кэрролла лойс.

Ответы>>699290

26 Мар, 21:22 #280 #699289

Как заставить GCC размещать переменные в стеке так, как они расположены в исходнике?

Ответы>>699319>>699331

26 Мар, 21:23 #281 #699290

>>699237
>strncpy - внезапно тоже сломана
Охуеть. Тогда что надо использовать? Мемсру?

Ответы>>699319>>699331

26 Мар, 21:33 #282 #699306

какие ваши любимые фанкшыны в сишке? у меня любимая malloc, а у вас?

Ответы>>699315>>699319

26 Мар, 21:42 #283 #699315

>>699306
У меня любимое ключевое слово void, а функция тоже malloc.

26 Мар, 21:49 #284 #699319

>>699289
Выделять их как сам считаешь нужным через alloca().
>>699290
>Мемсру
Как же ахуенно читается на русском, прям вся суть функции.
>>699306
memset и scanf конечно же, из любимых языковых конструкций - void*.

Ответы>>699324

26 Мар, 21:52 #285 #699324

>>699319
>alloca()
Ммм, действительно.

26 Мар, 22:06 #286 #699331

>>699290
> что использовать
Аккуратно напиши свою. Большинство проектов так и делает. Так поступают еще и потому, что многие программы под линуксами имеют дело с UTF-8, а в UTF-8 важно не обрезать строку посередине символа.

>>699289
> Как заставить GCC размещать
Но зачем? Язык Си и стек никак не связаны. Но вообще, при сборке без оптимизаций порядок более-менее соблюдается.

28 Мар, 21:06 #287 #701382

Далеко уплыл тред что-то.
Аноны, подскажите пожалуйста как записать конструкцию switch псевдокодом.

Ответы>>701523

28 Мар, 23:07 #288 #701523

>>701382
Через цепочку if, или ты про какой псевдокод?

29 Мар, 09:14 #289 #701724

Кто-нибудь может пояснить за ассемблерные вставки на C++ в вижуал студио?

Ответы>>701927

29 Мар, 13:59 #290 #701927

>>701724
__asm {
xor eax, eax
mov eax, 1
}
Намного проще, чем в гцц

Ответы>>701966

7 Кб, 404x410

29 Мар, 14:41 #291 #701966

>>701927
Как мне заполнить массив в асм вставке числами от 0 до 99?

Ответы>>701977>>702090

29 Мар, 14:48 #292 #701977

>>701966
Жесть, чувак, даже не пытайся, или, хотя бы почитай про асм. Во первый компиль вставит эту вставку и даже не подумает с ней что-либо делать, ибо считает, что если ты юзаешь вставку, значит ты знаешь, что делаешь, а во вторых ты просто вероломным образом начинаешь использовать регистры, которые до этой вставки компилятор мог как-либо использовать, при этом ты не восстанавливаешь те значения, которые там были. Короче на данном этапе компилятор сам сможет лучше тебя оптимизировать заполнение массива, так что либо учи асм, либо забей болт на вставки.

Ответы>>702090

20 Кб, 1134x512

29 Мар, 16:49 #293 #702090

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

>>701966
Вообще-то, ты ошибся тредом, у нас здесь няшная сишечка, а не плюсы. Но в виде исключения - пикрелейтед тебе нужно было сделать lea, ибо masm, все дела.

Ответы>>702341>>702399

29 Мар, 19:12 #294 #702270

призываю всех тру программеров на ассемблере

Как мне заменить нечетные разряды на 0, а четные инвертировать?
есть код,но он не совсем работает
mov ax, a
mov res1, ax
and ax, 01010101b
xor ax, 10101010b

число 155

101 Кб, 678x802

29 Мар, 19:22 #295 #702296

код почти заработал,вместо 69 должно было получиться 68,Если я не ошибаюсь

Ответы>>702530

29 Мар, 19:43 #296 #702341

>>702090
И вправду, Microsoft для своих горе-погроммистов старается не использовать те регистры, которые юзаются в асм-вставке.
https://msdn.microsoft.com/en-us/library/5hd5ywk0.aspx

Ответы>>702638

29 Мар, 20:23 #297 #702399

>>702090
лол, вместо дрочева с высчитыванием индекса, лучше используй stosd

Ответы>>702638

29 Мар, 22:01 #298 #702530

>>702296
попробуй sub ax,0xff

29 Мар, 23:52 #299 #702638

>>702399
> вместо дрочева с высчитыванием индекса
stosd требует использования именно edi, а эффективный адрес в таком виде может использовать любые регистры. Да, stosd мог бы быть чуть-чуть побыстрее из-за отсутствия зависимости от ecx, но какая нахуй оптимизация, когда это явно учебный пример?

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

Ответы>>702750

30 Мар, 02:29 #300 #702750

>>702638
>Да, stosd мог бы быть чуть-чуть побыстрее из-за отсутствия зависимости от ecx
Ты че, поехавший? Из-за отсутствия зависимости от еcх?
У тебя адрес вычисляется через сложение и умножения регистров, в то время, как конкретно для stosd регистр edi всего лишь увеличивается\уменьшается на 4.

mov ecx, 0x64
xor ebx, ebx
lea edi, [array]
lea edi, [edi+ecx*4-4]
std
lp: lea eax, [ecx-1]
add ebx, eax
stosd
loop lp
cld
mov [sum_asm], ebx

Ответы>>702766

30 Мар, 03:11 #301 #702766

>>702750
> У тебя адрес вычисляется через сложение и умножения регистров
Ты не поверишь, но процессор умеет считать эффективные адреса очень эээ... эффективно. Это одна инструкция, и выполняется она не дольше stosd. Но она точно быстрее, чем stosd с установленным DF. Такие дела. Про зависимости, переименование регистров и прочие нюансы тебе, видимо, просто еще рано знать.

sage 30 Мар, 23:51 #302 #703476

http://www.iso-9899.info/wiki/Books#Learning_C

21 Кб, 341x500

01 Апр, 16:37 #303 #705087

>>683573 (OP)
Поясните за free(). Правильно ли я освободил память, или обосрался?
// Занимаем место:
u8 buffer = (u8)malloc(size);

// Тут магия с указателями и прочая дичь:
// …

// Освобождаем:
free(buffer);

Ответы>>705142>>705483>>710272

01 Апр, 16:42 #304 #705089

А для Си на AVR что читать?

Ответы>>705102>>705104

01 Апр, 16:58 #305 #705102

>>705089
аппноты, рили и без шуток

01 Апр, 16:58 #306 #705104

>>705089
и вообще AVR потихоньку дохнет, STM32 в этом плане перспективней - за разъяснениями в /ra/

01 Апр, 17:45 #307 #705142

>>705087
Все правильно, да. free(), кстати, понимает NULL, поэтому перед освобождением ничего проверять не нужно.

Ответы>>705159>>705483

01 Апр, 17:47 #308 #705144

Как иметь в линуксе две разных версии nginx? Надо реализовать эксплоит под одну из версий.

Ответы>>705312

4 Кб, 211x239

01 Апр, 17:57 #309 #705159

>>705142
Спасибо, просто я тот ебанутый, который делает игру под GBA. Если не следить за памятью, то те 256Кб оперативной памяти засрутся очень быстро.

01 Апр, 19:58 #310 #705312

>>705144
Сунь их в контейнеры.
И при чём тут C?

01 Апр, 22:52 #311 #705447

Читаю K&R и перестал понимать задачки в книге примерно с 1.12 упражнения.
Когда я открываю готовое решение, смотрю на него, я понимаю как это было легко и охуеваю с себя как это я не додумался. Хотя нет, вру, в 1.19 уже плохо понимаю смотря на решение.
Что делать с подобным кроме как уйти в похапе/из профессии?
Помогите, пожалуйста, няши.

Ответы>>705463

01 Апр, 23:04 #312 #705458

Итак. Решил я тут поковырять GTK. Что-то мне здается что знатно набыдлокодил. Не могли бы заценить данный код и сказать, что я делаю не так? В частности интересует ввод пользователя и передача аргументов через сигналы. Я правильно понимаю, что через gpointer data при отправки сигналов, можно передать любые данные?
https://ideone.com/q7Gpvt

Ответы>>705463

01 Апр, 23:10 #313 #705463

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

>>705458
> Я правильно понимаю, что через gpointer data при отправки сигналов, можно передать любые данные?
Ну не через глобальные переменные же передавать. Все правильно, стандартный паттерн - при регистрации колбеков запоминать "пользовательский" указатель на что-нибудь.

Ответы>>705509

02 Апр, 00:04 #314 #705483

>>705142
>>705087
Я сейчас еще прочитал свой пост и заметил, что при объявлении u8 buffer = … после u8 потерялась звёздочка, это указатель. Всё равно нормально очистит?

Ответы>>705494

02 Апр, 00:25 #315 #705494

>>705483
Да все правильно. А звездочки макаба режет. Самое худшее, что ты можешь сделать, так это не освободить память вообще или освободить память которою ты не выделял. И да. Желательно освобождать сразу же, как выделенная память больше не нужна.

Ответы>>705498>>705983

02 Апр, 00:29 #316 #705498

>>705494
А и еще освободить память в случае если ты поменял указатель. Тогда поведение будет неопределенным. Так что следи внимательно за ними.

02 Апр, 00:31 #317 #705499

*

Ответы>>705502>>705503

02 Апр, 00:32 #318 #705502

>>705499
Звезды:
Одна:
Две:
Три:
Четыре:

Ответы>>705505>>705510

02 Апр, 00:33 #319 #705503

>>705499
Я нашёл способ — 3 звёздочки!

Ответы>>705505

02 Апр, 00:33 #320 #705505

>>705503
Нет *
>>705502

Ответы>>705507

02 Апр, 00:41 #321 #705507

>>705505
Чё-то ты обосрался, вась *

Ответы>>705510

02 Апр, 00:42 #322 #705509

>>705463
А вот еще хотел спросить. Если мне нужно обеспечить ввод при нажатии на Enter и при нажатии на кнопку. Правильным ли будет, просто эмитить сигнал с ответом при нажатии на Enter для диалогового окна? Или есть другие способы?

02 Апр, 00:43 #323 #705510

>>705507
Сам не знаю.
Здесь: >>705502 не сработало у меня.
Тест (три звезды с двоеточием до):
Тест (без двоеточия)

02 Апр, 13:09 #324 #705820

Ну вот же ∗ звездочка. Уже не первый тред используем, а брат все еще жив.

02 Апр, 14:52 #325 #705872

*

02 Апр, 14:53 #326 #705874

ц: *

02 Апр, 16:44 #327 #705983

>>705494
Короче, есть конвертор, который берет изображение формата .pcx и забивает его в .o как массив с произвольным названием типа u8. Потом происходит компиляция исходного кода и он линкуется с уже имеющимися файлами ресурсов. Когда мамин программист хочет нарисовать эту самую картинку на экране GBA, он подключает эту переменную через extern и дает указатель этой функции:
http://pastebin.com/FRQuWfbj
Вроде же всё правильно, ничего лишнего не освобождается? Просто я не нашел нормальных дебагеров под GBA, вот и приходится задавать тупые вопросы и гадать на кофейной гуще.

Ответы>>706080

02 Апр, 18:54 #328 #706080

>>705983
А почему нельзя прямо на экран распаковывать? Слишком медленно? Так RLE же, чуть-чуть до memcpy не дотягивает.

Ответы>>706111

02 Апр, 19:30 #329 #706111

>>706080
Там такая фича видеопамяти GBA, что туда нельзя писать char-ами, только short и int, а картинка-то как-раз таки и закодирована в char (а в 16-цветовом случае вообще использует по 4 бита на пиксель, лол). Это рождает просто ебанную кучу проблем, например, если хочешь нарисовать один пиксель — выравнивай указатель по ячейке, читай соседний пиксель, скрещивай его с идентификатором цвета и только после этого записывай назад уже два пикселя, как раз u16 и выходит. По этой же причине я и не осилил RLE прямиком в память — а что если оно будет залезать на соседний пиксель?
А вообще, архитектура, мягко говоря, интересная. Может, в 2001 это было нормально, но сейчас меня подобные вещи пугают.

Ответы>>708993

04 Апр, 16:26 #330 #707608

Анон, как привести произвольный указатель к типу указатель на функцию void (*)(void)?

Ответы>>707698

04 Апр, 18:29 #331 #707698

>>707608
Если тебя не смущает, что это undefined behavior, то кастится так же, как и все остальное:
uint8_t bytes[] = { 0xeb, 0xfe }; // Infinite loop (x86).
void (∗funcptr)(void) = (void (∗)(void)) bytes;
funcptr();
// Или заодно с вызовом
((void (∗)(void)) bytes)();
Работать не будет, потому что bytes надо положить в регион памяти, который помечен исполняемым. Современные процессоры, NX-бит, все дела.
И повторяю: это UB.

Ответы>>707765

04 Апр, 19:31 #332 #707765

>>707698
Спасибо.
Выходит лучше указатели на данные и функции хранить отдельно?
Благо у меня stm32 и по умолчанию gcc даж не ругнулся.

Ответы>>707829

04 Апр, 20:14 #333 #707829

>>707765
> Выходит лучше указатели на данные и функции хранить отдельно?
Я сгустил краски. По стандарту у тебя либо object pointer, либо function pointer, и использование одного через другое не портабельно (потому что существуют всякие AVR, где такое сделать не позволяет архитектура процессора). Но там, где архитектура позволяет, возможность выполнять данные, как код и/или использовать код, как данные часто существует в виде расширения стандарта (J.5.7), и не приводит к неожиданностям (если выполняются всякие платформо-зависимые обряды вроде сбросов кэшей и пометки памяти, как исполняемой).

Поэтому если ты пишешь конкретно для STM32, тебя эти проблемы не касаются. А зачем тебе кастить данные к указателю на функцию, кстати? Ты генерируешь код в рантайме или просто экспериментируешь?

Ответы>>707890

04 Апр, 21:11 #334 #707890

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

Ответы>>707903

04 Апр, 21:29 #335 #707903

>>707890
Можешь union сделать, если в зависимости от типа элемента тебе нужно поле или одного типа, или другого.

20 Кб, 403x274

05 Апр, 19:30 #336 #708701

Что я упустил в расчете ICMP чексумы?

Ответы>>708827

05 Апр, 21:49 #337 #708827

>>708701
1) Ты когда однобайтовый хвост читаешь, читаешь лишнее. Представь, что я выделил страницу памяти и скормил твоей функции один последний байт этой страницы - ты сегфолтнешься.
2) После if не делаешь else для двухбайтового варианта.
3) Читаешь целые в little endian, но не свопаешь байты перед инверсией битов.

05 Апр, 22:06 #338 #708842

Нубские вопросы.

1) Как опознавать нажатие/отпускание/удерживание клавиши на клавиатуре?
2) Как воспроизвести аудиофайл (скажем, mp3)?

Ответы>>708947

05 Апр, 23:55 #339 #708947

>>708842
Очевидно, ты должен указать ОС. Если ты хочешь более-менее кроссплатформенно, то можешь взять SDL и какой-нибудь MAD для декодирования .mp3.

Ответы>>708992

06 Апр, 01:07 #340 #708992

>>708947
Хорошо, понял, спасибо. А можно пример кода на
>нажатие/отпускание/удерживание клавиши на клавиатуре
? Под линукс. Просто для общего образования. Мне кажется, это должно быть очень просто, что-то типа while(true){scanf("%c", &key); ...}

Ответы>>709280>>709681

68 Кб, 1399x566

06 Апр, 01:12 #341 #708993

>>706111
Ура, я нашел эмулятор GBA со встроенным дебагером! Теперь писать код стало куда проще, можно хотя бы удостовериться, как и куда ты записываешь спрайты (а не просто высчитывать в уме) и всё такое. Была маленькая утечка памяти (если так можно назвать неправильную адресацию тайлов) — с помощью утилиты я её устранил.
На пике мой понг, который я успел написать за это время. Ведь превозмогать с древней архитектурой и еще более древним Си — это так охуенно!

Ответы>>710272

06 Апр, 03:03 #342 #709025

Торкнуло меня попробовать системное программирование в линуксе. Книга как с оппика есть, и всё. До этого был опыт на сишке в винапи. Сейчас в поисках толковой ide под сишку, и остановился на таком выборе - Atom.io и Visual Studio Code. Вроде оба имеют пакеты с поддержкой с/с++, в студии вроде билд можно намутить через таск менежер, а как в атоме я не понял, может анон знает? вот только я не имею ни малейшего понятия, что там тру а что нет, какую ide юзать и какому стайлгуайду следовать. Так же хз, как писать системное в линупсе в принципе. Анон, выручай!

Ответы>>709121

06 Апр, 09:35 #343 #709121

>>709025
Используй vim/emacs/другой_текстовый_редактор. Makefile-ы и прочее надо учиться писать ручками. Если всё-таки жить не можешь без ёба-ide но оно тебе все-равно не нужно, то лучшим выбором будет Qt Creator.

B раз уж ты полез в юниксы, то начинай читать Advanced Programming in the Unix Environment 3rd edition.

06 Апр, 14:04 #344 #709280

>>708992
Под линукс тута (там тыкни next lesson внизу): https://tronche.com/gui/x/xlib-tutorial/

06 Апр, 16:25 #345 #709376

Не увидел в шапке, так что кину сюда. Думаю, часть анонов уже видела.
http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/main.htm
По сути, копипаст одной части годного учебника по плюсам от Шилдта. Мне зашло больше, чем K&R, так как разжевано кое-что подробнее, и также больше, чем учебник Праты, так как не так сильно глубоко.

06 Апр, 22:25 #346 #709681

>>708992
>Под линукс
Консоль/гуй?

27 Кб, 970x464

2 Кб, 650x36

07 Апр, 17:55 #347 #710272

>>683573 (OP)
>>708993
>>705087
У меня появился еще один вопрос:
Как забить константу в определенный участок памяти, а не в конец .text? Смотрите, я нашел в дебаггере адрес, где лежит название моей будущей игры (используется в NDS для отображения в главном меню). Так как эта штука находиться после 0x08000000 — значит, оно лежит на ROMe, и, соответственно, неизменно в рантайме. Так вот, как изменить эту штуку на этапе компиляции, без редактирования готового .gba файла каким-нибудь HEX-редактором? Я пробовал так:
const char pie_name __attribute__ ((section (".romname"))) = "ZenPong";
А потом делал такой скрипт для линкера:
SECTIONS
{
_flag_start = 0x80000A0;
.romname _flag_start :
{
KEEP((.romname)) ;
}
}
Но, вполне ожидаемо, что оно просто взяло и нагло перекрыло уже существующую секцию .text. Так вот, как это исправить, и, наконец, занести эту долбанную константу по нужному адресу?

Ответы>>710311>>710670

07 Апр, 18:59 #348 #710311

>>710272
Хуй знает, это специфика архитектуры, надо разбираться, но разве до 0x08000a0 не лежит еще что-то подобное околосистемное? Заголовок какой-нибудь там. Укажи в линк-скрипте, что у тебя есть секция, допустим, 0x100 байтов с подобным говном, и эту секцию надо смержить с .text, причем поместить ее в начало .text.

Ответы>>710316

07 Апр, 19:02 #349 #710316

>>710311
> 0x100 байтов с подобным говном, и эту секцию надо смержить с .text, причем поместить ее в начало .text
Ну так как это сделать и спрашиваю — можно пример скрипта? Всё что после 0x08000000 — это память картриджа (может быть до 32Мб), до 0x80000A0 лежит какой-то заголовок GBA игры, после него — остальная память картриджа.

Ответы>>710666

07 Апр, 21:48 #350 #710497

>>689585
>Что вообще сложного в кодинге?
Сложно писать программы таким образом, чтобы потом внося в них изменения, эти изменения были локализованы как можно в меньшем количестве мест.

07 Апр, 23:13 #351 #710578

Где надрочить свои навыки в сишечке? На каких-нибудь развивающихся проектах, но чтоб не супер монструозная ЙОБА.

Ответы>>717655>>717658

08 Апр, 02:04 #352 #710666

>>710316
Да, уже увидел пик с сообщением об ошибке и посмотрел скрипт, которым это собирается. Хуй знает. Если .text не будет по 0x08000000, сломается бутстрап в crt0.o, а патчить секции через ld я не умею. Я бы отредактировал сам crt0.S просто или написал бы патчилку ромов после линковки уже.

Ответы>>710670>>711510

sage 08 Апр, 02:07 #353 #710670

>>710666
Ахда, и у тебя >>710272 тут, судя по размерам секции и недоеденным вакабой кускам кода - указатель, а надо по ...A0 не указатель положить, а сам массив char. Т.е., const char pie_name[] = "";

Ответы>>710733>>710734

08 Апр, 06:50 #354 #710733

>>710670
Двачую. Строковые литералы размещаются в секции рид-онли, плюс все секции выравниваются по размеру страницы, поэтому компиль и перетирает твою попытку захуярить секцию по такому кривому адресу.

08 Апр, 06:51 #355 #710734

>>710670
бля ну ты понял, тут типа ответ не сколько тебе, сколько анону, которому ответил ты

16 Кб, 342x401

09 Апр, 01:58 #356 #711510

>>710666
> патчилку ромов после линковки уже
Но такая уже есть:
https://github.com/devkitPro/gba-tools/blob/master/src/gbafix.c
Но всё равно было бы круто разобраться с самим линковщиком, чем использовать готовые велосипеды.

12 Апр, 14:31 #357 #714568

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

Ответы>>714582>>714855

12 Апр, 14:56 #358 #714582

>>714568
связанный список

12 Апр, 20:06 #359 #714797

У меня охуительный вопрос появился.
Предположим, нужно в программе какое-нибудь число. Пусть, например int x = 10. С точки зрения памяти, что будет, если мы в коде уберём переменную x и подставим везде само число 10? Мы сэкономим 2 байта?

Ответы>>714807>>714855

12 Апр, 20:15 #360 #714807

>>714797
Типа того, но там оптимизации могут быть если ты не объявишь х как volatile. Ну и экономия от размеров типов зависит.

Ответы>>714929

12 Апр, 20:36 #361 #714843

Вроде сделал умножение чисел произвольной длины, но компилятор выдаёт какую-то жесть, там все 5 умножений на месте и они почему-то знаковые. Я хуй знает, вроде правильно работает, и вроде инструкция умножения сразу в два регистра кладёт результат, так нахуя он повторяет 5 умножений?

Не шарю в асме. Чё-то не понял, или кривой код?

http://pastebin.com/bwPVY8u3

http://pastebin.com/g1j6TPj1 выхлоп

Ответы>>715022

12 Апр, 20:50 #362 #714855

>>714568
У тебя там ембеддед что ли? Твой подход норм. Даже если у тебя будет миллион элементов, дополнительные расходы от двух полей в структуре составят 8/16 мб и особой погоды не сделают. Если все равно хочешь память сэкономить (за счет CPU и шины), можешь изъебываться с офсетами (в элементе хранится офсет в заранее выделенный пул, а размер данных ты вычисляешь в рантайме на основании офсета следующего элемента в связанном списке, или, если он последний - следующего bucket-а). Или, если у тебя элементы массива - указатели, а не сразу структуры, сделай структурку вида:
struct Item
{
struct Item ptr next;
int hashcode;
int data_length;
char data[];
};
и при выделении элемента выделяй сразу sizeof(Item) + data_length. Выделится одним куском, не нужно будет хранить лишний указатель.

>>714797
Оставь оптимизации компилятору, особенно если не уверен. Будет ли выигрыш от твоего подхода, зависит от многих вещей. Например, от архитектуры (как будет кодироваться непосредственное значение 10 в инструкции, которая его использует), от выражения, в котором используется твое число, от наличия и типа указателей в функции (можешь про алиасинг почитать, но это весьма хитрая тема), от уровня оптимизации, от ключей компилятору, от самого компилятора.

Ответы>>714929>>715713

12 Апр, 21:50 #363 #714929

>>714807
>>714855
Понел, спасибо.

12 Апр, 22:48 #364 #715022

Ну может у кого негцц компилятор есть, или 64х битовый режим, киньте выхлоп (с оптимизацией конечож) этого >>714843, хоть посмотрю.

Ответы>>715038

12 Апр, 23:02 #365 #715038

>>715022
Могу студией собрать, но uintp - это uintptr_t или uint32_t ∗? И почему нельзя было стандартные типы использовать?

Ответы>>715048

12 Апр, 23:08 #366 #715048

>>715038
это
typedef uintptr_t uintp ;
typedef intptr_t intp ;

12 Апр, 23:11 #367 #715054

А стандартные типы не тащат, мне не хочется писать _t, а ещё я хочу писать не только на c99 и выше. Поэтому сам на определял себе. Хотя конечно есть мнего проблем, например до c99 нет числовых типов что-бы вмещали адреса, только дико мытные size_t и ptrdiff_t - которые тоже хуй пойми где определены.

Ответы>>715073

12 Апр, 23:21 #368 #715073

>>715054
Вопщем, сам дизасми. Студия со всеми апдейтами, Clang/C2 парсер шланговый, кодогенератор C2 майкрософтовый. rghost.ru/7KdXkMRsc
А чего ты добиться-то хочешь? Я так и не понял из оригинального поста. Оно умножает не так, или компилируется неоптимально? Код не читал, если что.

Ответы>>715104

12 Апр, 23:36 #369 #715104

>>715073
Вроде не оптимально компилируется, по идее это должно идти в одно умножение. Но рас нет, значит допускается какое-то поведение, и возможно там ошибка, или хуй знает.

13 Апр, 00:04 #370 #715145

хм, прочёл я спецификацию, 2-3 операндный imull усекает результат, поэтому как бы и не знаковый...

1 Кб, 147x80

13 Апр, 03:58 #371 #715248

Вроде сократил мальца, но всё равно пиздец. Хуй с ним, проставлю ифдеф с (uint64). Время насасывать в делении...

13 Апр, 17:39 #372 #715713

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

15 Апр, 12:02 #373 #717422

ОПИШИТЕ ПО БУКВАМ!
Как начать кодить на этом СИ? Поставил я такой netBeans, а он такой - у вас нету компилятора!
А я такой - поставлю кланг тогда. А он такой - у вас нету MAKE.
Сука! Сделать не может. МАке нету.
И я такой говно этот Си непонятный, вернусь на JS
Ну или объясните как ХЭЛЛОУ ВОРЛД НАПИСАТЬ!?

Ответы>>717434

15 Апр, 12:33 #374 #717434

>>717422
Если у тебя винда, к шлангу тебе понадобится поставить еще MinGW GCC (многие хедеры, либы у них общие), там и make есть, как часть MSYS. А можешь просто взять Pelles C или Visual Studio, у них свои IDE, и все необходимое сразу есть в комплекте. Разве что, у студии комплект весит десяток гигабайт, а у Pelles C - десятки мегабайт.

Ответы>>717438

15 Апр, 12:36 #375 #717438

>>717434
Спасибо

15 Апр, 16:25 #376 #717655

>>710578
бамп вопросу

Ответы>>717658

15 Апр, 16:29 #377 #717658

>>710578
>>717655
http://www.buildyourownlisp.com/

15 Апр, 17:37 #378 #717731

А что вообще можно на С написать? Допустим, на перле или путоне я могу сделать парсер веб-страниц, скрипты автоматизации и даже оконные приложения.
Что можно на чистом С сделать, кроме консольных утилит x + y?
Зачем он нужен вообще, кроме как для написания контроллеров для железа?

Ответы>>717745>>717753>>717890>>718911>>719109

25 Кб, 499x499

15 Апр, 17:56 #379 #717745

>>717731
http://www.rosettacode.org/wiki/Category:C

Ответы>>718224

15 Апр, 18:03 #380 #717753

>>717731
>А что вообще можно на С написать?
Много чего.

Ответы>>718224

15 Апр, 21:04 #381 #717890

>>717731
GUI-приложения под winapi писать на С как два пальца обоссать на самом деле, в визуальном конструкторе или редакторе в ресурс-файле накидываешь типовые контроллы в контейнере DIALOGEX, задаешь им текст, стили и прочее, далее во время исполнения лепишь свои диалоги куда тебе надо - например на созданное главное окно, можно переключать их видимость вкладками например, меняешь их свойства и обрабатываешь юзер инпут с помощью стандартных виндовых оконных месседжей, можно очень просто назначать собственную отрисовку контролов, тогда можно делать гламурненькие кнопочки, чекбоксы и прочее прочее. Это на первый взгляд кажется, что гиморно и громоздко, на самом деле через некоторое время у тебя появится куча всяких стандартных шаблонов и оберток для вызова громоздкокого winapi. Не в курсе, но уверен, чтопод какое-нибудь GTK(он же вроде на С емнип) всё так же.

Ответы>>718136>>718224

16 Апр, 01:49 #382 #718136

>>717890
гуй не нужен. консоли будет достаточно, а то знаю я эту вашу графику. сегодня ты напишешь вызов, заделаешь удобства, очереди отрисовки, анимации, 3д, шейдеры - в итоге всё время тратишь на свой самый лучший в мире движок. далее выкладываешь его для всеобщего пользования и УПС, внезапно оказывается, что таких-же долбаёбов как ты уже за миллион переваливает, и твоё поделие нахуй никому не нужно, а время потрачено, а ведъ можно было посмотреть трилогию порно пиратов, но уже на работу...

Ответы>>718150>>718219

17 Кб, 291x300

16 Апр, 03:19 #383 #718150

>>718136
Ну ты и пидор, по самому больному ударил.
писатель-хуиты-под-GBA

Ответы>>718219

16 Апр, 09:21 #384 #718219

>>718136
>>718150
Расскажите чуть больше. Разве оно уже не сделано в виде clutter/XUL и подобного?

16 Апр, 09:47 #385 #718224

>>717753
>>717745
>>717890
Спасибо, понятно. А что есть для работы с графикой? Собрался игоры пилить Допустим, я хочу сделать так, чтобы в некоем окошке 6 квадратиков ездили друг за другом по часовой стрелке. Java и прочее не подходит, т.к. при увеличении числа квадратиков (до 600, например) всё начинает безбожно лагать. Логичный вывод - сделать это на С. Только хз как

Ответы>>718226>>718227>>718388

16 Апр, 09:53 #386 #718226

>>718224
OpenGL, как ещё блядь.
Если у тебя лагает такая хуйня – у тебя либо безнадёжно устаревшая пека, либо ты пиздец криворукий. В обоих случаях сишка будет полумерой, тем более если ты её не знаешь.

Ответы>>718229

16 Апр, 09:57 #387 #718227

>>718224
Во времена второго квейка ещё был софтварный рендер. Где каждый пиксель на сишечках. Сейчас конечно опенгл надо использовать везде где можно, особенно если квадратиков много.

30 Кб, 480x360

16 Апр, 10:00 #388 #718229

>>718226
Ок, расскажи мне, как сделать эффект, аналогичный снарядам в тохо?
Делал через Python на Pygame и Pyglet - лагает, делал на Java в Candroid engine - лагает.
Комп 6 ядер, 8 гигов озу

Ответы>>718378

16 Апр, 11:06 #389 #718254

>>683573 (OP)
>Stephen Prata "C Primer Plus, 6th Edition" (2014)
Действительно годнота? Хочу окунуться в мир чистого Си, сейчас листаю Ритчи.

Ответы>>718339

16 Апр, 13:42 #390 #718339

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

Ответы>>718346

16 Апр, 13:51 #391 #718346

>>718339
Ну и что это тебе дало? Вот пишу я printf("Bla bla"); нафиг мне знать, что атм происходит? Я знаю, что у меня выводится в консоль строка. Это всё, что мне надо. Зачем мне дезасемблировать её?

Ответы>>718361

28 Кб, 500x275

16 Апр, 14:12 #392 #718361

>>718346
Толсто.

22 Кб, 200x202

16 Апр, 14:30 #393 #718378

>>718229
> Делал через Python на Pygame и Pyglet — лагает, делал на Java в Candroid engine — лагает.
> Комп 6 ядер, 8 гигов озу
Пиздец.

Ответы>>718382

16 Апр, 14:35 #394 #718382

>>718378
Стандартный геймдев в 2016. Железо же развивается, хули вы тут на своём ассемблере пишите?

Ответы>>718418

16 Апр, 14:42 #395 #718388

>>718224
> при увеличении числа квадратиков (до 600
Такую хуйню и сишка не вывезет в риалтайме, твоим способом. Большие количества "квадратиков" реализуют с помощью частиц (particle system). Про тохо точно не знаю, но с большой долей вероятности там не обрабатывается каждый снаряд как отдельная сущность. А задается закон по которому они живут (функция от времени). Каждый залп это одна функция с помощью которой ренедерятся сотни снарядов, и проверяется попадание в игрока с помощью простой подстановки (координат игрока) в функцию.

Ответы>>718419>>720086

16 Апр, 15:04 #396 #718409

>>689377
вголос

35 Кб, 463x403

16 Апр, 15:20 #397 #718418

>>718382
Так мы застряли в прошлом — вон, один уже совсем поехал и пишет под Геймбой, там вообще 4Мгц и 256Кб оперативы. А ты тут такие вопросы задаешь.

Ответы>>718427

16 Апр, 15:21 #398 #718419

>>718388
Т.е. это не так работает? -Делаем класс Пуля, из него генератором делаем 200 объектов и задаём в функции им путь и время, чтобы были промежутки.

Алсо спасибо, доброанон. А как ты до этого додумался? Что это функция и т.п. Это ведь не какое-то знание конкретного ЯП. Алгоритмы? что почитать на эту тему?

Ответы>>718524

16 Апр, 15:26 #399 #718426

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

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

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

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

Ответы>>718428

16 Апр, 15:28 #400 #718427

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

16 Апр, 15:28 #401 #718428

>>718426
https://gmplib.org/

Ответы>>718431

16 Апр, 15:31 #402 #718431

>>718428
Нет, я должен страдать, я не сдался ещё.

16 Апр, 17:46 #403 #718524

>>718419
> Делаем класс Пуля, из него генератором делаем 200 объектов
Так и работает. Тормоза у кото-то там выше не из-за подхода к хранению и генерации частиц, а из-за способа отрисовки.

16 Апр, 19:52 #404 #718649

Не по теме,но arduino язык C подобный .Так вот вопрос.Я новичок ,пытаюсь с помощью Serial число и записать в переменную (мы ввели 1234 в массив и присвоили val =i[0].Но у нас переменная будет равна 49,а не 1 из за того,что мы считываем код символа из ascii .Как записать туда 1,не делая костыли с if(i[0] == 48){
i[0] = 1;
}
)Спасибо.

Ответы>>718686

16 Апр, 20:36 #405 #718686

>>718649
i[0] = val - '0';

Ответы>>718694>>718712

16 Апр, 20:44 #406 #718694

>>718686
О ,спасибо!

Ответы>>718713

16 Апр, 21:02 #407 #718712

>>718686
Кстати еще одна проблема
Serial.readBytes[i,4]//считываем массив по байтам
int c=(i[0]-'0')*6000//если ввести 1234,то выдаст 6000-правильно.Но если умножить на 60000 то выдаст -5536.

Ответы>>718724

16 Апр, 21:02 #408 #718713

>>718694
В ардуинах же atoi тоже есть, насколько я помню. Зачем ты его изобретаешь?

sage 16 Апр, 21:06 #409 #718724

>>718712
Потому что int там 16-битный, в знаковом int может храниться -32768 ... 0 ... 32767, вот он у тебя и переполняется. Юзай long (long int), и желательно unsigned, если не предполагается хранить отрицательные числа.

Ответы>>718733

1562 Кб, Webm

16 Апр, 21:09 #410 #718726

16 Апр, 21:13 #411 #718733

>>718724
Спасибо большое!

16 Апр, 21:24 #412 #718745

Подскажите очередной тупой вопрос: как засунуть файл в stdin? Есть куча готового кода, который читающий данные через getchar(), переписывать всё на fgetc() не вариант.

Алсо, есть ли способ узнать текущую позицию курсора в этом самом stdin?

Ответы>>718748>>718806>>719040

16 Апр, 21:28 #413 #718748

>>718745
fread/fwrite, ftell.

16 Апр, 23:03 #414 #718793

Кстати ,for или do while делает i-1 к примеру раз в 1 миллисекунду?

Ответы>>718795>>718806

16 Апр, 23:07 #415 #718795

>>718793
Как например сделать цикл ,который выполняется минуту?
for(i=61000(60?),i>0,i--)
{
}
?

Ответы>>718805>>718806

16 Апр, 23:25 #416 #718805

>>718795
sleep(60)

16 Апр, 23:26 #417 #718806

>>718793
> for или do while делает i-1 к примеру раз в 1 миллисекунду
С чего бы вдруг? Нет, гораздо чаще, зависит от процессора и конкретного скомпилированного кода. У тебя частота процессора гигагерцами меряется, причем несколько инструкций могут выполняться параллельно.

>>718795
Используй аналог sleep() в твоей ОС или виси в пустом цикле, пока разница между начальным time() и текущим не будет равна 60 секундам (но имей в виду, что такой подход бесцельно нагружает процессор). Пустой цикл в твоем варианте не имеет сайд-эффектов, поэтому оптимизатор вправе его выкинуть нахуй.

>>718745
freopen() сделали специально для тебя. Не забудь заодно описание setvbuf() глянуть.

17 Апр, 03:34 #418 #718911

>>717731
>Зачем он нужен вообще, кроме как для написания контроллеров для железа?
Блядь, откуда вы только лезете. На Си, наверно, половина софта написана. А остальная половина на крестах.

17 Апр, 12:31 #419 #719040

>>718745
>текущую позицию курсора в этом самом stdin?
Што?

17 Апр, 13:34 #420 #719109

>>717731
Игровые движки, например.

Ответы>>719110

17 Апр, 13:35 #421 #719110

>>719109
C++

17 Апр, 23:39 #422 #719733

>>683573 (OP)
Есть ли рбота на сише в рашке?

Ответы>>719773>>720262

17 Апр, 23:54 #423 #719743

Хочу перейти от консолеговна к окноперделкам. Какую IDE лучше накатить, чтобы создавать окошки и модные выпадающие менюшки без гомоебли? И чтобы было достаточно уроков, да.

Ответы>>719773

18 Апр, 00:41 #424 #719773

>>719733
Тут уже спрашивали >>694860. Искать нужно, но в общем-то есть.

>>719743
Любую. Если шинда и Windows API, то Visual Studio или Pelles C. Но вообще, если тебе нужен обычный стандартный GUI, то проще написать его на C# или Qt, а на сишечке писать либу или консольное приложение, к которым GUI будет обращаться.

18 Апр, 04:55 #425 #719855

Есть одна лаба.
В ней используются phtread и mutex
https://ideone.com/NaFOvO
С большего написал, но ведет она себя странно, в какойто момент, судя по всему, входит в дедлок.

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

Ответы>>719856>>719859>>719886>>720261>>720750>>720754

18 Апр, 04:57 #426 #719856

>>719855
Задача, на всякий случай, такая:
есть много тредов, они соревнуются за ресурс PID(их меньше чем тредов), держат его немного и отдают назад.
У меня получается что треды берут все PID, благополучно отдают их назад, но новые треды их уже взять не могут.

18 Апр, 05:18 #427 #719859

>>719855
2016-й на дворе, используй std::mutex. Твой код не exception safe как минимум.

Ответы>>719860

18 Апр, 05:29 #428 #719860

>>719859
Мы точно про С говорим?

Ответы>>719861

18 Апр, 05:36 #429 #719861

>>719860
А, сорян, ошибся тредом.

18 Апр, 07:07 #430 #719886

>>719855
Проверка S (там где ты ждешь) происходит до лока мютекса, возможна ситуация что в треде будет проведена успешная проверка S, после чего он стопнется операционной системой, S будет уменьшена, и тред продолжит выполнение дальше с S равным нулю без всяких проверок, на что у тебя там UB как я понимаю - ты дойдешь до конца функции не сделав return.

Ответы>>720295

18 Апр, 11:53 #431 #719992

>>685995
хуяно.. там больше 200строк писать не рил

18 Апр, 14:31 #432 #720086

>>718388
Что за хуйню я только что прочитал?

18 Апр, 14:42 #433 #720095

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

Ответы>>720723

18 Апр, 18:19 #434 #720261

>>719855
>Дебажить нечем, пишу в блокноте и компилирую/запускаю на удаленном сервере.

18 Апр, 18:19 #435 #720262

>>719733
nop

18 Апр, 18:57 #436 #720295

>>719886
Но ведь S это типа семафор, который фактически он там нихуя не делает(изза наличия мютекса). Проверка по S разрешает обратится к мютексу, не более. А уменьшение S возможно только после отмыкания мютекса.
Я исхожу из слеюующего:
Когда ктото хочет mutex_lock а он закрыт, то этот ктото попадает в очередь и крутится там переодически пытаясь этот мютекс открыть еще раз. Это верно?

Ответы>>720305

18 Апр, 19:19 #437 #720305

>>720295
Типа как семафор, да, только семафоры потокобезопасные (доступ к счетчику) а твое S нет.
Ситуация. Ресурсы полностью заняты. S равно нулю. Несколько свободных тредов крутятся в цикле. Освобождается один из ресурсов. В массиве одно из значений записывается на ноль, S становится равным одному. Тред А увидев что S больше нуля выходит из цикла и тут его стопает система и запускает тред В. Тред В видит что S больше нуля, выходит из цикла, проходит по массиву ресурсов находит ноль и записывает туда единицу, уменьшает S до нуля. Просыпается тред А, проходит по массиву, так как там нет нуля (все ресурсы уже заняты) то функция просто завершается без нормального ретурна - тоесть возвращается какая-то хуита. Я не знаю что у тебя там за проблема, может такое поведение никак на корректность программы даже и не влияет. Но такая твоя реализация не потокобезопасна. В семафорах регулируется доступ к счетчику - тебе нужно или захватывать мьютекс перед чтением S, или делать атомарную операцию с проверкой и одновременные декрементом S. Если еще и массив атомарно модифицировать то мьютекс совсем не нужен.

Ответы>>720335

18 Апр, 19:55 #438 #720335

>>720305
ОК, с этим согласен.
Вот, вообще убрал оттуда S(остался как счетчик для дебага)
https://ideone.com/gyhVuB
Добавил ретурн, чтобы видеть ошибку
Похоже что так и есть как ты говоришь, они попадают в цикл поиска свободных мест в странном порядке.
Но ведь это место защищено мютексом блеять! Может это быть изза того, что система мульитпроцессорная?

Ответы>>720430

18 Апр, 19:58 #439 #720340

Вообще, когда ктото доходит до исполнения pthread_mutex_lock он будет там ждать пока не сможет открыть или случится дедлок?

Ответы>>720430

18 Апр, 20:49 #440 #720423

Кто-нибудь вообще сталкивался на практике с поведением atoi, описанном в справочниках, когда при невозможности конвертации возвращает не 0, а ведёт себя "непредсказуемо"?

Ответы>>720462

18 Апр, 21:00 #441 #720430

>>720340
Будет ждать.
>>720335
>место защищено мютексом блеять!
Защищено. Треды получают ресурс строго по очереди. Пока один ищет, остальные ждут. Проблема в том что твой счетчик, из-за того что он сам по себе непотокобезопасный в некоторых случаях (там наверное всего две-три инструкции во время которых нельзя останавливать поток на всю программу) пропускает больше тредов чем есть ресурса. Кстати из-за чего и происходит дедлок, только заметил - поток освобождает мьютекс только после того как получит ресурс. Тоесть когда счетчик пропускает лишний поток, он не может найти ресурс (так как все заняты) и следовательно неотпускает мьютекс и никто больше не может получать ресурсы.

Ответы>>720530

18 Апр, 21:35 #442 #720462

>>720423
Там UB из-за возможного signed integer overflow в процессе обработки.

18 Апр, 23:05 #443 #720530

>>720430
вобщем так все и было, спасибо починил.

А ведь возвращать ресурсы можно без мютекса? Там же вроде не запороть?

Ответы>>720544

18 Апр, 23:16 #444 #720544

>>720530
Если правильно раздал то не запороть. Главное сначала ресурс вернуть, а уже потом счетчик увеличить.

Ответы>>720678

19 Апр, 01:43 #445 #720678

>>720544
спасибо, все работает.
оророро уебываю назад в пистон тред, где мне и место
байтоёбьте без меня

19 Апр, 05:32 #446 #720723

>>720095
http://suckless.org/

Ответы>>720727

19 Апр, 05:49 #447 #720727

>>720723
> Coding style
> Do not mix declarations and code
Используют C99, а до сих пор говно в голове.

Ответы>>720826

19 Апр, 08:42 #448 #720750

>>719855
Атомарные переменные и без гомоебли

Ответы>>721046

66 Кб, 700x581

19 Апр, 09:08 #449 #720754

>>719855
Начем с того, что ты - пиздоглазое мудило!

У тебя функции allocate_pid мьютекс захватывается всегда, а освобождается только тогда, когда удалось выделить PID.

И это только пол беды, еще там же в случае, если не удалось выделить PID, у тебя не только не освобождается мьютекс, но и не возвращается никакого значения !!!

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

Чтобы это заметить отладка не нужна, совсем.

Желаю тебе всю твою никчемную жизнь наслаждаться UB по полной программе!

школьник-кун

Ответы>>721046>>721047

19 Апр, 11:30 #450 #720826

>>720727
Дэ, чё-то у них немного странные требования, хотя код неплох.

Ответы>>721002

19 Апр, 15:31 #451 #721002

>>720826
Нормальные требования.

Это сделано для переносимости кода между разными компиляторами.

19 Апр, 16:39 #452 #721046

>>720750
задача же ебаться, лаба же.
>>720754
Дружок, ты со своим доминированием опоздал. Все уже починили по указаниям анона сверху, умерь пыл.

19 Апр, 16:40 #453 #721047

>>720754
хотя, раз ты так умен.
Как сделать allocate_pid так, чтобы оно в случае невозможности выделить пид не заезжало на мютекс, а возвращало -1?

Ответы>>721115

38 Кб, 658x433

19 Апр, 17:39 #454 #721115

>>721047
Возьми за основу этот свой https://ideone.com/gyhVuB

1. Заведи в начале функции переменную, в которую будешь писать возвращаемое значение (ret), инициируй ее отрицательным значением (типа ошибка по дефолту).

2. В цикле вместо освобождения мьютеска и выхода из функции сделай присвоение ret = next_pid+PID_MIN; а потом break;

3. После окончания цикла сделай pthread_mutex_unlock(&mutex); а потом return ret;

А нафига там S я так и не понял, оно только при печати используется?

школьник-кун

Ответы>>721168

19 Апр, 18:58 #455 #721168

>>721115
https://ideone.com/KuTw1F
вот как оно выглядит сейчас
То что ты рассказываешь я не понимаю.
Задача:
1)тред обращается в allocate_PID
2)если мест нет, он идет нахуй т.е. сразу получает -1, а не отправляется в мютекс ждать очереди
3)у меня это сделано на 65 строчке, но очевидно неправильно же

Ответы>>721204

19 Апр, 19:38 #456 #721204

>>721168
http://pastebin.com/YYx0APFj

Ответы>>721221

19 Апр, 19:40 #457 #721207

>>683573 (OP)
В чем разница между cascaded if statement и nested if statement ?

Ответы>>721214>>721301

19 Апр, 19:55 #458 #721214

>>721207
В том что ты, уёбище, не можешь прочитать и подумать головой.
Каскадные = последовательные, вложенные = ну ты понел.

Ответы>>721224>>721225

19 Апр, 20:03 #459 #721221

>>721204
Нет, лучше так:
http://pastebin.com/3gEtLg2V

Ответы>>721315

19 Апр, 20:06 #460 #721224

>>721214
тоесть каскадные это варианты a, b, с а вложенные делят а на отдельные варианты итд ?

19 Апр, 20:07 #461 #721225

>>721214
Кто дурак , тот сам знает.

19 Апр, 21:20 #462 #721301

>>721207
Ни в чем. В Си нет никакого cascased if, потому что нет elseif/elif/elsif и т. д. "Выражение" else if - это просто традиционный способ форматирования вложенного if внутри ветки else, чтобы избежать вложенных уровней табуляции. Два варианта по ссылке одинаковы (особенно, если по-другому расставить скобочки), но первый вариант более читаемый, поэтому им и пользуются: http://ideone.com/gTHQUo

Ответы>>721317>>722207

19 Апр, 21:24 #463 #721315

>>721221
нет, так вроде бы не лучше.
Ведь тред должно было выгнать сразу как стало понятно, что нет ПИД. А так он будет жить в мютексе и только потом поймет что его наебали.
В моем варианте хочть шанс был, что его сразу нахуй пошлют.

Ответы>>721318>>721358

19 Апр, 21:25 #464 #721317

>>721301
Спасибо

19 Апр, 21:26 #465 #721318

>>721315
а хотя нет, пердон.
работает

19 Апр, 22:11 #466 #721358

>>721315
Там все равно нет гарантии, что ресурс реально есть до захвата мьютекса.

Но если ты думаешь, что с проверкой S перед захватом мьютекса будет быстрее, тогда, добавь if (S<=0) { return -1; } перед захватом мьютекса, как это было в твоем варианте.

20 Апр, 23:07 #467 #722175

С горем пополам высрал перевод десятичного числа в двоичное посредством поразрядных операций:

Ответы>>722176>>722217>>722338

20 Апр, 23:08 #468 #722176

>>722175
Ой.
for (int i = S; i >= 0; i--)
{
bitArray = int((a >> i) & 1);
}
А как обратно? Не соображаю уже.

Ответы>>722217>>722338

20 Апр, 23:56 #469 #722207

>>721301
комбинирование if, switch, условного оператора ?: даешь мощь
боятся использовать goto
но зачастую эти трюки программеры не знают
и почему то не умеют по быстрому лабать высокоуровневые конструкции типа таблиц переходов или машины состояний

Ответы>>722356

21 Апр, 00:06 #470 #722217

>>722176
>>722175
Разве одними побитовыми операциями можно число обратно в 10ую систему собрать?

Ответы>>722356

21 Апр, 02:13 #471 #722338

>>722175
> перевод десятичного числа в двоичное
>>722176

По-твоему, в памяти `a' хранится в десятичном виде, а не в двоичном?

Ответы>>722356

21 Апр, 04:09 #472 #722356

>>722338
Я так понял, ему надо массив типа ((int[]) { 1, 0, 0, 1 }) обратно в один int собрать. Собственно, там OR аккумулятора с очередным элементом массива, сдвинутым на i бит влево, только и всего.

>>722217
Можно и в десятичную. Реализовываешь сложение и с песней начинаешь складывать степени двойки. Ну или можно нечестным способом, табличками, как советует этот >>722207. А вообще, если хочется ебли битов, лучше какой-нибудь HDL учить, там от этого хоть польза есть.

Ответы>>722618

21 Апр, 14:58 #473 #722618

>>722356
>Собственно, там OR аккумулятора с очередным элементом массива, сдвинутым на i бит влево, только и всего.
n += (n | (array << i));
Ебин.

Ответы>>722623>>722740

21 Апр, 14:59 #474 #722623

>>722618
Разметка съела индекс i у array.

21 Апр, 16:54 #475 #722740

>>722618
Чому нi
n |= array[j] << j
?

Ответы>>723066

21 Апр, 19:24 #476 #722928

как происходят вычисления в си?
т.е. я объявляю переменную беззнаковый лонг АА
пишу AA = ((BB5.06)/1024)3.05
как будет вычислять программа? после каждой операции выкидывать все, что после запятой или сначала все высчитает с десятыми долями, и потом уже в финале отбросит нецелое?

Ответы>>722960

21 Апр, 19:46 #477 #722960

>>722928
В конце. При вычислении выражения все аргументы приводятся к одному самому широкому типу (из присутствующих в выражении) и вычисляется. Потом то что получилось приводится к типу результата. При чем, если я не ошибаюсь, не уверен, "широта" типа определяется максимальным выразимым числом - тоесть беззнаковый тип считается более "широким" чем знаковый того же размера.

Ответы>>723066

21 Апр, 22:10 #478 #723066

>>722960
Желательно самому взять стандарт (драфт в шапке) и почитать про integer promotions (6.3.1.8).

>>722740
> Чому нi
У тебя правильно, у него нет. У него можно выкинуть | и оставить только +=, тогда тоже ок будет.

Алсо, у нас скоро бамплимит. Кто-нибудь хочет что-нибудь в шапку добавить?

Ответы>>723227

22 Апр, 03:09 #479 #723213

Аноны, у меня горит. Прошу помощи, ибо сам полный нуб в оси, а времени нет.
Так уж вышло, что надо перенести лабу на Линукс. Нахуя - не знаю, но надо.
Ок. Запускаем в виртуалке Бубунту. Копипастим рабочий код, любовно высранный и отлаженный. На Винде gcc, на Линуксе тоже. Ок. make all.

И что? А вот хуй тебе, сука!
1.main.c:8:1: error: expected identifier or ‘(’ before ‘/’ token
//keychecker
Это же комментарий, хули ему не нравится вообще? И так перед каждым.
2.main.c: In function ‘main’:
main.c:105:56: error: ‘a’ undeclared (first use in this function)
printf("\nSide A: %d side B: %d Side C: %d\n", a, b, c);
Прям первым делом объявляем эти переменные в программе же, сразу после хэдеров: static int a=0, b=0, c=0, p, tr=0;
3. main.c:115:9: warning: implicit declaration of function ‘getch’ [-Wimplicit-function-declaration]
in=getch();
^
Шито? Где мой getch?,,
4. main.c:117:13: error: ‘tr’ undeclared (first use in this function)
if (tr==0 && (in=='2' || in=='3' || in=='4' || in=='5'))
^
Пилять, в самом начале объявили как глобальную, ВТФ?
5. main.c:122:17: warning: implicit declaration of function ‘get’ [-Wimplicit-function-declaration]
case '1': get(); break;
Самописная функция, в том же файле. Я нихуя не понимаю.
6. main.c:132:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
???

На Винде всё отлично работает, а тут даже не компилится.

Посоны, втф? Как же св. Кросплатформенность и прочее?

Ответы>>723223>>723247>>723270>>723347

22 Апр, 03:49 #480 #723223

>>723213
В прыщах нет getch(), это очевидно шиндовая фича. За разъяснениями в гугл.

Ответы>>723347

22 Апр, 04:01 #481 #723227

>>723066
>Jon Erickson "Hacking: The Art of Exploitation, 2nd Edition" (2008)
Это можно выпилить, так как это не совсем Си. Да и вредоносная для ума рядового читателя, так как не дает теоретической базы, а скорее является чем-то вроде How-To.

Ответы>>723262

22 Апр, 06:01 #482 #723247

>>723213
> Как же св. Кросплатформенность и прочее?
Ну ты её успешно просрал всякими мокренькими getch() и прочими conio.h

22 Апр, 06:44 #483 #723262

>>723227
Ну ты с этим аккуратнее, а то сейчас прибежит коллбэк-даун которому тут посоветовали начинать с этой книги, и сорвёт покровы с очередной нихуя не логичной абстракции (коллбэка).

Ответы>>723558

22 Апр, 07:39 #484 #723270

>>723213
ох лол.

22 Апр, 10:41 #485 #723347

>>723223
getchar()-то на месте.
>>723213
У тебя всё косоёбит conio.h, и, возможно, различия в символах перевода строки если один и тот же файл компилишь.

Ответы>>723356>>723357

22 Апр, 10:58 #486 #723356

>>723347
>различия в символах перевода строки если один и тот же файл компилишь.
да ну, пример можешь?

Ответы>>723462

22 Апр, 11:01 #487 #723357

>>723347
А как же хуйня с объявлением переменных/функций? Ебаные прыщи, нихуя не работает из коробки.

Ответы>>723359>>723458>>723464>>723542

22 Апр, 11:03 #488 #723359

>>723357
> //
ты там не в с90 компилируешь, коробочка?

Ответы>>723510

22 Апр, 12:53 #489 #723458

>>723357
Почитай стандарт, придурок. Твоего getch'а там нет. VS не следует нормально С стандарту. А под твою сперму, никто подстраиваться не будет. Зато getch есть в Ncurses.

Ответы>>723479

22 Апр, 12:56 #490 #723462

>>723356
В шинде это \r\n
В нормальных системах это \n
Либо форматни руками, либо открой в нормальном редакторе/иде.

Ответы>>723464>>723479>>723489>>723505

22 Апр, 12:58 #491 #723464

>>723357
>А как же хуйня с объявлением переменных/функций? Ебаные винда, все работает через жопу. Заебала MS свои несовместимые стандарты клепать.
>>723462
>2016
>\r\n
А я думал любой уважающий себя редактор автоматом подстраиваться под это.

Ответы>>723479

22 Апр, 13:31 #492 #723479

>>723458
>>723462
>>723464
Бугурт прыщеблядей ИТТ.

Ответы>>723558

22 Апр, 13:40 #493 #723489

>>723462
>В даунских системах это \n
Фикс

22 Апр, 13:56 #494 #723505

>>723462
или \t ? у меня куча старых файлов в в разных вариантах - всё норм. да и с чего бы нет, на с можно в 1 строку всё написать.

Ответы>>723508

22 Апр, 13:58 #495 #723508

>>723505
Но зачем, если есть ОКНА?

Ответы>>723512

22 Апр, 13:58 #496 #723510

>>723359
Ага, в нём, да. Так надо. Но хули ему не нравится?

Ответы>>723515>>723516

22 Апр, 14:00 #497 #723512

>>723508
я уже запутался кто тут кто, ещё раз, покажите мне пример, чтоб компилятор ругался на присутствие обоих стилей перевода строки в одном файле.

22 Апр, 14:02 #498 #723515

>>723510
поздравляю, там нет комментариев в виде //

1965 Кб, 278x236

22 Апр, 14:02 #499 #723516

>>723510
Проиграл с долбоёба.

Ответы>>723519

22 Апр, 14:04 #500 #723519

>>723516
Нахуй иди. Мне не нужен ни древний стандарт, ни прыщи, мне надо закрыть лабу.

Ответы>>723521>>723524

22 Апр, 14:06 #501 #723521

>>723519
> мне надо закрыть лабу
Это значит, что ты должен страдать

22 Апр, 14:08 #502 #723524

>>723519
Прыщебляди даже в универах пытаются портить жизнь белым людям?

Ответы>>723558

22 Апр, 14:28 #503 #723542

>>723357
> Ебаные прыщи, нихуя не работает из коробки.
Только твои говноподелия не работают.

Ответы>>723553

22 Апр, 14:43 #504 #723553

>>723542
>ко-ко-ко спермоось!1111

Ответы>>723557

22 Апр, 14:51 #505 #723557

>>723553
Чего ты порвался?

22 Апр, 14:52 #506 #723558

>>723479
Да. Бугурт. Почему в нормальных системах все заводится с полпинка, а в Windows все через жопу сделано и не совместимо ни с чем?
>>723524
>Нахуй иди. Мне не нужен ни древний стандарт, ни прыщи, мне надо закрыть лабу.
>Мне не нуженстандарт,
Скорее спермоблядь-неосилятор портит жизнь белым людям.

>>723262
И что? Лучше вместо этой книжки почитать интеловский мануал по процессорам, мануал по башу, мануал по перлу, K&R и Прата и что-нибудь по системщине (Роберт Лав допустим) и по ИБ. Куда полезнее будет.

Ответы>>723561

22 Апр, 14:54 #507 #723561

>>723558
>Почему в нормальных системах все заводится с полпинка, а в Windows все через жопу сделано и не совместимо ни с чем?
Да совместимо там со всем. У меня собирается и в винде, и в линуксе.

Но лабодауну подавай какое-то непонятное getch().

Ответы>>723564

22 Апр, 15:00 #508 #723564

>>723561
>Да совместимо там со всем. У меня собирается и в винде, и в линуксе.
Более-менее нормальную поддержку С11 там вроде только недавно завезли. VS годится только для крестов и шарпа с бейсиком, но не для няшной. Плюс у них собственное WinAPI. Впрочем, WinAPI дело такое. Принципы то схожи, только другими словами. Также проблема \r\n.
>Но лабодауну подавай какое-то непонятное getch().
В универах до сих пор используют древние стандарты. Я в универе вместо крестов учил Си с классами и на VS 6.0.

Ответы>>723574>>723822

22 Апр, 15:20 #509 #723574

>>723564
А что тебе от C11 нужно?

Ответы>>723622

22 Апр, 16:08 #510 #723622

>>723574
вот бы новый printf, с нормальными типами, а не макросные костыли... хотя в нормальном коде его наверно и не должно быть, printf а.

Ответы>>723628

22 Апр, 16:09 #511 #723623

но обидно

22 Апр, 16:18 #512 #723628

>>723622
Толсто.

22 Апр, 19:15 #513 #723822

>>723564
> getch
Но ведь getch() - это такой местный мемчик из K&R, с чего бы ему быть в либах?

ПЕРЕКАТЫВАЕМСЯ 22 Апр, 19:33 #514 #723846

>>723844 (OP)
>>723844 (OP)
>>723844 (OP)

Тред утонул или удален.
Это копия, сохраненная 12 мая 2016 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion