Этого треда уже нет.
Это копия, сохраненная 18 ноября 2019 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
C Programming Language.png78 Кб, 792x1023
C Programming Language #48 /clang/ # OP 1480534 В конец треда | Веб
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

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

Что читать:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- №45: http://arhivach.ng/thread/448906/
- №46: http://arhivach.ng/thread/461169/
- №47: http://arhivach.ng/thread/475391/ >>1446278 (OP)
2 1480639
1
3 1480761
.png2,8 Мб, 300x420
4 1480806
Лучшая книга для изучения Си.
5 1480809
Почему в Си не завезут операторы для ROL и ROR? SHL и SHR есть (<<, >>). Что мешает сделать ><<, >><? Си ведь призван избавить от необходимости ASM в большинстве низкоуровневых задач, а значит в новых стандартах должно отражаться развитие архитектур.
6 1480810
>>480806

>пик в шапке - единственная годнота


>возражает


земля пухом
7 1480866
Окончание _t как в uint32_t и прочих, зарезервировано? Или я могу делать так?
typedef struct array {
...
} array_t;
8 1480917
>>480866
Можешь, не зарезервировано.
image.png48 Кб, 1284x248
9 1480935
почему циклон ругается? gcc перед ним устанавливал.
10 1481095
>>480809
Достаточно редко используется, отлично распознается компиляторами. Смотри: https://godbolt.org/z/SnIAwS Для тех, кому хочется гарантий, есть интринсики.

>>480866
Стандартом Си не зарезервировано, но зато зарезервировано стандартом POSIX.

>>480935
CMake оставляет за собой кучу говналогов, посмотри в них конкретное сообщение об ошибке.
11 1481313
Modern C, by Jens Gustedt, шо скажете про книгу?
12 1481328
>>480810

>малолетний петуш с юнитфактори рассказывает свое мнение

13 1481349
>>480806
Как раз дочитал эту Перри Г., Миллер Д. «Программирование на C для начинающих».
Попробую теперь её.
14 1481485
>>1480091

>Охуенно ты придумал. Вот у тебя скомпилированы .o, использующие одну библиотеку. Функции же библиотеки не находятся в отдельном .o, а продублированы в каждом из твоих .o. И откуда линкеру-то, блядь, знать, что они идентичны, и какие копии можно выбросить?


Но такая библотека у меня работатет и компилятор даже не ругается.
А тела inline-функций можно разместить только в .h файле.
15 1481525
Блин, какой спортивный интерес так минимизировать код?
https://nanochess.org/toledo_nanochess.c

Языки придуманы для того чтобы человек смог их прочитать, а не для мастурбирования на количество букав. Считайте по количеству операций что-ли, а не такую фигню мутите. Если уж хотите минимализм, то ебоште сразу машинными кодами.
16 1481588
>>481095
путь к папке с проектом содержал русские символы
;;
17 1481695
18 1481702
>>481525

>какой спортивный интерес так минимизировать код?


Любой код надо минимизировать и делать, как можно проще и понятнее. Есть же такой принцип KISS(Keep it simple, stupid). Это только индусские макаки наоборот писали тонны нечитаемого говнокода, потому что им платили за количество строк.
Что касается твоего примера - там просто нет табуляции и его нельзя прочитать.
19 1481704
>>481702

>там просто нет табуляции


>там просто нет табуляции


И да, code golf это непросто, это уже совсем не KISS
15242986031540.png136 Кб, 1920x1080
20 1481714
>>480534 (OP)
Написал библиотеку полностью в .h, файле.
Потом решил сделать правильно: все тела функций вынес в .с файл, а в .h файле оставить прототипы функций, глобальные переменные, массивы, структуры(я скачивал некоторые библиотеки с гитхаба, и там все так делают).
Всё сделал как надо, на .h файл поставил guardы, к .с файлу подключил .h файл, но ничего не вышло. Компилятор выдавал десятки ошибок multiple definition в объект-файлах.
Долго не мог понять, в чём причина, и только сегодня, после долгого гугления нашёл ответ в яндексе на первом ответе: глобальным переменным нельзя присваивать значения в .h файле, их там можно только объявлять.
А у меня там всем переменным были присвоены нули.
ПОЧЕМУ ОБ ЭТОМ НЕ СКАЗАЛИ НИ В КЕРНИГАН РИЧИ НИ ДАЖЕ В СПРАВОЧНИКЕ ШИЛДТА!!??
Это же очень важная проблема, я МЕСЯЦ ломал голову, почему не могу разнести свою библиотеку в пух и прах на два файла.
21 1481724
>>481714
Потому что это очевидно вытекает из базовых знаний. Если ты инициализируешь static, то это уже не bss, а data, то есть в каждом .o хардкодятся значения под этими символами, и линкер не вдупляет, где правда. Выхода два. Либо в .h без инициализации (bss заполняется нулями, когда разворачивается в памяти процесса, так что норм), либо в одном из .c инициализируешь, а в других объявлешь extern. Ответ гугла - рациональное, а не эмпирическое. То есть в принципе можно, но лишено смысла, ведь если один .c, то нет смысла в .h.
22 1481726
>>481714
Короче, чем забивать голову частными случаями магии инклудов и золотых правил, с ней связанных, лучше понять, что инклуд - тупо вставка текста. Представил, что вместо отдельного .h его содержимое продублировано в шапке каждого .c, и сразу все ясно.
23 1481727
>>481714

>ПОЧЕМУ ОБ ЭТОМ НЕ СКАЗАЛИ НИ В КЕРНИГАН РИЧИ НИ ДАЖЕ В СПРАВОЧНИКЕ ШИЛДТА!!??


синтетическая инфа, необходимость которой возникает от непоследовательного изложения основного материала
20190926001050.jpg500 Кб, 720x1480
24 1481828
>>481714
Ежедневная рубрика читаем k&r жопой.
25 1481880
>>481525

>#define


>#define


>#define


>мам, я сократил код!


Ну и кого этот петух наебал? Самого себя?
sage 26 1481933
>>481880
Тред заполнен ньюфагами на сто один процент. Но ньюфаги на то и ньюфаги, чтобы показывать им http://ioccc.org/ и зоонаблюдать.
27 1482117
>>481933
Зря ты так. Кто не прочел про IOCCC в комментарии и рассматривает код, как промышленный, тот уже безнадежный долбоеб без всяких объяснений, а сейчас еще налетят долбоебы претерминальной стадии и будут рассказывать тебе, какая бессмысленная хуета все эти контесты, а какие вы вообще все несерьезные в сравнении с мамкиными Стивенами Сигалами, 24/7 думающими о сиюминутной пользе занятия.
28 1482200
>>482117
Так ведь это и правда бесполезная хуйня, в 16 лет баловался пару раз таким, пользы ноль, одно веселье.
29 1482223
>>482200
Называется олимпиадство.
Проблема в том, что ум это далеко не всегда что-то хорошее, т.к. он позволяет человеку чувствовать превосходство над другими. В результате многих интересует в основном эта сторона, реализуемая решением задачек. Такому человеку нужен челлендж, безотносительно пользы. Зависимость скорее даже наоборот, чем полезнее софт, тем более там банальной работы, суть рутины, не дающей никакого челленджа, ну как таскать кирпичи для строительства дома, но это совершенно необходимо. А умные не хотят, это чсв не греет, им скучно, унизительно, нужно выебываться крутыми решениями неординарных задач. Однако такое поведение это не порождает полезного, даже часто как таковых программ не производит, потому что есть огромная разница, скажем, изобрести двигатель внутреннего сгорания или сконструировать реальный качественный, удобный людям автомобиль.
30 1482242
>>482223

>изобрести двигатель внутреннего сгорания или сконструировать реальный качественный, удобный людям автомобиль


Надеюсь не к изобретению ДВС ты относишь олимпиадную матанопетушню?
31 1482275
>>482242

>матанопетушню


Да пошел ты нахуй. Эти, как ты считаешь, бесполезные выебоны - жизненная необходимость для умного человека. Даже если несовершенное потреблядское общество перепроизводства килотонн хуеты тысячу раз обесценивает эти скиллы. Талантливому человеку отнюдь не легко довольствоваться примитивщиной, не впадая при этом в депрессию. Эгоист ты, макака.
32 1482306
>>482242
Просто к изобретению. Изобретение это придумывание чего не было, вот и решение задач это получение решения, которого (у тебя) не было. Но решение задач это не программирование, ведь программ не дает. Получается через жопу: когда задача решена, нужно начинать делать программу, а пациент наоборот теряет интерес и уходит в другие задачи, где процесс повторяется. И даже если программа есть, такие не фиксят элементарные баги и неудобства, однако доставляющие пользователям много боли, которые могли бы быть исправлены за пять минут одной строчкой - как раз потому что слишком просто, вот и висит говно буквально годами, ёжики колются, а разрабу поебать, он сидит над умными проблемами.

Как-то раз видел вообще прикол, картина маслом: разработчик очень известной тулзы внедрил новую крутую фичу и релизнул "смотрите как теперь можно, воу!", но никакой документации как пользоваться не дал, а вопросы игнорировал. Так никто ни разу этим не воспользовался, тупо все проигнорировали. Нафига спрашивается делал? А потому что интеллектуальная маструбация, по определению служит лишь самоудовлетворению.

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

>>482275
Непонятно к чему ты упоминаешь производство, а значит работу. На работе работники подневольны, делаю что велено. При чём тут эгоизм или "довольствоваться чем-то"? Эти вещи как раз зависят от тебя, чего на работе нет.
33 1482316
>>482306

>Непонятно к чему ты упоминаешь производство, а значит работу. На работе работники подневольны, делаю что велено. При чём тут эгоизм или "довольствоваться чем-то"? Эти вещи как раз зависят от тебя, чего на работе нет.


Я к тому, что реальная жизнь (работа) уныла по определению. А оратор выше назвал занятие уничжительным термином лишь за то, что оно невостребовано в этой реальной жизни. Эгоизм же в том, что люди заурядные способны оставаться психически здоровыми, довольствуясь потреблядскими ништяками за непосредственную работу, а люди талантливые лишены такого похуистичного спокойствия ума, и нельзя их за это считать шизиками и создавать насмешливую репутацию вокруг олимпиадной движухи вцелом. "Мне не надо, значит вообще не надо" - натуральный эгоизм. Олимпиадная движуха - смертельно необходимая вещь хотя бы потому, что удовлетворяет потребности интеллектуальной элиты, которая двигает прогресс в самом качественном плане.
34 1482317
Алсо, есть подозрение, что эти непризнанные гении, которые впутывают коммерческую деятельность в свои нетривиальные выебоны в ущерб скучным нюансам качества для конечного юзера, это как раз недоделанные олимпиадники, которые не могут в реальный топ какого-нибудь codeforces. Реальное олимпиадное программирование, как раз таки, отнюдь не тешит их ЧСВ. Норм же посоны олимпиадят по хардкору, а в жизни не выебываются.
35 1482383
>>482316

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


Нет, олимпиады это как раз говно. Если хочется чего-то возвышенного, лучше изучать алгебраическую геометрию, теорию категорий и схемы. Но олимпиадники часто те еще потребляди, и красоту математики пытаются обесценить и свести к надоям чугуна. Олимпиадники это та же продакшен чернь, только сбоку.
36 1482388
В алгебраической геометрии как раз ценится идеальность мысли, красота доказательства. Многие доказательства в ней были переформулированы и передоказаны как раз ради красоты и совершенства и оказались настолько восхитительными, что сам Аллах записывает их в свою небесную книгу. Но олимпиадным червям все это невдомек. Они месят говно и думают, что занимаются чем-то возвышенным.
sage 37 1482396
>>481726

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


Но в .h файлах ставятся guardы и прочитаться содержимое, заключенное в эти guardы может только один раз.
Поэтому я долгое время и не мог понять, почему это multiple definition, guardы ведь стоят и по идее множественного присваивания быть не должно.
sage 38 1482405
>>481724

>Если ты инициализируешь static


Я там инициализировал просто переменные, без дополнительных эпитетов, вот так:
unsigned char Char = 0;
39 1482411
>>481933

>Тред заполнен ньюфагами на сто один процент.


Так это хорошо же.
Значит, язык живой, и много людей желают в него вкатиться.
40 1482419
>>482396
gcc -c yoba1.c yoba2.c
то же самое, что
gcc -c yoba1.c
gcc -c yoba2.c

При чем тут
#ifndef YOBA_H
#define YOBA_H
...
#endif

???
Это надо, чтоб в отдельно взятом компилируемом модуле ничего не повторялось. Те же определения структур и т.д., словом, все, что определяет поведение компилятора. Переопределения же инициализированных данных и функций во всем проекте при попытке сборки воедино результатов компиляции - это уже линкер в ахуе. Грубо говоря, работа компилятора - заготовить маш.код процедур, со всеми обращениями к полям структур по соответствующим оффсетам и прочей хуетой, а работа линкера - превратить все символы в адреса.
41 1482421
>>482405
Это и есть static. Просто в теле функции надо явно указывать, а глобальные один хуй другими не бывают.
42 1482423
>>482396
Короче, гарды работают независимо для каждого файла, юзающего этот хедер. А как иначе? И зачем? Это если ты инклудишь хедер1 и хедер2, а хедер2 сам инклудит хедер1, то получаются повторы. Как анон выше писал, нехуй жёппой читать. Препроцессор осиль.
43 1482445
Является ли хорошим тоном проставлять такие инклуды для макросов и прочих символов, которые уже были произведены посредством других инклудов? Например, делаю я #include <libxml/xmlversion.h>, и вместе с ним помимо библиотечных функций получаю определение для NULL (он видимо был подключен этим самым xmlversion.h). Нужно ли (является ли хорошим тоном) всё равно самостоятельно заинклудить <stddef.h>?
44 1482548
>>482223

> Однако такое поведение это не порождает полезного


Такое поведение дало тебе qemu и tcc, например. Оба проекта начинались как работы для ioccc.

>>482445
Да, по-хорошему не стоит зависеть от чужих инклудов, потому что (в теории) они могут что-то у себя поменять, и твой код сломается. С другой стороны, например, в сишной стандартной либе есть гарантии, что stdio.h обязательно принесет тебе size_t и NULL, поэтому пока тебе не понадобится какой-нибудь offsetof, ты можешь обойтись без stddef.
45 1482549
>>482316

>что оно невостребовано в этой реальной жизни


Сейчас ты называешь изобретения созданные математиками, благодаря которым произошел прогресс технологий или вся твоя маняматика пук.
46 1482552
>>482549
Теория Галуа, криптография
Теория вероятности и теоретическая физика - квантовые компуктеры
47 1482555
>>482552

> Теория Галуа


На полях галуа только аес. Как-то не очень тянет на прорыв.
48 1482573
>>482549
двач
49 1482574
>>482552

>Теория вероятности


Всего лишь маня-теория, оторванная от реальности

>теоретическая физика


О да, это еще те говноеды, посредством какой среды распространяются радиоволны в вакууме/космосе?

>криптография


Нинужна
50 1482596
>>482574
Слишком толсто.
51 1482597
>>482596
Маняматик, плез
52 1482602
Никак не вкурю, записывается ли в файл '\0'? Попробовал записать 10 eos - файл, разумеется, увеличился на 10 байт, т.е. вроде записывается. да-да, сам себе ответил, дебил
Но нужно ли учитывать эти невидимые байты при чтении с файла?
53 1482608
>>482602

>невидимые


В чем, в МС Ворде? Открой в бинарном редакторе, клован
54 1482614
>>482602
Нужно, конечно. Когда файл прочитается до конца, возвращается EOF, а не '\0'.
Но не делай так в текстовых файлах.
55 1482711
>>482602
Для текста есть специальные функции записи/чтения, где не нужно беспокоиться о нулях и прочих управляющих символах. Если же залез в бинарные данные, там пишется и читается всё буквально, каждый байт как нужно тебе и разбираться тебе.
56 1482786
>>482421

>а глобальные один хуй другими не бывают.


А как же extern и register.
57 1482793
>>482423
Да, всё так. Попробовал сейчас перекрестно подключить 2 хедера(в хедере 1 инклюдил хедер 2, а в хедере 2 - хедер 1) - выдало кучу ошибок redeclaration. Вот же я жопочтец.
58 1482966
>>482786
Я про то, что они не бывают в стеке.
extern - это вообще не определение
register - лишено смысла, это лишь пожелание, которое никто выполнять не будет в таком случае, т.к. каждая процедура компилится независимо и имеет право юзать проц, как хочет. Главное потом на место все вернуть в регистрах, предусмотренных конвенцией.
59 1482992
>>482786
Это просто подсказки для компилятора, с тем как ему обращаться с этими переменными. Один хуй в один и тот же маш. код все компилится.
60 1483944
Я из мира языков с исключениями, поэтому на всякий случай спрошу:

Действительно ли нужно проверять успешность каждой функции? Просто если внимательно обрабатывать каждую непонятную ситуацию, весь код обрастает ифами практически после каждой строки. Пример кода без обработки ошибок: создаем "персону", делаем над ней что-то и уничтожаем ее:

person_t person = person_new();
person_do_something(person);
person_free(person);

Выглядит красиво, но нет обработки ошибок. Обработаем:

person_t
person = person_new();
if (person == NULL) goto exit; // <--- могла закончиться память
int rc = person_do_something(person);
if (rc != 0) goto exit; // <--- высокоуровневая логика могла завершиться с ошибкой

exit:
if (person != NULL) person_free(person);

Последний goto exit конечно можно убрать, но я чтоб продемонстрировать, что иф суется практически через строку, а без goto exit вложенные ифы образуют клин. И так по всему коду, практически в каждой функции у меня есть метка exit, аварийно завершающая её. Принято ли вообще обрабатывать ошибки слишком тщательно и обширно использовать goto, компенсируя отсутствие исключений и прочих синтаксических плюшек типа try-with-resources?
61 1483956
>>483944
Я аллоки никогда не проверяю на НУЛЬ))0)
У меня 16 гигабайт РАМ, ведьмак тянет - почти на ультрах, а тут это говно память может не дать. Если не даст - снесу нахуй и всё.
62 1484049
>>483956

>У меня 16 гигабайт РАМ, ведьмак тянет - почти на ультрах, а тут это говно еще оптимизировать?


Разработка типичного хеллоуворлда или пиксельного восьмибитного платформера в 2019.
63 1484113
>>483944

> Принято ли вообще обрабатывать ошибки слишком тщательно и обширно использовать goto


Принято обрабатывать ошибки тщательно. Часто можно обойтись без goto, используя более мелкие фукнции и/или множественный return.

>>483956

> Я аллоки никогда не проверяю на НУЛЬ))0)


А потом тебе придет размер чего-нибудь по сети, ты попробуешь столько выделить, а дальше будет так: http://ideone.com/QepQ2j
64 1484224
>>484113

>по сети



А ты не зафантазировался?
65 1484231
>>484113
Не понял. Это типа хацкер запросил заведомо нереальный размер, чтоб malloc() вернула NULL, а в качестве индекса - абсолютный адрес взламываемой жёппы, чтоб, не проверив успех маллока, жертва своими же руками оффсетнулась по нулю куда надо хакеру?
3bc7bc030fad10c9b37619a25a9b05ff.jpg70 Кб, 640x570
66 1484257
>>480534 (OP)
Привет, двач. Есть у кого на примете годный курс лекций по алгоритмам? Знаю, что библией алгоритмизации считается книга Кормэна(потом по нисходящей идут Дасгупта и Бхагарва, тоже знаю) и мне нравится её полнота, однако, формальный язык очень и очень отталкивает, не способствуя пониманию. Да и вообще, формат лекций мне как-то ближе, нежели просто чтение книги. В общем, какие требования? Полнота(речь не об N-полноте, лол) Кормэна в сочетании с интересным, не сухоформально рассказывающим преподом. А, да, и чтобы на русском(знаю, что охуел). Подскажите чего по сабжу?
67 1484294
>>484257
Погугли лекции Хирьянова Т. Ф., По информатике и математике у него одни из самых охуенный лекций что я посещал. Правда хз сколько записей есть.
68 1484347
>>484113
Вот как уязвимости в реальном софте искать или это тупо с опытом приходит?
69 1484376
>>484347
"Уязвимости" это мем. По факту ты говоришь, не понимая смысла своих слов, просто мемекаешь.
70 1484379
>>484376
пошел нахуй филолог ебаный
71 1484470
Что за древнее ссаньё мамонта в шапке? Вся эта залупа собриается через раз с ошибками. Когда ты только вникаешь во всю хуйню это пиздецки мешает, хуй знает как правильно, нихуя не понятно. Свежие бы книжульку в рот ебать.
72 1484487
>>484470
Кто проплатил налет армии хуесосов против КиР? Это единственный пик для шапки треда. Кто возразит - матерей всех ебал.
73 1484492
>>484487
Не ебу ваши местные мемы. Какого хуя на форумах советуют древнее говно, я заёбся уже. Не спорю, хуй сосать на ровном месте может быть полезно, но блядь я же ещё учусь.
74 1484528
Т.е. free(*) нихуяшеньки не чистит (не обнуляет байты) память, а просто возвращает её ОС? Следовательно, к этим данным можно и дальше обращаться?
75 1484560
>>484528
UB UB гроб кладбище.
76 1484873
>>484492
Чтоб ты скончался от разрыва селезенки, псина.
77 1484875
>>484224
Это реальный баг, если что. Но, конечно, совсем не такой простой, как в примере.

>>484231
Да. Тут очень упрощенно, на самом деле это может быть несколько разных запросов, integer overflow в офсете и все такое прочее. Но не проверять malloc() надеясь на сегфолт - глупо.

>>484528

> Т.е. free(*) нихуяшеньки не чистит (не обнуляет байты) память, а просто возвращает её ОС?


Даже в ОС не сразу/не всегда возвращает.
78 1484876
>>484528

>возвращает её ОС


Если бы malloc/free каждый раз дергали sbrk, ты бы охуел от "производительности". Вероятнее всего, после free() ты все еще сможешь прочитать что-то по тем же указателям.
79 1485013
https://www.patreon.com/Zer0Mem0ry
есть у кого-нибудь?Слейте пожалуйста
80 1485067
>>484528

>free(*) нихуяшеньки не чистит (не обнуляет байты) память


Где в слове "free" ты видишь значение "очистить"? Или в документации этой функции покажи пункт.
изображение.png49 Кб, 1009x760
81 1485587
Аноны, откудова исключения взялись в моей сишечке?
82 1485665
>>485587
Это процессорные исключения, не крестовые. Но в сишечке исключений нет вообще никаких, зато в ней есть UB, позволяющие программе после возникновения UB вести себя так, как ей вздумается. Вот этой вздумалось вызвать исключение, потому что ты пишешь по неинициализированному указателю p (или lineptr, там не совсем понятно без кода).
83 1485666
>>485587

>ucrtbased.dll


?
sage 84 1485668
>>485666
universal crt base (debug)
85 1485670
>>485665

>процессорные


Исключения ядра ОС. Процу не все ли равно, какие байты дрочить?
86 1485674
>>485668
Это риторический вопр.знак был. Я сначала подумал, что это и вправду крестовые исключения, и имел ввиду, что нет прямой иерархии между низкоуровневыми и высокоуровневыми языками, то есть никто не запрещает использовать библиотеку, собранную с крестовым конпелятором, на Сишечке.
87 1485685
>>485670

> Исключения ядра ОС


Ядро ОС их переименовало, источник - все равно процессор.

> Процу не все ли равно, какие байты дрочить?


Нет. Он не знает, как писать в незамапленные страницы виртуального адресного пространства и плюется #PF (page fault), а винда видит, что мапить туда ей нечего, и говорит access violation.
88 1485694
>>485685
мои пардоны, чет подзабыл
89 1485728
>>485665
Да, с ошибкой разобрался. Прост меньше всего ожидал увидеть exception thrown

>>485674
То есть фактически это dll'ка бросила исключение?
90 1485745
>>485728
Ну я же тебе написал, у тебя p == NULL. Ты делаешь strcpy(NULL, line), дллка никакой магии не делает, там внутри будет что-нибудь типа while(∗p++ = ∗line++); только оптимальнее, оно пишет по NULL, проц/ядро генерируют исключение, студия его перехватывает и показывает.
91 1485784
>>485685
Ошибка доступа это исключение ядра ОС, а не прерывание процессора.
92 1485790
>>485665
У сишечки все еще есть доступ к использованию системных обработчиков ошибок.
93 1485828
Итого, сишечка как таковая в чистом виде не нужна. Зачем нужен язык без исключений, если ядро использует исклюсения? Наверное только на малинках и прочих микроволновках без ядра и исключений.
94 1485829
>>485828

>малинках


ардуинах. Попутал.
95 1485832
>>485828
>>485829
На малинках линукс, на ардуинах плюсы. Ты наверное имел ввиду embedded в целом.

>Зачем нужен язык без исключений


А зачем нужны исключения? С это кроссплатформенный ассемблер. То, что его использовали как источник вдохновения для большинства популярных императивных и ООП языков, является большим недоразумением. Отсюда представления, что Си -- какой-то хуевый язык, в нем нет исключений, ООП, метапрограммирования, лямбд, функторов и монад, что за хуйня. В то время как проблемы не у Си, проблемы у всех остальных императивных языков, начиная с C++, и проблемы очень большие.
96 1485835
>>485784
А ОС как об этом узнает? Из астрала?

>>485828

> Зачем нужен язык без исключений


А есть с исключениями? Может быть, кресты могут отловить виндовые исключения? Это решается системными средствами: сигналами в *nix, или всякими SetVectoredExceptionHandler в винде, и это не зависит от языка.
97 1485843
>>485835
А да, ты прав, я с access denied перепутал, сцуко опять. ОС также сама может генерировать исключения.
Access violation page fault - железячное прерывание, а Access denied - софтверное.
У C++ тот же SEH внутри насколько я помню.
98 1485851
>>485832
Окей, вот только не надо максимализма. Я же не зря написал "в чистом виде".
ООП не нужен, но классы нужны, без них плохо.
Лямбды это лишь встроенный код, как код может быть не нужен?
Функторы это указатели на функции, они и так есть и нужны естественно.

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

>>485835
Не в этом дело. Если даже процессоры и ядра на низком уровне используют исключения, значит исключения это хорошо, это действительно удобно, а в языке для приложений и подавно. Не иметь их неудобно, это инвалидность, поэтому чистая сишка это убогий ненужный язык. В С++ я могу писать как на Си, но кидать исключения, это очень удобно, а еще использовать классы, например для СОМ или GUI библиотекэ, то очень удобно.
99 1485853
>>485843

> У C++ тот же SEH внутри насколько я помню.


Да, но оно не умеет ловить другие виндовые исключения, оно работает только со своим собственным (0xe0чтототам), поверх которого реализует все свои raise.
sage 100 1485855
>>485853

> raise


throw конечно же.
101 1485856
>>485851
Я поддвачну этого оратора.

Пишем на работе драйвер на С++, никакой стандартной библиотеки само собой, но, тупо уже шаблоны и RAII\Деструкторы настолько упрощают разработку, что я тоже искренне не понимаю, зачем вообще писать на С в 2019
102 1485859
>>485853
Ага, нинужны короче сишечке эти крестовые пердоли, которые в ядре не работают, между прочим. SEH с головой хватает.
103 1485863
>>485856
Удвою коллегу, очень удобно прогать драйвера на плюсах, а то лапша из goto try except finally глаз мылит, да и сишный код дебажить в голове не комильфо.
104 1485869
>>485856
Кому-то нравится жрать говно (С++), а кому-то важна аскетичная эстетика кода (C)
105 1485872
>>485869
Обсер в сторону крестов в си треде - признак ньюфага-студентишки. Просто съеби.
106 1485877
К слову о крестах. Устроиться на работку, где чистые Си, весьма непросто, если ты не усатый мужик в тельняшке квадратных очках, который одним хуем пишет драйвер для Linux, а вторым - кастомную прошивку инжектора нексии, и все это под синькой. Стало быть, С++ - единственный адекватный вариант вката в коммерцию для не макак. Но дело в том, что нет достаточно крупных идей, чего такого наваять, чтоб прибегание к плюсам было оправдано. В итоге, я всегда склоняюсь к богоподобной сишечке, где ничего лишнего и все по красоте. С чего же начать заселение своего гитхаба, чтоб зашло работодателю Junior C++?
107 1485898
>>485872
Твой порванный пукан лишь подтверждает мои слова
108 1485915
>>485877

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


Тебе выше написали, что RAII и деструкторы настолько упрощают жизнь, что нет смысла писать на си в 2019.
Можно не использовать стандартную либу (особенно iostream какой-нибудь), классы с VMT или исключения (тут сложнее, но век пиковских контроллеров ушел), но у С++ всегда было что предложить для аскетичного сишника. Всего два класса - vector и string, уже упрощают код в разы.

>С чего же начать заселение своего гитхаба, чтоб зашло работодателю Junior C++?


Самая главная прелесть С++ в том, что даже 1 пуллреквест в крупный проект - это 100% прием на работу джуном.
Не нужно годами пилить какие-то имиджтудулисты, не нужно даже думать о пет-проекте, если ты способен
1. Открыть проект на гитхабе и изучить его
2. Найти там баг
3. Пофиксить его и правильно оформить
Тебе уже есть работа на крестах. Потому что крестоджунов, умеющих это, очень мало, кресты учат в универах на уровне laba.cpp.
109 1485985
>>485832
>>485851
Почему вы такие умные? У вас прогерская вышка?
110 1486039
>>485915
А если патчить Linux пулл реквестами это может с поиском будущей работой на C/C++? Хоть там и чистый С, но все же
111 1486045
>>486039
За принятый патч в ведре тебя сразу мидлом возьмут. Но этого не случится конечно
112 1486046
>>486045
тру стори, бро
113 1486202
>>485915

> Всего два класса - vector и string, уже упрощают код в разы


Под них все равно придется аллокаторы переписывать.
114 1486205
>>485915
Толстота, нет? Сейчас куча фазеров и прочей лабуды на автомате находит баги, остаются только уж совсем сложные UB, которые невозможно воспроизвести или заметить одним лишь чтением исходников.
115 1486238
>>485915
Зачем нужен вектор, когда есть VLA
116 1486249
>>486238
потому-что стэк оверфлоу
117 1486254
>>485869

> аскетичная эстетика кода


> Каша из маллоков, goto, указатели на указатели на указатели

118 1486294
>>486205
Тогда бы issues на гитхабе были пусты, а они полны. Берешь один такой баг, воспроизводишь, фиксишь. В опенсорсе дохуя багов, которые живут не потому что они сложны, а потому что некому фиксить.
Если совсем лениво, можешь спросить у мейнтейнера какую фичу запилить. Но это сложнее
119 1486306
>>486294
Так их фазерами/анализаторами и ищут, 2019 год на дворе, никто не будет тонны кода разбирать руками.
120 1486314
>>486202
Школьник с НеСкУчНоЙ импелентацией хэшмапы не реаллоках, ты?
121 1486319
>>486306
А еще в 2019 году программистов нет, все фаззеры сами пишут
122 1486323
>>486319
Два чую, а двач это киберпространство с одним аноном, который застрял на корабле посреди космоса.
123 1486389
>>486238
Я дожил до века мультигигабайтных плашек ОЗУ не затем, чтоб юзать только 24 бита адресного пространства. Ну а так да, крестовекторы не нужны, когда есть охуительные макросы.
124 1486396
>>486389

>макросы вместо векторов


Вот тут не понял
125 1486404
>>486396
Ну, обернуть операции с массивами в макросы, чтоб все реаллочилось и т.д. и т.п.
126 1486407
>>486404
в дурку
127 1486412
>>486404
оказся правильно понял

>обернуть в


>есть вектор изкаропки


но зачем?
128 1486415
>>486412
А чтоб на чистой Сишечке писать. Кроссплатформность, все дела...
129 1486601
>>485869
Переизобретатель велосипедов в треде, все в Тур де Франс.
130 1486607
>>486314
Нет, я как раз тот, кто его хуесосил. Чини детекторы.
131 1486611
>>486407
А как тебе такое?
https://github.com/attractivechaos/klib/blob/master/khash.h

Я припух если честно, когда в первый раз увидел.
132 1486623
>>486415
Можно задам тупой вопрос. Почему тогда Qt кроссплатформенный, а gtk нет?
133 1486628
>>486623
Я про архитектуру, а не ОС. О какой крестовой STL может идти речь под всякие STM32? А Сишный код с няшными макросами аккуратно перенес, и все ок. Согласен, хуйню несу...
sage 134 1486741
>>486623
Оба кроссплатформенные.

>>486628
На самом деле на крестах очень интересно с memory-mapped портами работать, в том числе и с bit-bands в STM32: красиво, удобно, безопасно. Но цена этого - несколько абсолютно нечитаемых файлов с шаблонами, в которых хуй разберешься, когда/если что-то пойдет не так. Так что мы уж лучше как-нибудь по-старинке, на сишке с дефайнами.
135 1486748
>>486741

>Так что мы уж лучше как-нибудь по-старинке, на сишке с дефайнами.


На крестах дефайны запретили?
136 1486844
Сап, /pr. Уже спрашивал в /ra, там, походу не знает никто.

Пытаюсь использовать simavr для, собственно, симуляции avr контроллеров в linux у меня arch. Симуляция, вроде, работает, но при попытке подключится с помощью gdb, simavr пишет

>remote_gdb_handler opened


>remote_gdb_handler closed


и нихуя не происходит. В Гугле забанили за тупые вопросы таких проблем не нашёл. Знает кто, что и куда пердолить, чтобы заработало?
137 1486860
>>486844
Выключить и включить пробовал?
138 1486864
>>486628
Пиздец какой-то, чем только байтоебы не оправдывают свое нежелание учиться.
Алло, STM32 - это 32-х битные контроллеры, работающие быстрее машин какого-нибудь 1996 года, при чем стоят они по 100 рублей за штуку в розницу и их сейчас можно чуть ли не в магнитики для холодильника пихать. Сейчас спорить можно о том, можно ли использовать на контроллерах минималистичный жаваскрипт, а не о С vs. C++.
Что касается непосредственно "портянка макросов" vs "темплейты", то разницы в оверхеде между ними нет никакой. Но при этом ты теряешь поддержку системы типов, и, что более важно, RAII.
sage 139 1486906
>>486864

> работающие быстрее машин какого-нибудь 1996 года


Тактовую частоту сравнил, лол? Нет, это так не работает. Это мало того что тормозной ARM, так еще и неполноценный от рождения Thumb. И памяти там нет. Ну это если мы про F1 говорим, которые за 100 рублей. Поэтому нет, никаких крестов там близко не нужно, нет для них задач. И выбор стоит такой: простая, понятная и предсказуемая сишечка vs. очередная ебань, которую притащит WG21 уже вот-вот, и которую обязательно нужно начать использовать, потому что теперь так модно.

> минималистичный жаваскрипт


Ясно, ты из этих. А тут-то ты что забыл в таком случае?
140 1486935
>>486844
А зачем?
Микроконтроллеры надо симулировать на реальном железе с осциллографом.
А для простой отладки на компе достаточно AvrStudio и Протеуса.
141 1486942
>>486906

>Поэтому нет, никаких крестов там близко не нужно, нет для них задач


Э
142 1486944
>>486942

>Поэтому нет, никаких крестов там близко не нужно, нет для них задач


Это для тебя, чмоня из /ra/, которая в 2019 году не может разобраться с темплейтами и RAII, нет задач. Нормальные люди берут С++ просто потому, что никакого смысла брать сишку нет. Даже если у тебя в память не влезает STL. Даже если ты мигаешь диодом. Вообще ноль смысла.
e2dd58e05cbf2877ae31fc8e06a15a18.jpg91 Кб, 800x410
143 1486979
>>486944

>Нормальные люди берут С++

144 1487246
>>486860
Not funny, didn't laugh.
Да. И дебаггер, и симулятор, и компьютер.
>>486935
Ты тут системосрач развести хочешь, или просто в глаза ебёшься?
145 1487441
>>480534 (OP)
Какие самые актуальные фреймворки по Си в данный момент?
146 1487445
>>487441
анус_твоей_мамки.h
147 1487448
>>487441
libanal_tvoego_bati.so
148 1487462
>>487441
Не, в C это так не работает. Нельзя выучить какой-то конкретный набор фреймворков, после чего можно было бы рассчитывать на позицию джуна. Тут используют сравнительно небольшие библиотеки, причём выбор конкретных библиотек определяется целями проекта, и везде он свой. GLib, GTK, C POSIX library
149 1487571
>>487246

>убогому напомнили о существовании приличного мира с приличным софтом


>ВРАГИ ХЕЙТЕРЫ НАПАЛИ! РЯЯ!! СПАСИТИ!!


Не могу остановиться проигрывать.

На всё твой личной выбор, петушило. Выбрал пердомир, отринув адекватный, так пердолься, страдай сам, преодолевай сам, это был твой выбор. Но нет же, лицемерной шлюшке хочется два слула сразу, и понтоваться хардкорщиком, но и чтобы было легко как казуалу.
150 1487664
Ну раз такая пьянка - какие подводные писать на "Си с классами"? Мне от крестов нужны разве что строки, вектора и ассоциативные массивы.
151 1487685
>>487571
Охуеть, в Си треде выступают против юникс-лайк. Это постирония такая?

мимо
152 1487705
>>487685
Это сишники в 2019. Совсем деградировали.
153 1487712
>>487705
Это не сишники такие, а двачеры.
154 1487734
>>487664
Подводные есть. Кто там говорил, что С это подмножество С++?

>1) const в глобале = static const (только в C++)


Допустим у нас есть header.h: const int h = 5;
Если мы его включим в несколько .c файлов без защитных директив, то линковщик С выдаст multiply definition, а в С++ все скомплится на ура. А все потому, что в С++ h является локальной в каждом файле, куда подключен header. Если нужно использвать const int через extern, то при определении переменной, надо писать extern const int h= 5

>2) В C++ нет VLA.


int foo (size_t n, size_t m[n]); // Не скомплится в С++
Хотя не все комплиторы работающие с С11 могут в VLA, а вот для C99 поддерживать обязаны.

3) В обоих языках допустим такой код:
int foo(int m[]); // (1)
Что эквивалентно
int foo (int m); // (2)

Давайте пропишем сами указатели как константные (зачем?):
int foo (int
const m); // Код валидный в обоих языках
Если вы привеженец писать без "", то в С возможен вариант:
int foo (int m[const]); // Работает в >C99
int foo

4) Если ты, мамкин оптимизатор, захотел юзануть restrict в объявлении функции, то знай:
int foo(char
restrict m); // Работает только в С
int foo(char __restrict m); // Работает в обоих языках

5) А еще в Си вместо темплейтов есть _Generic:
int print_int(int d) {
printf("%d\n", d);
}
#define print(d) _Generic((d), int: print_int)(d)

main() { print(123); }


6) Ну и конечно же Compound Literals. Онли С совместимый код белоу:
char
foo = (char []) {"x", "y", "z"};
int i = ++(int){1};
154 1487734
>>487664
Подводные есть. Кто там говорил, что С это подмножество С++?

>1) const в глобале = static const (только в C++)


Допустим у нас есть header.h: const int h = 5;
Если мы его включим в несколько .c файлов без защитных директив, то линковщик С выдаст multiply definition, а в С++ все скомплится на ура. А все потому, что в С++ h является локальной в каждом файле, куда подключен header. Если нужно использвать const int через extern, то при определении переменной, надо писать extern const int h= 5

>2) В C++ нет VLA.


int foo (size_t n, size_t m[n]); // Не скомплится в С++
Хотя не все комплиторы работающие с С11 могут в VLA, а вот для C99 поддерживать обязаны.

3) В обоих языках допустим такой код:
int foo(int m[]); // (1)
Что эквивалентно
int foo (int m); // (2)

Давайте пропишем сами указатели как константные (зачем?):
int foo (int
const m); // Код валидный в обоих языках
Если вы привеженец писать без "", то в С возможен вариант:
int foo (int m[const]); // Работает в >C99
int foo

4) Если ты, мамкин оптимизатор, захотел юзануть restrict в объявлении функции, то знай:
int foo(char
restrict m); // Работает только в С
int foo(char __restrict m); // Работает в обоих языках

5) А еще в Си вместо темплейтов есть _Generic:
int print_int(int d) {
printf("%d\n", d);
}
#define print(d) _Generic((d), int: print_int)(d)

main() { print(123); }


6) Ну и конечно же Compound Literals. Онли С совместимый код белоу:
char
foo = (char []) {"x", "y", "z"};
int i = ++(int){1};
155 1487736
>>487734
блять, сори за формат
156 1487743
>>487685
Тут просто сидят тупые школьники/студентишки на первой стадии Даннинга/Крюгера, отсюда и нападки на красноглазиков и крестовиков. Просто игнорируй их, и все будет хорошо. Ещё лучше будет каждый раз когда видишь их посты просто отвечать им пидорас съеби или типа того
157 1487747
>>487734
Какие-то сложные вещи, которые такому днищекодеру как я уж точно не встретятся.
158 1487771
>>487743
Просто съеби.
159 1487831
>>487747
Да он почему-то решил, что ты C99 код будешь миксовать с С++. Нахуя так делать, вместо того, чтобы взять С++ и писать на си с классами - не понятно.
160 1487849
>>487734
Нихуя, про _Generic первый раз слышу, круто анон.
161 1487904
Перепечатал книжную программу перевода из двойной системы в десятичной. Почему после компиляции консольного приложения в MinGW 64 (пишу в Qt Creator) операции выполняются в 32-битной арифметике?
162 1487906
>>487904
Потому что у тебя там 32-битный int? Используй long, например, или перепиши на stdint.
163 1487909
>>487906
Благодарствую, пойду
164 1487927
>>487906

>Используй long


Он тоже 32 битный вообще то. Нужен long long.
165 1487930
>>487927
int64_t
166 1487935
>>487927
Нафига long тоже самое что и int?

Почему не сделали так:
char - 1 байт
short - 2 байта
int - 4 байта
long - 8 байт
long long - не нужон.
167 1487942
>>487935
С фига, что инт зависит от архитектуры, а формальные определения типов - от соглашений языка. Когда я учился в школе, он еще был 16 битным.
168 1488095
>>487935
long - размер регистра, long long - 64 бита, и если регистр меньше, то усложняется маш.код, а int - просто int, лол
169 1488144
1
170 1488189
>>487927

> Он тоже 32 битный вообще то.


Это зависит от ОС: у тебя либо модель LP64 (линукс) либо LLP64 (винда).

>>487935

> Почему не сделали так


Легаси. Изначально инт должен был быть самым быстрым целочисленным типом из поддерживаемых, а long - самым длинным (и это раньше так и работало: в 16-битных машинах short/int 16-битные из-за 16-битных регистров, а long 32-битный, в 32-битных int/long оба 32-битные), но потом из-за неосиляторов, написавших в 32-битном мире кучу говнокода, схему доломали, оставив int 32-битным на 64-битных машинах. Теперь #include <stdint.h> и используй (u)int_fastX_t, если тебе нужен какой-то минимальный размер для вычислений, (u)int_leastX_t для хранения в памяти и фиксированные (u)intX_t для записи в файлы или обмена по сети.
171 1488252
Откуда вы вообще int long и прочее говно взяли? На маш. уровне все в word'ах измеряется. Если что-то не нравится пиздуйте в C# тред.
172 1488265
>>488252
Двачую.
173 1488282
>>488252
Итт нет никаких вордов. У нас абстрактная машина, у которой даже процессора нет по стандарту. Страдай.
174 1488304
>>488252

>word'ах измеряется


Ворд это джва байта, а байт это не всегда 8 бит, ох, лол
175 1488348
Можно ли на Си добиться такой же безопасности, как у Ада?
ariane-v501-4juin96.jpg23 Кб, 600x395
176 1488353
>>488348

>такой же безопасности, как у Ада

177 1488366
Сисяч, а что делается в общем случае при
malloc () == NULL? Просто exit () или попробовать снова?
178 1488377
>>488366
Зависит от ситуации.
Если ты просто выделял память под маленький объект, а она кончилась, то все, приехали.
Если ты хотел выделить 8гб памяти под какой-нибудь йоба кэш, то можно сказать "ну ок, попробую обойтись четырьмя"
179 1488387
Вкатываюсь в сиху
Анончики посоветуйте хорошие интерактивные курсы
С меня как всегда - нихуя
180 1488429
>>487685

>указал на тупость и лицемение конкретного автора поста


>ЮНИКСВЕЙ ХЕЙТЯТ! РЯЯ!!


Классика маргинальныех ничтожеств - обобщать и прятаться за чужими спинами общих понятий, тем самым уводя разговор от конкретного мерзкого лицемерного чмошника.
И неудивительно, ведь ничтожество поэтому и ничтожество, что нуль, не существует как личность, отсутствие которой заменяется причастностью к чему-то общему.
181 1488433
>>488387
Вкатись сначала в ассемблер и посмотри архитектуру процессора.
Тогда в Си сможешь вкатиться как по маслу.
182 1488438
>>488282
Что, простите? Везде использую DWORD и BYTE, а ваши инты и лонги в душе не понимаю, мутная фигня.
183 1488448
>>488433
Какой из ассемблеров взять? Сижу под linux, люблю кроссплатформенность и поддержку нескольких архитектур.
sage 184 1488449
>>488433
Сам с ассемблера начинал, троллолоша?
185 1488450
>>488448
Nasm бери.
186 1488459
>>488450
Разве gas не более кроссплатформенный?
187 1488462
>>488449
Да, нам в вузе именно в такой последовательности и преподавали.
188 1488464
>>488462
Ебать ты олд
189 1488470
>>488459
А он есть под винду? Всегда думал, что он юникс-онли.
190 1488485
>>488470
В вики написано, что да.
191 1488496
>>488459
Рот ебал этого GAS! Там синтаксис под древний парсер, который давился, если составляющие инструкции даны не в той последовательности, в которой их в маш.код складывать. Кровь из глаз, сука. Зато выглядит так коркорно, тип технарь дохуя, короче заебись тема, отвечаю.
192 1488556
>>488464
Сейчас в вузе также преподают
193 1488575
>>488556
Как повезёт, у нас вообще паскаль и делфи были нахуй, и только потом плюсы.
194 1488622
>>488575
Ну я имел ввиду не в конченых шарагах
195 1488631
>>488448
FASM, епта.
196 1488635
>>488622
Наша шарага, конечно, не пример, но не всем же учиться в MIT.
197 1488641
>>488631
FASM - это такой котлин он мира ассемблеров. Вот.
198 1488664
>>488496

>Там синтаксис


Там заебись синтаксис, это ты еблан прст
199 1488682
>>488366
Вывести сообщение юзеру, мол у тебя нет памяти или просто записать это в лог и выйти из программы.
200 1488687
>>484257
А может все таки Кнута, наконец?
201 1488705
>>488664
[eax+size∗2] или (%eax,%ebx,2) - что понятнее? Алсо, такая хрень чаще встречается на месте source операнды, соответственно, лучше ставить ее в конец, чтоб все лежало под линеечку (в AT&T для этого надо ставить дохера табов). % $ туда же - кровь из глаз. И так видно, где константа, а где регистр. Закорючки только мешают, они древним ассемблерам нужны были, чтоб в один проход все делать без разбору. Суффиксы b/w/l/q слитно с мнемоникоми, когда есть божественные Intel-овские byte, word, dword, qword... Короче, Intel - человекочитаемый.
202 1488707
>>488664
Но осилить AT&T и забыть как страшный сон - must have, соглашусь. Он первичен, а Intel не везде есть. Образованный человек не имеет права не разбираться в нем в случае чего.
203 1488715
>>488705

>что понятнее?


Второе, кровь из гоаз, это интеловская залупа, где они перемащают справа на лево, как пидоры, да и $0x20 более наглядней чем 20h
204 1488717
Правильно понимаю, что в поинтере хранится лишь адрес объекта и оффсет (т.е. size_t), и следовательно это вся инфа о типе? А что происходит, если несколько разных тайпов имеют один и тот же размер?
205 1488744
>>488717
В поинтере хранится только адрес. Типы известны только во время компиляции, в рантайме их нет.
sage 206 1488931
>>488715

> перемащают справа на лево


Да вы заебали. Что понятнее; x = 10 или 10 = x???
207 1488969
>>488707
Образованный человек должен знать об AT&T всего две вещи: -masm=intel и -Mintel для gas/gcc и objdump соответственно.
064.gif170 Кб, 326x281
208 1489008
>>488682

>просто записать это в лог и выйти из программы.


А если ракеты не полетят?
209 1489014
>>489008
В коде ракет нет malloc, мемоголовый
lol.jpg80 Кб, 600x600
210 1489037
>>489008
ХЬЮСТОН, У НАС ПРОБЛЕМЫ. ВАМ СЛУЧАЙНО НИКАКИЕ ЛОГИ НЕ ПРИХОДИЛИ?
211 1489038
>>489014
Есть, не пизди
212 1489039
>>488931
x = 0xA
213 1489041
>>488631
>>488448
>>488450
>>488496
SPARK блядь
mov0, %o0! move 0(return address) into %o0
214 1489084
>>488717

>инфа о типе


Катись обратно в свою скриптопарашу. Здесь этого кала нет.

>А что происходит, если несколько разных тайпов имеют один и тот же размер?


Ничего, такая программа не компилируется, а значит не существует. Получится только текстовый файлик с твоими тупыми писульками, никому не нужный как и ты сам.
215 1489087
>>488715
0x привычнее для сишников, но ты, как истинный демагог, мешаешь все в кучу, $ тут ни к чему. Насчет справа налево господин выше уже ответил. Алсо, операнда назначения ближе к мнемонике органично продолжает случаи, где является несменной частью инструкции, как та же DIV/IDIV, которая всегда оставляет целую часть в RAX, а остаток - в RDX. Ну, и про вертикальную читаемость выше писал.
216 1489088
>>488969
GAS умеет в интеловский синтаксис? Ебать я танкист, оказывается можно без NASM обойтись. И ведь задним числом очевидно же, что раз gdb и gcc поддерживают...
217 1489092
>>488931
>>489087
Неосиляторы, плез
218 1489251
>>488931
У тебя справа некорректный код, ебланище.
219 1489319
>>489251
Что, в юнитфактори перерыв что ли? пиздуй отседова
220 1489810
>>489092
Ты че, совсем еблан? В каком месте, ХОТЬ РАЗ БЛЯДЬ СУКА ПОКАЗАЛ ПАЛЬЦЕМ А ТО МАТЬ ВЫЕБУ, кто-то писал, что не осилил? Это тот случай, когда легко в учении, тяжело в бою. Выучить AT&T можно за вечер, но к постоянной работе в жизни не привыкнешь - всегда будешь больше страдать физически. Этот синтаксис родился не от хорошей жизни, а от ограниченности тогдашних ассемблеров, не умевших в стек, чтоб читать предварительные указания с конца. Человеческое зрение, в отличие от однопроходного транслятора, склонно упускать детали по первом проходе и любит, когда уточнения выведены дальше, когда пространство слева и справа равномерно используется. И, конечно же, глаз только спотыкается об закорючки, в которых нет нужды, ведь для этого существует целая живая нейросеть, которая прекрасно распознает на лету, как выглядит константа, а как имя регистра, блджад. Как только появилась возможность, сразу реализовали такой человекочитаемый синтаксис. Я тоже любитель всей этой первичной романтики, но искать плюсы в том, что хуево по определению, попахивает шизой.
221 1489811
чет лажу спорол про "не умели". Для быстродействия, короче...
222 1489813
>>489810
Ой, хватит ныть
223 1489819
>>489087

>операнда назначения


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

Вообще все интересное по темя языка сгодится, в том числе и в текстовом формате. Любая годнота вроде статей/блогов, форумов Особенно реквестирую видео про написание каких-нибудь интересных проектов типа
написания шелла или системных утилит, псевдоооп в Си, а также туториалов для "продвинутых нубов", где разжевываются всякие интересные штуки, типа Flexible Array Member. (А по Си вообще проводятся конференции, как в других языках типа CppCon?)
Можно скинуть мне напрямую в телегу @littlerichard

Просто нравится Си, заебись язык (по ANSI C угораю). Хочу писать реально крутой идиоматический код, эффективно работать с гдб из под командной строки, научиться тесты писать.

Но, к сожалению, не могу себя заставить читать гигантские талмуды на 300 страниц на английском, концентрации не хватает. Мой идеал - небольшая статья, где теории поровну с практикой. Или книга
/брошюра на 40-50 страниц простым языком.
Сколько раз пытался читать книги, всё равно итоге хуй забивал. Целую библиотеку мощных книг собрал, толку ноль. Поэтому, раз я не могу потреблять контент через книги, то ищу что-то более легкоё для восприятия.
Ничего плохого в этом не вижу и думаю, что я не один такой.

Вообще, хочется дойти до того уровня, чтобы устроится "джуном" куда-нибудь в системную разработку или embedded через ещё полгода дрочки Сишечки, но хз, нужны ли кому-нибудь такие джуны и набирают ли не студентов техвузов на такие места.
225 1489849
>>489825

>Антон поделись


>напрямую в телегу


>сам не делится


иди нахуй
226 1489905
>>489813
Бля, вот сейчас проснулся и понял, что еще пару постов назад толстота была.
227 1489909
>>489819
Да я... Да я... Я "Войну и Мир" читаю, вообще-то, так что не надо! А с операндами не ебу, как там правильно, пушто, как уважающий себя элитарий, технолитературу читаю на инглише! Ну скажите ему, затролльте его, ну пазязя!
228 1489914
>>489849
Так он написал, что можно в телегу, я так понял, если отвечающий сам не захочет мусорить в треде контентом зумеро-ориентированного формата, но в то же время сам шарит в подобном контенте, лол.
>>489825
Анон, сам себе могилу роешь. Тебе все равно рано или поздно придется много читать скучные тексты без экшона. Вот прям неизбежно и дохуя, или ставь крест на карьере Сишника. Чем раньше превозмогёшь эту слабость, тем дешевле потом выйдет.
229 1489941
Есть материалы по написанию нейросетей на Си с нуля?
sage 230 1489995
>>489914

> не захочет мусорить в треде контентом зумеро-ориентированного формата


У нас в треде вообще контента нет. Последние два треда - исключительно срачи.
231 1490103
>>489825

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


Так нахуй из профессии, маня.
232 1490128
>>489941
Нахуя?
233 1490137
>>490128
Для практики и понимания сути. Я ведь не собираюсь тягаться с фреймворками типа tensorflow. Простенькие хотя бы научиться.
234 1490143
>>490137
Для понимания сути нужно освоить matrix calculus и подифференцировать с ручкой и бумажкой. Кодить там нечего.
235 1490169
>>490143

>matrix calculus


ебан это linear algebra
236 1490176
>>490169
Нет. И будь ты проклят до седьмого колена со своим пуканьем не в тему.
237 1490179
>>490176
Да. Матрицы и тд это все линейная алгебра в целом.
238 1490184
>>490179
Просто блядь умри
239 1490188
>>490184
слив засчитан
240 1490190
>>490188
Кринж. Так не общаются.
241 1490191
>>490143
Но в нейронах функции же.
242 1490194
>>490188
Короче matrix calculus это часть multivariable calculus. Дифференцировал несколько переменных? Вот тоже оттуда примерно тема.
243 1490207
>>490191
Нейроны это вообще не используемая в нейронках абстракция. Минимальная абстракция - это слой. В случае полносвязного слоя это f(W*x) например, где W - матрица весов (технически строка такой матрицы это веса одного нейрона, но это довольно бесполезная инфа), а x - вектор входных данных, f - функция активации.
В случае сверточного это f(conv(x, W)). Ну и так далее. Никаких нейронов нет, тебя наебали.
244 1490387
>>489941
Пишешь на си интерпретатор питона или на чём там сейчас нейроночки пишут и хуяришь на питоне свою нейронку, запуская на своём интерпретаторе.
245 1490409
А си когда нибудь будет заменен в embdded?
246 1490412
>>490409
Уже завтра там его полностью вытеснит раст.
247 1490422
>>490412
Ж звтр тм г плнст втстнт рст
image.png364 Кб, 1280x1024
248 1490520
Вапрос какова хуе. почему блять не 0 сука
249 1490533
>>490520
e20 не влазит в флоат, е2 пробуй
250 1490541
>>490533
как на счет дабла?
251 1490542
>>490533
блять вроде же вплоть до 38 степени можно в случае флоата, а тут всего лишь 20
252 1490546
>>480534 (OP)

>годному средству программирования как на системном


Да.

>так и на прикладном уровне


Нет.
253 1490596
>>490542
"Влезает" и "можно точно представить" - это разные вещи. Полный диапазон float ограничивается максимальной/минимальной поддерживаемой экспонентой, но для конкретной экспоненты ты всегда ограничен размером мантиссы, т.е., для каждой конкретной экспоненты у тебя есть "текущий" диапазон, который равномерно разбит на фиксированное количество чисел (223 позиции).

Например, для диапазона 223 и 224 ты можешь сохранить 8388608 числа с шагом 1.0. Между 224 и 225 у тебя чисел вдвое больше, а "мест" для них все равно 8388608, поэтому ты уже не можешь позволить себе хранить нечетные числа, и , между 225 и 226 тебе уже не хватает мест для всех чисел, которые не кратны 4, и т. д, с ростом экспоненты числа становятся все менее точными.

Все это приводит к забавным эффектам типа http://ideone.com/ZeHtT5
254 1490600
>>490520
Когда работаешь с флоатами, пиши 2e20f вместо 2e20, или не удивляйся.

Потому что
a = 2e20 это на самом деле a = (float)2e20;
При конверсии double во float у тебя теряется точность, а именно
2e20=200000000000000000000.0000
2e20f=200000004008175468544.0000

Далее при вычислении a-2e20, ты из 2e20f вычитаешь 2e20, то есть 200000004008175468544.0000 - 200000000000000000000.0000.

Само вычисление считается в double, и только после вычисление результат конвертируется во float.
255 1490711
Пиздец как же меня бесит этот ебучий тред. С удовольствием разъебал бы ебасосы половине пишущих сюда. Фу ебучие студентишки и вкатывальшики, срущие своим ебанутым недомнением. Сдохните
256 1490712
>>490520
float - ненужная бяка. В языке по дефолту double (как >>490600 рассказал), что должно намекать прозрачно какой тип использовать.
257 1490792
>>490520
ты ебнутый в блокнотике писать?хотя бы нотпад++
blob152 Кб, 1280x960
258 1490842
>>490792

>notepad++


Ну посоветовал хуйню. Лучше стало?
259 1490844
>>480534 (OP)
Подскажите плес какую программу использовать на вын 10 для программирования на C. Знаю о VS 6, Builder.

Зачем мне это надо? Хочу попробовать для сравнения написать простейшее приложение в связке с OpenGL.
260 1490854
>>490844
Вопросы отпали, забыл, что всё в шапке есть.
261 1490935
>>482383

>Если хочется чего-то возвышенного, лучше изучать алгебраическую геометрию, теорию категорий и схемы



А еще дискретную математику. Без нее канплюктер саенс невозможен
262 1490939
>>482388

Computer Science - это все же более прикладная вещь, чем чистая математика.
263 1490941
>>482388

>Они месят говно и думают, что занимаются чем-то возвышенным.



Ну относительно промышленных программистов - да. Как и маняматики свысока смотрят на олимпудников по программированию
264 1490996
Ben Klemens "21st Century C: C Tips from the New School" (2012)
Вообще не понял о чем и главное зачем.
Nocomputernoscience.png91 Кб, 528x390
265 1491015
>>490939
Computer Science
266 1491281
зачем предлагать читать k&r если она устарела?
кто нибудь выполнял там задания?(вам не кажется что они не для новичков?)
267 1491348
>>491281
Типа классика,на самом деле советуют просто потому что самая распиареная.Если говорить об обучение с нуля,то это прата какой-нибудь наверное
268 1491795
>>491281

>вам не кажется что они не для новичков?


Нет.
269 1491806
>>491281

>зачем предлагать читать k&r если она устарела?


Есть же третье издание.
270 1491808
>>491806
Нет. У оригинального K&R только два издания. А третье издание на руском - это перепечатка второго издания на русском.
271 1491826
>>491795
>>491806
это не оффиц версия. При этом я нашел там много ошибок > чем во втором издании
272 1491827
>>491795
обоснуй? все задания выполнил?
273 1491839
>>491281

>зачем предлагать читать k&r


Лучше книги нет

>если она устарела


Си тоже устарел

>кто нибудь выполнял там задания?(вам не кажется что они не для новичков?)


Они не для тупых, но ничего того, что бы не знал новичок, там нет
274 1491841
>>491839

> Они не для тупых,


Это точно. Я над блядскими вертикальными гистограммами бился явно дольше нормального человека.
Мимо
275 1491849
>>491839
после k&r вышло много изменений, вышло несколько стандартов, в которых писать некоторые вещи стоит по-другому.
Ок задания не для тупых. Кто их выполнил все? есть тут в треде герой?
276 1491855
>>491839

> Си тоже устарел


Он не может устареть. Или кучу кода вдруг перепишут на rust? Нет, конечно. Ядро Linux как писали на C/C++, так и будут писать. А оно используется везде: от листрибутивов Linux до android смартфонов.
277 1491860
>>491855
Устареть он может, как и кобол, и фортран, и куча других легаси-языков.
А за сочетание C/C++ вообще нужно пиздить обломком трубы.
278 1491883
>>491860

> фортран


В науке используется до сих пор. Да, скорее из-за легаси.

> А за сочетание C/C++ вообще нужно пиздить обломком трубы.


А на чём писать? Неужели всё-таки на Rust?
279 1491884
>>491860
блябуду лучше дрочить кобол/фортран чем гомогейскую хуйню для хеллоуворлдов
280 1491902
Ебаманый рот,как конвертировать символ в число?
281 1491904
282 1491907
>>491904
Он же вроде со строкой?Мне именно один символ из массива надо
283 1491915
>>491902
вычти '0'
284 1491917
>>491907
Нет смысла писать отдельную функцию ради arr[ i] - '0'.
285 1491918
>>491915
А обратно?Число в символ?
286 1491920
>>491918
Прибавить '0', лол.
287 1491929
>>491920
if ( isdigit(n) ) { Не работает,но
подозреваю,что я дебил
n = n -'0';
n = 9- n;
n = n +'0';

}
288 1491937
>>491929
Так все,я даун,забудьте
289 1491939
>>491929
У тебя в n в результате получается:
9 - n + '0' + '0'

А что ты хочешь сделать?
290 1491943
>>491939
Не,не все получилось,я тупанул с n
291 1491973
Как писать безопасный код на Си?
292 1491976
>>491973
тестируеш...
293 1491979
>>491973
NEEQUAQUE
294 1492097
Что почитать про тесты кода си? чтобы также зоебис покрыть свой код как sqlite
295 1492113
>>491902
Символы это и есть числа, тупорылый дегенерат.
296 1492121
Нужно написать свой принтф, переменное число параметров я уже понял откуда и как
Основная суть какая? Парсить первый аргумент-строку, пока не встречу какой-то флаг %f, как только встречу передавать следующий аргумент в отдельную функцию по обработке флагов? Никаких подьебов нет? Кроме даблов, хуй знает как их выводить вообще
297 1492124
>>492121
Нахуя? Студент? Если да то забей, даже близко не сможешь. Если реально надо, то кури <libioP.h> , <libio/stdio.h>, <libio/ioputs.h>, только там все это реализовано в докрестовом ООП стиле, ахуеешь разбираться
298 1492130
>>492121
В k&r есть емнип
299 1492187
>>492121

> как только встречу передавать следующий аргумент в отдельную функцию по обработке флагов?


Сначала парсишь спецификатор, потом достаешь аргумент, потому что va_arg() хочет тип, и обязательно правильный тип.

> Никаких подьебов нет?


Никаких подъебов, никакой магии. Обычная функция, внутри длинный switch. Вот с snprintf чуть посложнее из-за необходимости контроля границ.

> Кроме даблов, хуй знает как их выводить вообще


Обычная математика, делишь, умножаешь.
300 1492245
>>492121

>Кроме даблов, хуй знает как их выводить вообще


Сейчас бы заниматься байтоебством, когда проц в одну инструкцию переводит float в int.
print_int((int )n);
putchar('.');
print_int((int )((n - (int n))∗prec))
prec - кол-во знаков после запятой
301 1492321
>>492245

> Сейчас бы заниматься байтоебством


> когда проц в одну инструкцию переводит float в int


Тогда, наверное, для тебя не составит труда перевести в строку вот это число:
float value = ((union {uint32_t v; float f;}) { 0x00ffffff }).f;

На выходе я хочу увидеть точное значение. 0.000000000000000000000000000000000000023509885615​14728583455765982071533026645717985517980855365926​236850006129930346077117064851336181163787841796875. Именно его и выводит printf("%.149f", value).
sadpepe.png194 Кб, 493x418
302 1492431
Анон, ты просто не представляешь какой я долбоёбище.

Закончив читать прату на ~75%, я решил зарегаться на рекоммендуемом ресурсе Codewars, дабы начать прокачивать скиллы.

Я крайне поверхностно ознакомился с FAQ и мануалом.

Выбрал себе задачку для начинающих. Какой уровень задач для начинающих? Естественно, как я думал, 1kyu. Задачка с матаном, матричками, как я люблю.

И тут начался пиздец.
3 недели решал частный случай, вроде работает алгоритм. Вроде как набросал стратегию решения общего случая. Читал пейперы про способы решения. Начал это все кодить. Через месяц бросил, ибо если я настолько тупой, что не могу решить задачу самого базового уровня - какой смысл в этом вообще?

Прошло полгода, в течении которого я уговаривал себя что программирование не для меня.

И вот, вчера я узнал что 1kyu это практически мастер. А нумерация (обратная) начинается с 8kyu.

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

И все из-за того, что невнимательно прочел мануал.

Мне не место в программировании, ибо я тупой мудак.
303 1492513
>>492431
Норм, через подобное все проходят. А кто говорит, что нет, тот дохуя пиздит.
304 1492569
>>492321
ой, перепрошую, панове, я трішечки обісрався
305 1492573
>>492124

>студент?


Да, но это проект, который сдать надо, да и интересно написать
>>492130
Покурю, спасибо
>>492187
Примерно понял, спасибо
306 1492581
Я тот парень сверху с символами/цифрами,кароч,мне училка затирала ,что увеличение массива на единчку для цикла(17,30 строка),как то хуево меняет массив

Сама суть,изменить каждый символ-цифру на 9- символ-цифра

Вообщем,если не сложно поясните,что не так с прогой

https://pastebin.com/vxRiYYBc
307 1492587
Антоны, почему приведенный код дает такой странный вывод? По идее, функция должна изменить указатель на тот, который указывает на массив в ней созданный, но этого не происходит. Почему?
308 1492593
>>492581
Ты просто пытаешься сделать так:
n = arr;
n++;

Такое тут не прокатит, потому что ты просто скопировал в переменную n, которая ничего с массивом общего не имеет, значение массива и затем изменяешь не сам массив, а эту переменную. Надо сделать так.
arr++;
309 1492621
>>492121
У даблрв мантиссу считай
310 1492623
>>491281
Задачи норм.
311 1492628
>>492587
Ты в укозателях запутался. Тебе нужно сначала дереференснуть, а потом уже ебаться в арифметику. Т.е., ∗(∗a + i). Чтобы такого не происходило, и код нормально читался, не стесняйся создавать дополнительные переменные:
ptr = malloc(...);
...
...
∗a = ptr;
312 1492637
>>492628
Спасибо большое!
313 1492638
>>492593
Если не сложно,ты можешь кусок кода написать,пожалуйста?
314 1492642
>>492638
Легион не твоя армия.
Не в тему, но похуй
315 1492646
>>492581

> увеличение массива на единчку для цикла хуево меняет массив


При N = 3 ты индексируешь массив целыми значениями [0;2]

> for (i=0;i<N+1;i++)


При i = 3 < 4 ты выходишь за пределы массива.

> int N=3


> char Ni[N]


> Введите размер массива


т. е. ты сначала объявляешь массив из N элементов, а потом вводишь его размер?
316 1492651
>>492646
N-1 тогда делать?
317 1492661
Добавьте в шапку в раздел онлайн утилит саит bitwisecmd.com
318 1492663
>>492646
Тип,я не понимаю,как массив по другому прогонять?
319 1492672
>>492651
При в строгом неравенстве (i < N - 1) при (i = N - 1) цикл будет завершаться без инициализации (N - 1)-го элемента. т. е. можно заменить на нестрогое неравенство (i <= N - 1) или же записать (i < N).
320 1492675
>>492672
Изменил,но при размере 4 ,меняет только 3

https://pastebin.com/hVi46dg2
321 1492681
>>492672
>>492675
Без -1 в 16
322 1492682
>>492672
Как понял,может он сам ввод считает за символ?И вводит его в массив?
323 1492869
>>492431
Спасибо что предупредил.
324 1492943
Какое исключение выкидывать сеттеру при инвалидном аргументе?
325 1492944
>>492943

>выкидывать


блять, тред перепутал, простите
326 1493191
>>492944
поздно, петушок, поздно
327 1493197
>>492943

>исключение выкидывать сеттеру


Ahahaha
328 1493226
>>488931
Не 10 = x, а 10 -> x
329 1493407
Чтобы такое заебенить для проверочки знаний?
15527637215230.png1,6 Мб, 3840x2160
330 1493576
331 1493592
332 1493594
зачем учить си в 2019? какие перспективы?
333 1493595
>>493197
A S S E R T
S R
S E
E S
R S
T R E S S A
334 1493688
>>493594
сам откуда будешь?
335 1493758
>>493688
Я работаю поваром. Я, как говорится, поварёнок.
336 1493768
>>493576
basic bootloader сложнее, чем компилятор C?
Tiobeindex.png84 Кб, 906x443
337 1493772
>>493594

>зачем учить си в 2019? какие перспективы?


Может потому, что это самый популярный язык, наравне с Джавой?
338 1493778
>>493772

> JS в жопе


> VB.NET в топе


Такой себе индекс для суждения о популярности.
339 1493786
>>493772
это по количеству легаси кода?попробуй найти работу на пьюр си
340 1493825
>>493768
Нет.
>>493786

>попробуй найти работу на пьюр си


НИИ
И
И
>>493778

>Такой себе индекс для суждения о популярности.


Он, кажется, ориентируется по гуглежу этого языка, поэтому популярный в иностранных ВУЗах VB.NET такой крутой. Так что рейтинг сосет.
Хотя если посмотреть сколько написано в данный момент на си, то он действительно будет в топах, только вопрос в том, что он нового не пишут и работы чистой не найдешь сука.
341 1493826
>>493594
Перспектив нет. Учат си перед крестами в основном.
342 1493827
>>493768

>basic bootloader сложнее, чем компилятор C?


Как по мне здесь сложности неадекватно распределены.
DoubleThumbsUplarge.jpg13 Кб, 296x264
343 1493916
344 1494010
Пацаны,мля,помогите плез

>>492672
>>492682
345 1494087
Никак не могу понять, что за чистый си про который тут все говорят? Это те самые void••• ANUSAPI CALLBACK WIERDSTACKRULE fn(void•,void•,void,void•,void•, FUNC•, void,void) ???
Потому что это первое что мне представляется при слове ЧИСТОЕ СИ. а вы, сдается мне, представляете себе синтаксис уровня laba.cpp и подгораете что с ним нет работы? Серьезно?
346 1494137
>>494087

>чистый си


Без ООП
347 1494139
>>494087

>void••• ANUSAPI CALLBACK WIERDSTACKRULE fn(void•,void•,void,void•,void•, FUNC•, void,void)


Да, это то самое. Это memaset(228, anusStruct->huj->pidor);
sage 348 1494142
>>494010
Да, у тебя %c считывает символ перевода строки. Не нравится - fgets и потом парсишь, или char temp[2]; scanf("%1s", temp), c = temp[0], или даже while((c = getchar()) != EOF) { if (!isspace(c)) { ungetc(c); break; } } и потом scanf(%c). Вообще, scanf сломан из коробки, его не стоит использовать для чего-то сложнее scanf("%d %d %d"...).
Capture.PNG4 Кб, 596x131
349 1494168
https://pastebin.com/axniPbc8
Ничего не понимаю.
Помогите пожалуйста,
350 1494194
>>494168
Создал указатель на константный строковый литерал и пытаешься менять ридонли память.
Capture.PNG48 Кб, 1479x239
351 1494220
>>494194
Хм. Спасибо.
Я не ставил const нигде, но скопировал пример для C++. А именно это в С немного по-другому.
sage 352 1494250
>>494220
Компилятор допускает, потому что легаси. Сначала было просто соглашение, что в "" писать нельзя. Если бы сделали строки константными указателями после того, как в языке появился const, сломался бы весь существующий на тот момент код, который ожидал и передавал обычные char *. Поэтому строки как бы const, но без const.
353 1494268
>>494220
Запись по const указателю ловится во время компиляции, а запись в read-only память - во время выполнения. Первое нужно для себя, чтоб не забыться и не сломать логику. А константность "" заключается в самом способе реализации - использование readonly памяти, как и для исполняемого кода. Как анон выше написал, "" не являются const char ∗ в системе типов, потому что многие старые функции, часто используемые с "" в качестве аргументов, объявлены как func(char ∗, ...); и компилятор просто кидал бы error.
neponyalinteresno.webm354 Кб, webm,
640x360, 0:03
354 1494406
355 1494576
>>494142
Чувак,я не соображаю щас ничего,но очень срочно надо,пожалуйста скинь кусок готового кода
sage 356 1494606
>>494576
Аноны, не скидывайте этому джахилю решение, а то совсем уже офигели. В двач как ГДЗ для них.
357 1494611
>>494576
Дай ссылку VK. Скину в лс, чтоб тут не флудить.
358 1494627
>>494611
Лучше тележку @yab0id4c

или gmail dovakin99999999ANUSgmail4%jPUNCTUMcom

Постить тут вкшку не очень безопасно
why.png112 Кб, 1600x900
359 1494784
>>480534 (OP)
где я проебался?
почему не выводит отдельные слова, а рвёт их?
sage 360 1494807
>>494784
Потому что в UTF-8 один русский символ занимает 2 байта, а у тебя буфер всего 10 символов. Поэтому лучше играй с латиницей, пока язык учишь.
361 1494814
>>494807
w c h a r _ t
c
h
a
r
_
t
why1.png42 Кб, 659x464
363 1494819
>>494807
Спасибо, анон!
И главное, ведь, читал про 2 байта у utf-8, выше в этой же книге и вот теперь до меня дошло!
Мог либо перекомпилить, чтобы длиннее строка была или юзать wchar_t word[10];
364 1494854
>>494791 (Del)
лол, как можно было повестись на такую толстоту
365 1494912
>>494854

> 2049


> Аноны скидывают паспортные данные с супом в тред, чтобы зарегаться на дваче

sage 366 1494926
>>494818
UTF-8 everywhere == overhead everywhere.
367 1494933
>>494791 (Del)
>>494791 (Del)
>>494627
>>494611
Скинь с пастбина ссылучку,меня тут аноны деваноном запугивают(
368 1494941
>>494926
Оверхед по сравнению с чем?
369 1494945
>>494933
Мы не будем тебя диванонить, если ты извинишься перед бордой и Абу лично за свое наглое поведение.
370 1494948
>>494945
О,великий и всемогущий Абу и милостивый народ Двощевской земли,я ,Антон Анонов,прошу простить мою наглость и неблагоразумие
371 1495008
>>494948
от кринжа чуть об K&R голову не разбил
372 1495010
>>494941
По сравнению с кодами, по которым можно прямо индексироваться.
373 1495019
>>495010
Это только UTF32, с которым получается лютый оверхед по памяти.
Плюс, для простых операций вроде поиска подстроки или поиска ASCII символа (вроде разделителя пути \ или /) в UTF8 строке не нужно никакой дополнительной магии, с ней можно обращаться также как и с ASCII строкой.
374 1495020
>>495008
Разбил бы до конца,услугу всем оказал
sage 375 1495022
>>495019

> с ней можно обращаться также как и с ASCII строкой


У меня от тебя имена файлов в линуксе, которые могут быть чем угодно, лишь бы \0 на конце. И ебись как хочешь.
376 1495035
>>495022
Сажедебил, разберись с UTF8, потом пиши.
377 1495116
Поясните плес за эту хунью

>'strcmpi': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strcmpi. See online help for details.

378 1495128
>>495020
не экстраполируй, мань
379 1495152
>>495116
Делай, что компилятор тебе говорит. Он умный.
380 1495166
>>495152
но онлине хэлп еще меньше говорит
381 1495262
>>494250
>>494268
То есть в С++ можно так сделать, а в С без malloc не обойтись?
Я правильно понял?
Я задачку решаю на codewars.
382 1495293
>>495262
Достаточно написать char strin[] = "HELLO WORLD";, тогда константая строка скопируется на стек и будет все работать
http://ideone.com/Lt5D6x
383 1495321
>>495019
У белых людей уже 20 лет UTF16 - идеальный аналог char для современной эпохи.
384 1495326
>>495321

>аналог char


чар 8 байт (иногда 7)
покормил
385 1495327
>>495326
* бит
386 1495334
>>495321
Ниет. Символов в юникоде внезапно больше, чем влазить в 16 бит, так что UTF16 ничем не лучше, чем UTF8, но при этом жрет больше места.

Так что или UTF8, или UTF32.
387 1495335
>>495334

>Ниет. Символов в юникоде внезапно больше


Дия. Внезапно, в реальной жизни более чем достаточно для всеязыковых программ. Нет дикого жора лишней памяти как в UTF32 и тем более нет пизданутого парсинга как в UTF-8, этот шлак вообще неюзабелен кроме экспорта на диск.
Так что сосите писосы, дегенераты, но UTF16 как был идеально оптимальным для программного кода, так и остался.
388 1495337
>>495335
UTF16 это wchar_t, если кто не знает.

>Formally speaking, no. The size of wchar_t is implementation-defined, and in fact most Linux compilers (such as GCC) define it to be 32-bit large, designed to hold text in UTF-32 encoding.


>With MSVC compiler, wchar_t is 16-bit large, with the intention that it be used to represent Unicode strings in UTF-16 encoding.


Линуксы как всегда обосрались, но кому они нужны. Всё равно на серверах дохуя рамы и срать на лишний жор 32 бит, или дохуя ядер и срать на оверхед парсинга UTF-8.
389 1495340
>>495337

>Всё равно на серверах дохуя рамы и срать на лишний жор 32 бит, или дохуя ядер и срать на оверхед парсинга UTF-8.


В голосину
390 1495416
Пацаны,покажите ебаманный динамический массив символов ,а то хуета какая то получается
391 1495816
Аноны, прохожу квесты overthewire и возник вопрос по этому уровню:
https://overthewire.org/wargames/narnia/narnia1.html

Сам уровень я уже прошел методом тыка, но возникло несколько моментов, которые я не понял.
В уровне надо хакнуть программу через buffer overflow. Если переменная будет иметь определенное значение, то программа откроет bash пользователя следующего уровня, пароль которого храниться в открытом виде в файле, овнер у которого нужный пользователь.
Вот код программы:
https://pastebin.com/H75F5NeS
Я прогнал скомпилированный бинарник через objdump с флагом -d и вот что получил для функции main
https://pastebin.com/EG3s7VpZ

А вот мои вопросы:
1. Как я понял по куску 8048562: c7 45 f8 41 41 41 41 movl $0x41414141,-0x8(%ebp) стек растет в сторону уменьшения адресов(вниз?), инструкция movl записывает dword т.е. 32 бита, т.е. 4 байта, тогда почему от адреса начала стека отнимается 8, а не 4?
2. В коде после val объявляется char[20] буффер, как мне казалось значения буфера будут так же распологаться на стеке как и в буффере т.е. первое, потом второе, потом 3 и т.д. т.е. те 4 дополнительных байта, которые может считать scanf лежали бы где то наверху стека, но они перезаписывают val. Или это связанно с тем, что в c имя массива это просто указатель на 0 элемент и можно получать доступ к другим элементам адресной арифметикой, а т.к. тут стек растет в сторону уменьшения адреса значения должны распологаться как бы "наоборот", т.е. после val на стеке будет последнее значение буффера?
3. Чтобы правильно переписать значение val нужно писать байты как бы в обратном порядке т.е. чтобы в переменной получилось 0xdeadbeef нужно чтобы в конце буффера было 0xef, 0xbe, 0xad, 0xde, это как-то связанно с endianness?
392 1495910
>>495816
1. Так и есть, стек растёт вниз. -0x8 потому что 4 байта уже заняты push %ebx
2. Да, буфер заполняется от вершины стека, последнее значение будет после val
3. Связано, в little-endian 0xdeadbeef побайтово записывается как 0xef 0xbe 0xad 0xde, от младших адресов к старшим
393 1495911
>>495816

>начала стека отнимается 8, а не 4?


Передача параметров перед вызовом
call 80483f0 <puts@plt>

>на стеке как и в буффере


Long хранится в обратном порядке, в таком его и нужно записывать в буфер char
394 1495917
>>495911
в puts передаётся только $0x8048690
395 1495923
>>495917

>в puts


У тебя путса в исходниках нет
396 1495929
>>495923
Естественно блять его там нет, он же в libc.
И исходники не мои, если что
397 1495931
Как написать арбуз на чистом си?
398 1495934
>>495923
А если ты про то что в сорсе printf, так это выебоны gcc
399 1495937
>>495934

>так это выебоны gcc


Кокой выебистый, на хуй он заменяет?
400 1495959
>>495937
puts быстрее printf потому что ему не надо ебаться с форматной строкой
ylszuHpV5-I.jpg161 Кб, 1080x809
401 1495979
Дебильный вопрос:
Чтобы писать на питоне мне надо скачать питон с оффсайта, прописать его в PATH, чтобы командная строка подхватывала, и установить редактор кода с посветкой синтаксиса вроде Sublime.
В принципе, можно уже начинать работать.

А в C/C++ можно так сделать?
Или надо обязательно тянуть эту майкрософтовскую IDE хуйню (Visual Studio) из интернета на 20+ гигабайт?

Тут можно тупо скачать пакет основных библиотек, подцепить их к редактору и чтобы он мне компилировал мой код в exe файл?

Или особенность компилируемого языка не позволяет так делать?
402 1495981
>>495979
L I N U X
I
N
U
X

на самом деле, можно конечно
403 1495982
>>495979
Качаешь gcc или clang и прописываешь точно так же в path. Можешь заодно скачать make и cmake, иначе заебешься компилировать проект из >2 файлов.
В линуксе кстати это проще делается, пишешь sudo apt install gcc && apt install make, ничего в path прописывать не надо, сразу идешь байтоебить.
404 1496035
>>495979
двачну господъ на Линуксе,ибо сам им являюсь.
На работе же я FreeBSD юзаю.

>Чтобы писать на питоне мне надо скачать питон с оффсайта, прописать его в PATH, чтобы командная строка подхватывала, и установить редактор кода с посветкой синтаксиса вроде Sublime.



Ты как-то много лишних телодвижений делаешь,так не надо.
Python имеет Idle, что дико удобно. Под виндой я писал в Notepad++ или если хотел "как дома" - поставил gedit и настроил его под питон.
В линуксе Питон есть искаропки, как и gcc, make (FreeBSD clang)

>А в C/C++ можно так сделать?


Можно.Опять же вкусовщина. geany, codeblocks, dev-cpp, на вкус и цвет.

>Или надо обязательно тянуть эту майкрософтовскую IDE хуйню (Visual Studio) из интернета на 20+ гигабайт?


Можно и так, если есть лишних 20+ гигов и пара часов лишнего времени.но зачем? Алсо ставил на 7ку студию, вот это вот всё. И что? я написал хэлловорлд и блять эта винда нихуя не скомпилила!!! Хэлло Ворлд!!! Скачал QT, работает, но я под линуксом его не юзаю. А на винде не кодю.

>Тут можно тупо скачать пакет основных библиотек, подцепить их к редактору и чтобы он мне компилировал мой код в exe файл?


Умные люди сделали для тебя Code:: Blocks, Dev-Cpp. С MinGW на борту.
А так дело твоё: можно набрать код хоть в нотепаде, откомпилить в консоли что на винде что на *никсе и радоваться жизни.

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


особенность компилируемого языка состоит в том, что его надо компилировать. И всё. Прелюдии с кодом компилятор не заботят.
Можно хоть в нотепад++ плагинов наставить, чтобы он компилил все, что ты накодил там. Только нотепаду надо будет указать, где лежит компилятор.
405 1496135
>>495982

>В линуксе кстати это проще делается, пишешь sudo apt install gcc && apt install make, ничего в path прописывать не надо, сразу идешь байтоебить.


Сразу идешь читать доки по ключам компилятора, make и gdb
406 1496137
>>496135
Ну если тебя нужен make, то идешь. Если тебе нужен gdb, тоже идешь. А если тебе нужно отладить, то ты уже заранее установил qtcreator с интерактивной отладкой на кнопочку и там же пишешь код
407 1496649
Ну мля,помогите

> Пацаны,покажите ебаманный динамический массив символов ,а то хуета какая то получается

409 1496694
>>496654
Ебать ты мемер,но спасибо
410 1496701
>>496654
А с пользовательским размером?Заданным юзером?
411 1496725
>>480534 (OP)

>MISRA


Он запрещает использовать адресную арифметику с указателями(инкремент и декремент указателя).
Как тогда без этого обходиться?
Например, при выводе нуль-детерминированной строки куда-нибудь или перемещении N переменных из одного места в другое.
412 1496727
>>496725

> N переменных


N переменных одинакового типа идущих подряд.
уточнение
414 1496738
>>496725

>Например, при выводе нуль-детерминированной строки куда-нибудь или перемещении N переменных из одного места в другое.


Например, циклом for от 0 до максимального размера буфера.
415 1496745
>>496735
Добрый человек,обьясни дебилу что не так

https://pastebin.com/rjN3xPZ2
416 1496746
>>496745
>>496735
Пользовательский размер и сам массив,цифры поменять на обратные,и все,но не могу понять ,почему не дает ввести строку
417 1496755
>>496746

>i = 0


>i < p-1

418 1496757
>>496755
Лол,как лучше расписать?
419 1496759
>>496757
Не слушай долбоёба, настоящая проблема в том, что getchar считывает перевод строки после p.
420 1496762
>>496759
Допустим,он просто считывает EOF или /n и сбрасывает?
421 1496767
>>496762
Да, когда вводишь p, во входном потоке будет, допустим, 10\n. scanf заберёт 10, а \n останется. getchar его считает и break-нет цикл.
422 1496768
>>496767
А как исправить?Проверка чтобы первый С был любой?Или пропустить его как то?
423 1496771
>>496768
https://pastebin.com/2bpeQvqL
Пометил измененные строки комментами
424 1496776
>>496768
Если массив вводишь не по цифре на строку, а слитно, то выкинь второй getchar из цикла
425 1496781
>>496771
Огромное спасибо
>>496776
Уже,ты не уходи у меня еще некоторые вопросы есть тривиальные)
426 1496791
>>496776
Мне нужно чтобы считывало максимум 100 эл-ов,проверка на дурака есть,но у меня сомнения насчет максимума,если while (i< p-1)и p=101,то он проверит до 99 элемента,100 элемент станет /n,да?

Если лимит в 101,то он будет с 0-99 будут элементы с символами,а последний 100- /n?
427 1496806
>>496791
100 элемент запишется только после цикла, в цикле всегда i<100
428 1496810
>>496806
Окей,значит все правильно?

Оверфлоу баффера не будет?Типа элемент какой нить закродется за массив и на "миллион и первый раз" прога не сработает и ебгнется RAM?
429 1496813
>>496810
Не будет, i после цикла максимум p-1, если break раньше не случился
430 1496816
>>496813
Фух,тогда все.Бессконечно благодарю за оказанную помощь,/б/ратик
431 1496832
>>496813
Чувак,извини за беспокойство ,но еще помоги плез:

При p>64 не работает ,не выводит последний элемент(ввел 77776 вывело 2222(то есть без последнего)

https://pastebin.com/2P6Z7Dw9
432 1496837
>>496832
ой, иди ты нахуй
мимо
433 1496839
>>496837
Иди своей дорогой,прогер
434 1496846
>>496832

>if (isalpha(p))


Проверяешь, что число в p - не ASCII-код буквы (как раз начинаются с 65)
435 1496848
Лишняя проверка, в общем
436 1496849
>>496848
А если символ введут?
437 1496851
>>496848
ЧТобы исправить не вывод последнего числа я p++ после ввода и проверок
438 1496852
>>496849
%d в scanf читает только числа
439 1496854
>>496852
А,лол,тогда все опять решено,p++ вроде не ломает,я проверил если p==102(101 элемент ,с 101 /n) выкидывает,осталось сделать принудительный ввод подходящего числа,но это я сама вполне сделать могу(если есть свободная минутка можешь помочь ;3 )
Screenshot 2019-10-15 at 00.59.17.png481 Кб, 3356x2056
440 1496909
>>480534 (OP)
Аноны, clion накрылся пиздой. Подскажите, что мне делать?

/Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - Unix Makefiles" /Users/admin/CLionProjects/Pr1
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- broken
CMake Error at /Applications/CLion.app/Contents/bin/cmake/mac/share/cmake-3.14/Modules/CMakeTestCCompiler.cmake:60 (message):
The C compiler

"/usr/bin/cc"

is not able to compile a simple test program.

It fails with the following output:

Change Dir: /Users/admin/CLionProjects/Pr1/cmake-build-debug/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/make cmTC_f59a5/fast
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:2 (project)

-- Configuring incomplete, errors occurred!
See also "/Users/admin/CLionProjects/Pr1/cmake-build-debug/CMakeFiles/CMakeOutput.log".
See also "/Users/admin/CLionProjects/Pr1/cmake-build-debug/CMakeFiles/CMakeError.log".

[Finished]
Screenshot 2019-10-15 at 00.59.17.png481 Кб, 3356x2056
440 1496909
>>480534 (OP)
Аноны, clion накрылся пиздой. Подскажите, что мне делать?

/Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - Unix Makefiles" /Users/admin/CLionProjects/Pr1
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- broken
CMake Error at /Applications/CLion.app/Contents/bin/cmake/mac/share/cmake-3.14/Modules/CMakeTestCCompiler.cmake:60 (message):
The C compiler

"/usr/bin/cc"

is not able to compile a simple test program.

It fails with the following output:

Change Dir: /Users/admin/CLionProjects/Pr1/cmake-build-debug/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/make cmTC_f59a5/fast
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:2 (project)

-- Configuring incomplete, errors occurred!
See also "/Users/admin/CLionProjects/Pr1/cmake-build-debug/CMakeFiles/CMakeOutput.log".
See also "/Users/admin/CLionProjects/Pr1/cmake-build-debug/CMakeFiles/CMakeError.log".

[Finished]
441 1496916
>>496909
xcode-select --install
442 1496927
>>494250
>>495293
Извините что беспокою.
Но.
Где прописано что char* это const?? Разве это не декларация массива char[] просто через указатель?? Каков механизм? Я просмотрел спецификацию, но то ли я хуеглазый, то ли это какое-то соглашение. Опять же, каков механизм?
Мне это важно, потому что я не догоняю какую-то фундаментальную мелочь и мне это мешает.
443 1496929
>>496927
char c1[] = "nosorog"; - это массив на стэке, не константный
const char* c2 = "zhiraf"; - это read-only память в секции экзешника
444 1496931
>>496927

>Разве это не декларация массива char[] просто через указатель


Добавьте в шапку http://faqs.org.ru/progr/c_cpp/cfaqrus.htm

А ты прочитай пункт 2 в этом факе
445 1496934
>>496929

>char c1[] = "nosorog"; - это массив на стэке, не константный


>const char c2 = "zhiraf"; - это read-only память в секции экзешника



Это я понял. Но каким образом
char
c1 = "lol"

Становится
const char* c1 = "lol"
446 1496951
>>496931

>Например, системный вызов UNIX "execl"



Может перестанем насиловать труп?
447 1496952
>>496931
Огромного добра тебе!!
448 1496965
>>496931

>Смотри: K&R I Разд.5.3 c.93-6; K&R II Разд.5.3 c. 99; H&S


>Разд.5.4.1 c. 93; ANSI Разд.3.2.2.1, Разд.3.3.2.1,


>Разд.3.3.6 .


Что за H&S? Ничего не нашел.
450 1496990
>>496931

>прочитай пункт 2 в этом факе


Что за шизофазия там написана?
- Имя массива не существует, он считает его макросом?

>он генерирует код, позволяющий переместиться к месту под именем "a", перемещается на три символа вперед и затем читает требуемый символ


Ничего не понял. Кто, куда и как перемещается? Веллосипедист из точки А в точку Б? Розовые слоники в страну чудес? На какие символы происходит "перемещение"? Генерится машинный код, в компьютере нет никаких символов!

f(a)
char a[];

Господи, что это за код?
f(a) char a[];
У меня крыша поехала, что это значит?
451 1497103
>>496927

> то ли это какое-то соглашение


Вот. char *x = "test" - это НЕ константный указатель, по которому нельзя писать, потому что ты присвоил ему строковый литерал. Под "нельзя" подразумевается UB, компилятор может тебе ничего не сказать, в рантайме запись может оказаться успешной (например, если под DOS соберешь), но на какой-нибудь другой платформе твой код упадет. Поэтому просто не пиши, и все будет хорошо.
452 1497109
>>496990

> в компьютере нет никаких символов


В контексте Си символы и байты равнозначны.

> Кто, куда и как перемещается?


Виртуальная позиция в памяти. Да, сформулировано плохо, но понять можно. Имеется в виду, что для char[] сразу считается офсет символа (возможно даже одной инструкцией), а для char∗ у тебя будет лишняя инструкция на чтение самого указателя. С другой стороны char x[] = "abc", если x автоматическая переменная (внутри функции) - это очень медленно (память копируется из литерала при входе в функцию), поэтому если модификация не нужна, а посимвольное/побайтовое чтение нужно, стоит писать static const char x[] = "abc".

> У меня крыша поехала, что это значит?


Это значит, что ты слишком молодой по сравнению с сишкой. Раньше (до С89) типы аргументов указывались не так:
int foo(int a, float b, char ∗c) { ... }
а вот так:
int foo(a, b, c)
int a;
float b;
char ∗c;
{ ... }
lzuaso.jpg40 Кб, 600x600
453 1497687
>>497103
Прошу прощения аноны, я долбоеб, и как видно навсегда. После 2-х суток курения спецификации и FAQ-ов и всевозможного гугления, я досконально разобрался в вопросе.
Сегодня увидел что именно этот блядь вопрос досконально объясняет Прата, буквально через пару страниц.
С онлайн задачками покончено, пока не пройду всю книгу и не решу задачи оттуда.
Спасибо большое всем.
>>496927-кун
454 1497689
>>496931
Ты хоть понимаешь какую просто дикую, сочную годноту принес?
Мое понимание масштабов пиздеца прокачалось до небес.
image.png6 Кб, 708x112
455 1497831
ку двач, есть код цикла с созданием процесса, поясните тупому, что происходит, что первее создается, новый процесс или новый шаг цикла?
456 1497834
>>497831
по-моему форк-бомба происходит
457 1497838
>>497834
Я разобрался, нет это не форк-бомба, ведь он не выходит из цикла и не увеличивает i перед созданием ноаого процесса
458 1498152
>>497834
2^3 процессов в итоге
image.png426 Кб, 1080x1074
459 1498340
>>480534 (OP)
Как это реализовать? Пропустил одну пару и уже нихуя не ясно. Как с помощью main прочитать файл, тем более указывая его имя а не путь к нему
460 1498355
>>498340
Найти сайт с решениями простых задачек и сопоставлять решения, используя всю мощь своего IQ. Компилировать эти решения, менять рандомные вещи и смотреть что происходит. И так пока не придет понимание.
461 1498360
>>498355
Мне надо не решение как считать среднее арифметическое или кол-во чисел больших предыдущего, а то как сделать чтобы программа прочитала данные из файла. Есть file.txt и из него надо достать числа и сделать массив размера n где n это количество чисел в файле
462 1498363
>>498360
Запрос в гугле: c++ примеры чтения из файла
463 1498366
>>498360
memory mapped file + charconv
464 1498403
>>498366
Это сильный заход для человека, который и fopen загуглить не смог.
465 1498407
>>498403

>fopen


fpopen
466 1498800
Привет, аноны. Какой инструментарий посоветуете, чтоб писать под DOS? Захотелось накатать какую-нибудь простенькую игрушку, но графические библиотеки или сложные, или какое-то игрушечное говно, по сему остановился на этой единственной годной игровой платформе. Там, вроде как, все просто, пишешь себе в фрейм 320x200x8, в хуй не дуешь... Скачал, значит borland turbo c 2.01 - годная IDE говорят, но после vim не могу себя заставить в этом. Решил взять vim71x16, а от borland только компилятор юзать, но не тут то было. Пробую "tcc hello.c", а оно даже stdio.h не находит. Хуй знает, как под этим DOSBox кодить вообще.
467 1498846
>>498800

> после vim


Ясно.

> Какой инструментарий посоветуете, чтоб писать под DOS?


Turbo C, Watcom C, Digital Mars C, Microsoft C четвертая Visual C++ в дос точно могла, пятая - не знаю - тысячи их.
468 1498904
>>498800
Открой в линуксе терминал на весь экран и представь, что это DOS. Ты даже vim сможешь пользоваться.
469 1498930
>>498904
Понимаю, что рофл, но текстовая консолечка тут ни при чем. Просто раз уж не разрабатывать ничего масштабного, то хоть учиться грамотно использовать ресурсы и обходиться без готовых велосипедов.
470 1498936
>>498930
Так че тебе нужно? Рисовать чайники без опенжл? Так для этого дос не нужен.
471 1498998
>>498936
Даже создание 2d игрушки должно быть чем-то интересным, когда есть ограничения по памяти и мощности. Не получится совсем уж гавнокодом все делать.
472 1499020
>>498800
Почитай game engine black book про doom и wolfenstein, там подробно описано как в те временя игори писали ты так не сможешь

Еще есть computer graphics black book by Michael Abrash, классика своего времени, доступна бесплатно.
473 1499115
>>497109

>В контексте Си символы и байты равнозначны.


Не думаю. Строки бывают мультибайтовые или юникодные. Байту эквивалентен только тип char, но это конкретный тип с именно таким названием, а никакой не абстрактный "символ".

>Виртуальная позиция в памяти.


Что это? Процессор работает либо с числами напрямую, либо с указателями. Что за маня-"позиция" такая? Не понимаю. Я знаю позицию-указатель на выполняемую инструкцию в специальном регистре процессора. Вот это можно назвать абстрактный словом "позиция", не вдаваясь в детали, ведь оно само работает на уровне процессора и программиста не касается, но с массивами не такой случай.
А что я понимаю, так это то, что массив не является "переменной-указателем языка Си", но это вовсе не значит отсутствие указателя, строки без указателей не работают. Там нарисована схема бинарного представления массива и указателя на литерал, и в массиве отсутствует указатель. Как тогда это работает? Магия?

>Это значит, что ты слишком молодой по сравнению с сишкой.


Спасибо, но такого написания даже во времена DOS не было. Слишком молодой, лол.
474 1499124
Ку, не понимаю че происходит с открытым файлом если мы форкаем процесс. Новый процесс получает копию открытого файла или файл закрывается для одного процесса, и открывается для нового?
475 1499125
>>498998
Поставь ограничения по памяти в виртуальной машине и вперед.
476 1499139
>>498998
Тогда лучше под NES что-то делать. Какие у DOS ограничения, практически никаких.
477 1499145
>>499124

>получает копию открытого файла


Копию дескриптора
478 1499322
>>499139
ух бля, а ведь это идея...
479 1499338
>>499322
Ну если сишка-хуишка, я бы смотрел в сторону первой соньки. NES это все-таки больше про 6502 ассемблер
480 1499411
>>499338
Упитанно. Язык Си как таковой - бесполезная хуйня. Там везде главное - железо, нужно разбираться в апи конкретной системы. А учитывая что в треде даже винапи никто осилить не может (все пукают в консольку), какие там несы/плейстэйшены, окстись.
const.PNG17 Кб, 967x270
481 1499436
Анон помоги пожалуйста.
Собственно вопрос: почему??? ни на этапе компиляции ни на выполнении нет ошибки?
Везде const же!
482 1499438
>>499436
const char* const
483 1499439
>>499438
>>499436
Блядь, действительно проебался, уже разобрался, прошу прощения.
oldstylefunc-msdos.png30 Кб, 458x749
484 1499462
>>499115

> и в массиве отсутствует указатель


Зачем ему там быть?

> Виртуальная позиция в памяти. Что это?


Чтобы прочитать символ, процессору нужно выставить на адресную шину адрес. Этот адрес нужно вычислить. Под позицией/перемещениями в том FAQ понимается текущее вычисляемое значение адреса (не обязательно в конкретной переменной или регистре). Да, объяснение не лучшее, и если ты знаешь что такое адрес, то думай об адресах. А что касается того ответа в целом, то смотри:

> генерирует код, позволяющий переместиться к месту под именем "a"


; Где-то в секции данных у тебя есть: a db 'xyzw', 0
mov eax,offset a

> перемещается на три символа вперед


add eax,3

> и затем читает требуемый символ


mov al,[eax]
При чтении символа по указателю тебе понадобится дополнительный шаг:
; Где-то в секции данных у тебя есть: a db 'xyzw', 0
; Где-то в секции данных у тебя есть: strptr dd a
mov eax,offset strptr
mov eax,[eax]
add eax,3
mov al,[eax]

Естественно, все это оптимизируется нахуй, но указатель читать все равно придется: mov al,[a+3] vs. mov eax,[strptr], mov al,[eax+3].

> но такого написания даже во времена DOS не было


Да, оно уже тогда устарело. Тем не менее, оно было. Открой K&R, например - не знаю, как насчет второго издания, но в первом точно было. Алсо, пикрелейтед - код MS-DOS 6 (команда expand), там почти все вычистили к шестой версии, но если покопаться, можно пару десятков мест найти.
485 1499479
Нужно определить константы разными для разных ос, правильно делаю? А то компилятор подсвечивает 4 строчку темным
#if defined(_WIN32) || defined (_WIN64)
#define ...
#elif defined(__linux__) || defined(__APPLE__)
#define ...
#endif
image.png18 Кб, 591x317
486 1499485
Я тут слышал, что у нормальных людей все должно компилиться с -Werror, в связи с чем озадачен, как адекватно сделать пикрил хуету (4-й аргумент pthread_create). Ну не маллокать же 4 сраных байта, в конце концов! qsort_r туда же, хоть на лицо ссыте, а я не откажу себе в удовольствии сортировать равнодлинные подпоследовательности без нуль-терминаторов таким макаром:
qsort_r(base, nmemb, size, memcmp, size);
Ладно, допустим тут достанет каста, size_t и указатель обычно соразмерны long, но все таки блджад...
image.png19 Кб, 661x311
487 1499489
Ой, перепрошую панове, я трошки довбойоб. Вже пофіксив.
488 1499541
>>499485

> size_t и указатель обычно соразмерны long


А вот в винде - нет.

> маллокать


По-хорошему - да. Заодно положишь туда же sockaddr, все равно пригодится рано или поздно. А заодно и еще какие-нибудь данные, которые process() стал бы выделять сам.
489 1499542
>>499411

>сравнивает винапи с консолью

490 1499653
>>480534 (OP)

> Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев!


А как понять достаточно ли я гуманитарен, чтобы читать это? С программированием знаком был поверхностно с С++ в 9 классе, тогда форк лазаруса от борланда у нас на компах ставили и мы в них всякие программки писали. Немного умею в линукс. Люблю математику и физику, за всю школьную жизнь 11 классов, сейчас в 12-ом ни одной тройки.
Достаточно ли этого, чтобы я мог называть себя технарём?
491 1499658
>>499653

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


Фикс
492 1499674
>>499653

>Люблю математику и физику


Бедняга
493 1499686
>>499541
Здравая мысль, однако. Но что делать в случае с тем же qsort_r? Этот void ∗ так и просится третьим аргументом memcmp. Вот ни разу не прикольно писать какие-то обертки, чтоб не выходить за рамки предназначения типов. Там же void ∗ крайним параметром задекларировали для максимальной универсальности, но никак не для того, чтоб я пил кофе из графина. Интересно узнать, насколько дурной тон подобные шорткаты? Сильно обоссывают за такое?
494 1499689
>>499541
Алсо, насколько я понимаю, с float/double подобные не прокатит, потому что вызывающий код сложит в RCX/RDX/R8/R9 ничего не подозревающий обработчик будет искать в XMM0/1/2/3. СУКАНАХУЙБЛЯДЬ
495 1499788
>>499462
Благодарю от души, теперь всё понятно. Если бы еще та писанина была написана подобным образом.
Потупил глядя на код, а потом решил проверить и точно, просто массив и адрес массива (в коде offset a) это одно и то же. Ну и дыркозатыкатели, млин.
496 1500209
Почему до сих пор никто не додумался добавить материалы по предметным областям в треды?
Заодно исчезнет куча вопросов типа "Что же мне запилить на ЭТОМ язык программирования" и "Почему мне запилить ЭТО именно на ЭТОМ языке"?
В СИ это как минимум микроконтроллеры и прыщи.
изображение.png59 Кб, 977x123
497 1500332
Тут речь идет о настоящих файлах, которые можно прям на флешку записать, например, или это какая-то фикция?
498 1500372
>>500332
Нет, это файловые дескрипторы (неужели никогда не слышал, что в *nix все есть файл?), по умолчанию они связаны с терминалом. При желании ты можешь заставить шелл использовать вместо терминала реальные файлы, примерно так: myprogram < stdin.txt > stdout.txt 2> stderr.txt
499 1500391
>>500332
Про linux не знаю, в шинде это хэндлы файловых объектов в ядре, эти объекты ссылаются на объекты устройств, с объектами устройств связаны драйверы. Когда прога читает/пишет драйверы получают соответствующие запросы. Что конкретно они с этими запросами делают зависит от конкретного места записи/чтения.
Если это консоль, драйвер консоли перенаправит запрос соответствующему процессу консоли и вернет ответ. Если это реальный файл, запрос пройдет по всему стеку драйверов от файловой системы до диска. Ну короче ты понял.
500 1500404
>>500332
Книжку писал юниксоид, там всё - файлы. В винде так не принято, да и тут написано же "стандартные потоки ввода/вывода" консоли.
На самом деле это устаревшая ерунда, ведь если программа с WinMain никаких консолей не создается. Если надо, можно создать консоль вручную или прицепить чужую.
501 1500691
>>500404
В винде хэндлы принципиально ничем не отличаются. GetStdHandle(STD_OUTPUT_HANDLE) - точно такой же "файл", в который можно писать с помощью WriteFile.

> это устаревшая ерунда


Виндой мир не ограничивается.
503 1502383
>>498403

>fopen


эм бля я изначально так и сделал, но это хуйня которая мне не нужна
S0NLamQ-h8s.jpg16 Кб, 294x308
504 1513310
Тред утонул или удален.
Это копия, сохраненная 18 ноября 2019 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски