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


Ответить в тред Ответить в тред

Check this out!
<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
503 36 173

C Programming Language #48 /clang/ Аноним # OP 24/09/19 Втр 05:35:57 14805341
C Programming L[...].png (78Кб, 792x1023)
792x1023
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь 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)
Аноним 24/09/19 Втр 12:51:33 14806392
1
Аноним 24/09/19 Втр 16:07:18 14807613
Аноним 24/09/19 Втр 17:18:55 14808064
.png (2842Кб, 300x420)
300x420
Лучшая книга для изучения Си.
Аноним 24/09/19 Втр 17:25:02 14808095
Почему в Си не завезут операторы для ROL и ROR? SHL и SHR есть (<<, >>). Что мешает сделать ><<, >><? Си ведь призван избавить от необходимости ASM в большинстве низкоуровневых задач, а значит в новых стандартах должно отражаться развитие архитектур.
Аноним 24/09/19 Втр 17:26:24 14808106
>>1480806
>пик в шапке - единственная годнота
>возражает
земля пухом
Аноним 24/09/19 Втр 18:40:42 14808667
Окончание _t как в uint32_t и прочих, зарезервировано? Или я могу делать так?
typedef struct array {
          ...
} array_t;
Аноним 24/09/19 Втр 19:24:08 14809178
>>1480866
Можешь, не зарезервировано.
Аноним 24/09/19 Втр 20:02:16 14809359
image.png (48Кб, 1284x248)
1284x248
почему циклон ругается? gcc перед ним устанавливал.
Аноним 24/09/19 Втр 22:08:36 148109510
>>1480809
Достаточно редко используется, отлично распознается компиляторами. Смотри: https://godbolt.org/z/SnIAwS Для тех, кому хочется гарантий, есть интринсики.

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

>>1480935
CMake оставляет за собой кучу говналогов, посмотри в них конкретное сообщение об ошибке.
Аноним 25/09/19 Срд 08:55:49 148131311
Modern C, by Jens Gustedt, шо скажете про книгу?
Аноним 25/09/19 Срд 09:55:51 148132812
>>1480810
>малолетний петуш с юнитфактори рассказывает свое мнение
Аноним 25/09/19 Срд 10:40:16 148134913
>>1480806
Как раз дочитал эту Перри Г., Миллер Д. «Программирование на C для начинающих».
Попробую теперь её.
Аноним 25/09/19 Срд 13:58:37 148148514
>>1480091
>Охуенно ты придумал. Вот у тебя скомпилированы .o, использующие одну библиотеку. Функции же библиотеки не находятся в отдельном .o, а продублированы в каждом из твоих .o. И откуда линкеру-то, блядь, знать, что они идентичны, и какие копии можно выбросить?
Но такая библотека у меня работатет и компилятор даже не ругается.
А тела inline-функций можно разместить только в .h файле.
Аноним 25/09/19 Срд 14:41:53 148152515
Блин, какой спортивный интерес так минимизировать код?
https://nanochess.org/toledo_nanochess.c

Языки придуманы для того чтобы человек смог их прочитать, а не для мастурбирования на количество букав. Считайте по количеству операций что-ли, а не такую фигню мутите. Если уж хотите минимализм, то ебоште сразу машинными кодами.
Аноним 25/09/19 Срд 16:52:40 148158816
>>1481095
путь к папке с проектом содержал русские символы
;;
Аноним 25/09/19 Срд 20:21:55 148169517
Аноним 25/09/19 Срд 20:35:16 148170218
>>1481525
>какой спортивный интерес так минимизировать код?
Любой код надо минимизировать и делать, как можно проще и понятнее. Есть же такой принцип KISS(Keep it simple, stupid). Это только индусские макаки наоборот писали тонны нечитаемого говнокода, потому что им платили за количество строк.
Что касается твоего примера - там просто нет табуляции и его нельзя прочитать.
Аноним 25/09/19 Срд 20:39:01 148170419
>>1481702
>там просто нет табуляции
>там просто нет табуляции

И да, code golf это непросто, это уже совсем не KISS
Аноним 25/09/19 Срд 20:51:20 148171420
15242986031540.png (136Кб, 1920x1080)
1920x1080
>>1480534 (OP)
Написал библиотеку полностью в .h, файле.
Потом решил сделать правильно: все тела функций вынес в .с файл, а в .h файле оставить прототипы функций, глобальные переменные, массивы, структуры(я скачивал некоторые библиотеки с гитхаба, и там все так делают).
Всё сделал как надо, на .h файл поставил guardы, к .с файлу подключил .h файл, но ничего не вышло. Компилятор выдавал десятки ошибок multiple definition в объект-файлах.
Долго не мог понять, в чём причина, и только сегодня, после долгого гугления нашёл ответ в яндексе на первом ответе: глобальным переменным нельзя присваивать значения в .h файле, их там можно только объявлять.
А у меня там всем переменным были присвоены нули.
ПОЧЕМУ ОБ ЭТОМ НЕ СКАЗАЛИ НИ В КЕРНИГАН РИЧИ НИ ДАЖЕ В СПРАВОЧНИКЕ ШИЛДТА!!??
Это же очень важная проблема, я МЕСЯЦ ломал голову, почему не могу разнести свою библиотеку в пух и прах на два файла.
Аноним 25/09/19 Срд 21:08:58 148172421
>>1481714
Потому что это очевидно вытекает из базовых знаний. Если ты инициализируешь static, то это уже не bss, а data, то есть в каждом .o хардкодятся значения под этими символами, и линкер не вдупляет, где правда. Выхода два. Либо в .h без инициализации (bss заполняется нулями, когда разворачивается в памяти процесса, так что норм), либо в одном из .c инициализируешь, а в других объявлешь extern. Ответ гугла - рациональное, а не эмпирическое. То есть в принципе можно, но лишено смысла, ведь если один .c, то нет смысла в .h.
Аноним 25/09/19 Срд 21:11:58 148172622
>>1481714
Короче, чем забивать голову частными случаями магии инклудов и золотых правил, с ней связанных, лучше понять, что инклуд - тупо вставка текста. Представил, что вместо отдельного .h его содержимое продублировано в шапке каждого .c, и сразу все ясно.
Аноним 25/09/19 Срд 21:14:50 148172723
>>1481714
>ПОЧЕМУ ОБ ЭТОМ НЕ СКАЗАЛИ НИ В КЕРНИГАН РИЧИ НИ ДАЖЕ В СПРАВОЧНИКЕ ШИЛДТА!!??
синтетическая инфа, необходимость которой возникает от непоследовательного изложения основного материала
Аноним 26/09/19 Чтв 00:12:48 148182824
20190926001050.jpg (500Кб, 720x1480)
720x1480
>>1481714
Ежедневная рубрика читаем k&r жопой.
Аноним 26/09/19 Чтв 02:48:36 148188025
>>1481525
>#define
>#define
>#define
>мам, я сократил код!
Ну и кого этот петух наебал? Самого себя?
26/09/19 Чтв 07:33:25 148193326
>>1481880
Тред заполнен ньюфагами на сто один процент. Но ньюфаги на то и ньюфаги, чтобы показывать им http://ioccc.org/ и зоонаблюдать.
Аноним 26/09/19 Чтв 12:48:33 148211727
>>1481933
Зря ты так. Кто не прочел про IOCCC в комментарии и рассматривает код, как промышленный, тот уже безнадежный долбоеб без всяких объяснений, а сейчас еще налетят долбоебы претерминальной стадии и будут рассказывать тебе, какая бессмысленная хуета все эти контесты, а какие вы вообще все несерьезные в сравнении с мамкиными Стивенами Сигалами, 24/7 думающими о сиюминутной пользе занятия.
Аноним 26/09/19 Чтв 14:25:20 148220028
>>1482117
Так ведь это и правда бесполезная хуйня, в 16 лет баловался пару раз таким, пользы ноль, одно веселье.
Аноним 26/09/19 Чтв 14:38:09 148222329
>>1482200
Называется олимпиадство.
Проблема в том, что ум это далеко не всегда что-то хорошее, т.к. он позволяет человеку чувствовать превосходство над другими. В результате многих интересует в основном эта сторона, реализуемая решением задачек. Такому человеку нужен челлендж, безотносительно пользы. Зависимость скорее даже наоборот, чем полезнее софт, тем более там банальной работы, суть рутины, не дающей никакого челленджа, ну как таскать кирпичи для строительства дома, но это совершенно необходимо. А умные не хотят, это чсв не греет, им скучно, унизительно, нужно выебываться крутыми решениями неординарных задач. Однако такое поведение это не порождает полезного, даже часто как таковых программ не производит, потому что есть огромная разница, скажем, изобрести двигатель внутреннего сгорания или сконструировать реальный качественный, удобный людям автомобиль.
Аноним 26/09/19 Чтв 14:45:18 148224230
>>1482223
>изобрести двигатель внутреннего сгорания или сконструировать реальный качественный, удобный людям автомобиль
Надеюсь не к изобретению ДВС ты относишь олимпиадную матанопетушню?
Аноним 26/09/19 Чтв 15:46:01 148227531
>>1482242
>матанопетушню
Да пошел ты нахуй. Эти, как ты считаешь, бесполезные выебоны - жизненная необходимость для умного человека. Даже если несовершенное потреблядское общество перепроизводства килотонн хуеты тысячу раз обесценивает эти скиллы. Талантливому человеку отнюдь не легко довольствоваться примитивщиной, не впадая при этом в депрессию. Эгоист ты, макака.
Аноним 26/09/19 Чтв 16:30:53 148230632
>>1482242
Просто к изобретению. Изобретение это придумывание чего не было, вот и решение задач это получение решения, которого (у тебя) не было. Но решение задач это не программирование, ведь программ не дает. Получается через жопу: когда задача решена, нужно начинать делать программу, а пациент наоборот теряет интерес и уходит в другие задачи, где процесс повторяется. И даже если программа есть, такие не фиксят элементарные баги и неудобства, однако доставляющие пользователям много боли, которые могли бы быть исправлены за пять минут одной строчкой - как раз потому что слишком просто, вот и висит говно буквально годами, ёжики колются, а разрабу поебать, он сидит над умными проблемами.

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

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

>>1482275
Непонятно к чему ты упоминаешь производство, а значит работу. На работе работники подневольны, делаю что велено. При чём тут эгоизм или "довольствоваться чем-то"? Эти вещи как раз зависят от тебя, чего на работе нет.
Аноним 26/09/19 Чтв 16:41:57 148231633
>>1482306
>Непонятно к чему ты упоминаешь производство, а значит работу. На работе работники подневольны, делаю что велено. При чём тут эгоизм или "довольствоваться чем-то"? Эти вещи как раз зависят от тебя, чего на работе нет.
Я к тому, что реальная жизнь (работа) уныла по определению. А оратор выше назвал занятие уничжительным термином лишь за то, что оно невостребовано в этой реальной жизни. Эгоизм же в том, что люди заурядные способны оставаться психически здоровыми, довольствуясь потреблядскими ништяками за непосредственную работу, а люди талантливые лишены такого похуистичного спокойствия ума, и нельзя их за это считать шизиками и создавать насмешливую репутацию вокруг олимпиадной движухи вцелом. "Мне не надо, значит вообще не надо" - натуральный эгоизм. Олимпиадная движуха - смертельно необходимая вещь хотя бы потому, что удовлетворяет потребности интеллектуальной элиты, которая двигает прогресс в самом качественном плане.
Аноним 26/09/19 Чтв 16:52:12 148231734
Алсо, есть подозрение, что эти непризнанные гении, которые впутывают коммерческую деятельность в свои нетривиальные выебоны в ущерб скучным нюансам качества для конечного юзера, это как раз недоделанные олимпиадники, которые не могут в реальный топ какого-нибудь codeforces. Реальное олимпиадное программирование, как раз таки, отнюдь не тешит их ЧСВ. Норм же посоны олимпиадят по хардкору, а в жизни не выебываются.
Аноним 26/09/19 Чтв 18:26:04 148238335
>>1482316
>Олимпиадная движуха - смертельно необходимая вещь хотя бы потому, что удовлетворяет потребности интеллектуальной элиты, которая двигает прогресс в самом качественном плане.
Нет, олимпиады это как раз говно. Если хочется чего-то возвышенного, лучше изучать алгебраическую геометрию, теорию категорий и схемы. Но олимпиадники часто те еще потребляди, и красоту математики пытаются обесценить и свести к надоям чугуна. Олимпиадники это та же продакшен чернь, только сбоку.
Аноним 26/09/19 Чтв 18:39:27 148238836
В алгебраической геометрии как раз ценится идеальность мысли, красота доказательства. Многие доказательства в ней были переформулированы и передоказаны как раз ради красоты и совершенства и оказались настолько восхитительными, что сам Аллах записывает их в свою небесную книгу. Но олимпиадным червям все это невдомек. Они месят говно и думают, что занимаются чем-то возвышенным.
26/09/19 Чтв 18:52:15 148239637
>>1481726
>Представил, что вместо отдельного .h его содержимое продублировано в шапке каждого .c, и сразу все ясно.
Но в .h файлах ставятся guardы и прочитаться содержимое, заключенное в эти guardы может только один раз.
Поэтому я долгое время и не мог понять, почему это multiple definition, guardы ведь стоят и по идее множественного присваивания быть не должно.
26/09/19 Чтв 19:04:49 148240538
>>1481724
>Если ты инициализируешь static
Я там инициализировал просто переменные, без дополнительных эпитетов, вот так:
unsigned char Char = 0;
Аноним 26/09/19 Чтв 19:11:35 148241139
>>1481933
>Тред заполнен ньюфагами на сто один процент.
Так это хорошо же.
Значит, язык живой, и много людей желают в него вкатиться.
Аноним 26/09/19 Чтв 19:19:25 148241940
>>1482396
gcc -c yoba1.c yoba2.c
то же самое, что
gcc -c yoba1.c
gcc -c yoba2.c

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

???
Это надо, чтоб в отдельно взятом компилируемом модуле ничего не повторялось. Те же определения структур и т.д., словом, все, что определяет поведение компилятора. Переопределения же инициализированных данных и функций во всем проекте при попытке сборки воедино результатов компиляции - это уже линкер в ахуе. Грубо говоря, работа компилятора - заготовить маш.код процедур, со всеми обращениями к полям структур по соответствующим оффсетам и прочей хуетой, а работа линкера - превратить все символы в адреса.
Аноним 26/09/19 Чтв 19:25:22 148242141
>>1482405
Это и есть static. Просто в теле функции надо явно указывать, а глобальные один хуй другими не бывают.
Аноним 26/09/19 Чтв 19:28:15 148242342
>>1482396
Короче, гарды работают независимо для каждого файла, юзающего этот хедер. А как иначе? И зачем? Это если ты инклудишь хедер1 и хедер2, а хедер2 сам инклудит хедер1, то получаются повторы. Как анон выше писал, нехуй жёппой читать. Препроцессор осиль.
Аноним 26/09/19 Чтв 20:05:45 148244543
Является ли хорошим тоном проставлять такие инклуды для макросов и прочих символов, которые уже были произведены посредством других инклудов? Например, делаю я #include <libxml/xmlversion.h>, и вместе с ним помимо библиотечных функций получаю определение для NULL (он видимо был подключен этим самым xmlversion.h). Нужно ли (является ли хорошим тоном) всё равно самостоятельно заинклудить <stddef.h>?
Аноним 26/09/19 Чтв 21:31:44 148254844
>>1482223
> Однако такое поведение это не порождает полезного
Такое поведение дало тебе qemu и tcc, например. Оба проекта начинались как работы для ioccc.

>>1482445
Да, по-хорошему не стоит зависеть от чужих инклудов, потому что (в теории) они могут что-то у себя поменять, и твой код сломается. С другой стороны, например, в сишной стандартной либе есть гарантии, что stdio.h обязательно принесет тебе size_t и NULL, поэтому пока тебе не понадобится какой-нибудь offsetof, ты можешь обойтись без stddef.
Аноним 26/09/19 Чтв 21:31:57 148254945
>>1482316
>что оно невостребовано в этой реальной жизни
Сейчас ты называешь изобретения созданные математиками, благодаря которым произошел прогресс технологий или вся твоя маняматика пук.
Аноним 26/09/19 Чтв 21:38:40 148255246
>>1482549
Теория Галуа, криптография
Теория вероятности и теоретическая физика - квантовые компуктеры
Аноним 26/09/19 Чтв 21:41:01 148255547
>>1482552
> Теория Галуа
На полях галуа только аес. Как-то не очень тянет на прорыв.
Аноним 26/09/19 Чтв 21:52:19 148257348
Аноним 26/09/19 Чтв 21:52:59 148257449
>>1482552
>Теория вероятности
Всего лишь маня-теория, оторванная от реальности
>теоретическая физика
О да, это еще те говноеды, посредством какой среды распространяются радиоволны в вакууме/космосе?
>криптография
Нинужна
Аноним 26/09/19 Чтв 22:23:00 148259650
Аноним 26/09/19 Чтв 22:24:21 148259751
Аноним 26/09/19 Чтв 22:25:46 148260252
Никак не вкурю, записывается ли в файл '\0'? Попробовал записать 10 eos - файл, разумеется, увеличился на 10 байт, т.е. вроде записывается. да-да, сам себе ответил, дебил
Но нужно ли учитывать эти невидимые байты при чтении с файла?
Аноним 26/09/19 Чтв 22:32:41 148260853
>>1482602
>невидимые
В чем, в МС Ворде? Открой в бинарном редакторе, клован
Аноним 26/09/19 Чтв 22:42:42 148261454
>>1482602
Нужно, конечно. Когда файл прочитается до конца, возвращается EOF, а не '\0'.
Но не делай так в текстовых файлах.
Аноним 27/09/19 Птн 01:19:00 148271155
>>1482602
Для текста есть специальные функции записи/чтения, где не нужно беспокоиться о нулях и прочих управляющих символах. Если же залез в бинарные данные, там пишется и читается всё буквально, каждый байт как нужно тебе и разбираться тебе.
Аноним 27/09/19 Птн 08:43:32 148278656
>>1482421
>а глобальные один хуй другими не бывают.
А как же extern и register.
Аноним 27/09/19 Птн 08:53:55 148279357
>>1482423
Да, всё так. Попробовал сейчас перекрестно подключить 2 хедера(в хедере 1 инклюдил хедер 2, а в хедере 2 - хедер 1) - выдало кучу ошибок redeclaration. Вот же я жопочтец.
Аноним 27/09/19 Птн 13:33:46 148296658
>>1482786
Я про то, что они не бывают в стеке.
extern - это вообще не определение
register - лишено смысла, это лишь пожелание, которое никто выполнять не будет в таком случае, т.к. каждая процедура компилится независимо и имеет право юзать проц, как хочет. Главное потом на место все вернуть в регистрах, предусмотренных конвенцией.
Аноним 27/09/19 Птн 14:13:54 148299259
>>1482786
Это просто подсказки для компилятора, с тем как ему обращаться с этими переменными. Один хуй в один и тот же маш. код все компилится.
Аноним 28/09/19 Суб 19:32:21 148394460
Я из мира языков с исключениями, поэтому на всякий случай спрошу:

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

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?
Аноним 28/09/19 Суб 19:41:25 148395661
>>1483944
Я аллоки никогда не проверяю на НУЛЬ))0)
У меня 16 гигабайт РАМ, ведьмак тянет - почти на ультрах, а тут это говно память может не дать. Если не даст - снесу нахуй и всё.
Аноним 28/09/19 Суб 21:28:04 148404962
>>1483956
>У меня 16 гигабайт РАМ, ведьмак тянет - почти на ультрах, а тут это говно еще оптимизировать?
Разработка типичного хеллоуворлда или пиксельного восьмибитного платформера в 2019.
Аноним 28/09/19 Суб 22:31:30 148411363
>>1483944
> Принято ли вообще обрабатывать ошибки слишком тщательно и обширно использовать goto
Принято обрабатывать ошибки тщательно. Часто можно обойтись без goto, используя более мелкие фукнции и/или множественный return.

>>1483956
> Я аллоки никогда не проверяю на НУЛЬ))0)
А потом тебе придет размер чего-нибудь по сети, ты попробуешь столько выделить, а дальше будет так: http://ideone.com/QepQ2j
Аноним 29/09/19 Вск 02:54:03 148422464
>>1484113
>по сети

А ты не зафантазировался?
Аноним 29/09/19 Вск 03:32:08 148423165
>>1484113
Не понял. Это типа хацкер запросил заведомо нереальный размер, чтоб malloc() вернула NULL, а в качестве индекса - абсолютный адрес взламываемой жёппы, чтоб, не проверив успех маллока, жертва своими же руками оффсетнулась по нулю куда надо хакеру?
Аноним 29/09/19 Вск 06:28:20 148425766
3bc7bc030fad10c[...].jpg (70Кб, 640x570)
640x570
>>1480534 (OP)
Привет, двач. Есть у кого на примете годный курс лекций по алгоритмам? Знаю, что библией алгоритмизации считается книга Кормэна(потом по нисходящей идут Дасгупта и Бхагарва, тоже знаю) и мне нравится её полнота, однако, формальный язык очень и очень отталкивает, не способствуя пониманию. Да и вообще, формат лекций мне как-то ближе, нежели просто чтение книги. В общем, какие требования? Полнота(речь не об N-полноте, лол) Кормэна в сочетании с интересным, не сухоформально рассказывающим преподом. А, да, и чтобы на русском(знаю, что охуел). Подскажите чего по сабжу?
Аноним 29/09/19 Вск 09:41:27 148429467
>>1484257
Погугли лекции Хирьянова Т. Ф., По информатике и математике у него одни из самых охуенный лекций что я посещал. Правда хз сколько записей есть.
Аноним 29/09/19 Вск 11:33:30 148434768
>>1484113
Вот как уязвимости в реальном софте искать или это тупо с опытом приходит?
Аноним 29/09/19 Вск 12:17:07 148437669
>>1484347
"Уязвимости" это мем. По факту ты говоришь, не понимая смысла своих слов, просто мемекаешь.
Аноним 29/09/19 Вск 12:25:19 148437970
>>1484376
пошел нахуй филолог ебаный
Аноним 29/09/19 Вск 13:53:39 148447071
Что за древнее ссаньё мамонта в шапке? Вся эта залупа собриается через раз с ошибками. Когда ты только вникаешь во всю хуйню это пиздецки мешает, хуй знает как правильно, нихуя не понятно. Свежие бы книжульку в рот ебать.
Аноним 29/09/19 Вск 14:15:24 148448772
>>1484470
Кто проплатил налет армии хуесосов против КиР? Это единственный пик для шапки треда. Кто возразит - матерей всех ебал.
Аноним 29/09/19 Вск 14:19:02 148449273
>>1484487
Не ебу ваши местные мемы. Какого хуя на форумах советуют древнее говно, я заёбся уже. Не спорю, хуй сосать на ровном месте может быть полезно, но блядь я же ещё учусь.
Аноним 29/09/19 Вск 15:02:08 148452874
Т.е. free(*) нихуяшеньки не чистит (не обнуляет байты) память, а просто возвращает её ОС? Следовательно, к этим данным можно и дальше обращаться?
Аноним 29/09/19 Вск 15:44:35 148456075
Аноним 29/09/19 Вск 21:14:38 148487376
>>1484492
Чтоб ты скончался от разрыва селезенки, псина.
Аноним 29/09/19 Вск 21:15:53 148487577
>>1484224
Это реальный баг, если что. Но, конечно, совсем не такой простой, как в примере.

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

>>1484528
> Т.е. free(*) нихуяшеньки не чистит (не обнуляет байты) память, а просто возвращает её ОС?
Даже в ОС не сразу/не всегда возвращает.
Аноним 29/09/19 Вск 21:18:29 148487678
>>1484528
>возвращает её ОС
Если бы malloc/free каждый раз дергали sbrk, ты бы охуел от "производительности". Вероятнее всего, после free() ты все еще сможешь прочитать что-то по тем же указателям.
Аноним 30/09/19 Пнд 00:22:58 148501379
Аноним 30/09/19 Пнд 03:05:42 148506780
>>1484528
>free(*) нихуяшеньки не чистит (не обнуляет байты) память
Где в слове "free" ты видишь значение "очистить"? Или в документации этой функции покажи пункт.
Аноним 30/09/19 Пнд 18:53:29 148558781
изображение.png (49Кб, 1009x760)
1009x760
Аноны, откудова исключения взялись в моей сишечке?
Аноним 30/09/19 Пнд 20:47:33 148566582
>>1485587
Это процессорные исключения, не крестовые. Но в сишечке исключений нет вообще никаких, зато в ней есть UB, позволяющие программе после возникновения UB вести себя так, как ей вздумается. Вот этой вздумалось вызвать исключение, потому что ты пишешь по неинициализированному указателю p (или lineptr, там не совсем понятно без кода).
Аноним 30/09/19 Пнд 20:47:42 148566683
30/09/19 Пнд 20:48:32 148566884
Аноним 30/09/19 Пнд 20:49:35 148567085
>>1485665
>процессорные
Исключения ядра ОС. Процу не все ли равно, какие байты дрочить?
Аноним 30/09/19 Пнд 20:52:04 148567486
>>1485668
Это риторический вопр.знак был. Я сначала подумал, что это и вправду крестовые исключения, и имел ввиду, что нет прямой иерархии между низкоуровневыми и высокоуровневыми языками, то есть никто не запрещает использовать библиотеку, собранную с крестовым конпелятором, на Сишечке.
Аноним 30/09/19 Пнд 21:00:23 148568587
>>1485670
> Исключения ядра ОС
Ядро ОС их переименовало, источник - все равно процессор.

> Процу не все ли равно, какие байты дрочить?
Нет. Он не знает, как писать в незамапленные страницы виртуального адресного пространства и плюется #PF (page fault), а винда видит, что мапить туда ей нечего, и говорит access violation.
Аноним 30/09/19 Пнд 21:13:02 148569488
>>1485685
мои пардоны, чет подзабыл
Аноним 30/09/19 Пнд 21:36:30 148572889
>>1485665
Да, с ошибкой разобрался. Прост меньше всего ожидал увидеть exception thrown

>>1485674
То есть фактически это dll'ка бросила исключение?

Аноним 30/09/19 Пнд 21:53:10 148574590
>>1485728
Ну я же тебе написал, у тебя p == NULL. Ты делаешь strcpy(NULL, line), дллка никакой магии не делает, там внутри будет что-нибудь типа while(∗p++ = ∗line++); только оптимальнее, оно пишет по NULL, проц/ядро генерируют исключение, студия его перехватывает и показывает.
Аноним 30/09/19 Пнд 22:57:57 148578491
>>1485685
Ошибка доступа это исключение ядра ОС, а не прерывание процессора.
Аноним 30/09/19 Пнд 23:02:29 148579092
>>1485665
У сишечки все еще есть доступ к использованию системных обработчиков ошибок.
Аноним 01/10/19 Втр 00:06:41 148582893
Итого, сишечка как таковая в чистом виде не нужна. Зачем нужен язык без исключений, если ядро использует исклюсения? Наверное только на малинках и прочих микроволновках без ядра и исключений.
Аноним 01/10/19 Втр 00:07:55 148582994
>>1485828
>малинках
ардуинах. Попутал.
Аноним 01/10/19 Втр 00:13:52 148583295
>>1485828
>>1485829
На малинках линукс, на ардуинах плюсы. Ты наверное имел ввиду embedded в целом.
>Зачем нужен язык без исключений
А зачем нужны исключения? С это кроссплатформенный ассемблер. То, что его использовали как источник вдохновения для большинства популярных императивных и ООП языков, является большим недоразумением. Отсюда представления, что Си -- какой-то хуевый язык, в нем нет исключений, ООП, метапрограммирования, лямбд, функторов и монад, что за хуйня. В то время как проблемы не у Си, проблемы у всех остальных императивных языков, начиная с C++, и проблемы очень большие.
Аноним 01/10/19 Втр 00:15:57 148583596
>>1485784
А ОС как об этом узнает? Из астрала?

>>1485828
> Зачем нужен язык без исключений
А есть с исключениями? Может быть, кресты могут отловить виндовые исключения? Это решается системными средствами: сигналами в *nix, или всякими SetVectoredExceptionHandler в винде, и это не зависит от языка.
Аноним 01/10/19 Втр 00:40:41 148584397
>>1485835
А да, ты прав, я с access denied перепутал, сцуко опять. ОС также сама может генерировать исключения.
Access violation page fault - железячное прерывание, а Access denied - софтверное.
У C++ тот же SEH внутри насколько я помню.
Аноним 01/10/19 Втр 01:03:11 148585198
>>1485832
Окей, вот только не надо максимализма. Я же не зря написал "в чистом виде".
ООП не нужен, но классы нужны, без них плохо.
Лямбды это лишь встроенный код, как код может быть не нужен?
Функторы это указатели на функции, они и так есть и нужны естественно.

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

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

Аноним 01/10/19 Втр 01:04:34 148585399
>>1485843
> У C++ тот же SEH внутри насколько я помню.
Да, но оно не умеет ловить другие виндовые исключения, оно работает только со своим собственным (0xe0чтототам), поверх которого реализует все свои raise.
01/10/19 Втр 01:08:16 1485855100
Аноним 01/10/19 Втр 01:09:32 1485856101
>>1485851
Я поддвачну этого оратора.

Пишем на работе драйвер на С++, никакой стандартной библиотеки само собой, но, тупо уже шаблоны и RAII\Деструкторы настолько упрощают разработку, что я тоже искренне не понимаю, зачем вообще писать на С в 2019
Аноним 01/10/19 Втр 01:11:58 1485859102
>>1485853
Ага, нинужны короче сишечке эти крестовые пердоли, которые в ядре не работают, между прочим. SEH с головой хватает.
Аноним 01/10/19 Втр 01:19:40 1485863103
>>1485856
Удвою коллегу, очень удобно прогать драйвера на плюсах, а то лапша из goto try except finally глаз мылит, да и сишный код дебажить в голове не комильфо.
Аноним 01/10/19 Втр 01:42:30 1485869104
>>1485856
Кому-то нравится жрать говно (С++), а кому-то важна аскетичная эстетика кода (C)
Аноним 01/10/19 Втр 01:48:51 1485872105
>>1485869
Обсер в сторону крестов в си треде - признак ньюфага-студентишки. Просто съеби.
Аноним 01/10/19 Втр 02:19:41 1485877106
К слову о крестах. Устроиться на работку, где чистые Си, весьма непросто, если ты не усатый мужик в тельняшке квадратных очках, который одним хуем пишет драйвер для Linux, а вторым - кастомную прошивку инжектора нексии, и все это под синькой. Стало быть, С++ - единственный адекватный вариант вката в коммерцию для не макак. Но дело в том, что нет достаточно крупных идей, чего такого наваять, чтоб прибегание к плюсам было оправдано. В итоге, я всегда склоняюсь к богоподобной сишечке, где ничего лишнего и все по красоте. С чего же начать заселение своего гитхаба, чтоб зашло работодателю Junior C++?
Аноним 01/10/19 Втр 04:53:56 1485898107
>>1485872
Твой порванный пукан лишь подтверждает мои слова
Аноним 01/10/19 Втр 06:29:30 1485915108
>>1485877
>Но дело в том, что нет достаточно крупных идей, чего такого наваять, чтоб прибегание к плюсам было оправдано.
Тебе выше написали, что RAII и деструкторы настолько упрощают жизнь, что нет смысла писать на си в 2019.
Можно не использовать стандартную либу (особенно iostream какой-нибудь), классы с VMT или исключения (тут сложнее, но век пиковских контроллеров ушел), но у С++ всегда было что предложить для аскетичного сишника. Всего два класса - vector и string, уже упрощают код в разы.
>С чего же начать заселение своего гитхаба, чтоб зашло работодателю Junior C++?
Самая главная прелесть С++ в том, что даже 1 пуллреквест в крупный проект - это 100% прием на работу джуном.
Не нужно годами пилить какие-то имиджтудулисты, не нужно даже думать о пет-проекте, если ты способен
1. Открыть проект на гитхабе и изучить его
2. Найти там баг
3. Пофиксить его и правильно оформить
Тебе уже есть работа на крестах. Потому что крестоджунов, умеющих это, очень мало, кресты учат в универах на уровне laba.cpp.
Аноним 01/10/19 Втр 10:21:23 1485985109
>>1485832
>>1485851
Почему вы такие умные? У вас прогерская вышка?
Аноним 01/10/19 Втр 11:59:53 1486039110
>>1485915
А если патчить Linux пулл реквестами это может с поиском будущей работой на C/C++? Хоть там и чистый С, но все же
Аноним 01/10/19 Втр 12:05:06 1486045111
>>1486039
За принятый патч в ведре тебя сразу мидлом возьмут. Но этого не случится конечно
Аноним 01/10/19 Втр 12:07:18 1486046112
Аноним 01/10/19 Втр 15:41:49 1486202113
>>1485915
> Всего два класса - vector и string, уже упрощают код в разы
Под них все равно придется аллокаторы переписывать.
Аноним 01/10/19 Втр 15:44:15 1486205114
>>1485915
Толстота, нет? Сейчас куча фазеров и прочей лабуды на автомате находит баги, остаются только уж совсем сложные UB, которые невозможно воспроизвести или заметить одним лишь чтением исходников.
Аноним 01/10/19 Втр 16:12:57 1486238115
>>1485915
Зачем нужен вектор, когда есть VLA
Аноним 01/10/19 Втр 16:26:24 1486249116
>>1486238
потому-что стэк оверфлоу
Аноним 01/10/19 Втр 16:29:36 1486254117
>>1485869
> аскетичная эстетика кода
> Каша из маллоков, goto, указатели на указатели на указатели
Аноним 01/10/19 Втр 17:07:41 1486294118
>>1486205
Тогда бы issues на гитхабе были пусты, а они полны. Берешь один такой баг, воспроизводишь, фиксишь. В опенсорсе дохуя багов, которые живут не потому что они сложны, а потому что некому фиксить.
Если совсем лениво, можешь спросить у мейнтейнера какую фичу запилить. Но это сложнее
Аноним 01/10/19 Втр 17:19:05 1486306119
>>1486294
Так их фазерами/анализаторами и ищут, 2019 год на дворе, никто не будет тонны кода разбирать руками.
Аноним 01/10/19 Втр 17:26:12 1486314120
>>1486202
Школьник с НеСкУчНоЙ импелентацией хэшмапы не реаллоках, ты?
Аноним 01/10/19 Втр 17:29:49 1486319121
>>1486306
А еще в 2019 году программистов нет, все фаззеры сами пишут
Аноним 01/10/19 Втр 17:33:50 1486323122
>>1486319
Два чую, а двач это киберпространство с одним аноном, который застрял на корабле посреди космоса.
Аноним 01/10/19 Втр 18:42:37 1486389123
>>1486238
Я дожил до века мультигигабайтных плашек ОЗУ не затем, чтоб юзать только 24 бита адресного пространства. Ну а так да, крестовекторы не нужны, когда есть охуительные макросы.
Аноним 01/10/19 Втр 18:55:49 1486396124
>>1486389
>макросы вместо векторов
Вот тут не понял
Аноним 01/10/19 Втр 19:01:47 1486404125
>>1486396
Ну, обернуть операции с массивами в макросы, чтоб все реаллочилось и т.д. и т.п.
Аноним 01/10/19 Втр 19:02:31 1486407126
Аноним 01/10/19 Втр 19:04:00 1486412127
>>1486404
оказся правильно понял
>обернуть в
>есть вектор изкаропки
но зачем?
Аноним 01/10/19 Втр 19:07:00 1486415128
>>1486412
А чтоб на чистой Сишечке писать. Кроссплатформность, все дела...
Аноним 01/10/19 Втр 21:41:12 1486601129
>>1485869
Переизобретатель велосипедов в треде, все в Тур де Франс.
Аноним 01/10/19 Втр 21:48:57 1486607130
>>1486314
Нет, я как раз тот, кто его хуесосил. Чини детекторы.
Аноним 01/10/19 Втр 21:55:51 1486611131
Аноним 01/10/19 Втр 22:05:34 1486623132
>>1486415
Можно задам тупой вопрос. Почему тогда Qt кроссплатформенный, а gtk нет?
Аноним 01/10/19 Втр 22:10:48 1486628133
>>1486623
Я про архитектуру, а не ОС. О какой крестовой STL может идти речь под всякие STM32? А Сишный код с няшными макросами аккуратно перенес, и все ок. Согласен, хуйню несу...
02/10/19 Срд 00:41:49 1486741134
>>1486623
Оба кроссплатформенные.

>>1486628
На самом деле на крестах очень интересно с memory-mapped портами работать, в том числе и с bit-bands в STM32: красиво, удобно, безопасно. Но цена этого - несколько абсолютно нечитаемых файлов с шаблонами, в которых хуй разберешься, когда/если что-то пойдет не так. Так что мы уж лучше как-нибудь по-старинке, на сишке с дефайнами.
Аноним 02/10/19 Срд 01:07:32 1486748135
>>1486741
>Так что мы уж лучше как-нибудь по-старинке, на сишке с дефайнами.
На крестах дефайны запретили?
Аноним 02/10/19 Срд 07:19:39 1486844136
Сап, /pr. Уже спрашивал в /ra, там, походу не знает никто.

Пытаюсь использовать simavr для, собственно, симуляции avr контроллеров в linux у меня arch. Симуляция, вроде, работает, но при попытке подключится с помощью gdb, simavr пишет
>remote_gdb_handler opened
>remote_gdb_handler closed
и нихуя не происходит. В Гугле забанили за тупые вопросы таких проблем не нашёл. Знает кто, что и куда пердолить, чтобы заработало?
Аноним 02/10/19 Срд 08:49:43 1486860137
>>1486844
Выключить и включить пробовал?
Аноним 02/10/19 Срд 09:16:00 1486864138
>>1486628
Пиздец какой-то, чем только байтоебы не оправдывают свое нежелание учиться.
Алло, STM32 - это 32-х битные контроллеры, работающие быстрее машин какого-нибудь 1996 года, при чем стоят они по 100 рублей за штуку в розницу и их сейчас можно чуть ли не в магнитики для холодильника пихать. Сейчас спорить можно о том, можно ли использовать на контроллерах минималистичный жаваскрипт, а не о С vs. C++.
Что касается непосредственно "портянка макросов" vs "темплейты", то разницы в оверхеде между ними нет никакой. Но при этом ты теряешь поддержку системы типов, и, что более важно, RAII.
02/10/19 Срд 11:16:15 1486906139
>>1486864
> работающие быстрее машин какого-нибудь 1996 года
Тактовую частоту сравнил, лол? Нет, это так не работает. Это мало того что тормозной ARM, так еще и неполноценный от рождения Thumb. И памяти там нет. Ну это если мы про F1 говорим, которые за 100 рублей. Поэтому нет, никаких крестов там близко не нужно, нет для них задач. И выбор стоит такой: простая, понятная и предсказуемая сишечка vs. очередная ебань, которую притащит WG21 уже вот-вот, и которую обязательно нужно начать использовать, потому что теперь так модно.

> минималистичный жаваскрипт
Ясно, ты из этих. А тут-то ты что забыл в таком случае?
Аноним 02/10/19 Срд 11:54:28 1486935140
>>1486844
А зачем?
Микроконтроллеры надо симулировать на реальном железе с осциллографом.
А для простой отладки на компе достаточно AvrStudio и Протеуса.
Аноним 02/10/19 Срд 12:02:30 1486942141
>>1486906
>Поэтому нет, никаких крестов там близко не нужно, нет для них задач
Э
Аноним 02/10/19 Срд 12:07:29 1486944142
>>1486942
>Поэтому нет, никаких крестов там близко не нужно, нет для них задач
Это для тебя, чмоня из /ra/, которая в 2019 году не может разобраться с темплейтами и RAII, нет задач. Нормальные люди берут С++ просто потому, что никакого смысла брать сишку нет. Даже если у тебя в память не влезает STL. Даже если ты мигаешь диодом. Вообще ноль смысла.
Аноним 02/10/19 Срд 12:57:46 1486979143
e2dd58e05cbf287[...].jpg (91Кб, 800x410)
800x410
>>1486944
>Нормальные люди берут С++
Аноним 02/10/19 Срд 17:06:33 1487246144
>>1486860
Not funny, didn't laugh.
Да. И дебаггер, и симулятор, и компьютер.
>>1486935
Ты тут системосрач развести хочешь, или просто в глаза ебёшься?
Аноним 02/10/19 Срд 21:18:49 1487441145
>>1480534 (OP)
Какие самые актуальные фреймворки по Си в данный момент?
Аноним 02/10/19 Срд 21:31:07 1487445146
Аноним 02/10/19 Срд 21:33:04 1487448147
Аноним 02/10/19 Срд 21:49:04 1487462148
>>1487441
Не, в C это так не работает. Нельзя выучить какой-то конкретный набор фреймворков, после чего можно было бы рассчитывать на позицию джуна. Тут используют сравнительно небольшие библиотеки, причём выбор конкретных библиотек определяется целями проекта, и везде он свой. GLib, GTK, C POSIX library
Аноним 03/10/19 Чтв 00:14:51 1487571149
>>1487246
>убогому напомнили о существовании приличного мира с приличным софтом
>ВРАГИ ХЕЙТЕРЫ НАПАЛИ! РЯЯ!! СПАСИТИ!!
Не могу остановиться проигрывать.

На всё твой личной выбор, петушило. Выбрал пердомир, отринув адекватный, так пердолься, страдай сам, преодолевай сам, это был твой выбор. Но нет же, лицемерной шлюшке хочется два слула сразу, и понтоваться хардкорщиком, но и чтобы было легко как казуалу.
Аноним 03/10/19 Чтв 08:12:51 1487664150
Ну раз такая пьянка - какие подводные писать на "Си с классами"? Мне от крестов нужны разве что строки, вектора и ассоциативные массивы.
Аноним 03/10/19 Чтв 09:09:12 1487685151
>>1487571
Охуеть, в Си треде выступают против юникс-лайк. Это постирония такая?

мимо
Аноним 03/10/19 Чтв 09:59:25 1487705152
>>1487685
Это сишники в 2019. Совсем деградировали.
Аноним 03/10/19 Чтв 10:12:31 1487712153
>>1487705
Это не сишники такие, а двачеры.
Аноним 03/10/19 Чтв 11:31:45 1487734154
>>1487664
Подводные есть. Кто там говорил, что С это подмножество С++?
>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};
Аноним 03/10/19 Чтв 11:33:29 1487736155
>>1487734
блять, сори за формат
Аноним 03/10/19 Чтв 11:54:39 1487743156
>>1487685
Тут просто сидят тупые школьники/студентишки на первой стадии Даннинга/Крюгера, отсюда и нападки на красноглазиков и крестовиков. Просто игнорируй их, и все будет хорошо. Ещё лучше будет каждый раз когда видишь их посты просто отвечать им пидорас съеби или типа того
Аноним 03/10/19 Чтв 12:03:36 1487747157
>>1487734
Какие-то сложные вещи, которые такому днищекодеру как я уж точно не встретятся.
Аноним 03/10/19 Чтв 12:50:23 1487771158
Аноним 03/10/19 Чтв 13:47:45 1487831159
>>1487747
Да он почему-то решил, что ты C99 код будешь миксовать с С++. Нахуя так делать, вместо того, чтобы взять С++ и писать на си с классами - не понятно.
Аноним 03/10/19 Чтв 14:19:01 1487849160
>>1487734
Нихуя, про _Generic первый раз слышу, круто анон.
Аноним 03/10/19 Чтв 15:32:58 1487904161
Перепечатал книжную программу перевода из двойной системы в десятичной. Почему после компиляции консольного приложения в MinGW 64 (пишу в Qt Creator) операции выполняются в 32-битной арифметике?
Аноним 03/10/19 Чтв 15:34:40 1487906162
>>1487904
Потому что у тебя там 32-битный int? Используй long, например, или перепиши на stdint.
Аноним 03/10/19 Чтв 15:36:10 1487909163
>>1487906
Благодарствую, пойду
Аноним 03/10/19 Чтв 16:19:01 1487927164
>>1487906
>Используй long
Он тоже 32 битный вообще то. Нужен long long.
Аноним 03/10/19 Чтв 16:21:10 1487930165
Аноним 03/10/19 Чтв 16:31:32 1487935166
>>1487927
Нафига long тоже самое что и int?

Почему не сделали так:
char - 1 байт
short - 2 байта
int - 4 байта
long - 8 байт
long long - не нужон.
Аноним 03/10/19 Чтв 16:36:14 1487942167
>>1487935
С фига, что инт зависит от архитектуры, а формальные определения типов - от соглашений языка. Когда я учился в школе, он еще был 16 битным.
Аноним 03/10/19 Чтв 19:16:28 1488095168
>>1487935
long - размер регистра, long long - 64 бита, и если регистр меньше, то усложняется маш.код, а int - просто int, лол
Аноним 03/10/19 Чтв 20:11:12 1488144169
1
Аноним 03/10/19 Чтв 21:05:18 1488189170
>>1487927
> Он тоже 32 битный вообще то.
Это зависит от ОС: у тебя либо модель LP64 (линукс) либо LLP64 (винда).

>>1487935
> Почему не сделали так
Легаси. Изначально инт должен был быть самым быстрым целочисленным типом из поддерживаемых, а 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 для записи в файлы или обмена по сети.
Аноним 03/10/19 Чтв 21:52:15 1488252171
Откуда вы вообще int long и прочее говно взяли? На маш. уровне все в word'ах измеряется. Если что-то не нравится пиздуйте в C# тред.
Аноним 03/10/19 Чтв 22:13:15 1488265172
Аноним 03/10/19 Чтв 22:27:38 1488282173
>>1488252
Итт нет никаких вордов. У нас абстрактная машина, у которой даже процессора нет по стандарту. Страдай.
Аноним 03/10/19 Чтв 22:50:04 1488304174
>>1488252
>word'ах измеряется
Ворд это джва байта, а байт это не всегда 8 бит, ох, лол
Аноним 03/10/19 Чтв 23:53:07 1488348175
Можно ли на Си добиться такой же безопасности, как у Ада?
Аноним 04/10/19 Птн 00:12:32 1488353176
ariane-v501-4ju[...].jpg (23Кб, 600x395)
600x395
>>1488348
>такой же безопасности, как у Ада
Аноним 04/10/19 Птн 01:08:46 1488366177
Сисяч, а что делается в общем случае при
malloc () == NULL? Просто exit () или попробовать снова?
Аноним 04/10/19 Птн 02:19:35 1488377178
>>1488366
Зависит от ситуации.
Если ты просто выделял память под маленький объект, а она кончилась, то все, приехали.
Если ты хотел выделить 8гб памяти под какой-нибудь йоба кэш, то можно сказать "ну ок, попробую обойтись четырьмя"
Аноним 04/10/19 Птн 04:24:40 1488387179
Вкатываюсь в сиху
Анончики посоветуйте хорошие интерактивные курсы
С меня как всегда - нихуя
Аноним 04/10/19 Птн 08:41:10 1488429180
>>1487685
>указал на тупость и лицемение конкретного автора поста
>ЮНИКСВЕЙ ХЕЙТЯТ! РЯЯ!!
Классика маргинальныех ничтожеств - обобщать и прятаться за чужими спинами общих понятий, тем самым уводя разговор от конкретного мерзкого лицемерного чмошника.
И неудивительно, ведь ничтожество поэтому и ничтожество, что нуль, не существует как личность, отсутствие которой заменяется причастностью к чему-то общему.
Аноним 04/10/19 Птн 08:56:25 1488433181
>>1488387
Вкатись сначала в ассемблер и посмотри архитектуру процессора.
Тогда в Си сможешь вкатиться как по маслу.
Аноним 04/10/19 Птн 09:02:55 1488438182
>>1488282
Что, простите? Везде использую DWORD и BYTE, а ваши инты и лонги в душе не понимаю, мутная фигня.
Аноним 04/10/19 Птн 09:33:38 1488448183
>>1488433
Какой из ассемблеров взять? Сижу под linux, люблю кроссплатформенность и поддержку нескольких архитектур.
04/10/19 Птн 09:35:13 1488449184
>>1488433
Сам с ассемблера начинал, троллолоша?
Аноним 04/10/19 Птн 09:35:37 1488450185
Аноним 04/10/19 Птн 10:20:03 1488459186
>>1488450
Разве gas не более кроссплатформенный?
Аноним 04/10/19 Птн 10:28:20 1488462187
>>1488449
Да, нам в вузе именно в такой последовательности и преподавали.
Аноним 04/10/19 Птн 10:32:09 1488464188
Аноним 04/10/19 Птн 10:38:27 1488470189
>>1488459
А он есть под винду? Всегда думал, что он юникс-онли.
Аноним 04/10/19 Птн 11:11:15 1488485190
>>1488470
В вики написано, что да.
Аноним 04/10/19 Птн 11:40:59 1488496191
>>1488459
Рот ебал этого GAS! Там синтаксис под древний парсер, который давился, если составляющие инструкции даны не в той последовательности, в которой их в маш.код складывать. Кровь из глаз, сука. Зато выглядит так коркорно, тип технарь дохуя, короче заебись тема, отвечаю.
Аноним 04/10/19 Птн 13:38:03 1488556192
>>1488464
Сейчас в вузе также преподают
Аноним 04/10/19 Птн 13:59:37 1488575193
>>1488556
Как повезёт, у нас вообще паскаль и делфи были нахуй, и только потом плюсы.
Аноним 04/10/19 Птн 16:08:10 1488622194
>>1488575
Ну я имел ввиду не в конченых шарагах
Аноним 04/10/19 Птн 16:26:29 1488631195
Аноним 04/10/19 Птн 16:29:39 1488635196
>>1488622
Наша шарага, конечно, не пример, но не всем же учиться в MIT.
Аноним 04/10/19 Птн 16:36:10 1488641197
>>1488631
FASM - это такой котлин он мира ассемблеров. Вот.
Аноним 04/10/19 Птн 17:17:09 1488664198
>>1488496
>Там синтаксис
Там заебись синтаксис, это ты еблан прст
Аноним 04/10/19 Птн 17:56:21 1488682199
>>1488366
Вывести сообщение юзеру, мол у тебя нет памяти или просто записать это в лог и выйти из программы.
Аноним 04/10/19 Птн 17:59:56 1488687200
>>1484257
А может все таки Кнута, наконец?
Аноним 04/10/19 Птн 18:21:15 1488705201
>>1488664
[eax+size∗2] или (%eax,%ebx,2) - что понятнее? Алсо, такая хрень чаще встречается на месте source операнды, соответственно, лучше ставить ее в конец, чтоб все лежало под линеечку (в AT&T для этого надо ставить дохера табов). % $ туда же - кровь из глаз. И так видно, где константа, а где регистр. Закорючки только мешают, они древним ассемблерам нужны были, чтоб в один проход все делать без разбору. Суффиксы b/w/l/q слитно с мнемоникоми, когда есть божественные Intel-овские byte, word, dword, qword... Короче, Intel - человекочитаемый.
Аноним 04/10/19 Птн 18:24:59 1488707202
>>1488664
Но осилить AT&T и забыть как страшный сон - must have, соглашусь. Он первичен, а Intel не везде есть. Образованный человек не имеет права не разбираться в нем в случае чего.
Аноним 04/10/19 Птн 18:46:53 1488715203
>>1488705
>что понятнее?
Второе, кровь из гоаз, это интеловская залупа, где они перемащают справа на лево, как пидоры, да и $0x20 более наглядней чем 20h
Аноним 04/10/19 Птн 18:50:07 1488717204
Правильно понимаю, что в поинтере хранится лишь адрес объекта и оффсет (т.е. size_t), и следовательно это вся инфа о типе? А что происходит, если несколько разных тайпов имеют один и тот же размер?
Аноним 04/10/19 Птн 19:28:52 1488744205
>>1488717
В поинтере хранится только адрес. Типы известны только во время компиляции, в рантайме их нет.
04/10/19 Птн 22:13:57 1488931206
>>1488715
> перемащают справа на лево
Да вы заебали. Что понятнее; x = 10 или 10 = x???
Аноним 04/10/19 Птн 23:01:21 1488969207
>>1488707
Образованный человек должен знать об AT&T всего две вещи: -masm=intel и -Mintel для gas/gcc и objdump соответственно.
Аноним 04/10/19 Птн 23:36:38 1489008208
064.gif (170Кб, 326x281)
326x281
>>1488682
>просто записать это в лог и выйти из программы.
А если ракеты не полетят?
Аноним 04/10/19 Птн 23:42:39 1489014209
>>1489008
В коде ракет нет malloc, мемоголовый
Аноним 05/10/19 Суб 00:23:05 1489037210
lol.jpg (80Кб, 600x600)
600x600
>>1489008
ХЬЮСТОН, У НАС ПРОБЛЕМЫ. ВАМ СЛУЧАЙНО НИКАКИЕ ЛОГИ НЕ ПРИХОДИЛИ?
Аноним 05/10/19 Суб 00:26:07 1489038211
Аноним 05/10/19 Суб 00:26:33 1489039212
Аноним 05/10/19 Суб 00:28:31 1489041213
Аноним 05/10/19 Суб 02:46:13 1489084214
>>1488717
>инфа о типе
Катись обратно в свою скриптопарашу. Здесь этого кала нет.
>А что происходит, если несколько разных тайпов имеют один и тот же размер?
Ничего, такая программа не компилируется, а значит не существует. Получится только текстовый файлик с твоими тупыми писульками, никому не нужный как и ты сам.
Аноним 05/10/19 Суб 03:42:56 1489087215
>>1488715
0x привычнее для сишников, но ты, как истинный демагог, мешаешь все в кучу, $ тут ни к чему. Насчет справа налево господин выше уже ответил. Алсо, операнда назначения ближе к мнемонике органично продолжает случаи, где является несменной частью инструкции, как та же DIV/IDIV, которая всегда оставляет целую часть в RAX, а остаток - в RDX. Ну, и про вертикальную читаемость выше писал.
Аноним 05/10/19 Суб 03:45:52 1489088216
>>1488969
GAS умеет в интеловский синтаксис? Ебать я танкист, оказывается можно без NASM обойтись. И ведь задним числом очевидно же, что раз gdb и gcc поддерживают...
Аноним 05/10/19 Суб 04:25:29 1489092217
Аноним 05/10/19 Суб 12:37:32 1489251218
>>1488931
У тебя справа некорректный код, ебланище.
Аноним 05/10/19 Суб 14:04:29 1489319219
>>1489251
Что, в юнитфактори перерыв что ли? пиздуй отседова
Аноним 06/10/19 Вск 02:50:05 1489810220
>>1489092
Ты че, совсем еблан? В каком месте, ХОТЬ РАЗ БЛЯДЬ СУКА ПОКАЗАЛ ПАЛЬЦЕМ А ТО МАТЬ ВЫЕБУ, кто-то писал, что не осилил? Это тот случай, когда легко в учении, тяжело в бою. Выучить AT&T можно за вечер, но к постоянной работе в жизни не привыкнешь - всегда будешь больше страдать физически. Этот синтаксис родился не от хорошей жизни, а от ограниченности тогдашних ассемблеров, не умевших в стек, чтоб читать предварительные указания с конца. Человеческое зрение, в отличие от однопроходного транслятора, склонно упускать детали по первом проходе и любит, когда уточнения выведены дальше, когда пространство слева и справа равномерно используется. И, конечно же, глаз только спотыкается об закорючки, в которых нет нужды, ведь для этого существует целая живая нейросеть, которая прекрасно распознает на лету, как выглядит константа, а как имя регистра, блджад. Как только появилась возможность, сразу реализовали такой человекочитаемый синтаксис. Я тоже любитель всей этой первичной романтики, но искать плюсы в том, что хуево по определению, попахивает шизой.
Аноним 06/10/19 Вск 02:56:47 1489811221
чет лажу спорол про "не умели". Для быстродействия, короче...
Аноним 06/10/19 Вск 03:08:16 1489813222
Аноним 06/10/19 Вск 04:42:50 1489819223
>>1489087
>операнда назначения
Просто потому, что у тебя слово "операнд" женского рода, ты тупой хуесос, и читать твои высеры бессмысленно.
Подучи русский язык, потом приходи.
Аноним 06/10/19 Вск 05:44:43 1489825224
Анон, привет, прошу накидать годных видео по Си на ютубе. Я не могу найти ничего интересного кроме туториалов для новичков(которые мне уже не нужны) и несмотрибельных индусских видео.

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

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

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

Вообще, хочется дойти до того уровня, чтобы устроится "джуном" куда-нибудь в системную разработку или embedded через ещё полгода дрочки Сишечки, но хз, нужны ли кому-нибудь такие джуны и набирают ли не студентов техвузов на такие места.
Аноним 06/10/19 Вск 08:34:25 1489849225
>>1489825
>Антон поделись
>напрямую в телегу
>сам не делится
иди нахуй
Аноним 06/10/19 Вск 10:52:46 1489905226
>>1489813
Бля, вот сейчас проснулся и понял, что еще пару постов назад толстота была.
Аноним 06/10/19 Вск 10:56:57 1489909227
>>1489819
Да я... Да я... Я "Войну и Мир" читаю, вообще-то, так что не надо! А с операндами не ебу, как там правильно, пушто, как уважающий себя элитарий, технолитературу читаю на инглише! Ну скажите ему, затролльте его, ну пазязя!
Аноним 06/10/19 Вск 11:07:57 1489914228
>>1489849
Так он написал, что можно в телегу, я так понял, если отвечающий сам не захочет мусорить в треде контентом зумеро-ориентированного формата, но в то же время сам шарит в подобном контенте, лол.
>>1489825
Анон, сам себе могилу роешь. Тебе все равно рано или поздно придется много читать скучные тексты без экшона. Вот прям неизбежно и дохуя, или ставь крест на карьере Сишника. Чем раньше превозмогёшь эту слабость, тем дешевле потом выйдет.
Аноним 06/10/19 Вск 12:05:29 1489941229
Есть материалы по написанию нейросетей на Си с нуля?
06/10/19 Вск 13:04:35 1489995230
>>1489914
> не захочет мусорить в треде контентом зумеро-ориентированного формата
У нас в треде вообще контента нет. Последние два треда - исключительно срачи.
Аноним 06/10/19 Вск 15:02:14 1490103231
>>1489825
>Но, к сожалению, не могу себя заставить читать гигантские талмуды на 300 страниц на английском, концентрации не хватает.
Так нахуй из профессии, маня.
Аноним 06/10/19 Вск 15:34:13 1490128232
Аноним 06/10/19 Вск 15:40:07 1490137233
>>1490128
Для практики и понимания сути. Я ведь не собираюсь тягаться с фреймворками типа tensorflow. Простенькие хотя бы научиться.
Аноним 06/10/19 Вск 15:47:05 1490143234
>>1490137
Для понимания сути нужно освоить matrix calculus и подифференцировать с ручкой и бумажкой. Кодить там нечего.
Аноним 06/10/19 Вск 16:08:35 1490169235
>>1490143
>matrix calculus
ебан это linear algebra
Аноним 06/10/19 Вск 16:13:31 1490176236
>>1490169
Нет. И будь ты проклят до седьмого колена со своим пуканьем не в тему.
Аноним 06/10/19 Вск 16:15:15 1490179237
>>1490176
Да. Матрицы и тд это все линейная алгебра в целом.
Аноним 06/10/19 Вск 16:18:01 1490184238
Аноним 06/10/19 Вск 16:20:36 1490188239
Аноним 06/10/19 Вск 16:21:52 1490190240
>>1490188
Кринж. Так не общаются.
Аноним 06/10/19 Вск 16:22:31 1490191241
>>1490143
Но в нейронах функции же.
Аноним 06/10/19 Вск 16:24:15 1490194242
>>1490188
Короче matrix calculus это часть multivariable calculus. Дифференцировал несколько переменных? Вот тоже оттуда примерно тема.
Аноним 06/10/19 Вск 16:37:37 1490207243
>>1490191
Нейроны это вообще не используемая в нейронках абстракция. Минимальная абстракция - это слой. В случае полносвязного слоя это f(W*x) например, где W - матрица весов (технически строка такой матрицы это веса одного нейрона, но это довольно бесполезная инфа), а x - вектор входных данных, f - функция активации.
В случае сверточного это f(conv(x, W)). Ну и так далее. Никаких нейронов нет, тебя наебали.
Аноним 06/10/19 Вск 19:43:19 1490387244
>>1489941
Пишешь на си интерпретатор питона или на чём там сейчас нейроночки пишут и хуяришь на питоне свою нейронку, запуская на своём интерпретаторе.
Аноним 06/10/19 Вск 19:59:45 1490409245
А си когда нибудь будет заменен в embdded?
Аноним 06/10/19 Вск 20:07:18 1490412246
>>1490409
Уже завтра там его полностью вытеснит раст.
Аноним 06/10/19 Вск 20:13:38 1490422247
>>1490412
Ж звтр тм г плнст втстнт рст
Аноним 06/10/19 Вск 21:21:36 1490520248
image.png (364Кб, 1280x1024)
1280x1024
Вапрос какова хуе. почему блять не 0 сука
Аноним 06/10/19 Вск 21:40:10 1490533249
>>1490520
e20 не влазит в флоат, е2 пробуй
Аноним 06/10/19 Вск 21:44:47 1490541250
Аноним 06/10/19 Вск 21:46:00 1490542251
>>1490533
блять вроде же вплоть до 38 степени можно в случае флоата, а тут всего лишь 20
Аноним 06/10/19 Вск 21:48:13 1490546252
>>1480534 (OP)
>годному средству программирования как на системном
Да.
>так и на прикладном уровне
Нет.
Аноним 06/10/19 Вск 22:21:36 1490596253
>>1490542
"Влезает" и "можно точно представить" - это разные вещи. Полный диапазон float ограничивается максимальной/минимальной поддерживаемой экспонентой, но для конкретной экспоненты ты всегда ограничен размером мантиссы, т.е., для каждой конкретной экспоненты у тебя есть "текущий" диапазон, который равномерно разбит на фиксированное количество чисел (223 позиции).

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

Все это приводит к забавным эффектам типа http://ideone.com/ZeHtT5
Аноним 06/10/19 Вск 22:24:20 1490600254
>>1490520
Когда работаешь с флоатами, пиши 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.
Аноним 07/10/19 Пнд 02:29:43 1490711255
Пиздец как же меня бесит этот ебучий тред. С удовольствием разъебал бы ебасосы половине пишущих сюда. Фу ебучие студентишки и вкатывальшики, срущие своим ебанутым недомнением. Сдохните
Аноним 07/10/19 Пнд 02:33:21 1490712256
>>1490520
float - ненужная бяка. В языке по дефолту double (как >>1490600 рассказал), что должно намекать прозрачно какой тип использовать.
Аноним 07/10/19 Пнд 08:35:06 1490792257
>>1490520
ты ебнутый в блокнотике писать?хотя бы нотпад++
Аноним 07/10/19 Пнд 11:33:46 1490842258
blob (152Кб, 1280x960)
1280x960
>>1490792
>notepad++
Ну посоветовал хуйню. Лучше стало?
Аноним 07/10/19 Пнд 11:47:11 1490844259
>>1480534 (OP)
Подскажите плес какую программу использовать на вын 10 для программирования на C. Знаю о VS 6, Builder.

Зачем мне это надо? Хочу попробовать для сравнения написать простейшее приложение в связке с OpenGL.
Аноним 07/10/19 Пнд 11:53:55 1490854260
>>1490844
Вопросы отпали, забыл, что всё в шапке есть.
Аноним 07/10/19 Пнд 13:39:36 1490935261
>>1482383
>Если хочется чего-то возвышенного, лучше изучать алгебраическую геометрию, теорию категорий и схемы

А еще дискретную математику. Без нее канплюктер саенс невозможен
Аноним 07/10/19 Пнд 13:42:26 1490939262
>>1482388

Computer Science - это все же более прикладная вещь, чем чистая математика.
Аноним 07/10/19 Пнд 13:43:38 1490941263
>>1482388
>Они месят говно и думают, что занимаются чем-то возвышенным.

Ну относительно промышленных программистов - да. Как и маняматики свысока смотрят на олимпудников по программированию
Аноним 07/10/19 Пнд 15:17:57 1490996264
Ben Klemens "21st Century C: C Tips from the New School" (2012)
Вообще не понял о чем и главное зачем.
Аноним 07/10/19 Пнд 15:33:35 1491015265
Nocomputernosci[...].png (91Кб, 528x390)
528x390
Аноним 07/10/19 Пнд 22:02:56 1491281266
зачем предлагать читать k&r если она устарела?
кто нибудь выполнял там задания?(вам не кажется что они не для новичков?)
Аноним 07/10/19 Пнд 23:05:12 1491348267
>>1491281
Типа классика,на самом деле советуют просто потому что самая распиареная.Если говорить об обучение с нуля,то это прата какой-нибудь наверное
Аноним 08/10/19 Втр 17:41:05 1491795268
>>1491281
>вам не кажется что они не для новичков?
Нет.
Аноним 08/10/19 Втр 18:01:50 1491806269
>>1491281
>зачем предлагать читать k&r если она устарела?
Есть же третье издание.
Аноним 08/10/19 Втр 18:04:57 1491808270
>>1491806
Нет. У оригинального K&R только два издания. А третье издание на руском - это перепечатка второго издания на русском.
Аноним 08/10/19 Втр 18:48:40 1491826271
>>1491795
>>1491806
это не оффиц версия. При этом я нашел там много ошибок > чем во втором издании
Аноним 08/10/19 Втр 18:49:17 1491827272
>>1491795
обоснуй? все задания выполнил?
Аноним 08/10/19 Втр 19:05:35 1491839273
>>1491281
>зачем предлагать читать k&r
Лучше книги нет
>если она устарела
Си тоже устарел
>кто нибудь выполнял там задания?(вам не кажется что они не для новичков?)
Они не для тупых, но ничего того, что бы не знал новичок, там нет
Аноним 08/10/19 Втр 19:20:48 1491841274
>>1491839
> Они не для тупых,
Это точно. Я над блядскими вертикальными гистограммами бился явно дольше нормального человека.
Мимо
Аноним 08/10/19 Втр 19:37:47 1491849275
>>1491839
после k&r вышло много изменений, вышло несколько стандартов, в которых писать некоторые вещи стоит по-другому.
Ок задания не для тупых. Кто их выполнил все? есть тут в треде герой?
Аноним 08/10/19 Втр 19:44:58 1491855276
>>1491839
> Си тоже устарел
Он не может устареть. Или кучу кода вдруг перепишут на rust? Нет, конечно. Ядро Linux как писали на C/C++, так и будут писать. А оно используется везде: от листрибутивов Linux до android смартфонов.
Аноним 08/10/19 Втр 20:03:38 1491860277
>>1491855
Устареть он может, как и кобол, и фортран, и куча других легаси-языков.
А за сочетание C/C++ вообще нужно пиздить обломком трубы.
Аноним 08/10/19 Втр 21:00:08 1491883278
>>1491860
> фортран
В науке используется до сих пор. Да, скорее из-за легаси.
> А за сочетание C/C++ вообще нужно пиздить обломком трубы.
А на чём писать? Неужели всё-таки на Rust?
Аноним 08/10/19 Втр 21:00:11 1491884279
>>1491860
блябуду лучше дрочить кобол/фортран чем гомогейскую хуйню для хеллоуворлдов
Аноним 08/10/19 Втр 21:26:30 1491902280
Ебаманый рот,как конвертировать символ в число?
Аноним 08/10/19 Втр 21:29:34 1491904281
Аноним 08/10/19 Втр 21:30:43 1491907282
>>1491904
Он же вроде со строкой?Мне именно один символ из массива надо
Аноним 08/10/19 Втр 21:37:31 1491915283
Аноним 08/10/19 Втр 21:38:30 1491917284
>>1491907
Нет смысла писать отдельную функцию ради arr[ i] - '0'.
Аноним 08/10/19 Втр 21:38:45 1491918285
>>1491915
А обратно?Число в символ?
Аноним 08/10/19 Втр 21:39:14 1491920286
Аноним 08/10/19 Втр 21:48:50 1491929287
>>1491920
if ( isdigit(n) ) { Не работает,но
подозреваю,что я дебил
n = n -'0';
n = 9- n;
n = n +'0';

}
Аноним 08/10/19 Втр 21:53:18 1491937288
>>1491929
Так все,я даун,забудьте
Аноним 08/10/19 Втр 21:55:17 1491939289
>>1491929
У тебя в n в результате получается:
9 - n + '0' + '0'

А что ты хочешь сделать?
Аноним 08/10/19 Втр 21:57:04 1491943290
>>1491939
Не,не все получилось,я тупанул с n
Аноним 08/10/19 Втр 22:16:28 1491973291
Как писать безопасный код на Си?
Аноним 08/10/19 Втр 22:20:57 1491976292
Аноним 08/10/19 Втр 22:23:16 1491979293
Аноним 09/10/19 Срд 00:43:03 1492097294
Что почитать про тесты кода си? чтобы также зоебис покрыть свой код как sqlite
Аноним 09/10/19 Срд 01:45:27 1492113295
>>1491902
Символы это и есть числа, тупорылый дегенерат.
Аноним 09/10/19 Срд 02:32:48 1492121296
Нужно написать свой принтф, переменное число параметров я уже понял откуда и как
Основная суть какая? Парсить первый аргумент-строку, пока не встречу какой-то флаг %f, как только встречу передавать следующий аргумент в отдельную функцию по обработке флагов? Никаких подьебов нет? Кроме даблов, хуй знает как их выводить вообще
Аноним 09/10/19 Срд 03:00:49 1492124297
>>1492121
Нахуя? Студент? Если да то забей, даже близко не сможешь. Если реально надо, то кури <libioP.h> , <libio/stdio.h>, <libio/ioputs.h>, только там все это реализовано в докрестовом ООП стиле, ахуеешь разбираться
Аноним 09/10/19 Срд 03:59:05 1492130298
Аноним 09/10/19 Срд 09:44:39 1492187299
>>1492121
> как только встречу передавать следующий аргумент в отдельную функцию по обработке флагов?
Сначала парсишь спецификатор, потом достаешь аргумент, потому что va_arg() хочет тип, и обязательно правильный тип.

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

> Кроме даблов, хуй знает как их выводить вообще
Обычная математика, делишь, умножаешь.
Аноним 09/10/19 Срд 12:33:57 1492245300
>>1492121
>Кроме даблов, хуй знает как их выводить вообще
Сейчас бы заниматься байтоебством, когда проц в одну инструкцию переводит float в int.
print_int((int )n);
putchar('.');
print_int((int )((n - (int n))∗prec))
prec - кол-во знаков после запятой
Аноним 09/10/19 Срд 15:21:13 1492321301
>>1492245
> Сейчас бы заниматься байтоебством
> когда проц в одну инструкцию переводит float в int
Тогда, наверное, для тебя не составит труда перевести в строку вот это число:
float value = ((union {uint32_t v; float f;}) { 0x00ffffff }).f;

На выходе я хочу увидеть точное значение. 0.000000000000000000000000000000000000023509885615​14728583455765982071533026645717985517980855365926​236850006129930346077117064851336181163787841796875. Именно его и выводит printf("%.149f", value).
Аноним 09/10/19 Срд 17:56:26 1492431302
sadpepe.png (194Кб, 493x418)
493x418
Анон, ты просто не представляешь какой я долбоёбище.

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

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

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

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

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

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

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

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

Мне не место в программировании, ибо я тупой мудак.
Аноним 09/10/19 Срд 19:24:49 1492513303
>>1492431
Норм, через подобное все проходят. А кто говорит, что нет, тот дохуя пиздит.
Аноним 09/10/19 Срд 20:31:01 1492569304
>>1492321
ой, перепрошую, панове, я трішечки обісрався
Аноним 09/10/19 Срд 20:33:45 1492573305
>>1492124
>студент?
Да, но это проект, который сдать надо, да и интересно написать
>>1492130
Покурю, спасибо
>>1492187
Примерно понял, спасибо
Аноним 09/10/19 Срд 20:36:34 1492581306
Я тот парень сверху с символами/цифрами,кароч,мне училка затирала ,что увеличение массива на единчку для цикла(17,30 строка),как то хуево меняет массив

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

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

https://pastebin.com/vxRiYYBc
Аноним 09/10/19 Срд 20:42:20 1492587307
image.png (59Кб, 1045x619)
1045x619
image.png (4Кб, 363x40)
363x40
Антоны, почему приведенный код дает такой странный вывод? По идее, функция должна изменить указатель на тот, который указывает на массив в ней созданный, но этого не происходит. Почему?
Аноним 09/10/19 Срд 20:47:01 1492593308
>>1492581
Ты просто пытаешься сделать так:
n = arr;
n++;

Такое тут не прокатит, потому что ты просто скопировал в переменную n, которая ничего с массивом общего не имеет, значение массива и затем изменяешь не сам массив, а эту переменную. Надо сделать так.
arr++;
Аноним 09/10/19 Срд 21:32:53 1492621309
>>1492121
У даблрв мантиссу считай
Аноним 09/10/19 Срд 21:34:32 1492623310
Аноним 09/10/19 Срд 21:46:25 1492628311
>>1492587
Ты в укозателях запутался. Тебе нужно сначала дереференснуть, а потом уже ебаться в арифметику. Т.е., ∗(∗a + i). Чтобы такого не происходило, и код нормально читался, не стесняйся создавать дополнительные переменные:
ptr = malloc(...);
...
...
∗a = ptr;
Аноним 09/10/19 Срд 21:54:43 1492637312
Аноним 09/10/19 Срд 21:54:48 1492638313
>>1492593
Если не сложно,ты можешь кусок кода написать,пожалуйста?
Аноним 09/10/19 Срд 21:59:26 1492642314
>>1492638
Легион не твоя армия.
Не в тему, но похуй
Аноним 09/10/19 Срд 22:03:35 1492646315
>>1492581
> увеличение массива на единчку для цикла хуево меняет массив
При N = 3 ты индексируешь массив целыми значениями [0;2]
> for (i=0;i<N+1;i++)
При i = 3 < 4 ты выходишь за пределы массива.
> int N=3
> char Ni[N]
> Введите размер массива
т. е. ты сначала объявляешь массив из N элементов, а потом вводишь его размер?
Аноним 09/10/19 Срд 22:18:13 1492651316
Аноним 09/10/19 Срд 22:30:02 1492661317
Добавьте в шапку в раздел онлайн утилит саит bitwisecmd.com
Аноним 09/10/19 Срд 22:31:40 1492663318
>>1492646
Тип,я не понимаю,как массив по другому прогонять?
Аноним 09/10/19 Срд 22:45:57 1492672319
>>1492651
При в строгом неравенстве (i < N - 1) при (i = N - 1) цикл будет завершаться без инициализации (N - 1)-го элемента. т. е. можно заменить на нестрогое неравенство (i <= N - 1) или же записать (i < N).
Аноним 09/10/19 Срд 22:49:31 1492675320
Аноним 09/10/19 Срд 22:52:34 1492681321
Аноним 09/10/19 Срд 22:54:08 1492682322
>>1492672
Как понял,может он сам ввод считает за символ?И вводит его в массив?
Аноним 10/10/19 Чтв 08:59:18 1492869323
>>1492431
Спасибо что предупредил.
Аноним 10/10/19 Чтв 11:09:14 1492943324
Какое исключение выкидывать сеттеру при инвалидном аргументе?
Аноним 10/10/19 Чтв 11:12:41 1492944325
>>1492943
>выкидывать
блять, тред перепутал, простите
Аноним 10/10/19 Чтв 16:26:39 1493191326
>>1492944
поздно, петушок, поздно
Аноним 10/10/19 Чтв 16:33:03 1493197327
>>1492943
>исключение выкидывать сеттеру
Ahahaha
Аноним 10/10/19 Чтв 17:02:43 1493226328
Аноним 10/10/19 Чтв 20:34:54 1493407329
Чтобы такое заебенить для проверочки знаний?
Аноним 11/10/19 Птн 00:02:31 1493576330
15527637215230.png (1646Кб, 3840x2160)
3840x2160
Аноним 11/10/19 Птн 00:20:37 1493592331
Аноним 11/10/19 Птн 00:30:47 1493594332
зачем учить си в 2019? какие перспективы?
Аноним 11/10/19 Птн 00:40:20 1493595333
>>1493197
A S S E R T
S R
S E
E S
R S
T R E S S A
Аноним 11/10/19 Птн 08:54:34 1493688334
Аноним 11/10/19 Птн 11:31:27 1493758335
>>1493688
Я работаю поваром. Я, как говорится, поварёнок.
Аноним 11/10/19 Птн 11:45:11 1493768336
>>1493576
basic bootloader сложнее, чем компилятор C?
Аноним 11/10/19 Птн 11:49:21 1493772337
Tiobeindex.png (84Кб, 906x443)
906x443
>>1493594
>зачем учить си в 2019? какие перспективы?
Может потому, что это самый популярный язык, наравне с Джавой?
Аноним 11/10/19 Птн 11:58:43 1493778338
>>1493772
> JS в жопе
> VB.NET в топе
Такой себе индекс для суждения о популярности.
Аноним 11/10/19 Птн 12:09:10 1493786339
>>1493772
это по количеству легаси кода?попробуй найти работу на пьюр си
Аноним 11/10/19 Птн 13:01:26 1493825340
>>1493768
Нет.
>>1493786
>попробуй найти работу на пьюр си
НИИ
И
И
>>1493778
>Такой себе индекс для суждения о популярности.
Он, кажется, ориентируется по гуглежу этого языка, поэтому популярный в иностранных ВУЗах VB.NET такой крутой. Так что рейтинг сосет.
Хотя если посмотреть сколько написано в данный момент на си, то он действительно будет в топах, только вопрос в том, что он нового не пишут и работы чистой не найдешь сука.
Аноним 11/10/19 Птн 13:02:24 1493826341
>>1493594
Перспектив нет. Учат си перед крестами в основном.
Аноним 11/10/19 Птн 13:03:11 1493827342
>>1493768
>basic bootloader сложнее, чем компилятор C?
Как по мне здесь сложности неадекватно распределены.
Аноним 11/10/19 Птн 14:52:52 1493916343
DoubleThumbsUpl[...].jpg (13Кб, 296x264)
296x264
Аноним 11/10/19 Птн 16:21:44 1494010344
Аноним 11/10/19 Птн 18:08:57 1494087345
Никак не могу понять, что за чистый си про который тут все говорят? Это те самые void••• ANUSAPI CALLBACK WIERDSTACKRULE fn(void•,void•,void,void•,void•, FUNC•, void,void) ???
Потому что это первое что мне представляется при слове ЧИСТОЕ СИ. а вы, сдается мне, представляете себе синтаксис уровня laba.cpp и подгораете что с ним нет работы? Серьезно?
Аноним 11/10/19 Птн 19:13:59 1494137346
Аноним 11/10/19 Птн 19:21:18 1494139347
>>1494087
>void••• ANUSAPI CALLBACK WIERDSTACKRULE fn(void•,void•,void,void•,void•, FUNC•, void,void)
Да, это то самое. Это memaset(228, anusStruct->huj->pidor);
11/10/19 Птн 19:23:18 1494142348
>>1494010
Да, у тебя %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"...).
Аноним 11/10/19 Птн 20:04:33 1494168349
Capture.PNG (4Кб, 596x131)
596x131
Аноним 11/10/19 Птн 20:48:44 1494194350
>>1494168
Создал указатель на константный строковый литерал и пытаешься менять ридонли память.
Аноним 11/10/19 Птн 21:28:57 1494220351
Capture.PNG (48Кб, 1479x239)
1479x239
>>1494194
Хм. Спасибо.
Я не ставил const нигде, но скопировал пример для C++. А именно это в С немного по-другому.
11/10/19 Птн 22:02:26 1494250352
>>1494220
Компилятор допускает, потому что легаси. Сначала было просто соглашение, что в "" писать нельзя. Если бы сделали строки константными указателями после того, как в языке появился const, сломался бы весь существующий на тот момент код, который ожидал и передавал обычные char *. Поэтому строки как бы const, но без const.
Аноним 11/10/19 Птн 22:42:34 1494268353
>>1494220
Запись по const указателю ловится во время компиляции, а запись в read-only память - во время выполнения. Первое нужно для себя, чтоб не забыться и не сломать логику. А константность "" заключается в самом способе реализации - использование readonly памяти, как и для исполняемого кода. Как анон выше написал, "" не являются const char ∗ в системе типов, потому что многие старые функции, часто используемые с "" в качестве аргументов, объявлены как func(char ∗, ...); и компилятор просто кидал бы error.
Аноним 12/10/19 Суб 00:41:51 1494406354
neponyalinteres[...].webm (354Кб, 640x360, 00:00:03)
640x360
Аноним 12/10/19 Суб 12:03:54 1494576355
>>1494142
Чувак,я не соображаю щас ничего,но очень срочно надо,пожалуйста скинь кусок готового кода
12/10/19 Суб 12:39:31 1494606356
>>1494576
Аноны, не скидывайте этому джахилю решение, а то совсем уже офигели. В двач как ГДЗ для них.
Аноним 12/10/19 Суб 12:54:03 1494611357
>>1494576
Дай ссылку VK. Скину в лс, чтоб тут не флудить.
Аноним 12/10/19 Суб 13:30:51 1494627358
>>1494611
Лучше тележку @yab0id4c

или gmail dovakin99999999@gmail.com

Постить тут вкшку не очень безопасно
Аноним 12/10/19 Суб 16:15:22 1494784359
why.png (112Кб, 1600x900)
1600x900
>>1480534 (OP)
где я проебался?
почему не выводит отдельные слова, а рвёт их?
12/10/19 Суб 16:29:34 1494807360
>>1494784
Потому что в UTF-8 один русский символ занимает 2 байта, а у тебя буфер всего 10 символов. Поэтому лучше играй с латиницей, пока язык учишь.
Аноним 12/10/19 Суб 16:41:22 1494814361
Аноним 12/10/19 Суб 16:48:07 1494818362
Аноним 12/10/19 Суб 16:48:49 1494819363
why1.png (42Кб, 659x464)
659x464
>>1494807
Спасибо, анон!
И главное, ведь, читал про 2 байта у utf-8, выше в этой же книге и вот теперь до меня дошло!
Мог либо перекомпилить, чтобы длиннее строка была или юзать wchar_t word[10];
Аноним 12/10/19 Суб 17:19:05 1494854364
>>1494791
лол, как можно было повестись на такую толстоту
Аноним 12/10/19 Суб 18:08:12 1494912365
>>1494854
> 2049
> Аноны скидывают паспортные данные с супом в тред, чтобы зарегаться на дваче
12/10/19 Суб 18:26:11 1494926366
>>1494818
UTF-8 everywhere == overhead everywhere.
Аноним 12/10/19 Суб 18:31:08 1494933367
Аноним 12/10/19 Суб 18:37:07 1494941368
>>1494926
Оверхед по сравнению с чем?
Аноним 12/10/19 Суб 18:39:17 1494945369
>>1494933
Мы не будем тебя диванонить, если ты извинишься перед бордой и Абу лично за свое наглое поведение.
Аноним 12/10/19 Суб 18:44:34 1494948370
>>1494945
О,великий и всемогущий Абу и милостивый народ Двощевской земли,я ,Антон Анонов,прошу простить мою наглость и неблагоразумие
Аноним 12/10/19 Суб 20:18:36 1495008371
>>1494948
от кринжа чуть об K&R голову не разбил
Аноним 12/10/19 Суб 20:20:21 1495010372
>>1494941
По сравнению с кодами, по которым можно прямо индексироваться.
Аноним 12/10/19 Суб 20:30:28 1495019373
>>1495010
Это только UTF32, с которым получается лютый оверхед по памяти.
Плюс, для простых операций вроде поиска подстроки или поиска ASCII символа (вроде разделителя пути \ или /) в UTF8 строке не нужно никакой дополнительной магии, с ней можно обращаться также как и с ASCII строкой.
Аноним 12/10/19 Суб 20:31:18 1495020374
>>1495008
Разбил бы до конца,услугу всем оказал
12/10/19 Суб 20:34:33 1495022375
>>1495019
> с ней можно обращаться также как и с ASCII строкой
У меня от тебя имена файлов в линуксе, которые могут быть чем угодно, лишь бы \0 на конце. И ебись как хочешь.
Аноним 12/10/19 Суб 21:00:32 1495035376
>>1495022
Сажедебил, разберись с UTF8, потом пиши.
Аноним 12/10/19 Суб 22:42:48 1495116377
Поясните плес за эту хунью
>'strcmpi': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strcmpi. See online help for details.
Аноним 12/10/19 Суб 23:04:23 1495128378
>>1495020
не экстраполируй, мань
Аноним 12/10/19 Суб 23:28:15 1495152379
>>1495116
Делай, что компилятор тебе говорит. Он умный.
Аноним 12/10/19 Суб 23:40:16 1495166380
>>1495152
но онлине хэлп еще меньше говорит
Аноним 13/10/19 Вск 01:52:42 1495262381
>>1494250
>>1494268
То есть в С++ можно так сделать, а в С без malloc не обойтись?
Я правильно понял?
Я задачку решаю на codewars.
Аноним 13/10/19 Вск 03:57:26 1495293382
>>1495262
Достаточно написать char strin[] = "HELLO WORLD";, тогда константая строка скопируется на стек и будет все работать
http://ideone.com/Lt5D6x
Аноним 13/10/19 Вск 06:23:26 1495321383
>>1495019
У белых людей уже 20 лет UTF16 - идеальный аналог char для современной эпохи.
Аноним 13/10/19 Вск 06:34:03 1495326384
>>1495321
>аналог char
чар 8 байт (иногда 7)
покормил
Аноним 13/10/19 Вск 06:34:25 1495327385
Аноним 13/10/19 Вск 07:07:48 1495334386
>>1495321
Ниет. Символов в юникоде внезапно больше, чем влазить в 16 бит, так что UTF16 ничем не лучше, чем UTF8, но при этом жрет больше места.

Так что или UTF8, или UTF32.
Аноним 13/10/19 Вск 07:20:43 1495335387
>>1495334
>Ниет. Символов в юникоде внезапно больше
Дия. Внезапно, в реальной жизни более чем достаточно для всеязыковых программ. Нет дикого жора лишней памяти как в UTF32 и тем более нет пизданутого парсинга как в UTF-8, этот шлак вообще неюзабелен кроме экспорта на диск.
Так что сосите писосы, дегенераты, но UTF16 как был идеально оптимальным для программного кода, так и остался.
Аноним 13/10/19 Вск 07:26:33 1495337388
>>1495335
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.
Аноним 13/10/19 Вск 07:37:14 1495340389
>>1495337
>Всё равно на серверах дохуя рамы и срать на лишний жор 32 бит, или дохуя ядер и срать на оверхед парсинга UTF-8.
В голосину
Аноним 13/10/19 Вск 11:35:55 1495416390
Пацаны,покажите ебаманный динамический массив символов ,а то хуета какая то получается
Аноним 13/10/19 Вск 18:44:19 1495816391
Аноны, прохожу квесты 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?
Аноним 13/10/19 Вск 19:56:04 1495910392
>>1495816
1. Так и есть, стек растёт вниз. -0x8 потому что 4 байта уже заняты push %ebx
2. Да, буфер заполняется от вершины стека, последнее значение будет после val
3. Связано, в little-endian 0xdeadbeef побайтово записывается как 0xef 0xbe 0xad 0xde, от младших адресов к старшим
Аноним 13/10/19 Вск 19:57:16 1495911393
>>1495816
>начала стека отнимается 8, а не 4?
Передача параметров перед вызовом
call 80483f0 <puts@plt>
>на стеке как и в буффере
Long хранится в обратном порядке, в таком его и нужно записывать в буфер char
Аноним 13/10/19 Вск 20:05:02 1495917394
>>1495911
в puts передаётся только $0x8048690
Аноним 13/10/19 Вск 20:12:23 1495923395
>>1495917
>в puts
У тебя путса в исходниках нет
Аноним 13/10/19 Вск 20:18:02 1495929396
>>1495923
Естественно блять его там нет, он же в libc.
И исходники не мои, если что
Аноним 13/10/19 Вск 20:20:59 1495931397
Как написать арбуз на чистом си?
Аноним 13/10/19 Вск 20:22:52 1495934398
>>1495923
А если ты про то что в сорсе printf, так это выебоны gcc
Аноним 13/10/19 Вск 20:29:03 1495937399
>>1495934
>так это выебоны gcc
Кокой выебистый, на хуй он заменяет?
Аноним 13/10/19 Вск 21:03:17 1495959400
>>1495937
puts быстрее printf потому что ему не надо ебаться с форматной строкой
Аноним 13/10/19 Вск 21:28:12 1495979401
ylszuHpV5-I.jpg (161Кб, 1080x809)
1080x809
Дебильный вопрос:
Чтобы писать на питоне мне надо скачать питон с оффсайта, прописать его в PATH, чтобы командная строка подхватывала, и установить редактор кода с посветкой синтаксиса вроде Sublime.
В принципе, можно уже начинать работать.

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

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

Или особенность компилируемого языка не позволяет так делать?
Аноним 13/10/19 Вск 21:31:41 1495981402
>>1495979
L I N U X
I
N
U
X

на самом деле, можно конечно
Аноним 13/10/19 Вск 21:31:49 1495982403
>>1495979
Качаешь gcc или clang и прописываешь точно так же в path. Можешь заодно скачать make и cmake, иначе заебешься компилировать проект из >2 файлов.
В линуксе кстати это проще делается, пишешь sudo apt install gcc && apt install make, ничего в path прописывать не надо, сразу идешь байтоебить.
Аноним 13/10/19 Вск 23:15:12 1496035404
>>1495979
двачну господъ на Линуксе,ибо сам им являюсь.
На работе же я 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 на борту.
А так дело твоё: можно набрать код хоть в нотепаде, откомпилить в консоли что на винде что на *никсе и радоваться жизни.

>Или особенность компилируемого языка не позволяет так делать?
особенность компилируемого языка состоит в том, что его надо компилировать. И всё. Прелюдии с кодом компилятор не заботят.
Можно хоть в нотепад++ плагинов наставить, чтобы он компилил все, что ты накодил там. Только нотепаду надо будет указать, где лежит компилятор.
Аноним 14/10/19 Пнд 03:29:15 1496135405
>>1495982
>В линуксе кстати это проще делается, пишешь sudo apt install gcc && apt install make, ничего в path прописывать не надо, сразу идешь байтоебить.
Сразу идешь читать доки по ключам компилятора, make и gdb
Аноним 14/10/19 Пнд 03:38:36 1496137406
>>1496135
Ну если тебя нужен make, то идешь. Если тебе нужен gdb, тоже идешь. А если тебе нужно отладить, то ты уже заранее установил qtcreator с интерактивной отладкой на кнопочку и там же пишешь код
Аноним 14/10/19 Пнд 20:01:16 1496649407
Ну мля,помогите

> Пацаны,покажите ебаманный динамический массив символов ,а то хуета какая то получается
Аноним 14/10/19 Пнд 20:12:47 1496654408
Аноним 14/10/19 Пнд 20:55:07 1496694409
>>1496654
Ебать ты мемер,но спасибо
Аноним 14/10/19 Пнд 21:01:48 1496701410
>>1496654
А с пользовательским размером?Заданным юзером?
Аноним 14/10/19 Пнд 21:25:22 1496725411
>>1480534 (OP)
>MISRA
Он запрещает использовать адресную арифметику с указателями(инкремент и декремент указателя).
Как тогда без этого обходиться?
Например, при выводе нуль-детерминированной строки куда-нибудь или перемещении N переменных из одного места в другое.
Аноним 14/10/19 Пнд 21:26:09 1496727412
>>1496725
> N переменных
N переменных одинакового типа идущих подряд.
уточнение
Аноним 14/10/19 Пнд 21:32:46 1496735413
Аноним 14/10/19 Пнд 21:36:06 1496738414
>>1496725
>Например, при выводе нуль-детерминированной строки куда-нибудь или перемещении N переменных из одного места в другое.
Например, циклом for от 0 до максимального размера буфера.
Аноним 14/10/19 Пнд 21:38:56 1496745415
Аноним 14/10/19 Пнд 21:39:58 1496746416
>>1496745
>>1496735
Пользовательский размер и сам массив,цифры поменять на обратные,и все,но не могу понять ,почему не дает ввести строку
Аноним 14/10/19 Пнд 21:47:04 1496755417
Аноним 14/10/19 Пнд 21:49:38 1496757418
>>1496755
Лол,как лучше расписать?
Аноним 14/10/19 Пнд 21:52:17 1496759419
>>1496757
Не слушай долбоёба, настоящая проблема в том, что getchar считывает перевод строки после p.
Аноним 14/10/19 Пнд 21:53:49 1496762420
>>1496759
Допустим,он просто считывает EOF или /n и сбрасывает?
Аноним 14/10/19 Пнд 21:58:51 1496767421
>>1496762
Да, когда вводишь p, во входном потоке будет, допустим, 10\n. scanf заберёт 10, а \n останется. getchar его считает и break-нет цикл.
Аноним 14/10/19 Пнд 22:00:18 1496768422
>>1496767
А как исправить?Проверка чтобы первый С был любой?Или пропустить его как то?
Аноним 14/10/19 Пнд 22:01:58 1496771423
Аноним 14/10/19 Пнд 22:05:45 1496776424
>>1496768
Если массив вводишь не по цифре на строку, а слитно, то выкинь второй getchar из цикла

Аноним 14/10/19 Пнд 22:08:25 1496781425
>>1496771
Огромное спасибо
>>1496776
Уже,ты не уходи у меня еще некоторые вопросы есть тривиальные)
Аноним 14/10/19 Пнд 22:13:16 1496791426
>>1496776
Мне нужно чтобы считывало максимум 100 эл-ов,проверка на дурака есть,но у меня сомнения насчет максимума,если while (i< p-1)и p=101,то он проверит до 99 элемента,100 элемент станет /n,да?

Если лимит в 101,то он будет с 0-99 будут элементы с символами,а последний 100- /n?
Аноним 14/10/19 Пнд 22:22:33 1496806427
>>1496791
100 элемент запишется только после цикла, в цикле всегда i<100
Аноним 14/10/19 Пнд 22:24:54 1496810428
>>1496806
Окей,значит все правильно?

Оверфлоу баффера не будет?Типа элемент какой нить закродется за массив и на "миллион и первый раз" прога не сработает и ебгнется RAM?

Аноним 14/10/19 Пнд 22:30:57 1496813429
>>1496810
Не будет, i после цикла максимум p-1, если break раньше не случился
Аноним 14/10/19 Пнд 22:32:03 1496816430
>>1496813
Фух,тогда все.Бессконечно благодарю за оказанную помощь,/б/ратик
Аноним 14/10/19 Пнд 22:50:54 1496832431
>>1496813
Чувак,извини за беспокойство ,но еще помоги плез:

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


https://pastebin.com/2P6Z7Dw9
Аноним 14/10/19 Пнд 22:51:59 1496837432
>>1496832
ой, иди ты нахуй
мимо
Аноним 14/10/19 Пнд 22:52:55 1496839433
>>1496837
Иди своей дорогой,прогер
Аноним 14/10/19 Пнд 23:04:32 1496846434
>>1496832
>if (isalpha(p))
Проверяешь, что число в p - не ASCII-код буквы (как раз начинаются с 65)
Аноним 14/10/19 Пнд 23:05:25 1496848435
Лишняя проверка, в общем
Аноним 14/10/19 Пнд 23:06:07 1496849436

>>1496848
А если символ введут?
Аноним 14/10/19 Пнд 23:07:36 1496851437
>>1496848
ЧТобы исправить не вывод последнего числа я p++ после ввода и проверок
Аноним 14/10/19 Пнд 23:12:14 1496852438
>>1496849
%d в scanf читает только числа
Аноним 14/10/19 Пнд 23:17:22 1496854439
>>1496852
А,лол,тогда все опять решено,p++ вроде не ломает,я проверил если p==102(101 элемент ,с 101 /n) выкидывает,осталось сделать принудительный ввод подходящего числа,но это я сама вполне сделать могу(если есть свободная минутка можешь помочь ;3 )
Аноним 15/10/19 Втр 01:00:08 1496909440
Screenshot 2019[...].png (481Кб, 3356x2056)
3356x2056
>>1480534 (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]
Аноним 15/10/19 Втр 01:28:41 1496916441
Аноним 15/10/19 Втр 02:12:05 1496927442
>>1494250
>>1495293
Извините что беспокою.
Но.
Где прописано что char* это const?? Разве это не декларация массива char[] просто через указатель?? Каков механизм? Я просмотрел спецификацию, но то ли я хуеглазый, то ли это какое-то соглашение. Опять же, каков механизм?
Мне это важно, потому что я не догоняю какую-то фундаментальную мелочь и мне это мешает.
Аноним 15/10/19 Втр 02:16:59 1496929443
>>1496927
char c1[] = "nosorog"; - это массив на стэке, не константный
const char* c2 = "zhiraf"; - это read-only память в секции экзешника
Аноним 15/10/19 Втр 02:25:34 1496931444
Аноним 15/10/19 Втр 02:55:18 1496934445
>>1496929
>char c1[] = "nosorog"; - это массив на стэке, не константный
>const char c2 = "zhiraf"; - это read-only память в секции экзешника

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

Становится
const char* c1 = "lol"
Аноним 15/10/19 Втр 03:36:43 1496951446
>>1496931
>Например, системный вызов UNIX "execl"

Может перестанем насиловать труп?
Аноним 15/10/19 Втр 03:37:02 1496952447
>>1496931
Огромного добра тебе!!
Аноним 15/10/19 Втр 04:36:33 1496965448
>>1496931
>Смотри: 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? Ничего не нашел.
Аноним 15/10/19 Втр 04:57:50 1496971449
charindex.PNG (12Кб, 907x220)
907x220
11338311.jpg (88Кб, 1200x630)
1200x630
Аноним 15/10/19 Втр 07:12:02 1496990450
>>1496931
>прочитай пункт 2 в этом факе
Что за шизофазия там написана?
- Имя массива не существует, он считает его макросом?
>он генерирует код, позволяющий переместиться к месту под именем "a", перемещается на три символа вперед и затем читает требуемый символ
Ничего не понял. Кто, куда и как перемещается? Веллосипедист из точки А в точку Б? Розовые слоники в страну чудес? На какие символы происходит "перемещение"? Генерится машинный код, в компьютере нет никаких символов!

f(a)
char a[];

Господи, что это за код?
f(a) char a[];
У меня крыша поехала, что это значит?
Аноним 15/10/19 Втр 11:04:19 1497103451
>>1496927
> то ли это какое-то соглашение
Вот. char *x = "test" - это НЕ константный указатель, по которому нельзя писать, потому что ты присвоил ему строковый литерал. Под "нельзя" подразумевается UB, компилятор может тебе ничего не сказать, в рантайме запись может оказаться успешной (например, если под DOS соберешь), но на какой-нибудь другой платформе твой код упадет. Поэтому просто не пиши, и все будет хорошо.
Аноним 15/10/19 Втр 11:14:47 1497109452
>>1496990
> в компьютере нет никаких символов
В контексте Си символы и байты равнозначны.

> Кто, куда и как перемещается?
Виртуальная позиция в памяти. Да, сформулировано плохо, но понять можно. Имеется в виду, что для 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;
{ ... }
Аноним 16/10/19 Срд 04:26:14 1497687453
lzuaso.jpg (40Кб, 600x600)
600x600
>>1497103
Прошу прощения аноны, я долбоеб, и как видно навсегда. После 2-х суток курения спецификации и FAQ-ов и всевозможного гугления, я досконально разобрался в вопросе.
Сегодня увидел что именно этот блядь вопрос досконально объясняет Прата, буквально через пару страниц.
С онлайн задачками покончено, пока не пройду всю книгу и не решу задачи оттуда.
Спасибо большое всем.
>>1496927-кун
Аноним 16/10/19 Срд 04:29:27 1497689454
>>1496931
Ты хоть понимаешь какую просто дикую, сочную годноту принес?
Мое понимание масштабов пиздеца прокачалось до небес.
Аноним 16/10/19 Срд 12:17:32 1497831455
image.png (6Кб, 708x112)
708x112
ку двач, есть код цикла с созданием процесса, поясните тупому, что происходит, что первее создается, новый процесс или новый шаг цикла?
Аноним 16/10/19 Срд 12:24:58 1497834456
>>1497831
по-моему форк-бомба происходит
Аноним 16/10/19 Срд 12:28:14 1497838457
>>1497834
Я разобрался, нет это не форк-бомба, ведь он не выходит из цикла и не увеличивает i перед созданием ноаого процесса
Аноним 16/10/19 Срд 20:16:36 1498152458
>>1497834
2^3 процессов в итоге
Аноним 17/10/19 Чтв 03:32:28 1498340459
image.png (426Кб, 1080x1074)
1080x1074
>>1480534 (OP)
Как это реализовать? Пропустил одну пару и уже нихуя не ясно. Как с помощью main прочитать файл, тем более указывая его имя а не путь к нему
Аноним 17/10/19 Чтв 04:56:30 1498355460
>>1498340
Найти сайт с решениями простых задачек и сопоставлять решения, используя всю мощь своего IQ. Компилировать эти решения, менять рандомные вещи и смотреть что происходит. И так пока не придет понимание.
Аноним 17/10/19 Чтв 05:03:25 1498360461
>>1498355
Мне надо не решение как считать среднее арифметическое или кол-во чисел больших предыдущего, а то как сделать чтобы программа прочитала данные из файла. Есть file.txt и из него надо достать числа и сделать массив размера n где n это количество чисел в файле
Аноним 17/10/19 Чтв 05:18:24 1498363462
>>1498360
Запрос в гугле: c++ примеры чтения из файла
Аноним 17/10/19 Чтв 06:05:00 1498366463
Аноним 17/10/19 Чтв 08:26:31 1498403464
>>1498366
Это сильный заход для человека, который и fopen загуглить не смог.
Аноним 17/10/19 Чтв 08:40:14 1498407465
Аноним 17/10/19 Чтв 19:51:41 1498800466
Привет, аноны. Какой инструментарий посоветуете, чтоб писать под DOS? Захотелось накатать какую-нибудь простенькую игрушку, но графические библиотеки или сложные, или какое-то игрушечное говно, по сему остановился на этой единственной годной игровой платформе. Там, вроде как, все просто, пишешь себе в фрейм 320x200x8, в хуй не дуешь... Скачал, значит borland turbo c 2.01 - годная IDE говорят, но после vim не могу себя заставить в этом. Решил взять vim71x16, а от borland только компилятор юзать, но не тут то было. Пробую "tcc hello.c", а оно даже stdio.h не находит. Хуй знает, как под этим DOSBox кодить вообще.
Аноним 17/10/19 Чтв 20:43:25 1498846467
>>1498800
> после vim
Ясно.

> Какой инструментарий посоветуете, чтоб писать под DOS?
Turbo C, Watcom C, Digital Mars C, Microsoft C четвертая Visual C++ в дос точно могла, пятая - не знаю - тысячи их.
Аноним 17/10/19 Чтв 21:38:30 1498904468
>>1498800
Открой в линуксе терминал на весь экран и представь, что это DOS. Ты даже vim сможешь пользоваться.
Аноним 17/10/19 Чтв 22:28:00 1498930469
>>1498904
Понимаю, что рофл, но текстовая консолечка тут ни при чем. Просто раз уж не разрабатывать ничего масштабного, то хоть учиться грамотно использовать ресурсы и обходиться без готовых велосипедов.
Аноним 17/10/19 Чтв 22:40:53 1498936470
>>1498930
Так че тебе нужно? Рисовать чайники без опенжл? Так для этого дос не нужен.
Аноним 18/10/19 Птн 00:30:54 1498998471
>>1498936
Даже создание 2d игрушки должно быть чем-то интересным, когда есть ограничения по памяти и мощности. Не получится совсем уж гавнокодом все делать.
Аноним 18/10/19 Птн 01:21:03 1499020472
>>1498800
Почитай game engine black book про doom и wolfenstein, там подробно описано как в те временя игори писали ты так не сможешь

Еще есть computer graphics black book by Michael Abrash, классика своего времени, доступна бесплатно.
Аноним 18/10/19 Птн 09:39:27 1499115473
>>1497109
>В контексте Си символы и байты равнозначны.
Не думаю. Строки бывают мультибайтовые или юникодные. Байту эквивалентен только тип char, но это конкретный тип с именно таким названием, а никакой не абстрактный "символ".
>Виртуальная позиция в памяти.
Что это? Процессор работает либо с числами напрямую, либо с указателями. Что за маня-"позиция" такая? Не понимаю. Я знаю позицию-указатель на выполняемую инструкцию в специальном регистре процессора. Вот это можно назвать абстрактный словом "позиция", не вдаваясь в детали, ведь оно само работает на уровне процессора и программиста не касается, но с массивами не такой случай.
А что я понимаю, так это то, что массив не является "переменной-указателем языка Си", но это вовсе не значит отсутствие указателя, строки без указателей не работают. Там нарисована схема бинарного представления массива и указателя на литерал, и в массиве отсутствует указатель. Как тогда это работает? Магия?
>Это значит, что ты слишком молодой по сравнению с сишкой.
Спасибо, но такого написания даже во времена DOS не было. Слишком молодой, лол.
Аноним 18/10/19 Птн 10:02:11 1499124474
Ку, не понимаю че происходит с открытым файлом если мы форкаем процесс. Новый процесс получает копию открытого файла или файл закрывается для одного процесса, и открывается для нового?
Аноним 18/10/19 Птн 10:03:29 1499125475
>>1498998
Поставь ограничения по памяти в виртуальной машине и вперед.
Аноним 18/10/19 Птн 10:27:16 1499139476
>>1498998
Тогда лучше под NES что-то делать. Какие у DOS ограничения, практически никаких.
Аноним 18/10/19 Птн 10:36:58 1499145477
>>1499124
>получает копию открытого файла
Копию дескриптора
Аноним 18/10/19 Птн 14:38:54 1499322478
>>1499139
ух бля, а ведь это идея...
Аноним 18/10/19 Птн 14:51:45 1499338479
>>1499322
Ну если сишка-хуишка, я бы смотрел в сторону первой соньки. NES это все-таки больше про 6502 ассемблер
Аноним 18/10/19 Птн 16:43:23 1499411480
>>1499338
Упитанно. Язык Си как таковой - бесполезная хуйня. Там везде главное - железо, нужно разбираться в апи конкретной системы. А учитывая что в треде даже винапи никто осилить не может (все пукают в консольку), какие там несы/плейстэйшены, окстись.
Аноним 18/10/19 Птн 17:19:32 1499436481
const.PNG (17Кб, 967x270)
967x270
Анон помоги пожалуйста.
Собственно вопрос: почему??? ни на этапе компиляции ни на выполнении нет ошибки?
Везде const же!
Аноним 18/10/19 Птн 17:22:15 1499438482
Аноним 18/10/19 Птн 17:27:14 1499439483
>>1499438
>>1499436
Блядь, действительно проебался, уже разобрался, прошу прощения.
Аноним 18/10/19 Птн 18:02:24 1499462484
oldstylefunc-ms[...].png (30Кб, 458x749)
458x749
>>1499115
> и в массиве отсутствует указатель
Зачем ему там быть?
> Виртуальная позиция в памяти. Что это?
Чтобы прочитать символ, процессору нужно выставить на адресную шину адрес. Этот адрес нужно вычислить. Под позицией/перемещениями в том 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), там почти все вычистили к шестой версии, но если покопаться, можно пару десятков мест найти.
Аноним 18/10/19 Птн 18:44:01 1499479485
Нужно определить константы разными для разных ос, правильно делаю? А то компилятор подсвечивает 4 строчку темным
#if defined(_WIN32) || defined (_WIN64)
#define ...
#elif defined(__linux__) || defined(__APPLE__)
#define ...
#endif
Аноним 18/10/19 Птн 18:54:41 1499485486
image.png (18Кб, 591x317)
591x317
Я тут слышал, что у нормальных людей все должно компилиться с -Werror, в связи с чем озадачен, как адекватно сделать пикрил хуету (4-й аргумент pthread_create). Ну не маллокать же 4 сраных байта, в конце концов! qsort_r туда же, хоть на лицо ссыте, а я не откажу себе в удовольствии сортировать равнодлинные подпоследовательности без нуль-терминаторов таким макаром:
qsort_r(base, nmemb, size, memcmp, size);
Ладно, допустим тут достанет каста, size_t и указатель обычно соразмерны long, но все таки блджад...
Аноним 18/10/19 Птн 18:58:42 1499489487
image.png (19Кб, 661x311)
661x311
Ой, перепрошую панове, я трошки довбойоб. Вже пофіксив.
Аноним 18/10/19 Птн 20:39:59 1499541488
>>1499485
> size_t и указатель обычно соразмерны long
А вот в винде - нет.

> маллокать
По-хорошему - да. Заодно положишь туда же sockaddr, все равно пригодится рано или поздно. А заодно и еще какие-нибудь данные, которые process() стал бы выделять сам.
Аноним 18/10/19 Птн 20:41:12 1499542489
>>1499411
>сравнивает винапи с консолью
Аноним 18/10/19 Птн 22:56:44 1499653490
>>1480534 (OP)
> Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев!
А как понять достаточно ли я гуманитарен, чтобы читать это? С программированием знаком был поверхностно с С++ в 9 классе, тогда форк лазаруса от борланда у нас на компах ставили и мы в них всякие программки писали. Немного умею в линукс. Люблю математику и физику, за всю школьную жизнь 11 классов, сейчас в 12-ом ни одной тройки.
Достаточно ли этого, чтобы я мог называть себя технарём?
Аноним 18/10/19 Птн 22:59:59 1499658491
>>1499653
> А как понять достаточно ли я гуманитарен, чтобы мне нужно было читать это вместо первых двух книг?
Фикс
Аноним 18/10/19 Птн 23:36:02 1499674492
>>1499653
>Люблю математику и физику
Бедняга
Аноним 18/10/19 Птн 23:51:29 1499686493
>>1499541
Здравая мысль, однако. Но что делать в случае с тем же qsort_r? Этот void ∗ так и просится третьим аргументом memcmp. Вот ни разу не прикольно писать какие-то обертки, чтоб не выходить за рамки предназначения типов. Там же void ∗ крайним параметром задекларировали для максимальной универсальности, но никак не для того, чтоб я пил кофе из графина. Интересно узнать, насколько дурной тон подобные шорткаты? Сильно обоссывают за такое?
Аноним 18/10/19 Птн 23:58:57 1499689494
>>1499541
Алсо, насколько я понимаю, с float/double подобные не прокатит, потому что вызывающий код сложит в RCX/RDX/R8/R9 ничего не подозревающий обработчик будет искать в XMM0/1/2/3. СУКАНАХУЙБЛЯДЬ
Аноним 19/10/19 Суб 08:15:37 1499788495
>>1499462
Благодарю от души, теперь всё понятно. Если бы еще та писанина была написана подобным образом.
Потупил глядя на код, а потом решил проверить и точно, просто массив и адрес массива (в коде offset a) это одно и то же. Ну и дыркозатыкатели, млин.
Аноним 19/10/19 Суб 20:51:58 1500209496
Почему до сих пор никто не додумался добавить материалы по предметным областям в треды?
Заодно исчезнет куча вопросов типа "Что же мне запилить на ЭТОМ язык программирования" и "Почему мне запилить ЭТО именно на ЭТОМ языке"?
В СИ это как минимум микроконтроллеры и прыщи.
Аноним 19/10/19 Суб 23:23:46 1500332497
изображение.png (59Кб, 977x123)
977x123
Тут речь идет о настоящих файлах, которые можно прям на флешку записать, например, или это какая-то фикция?
Аноним 20/10/19 Вск 00:41:06 1500372498
>>1500332
Нет, это файловые дескрипторы (неужели никогда не слышал, что в *nix все есть файл?), по умолчанию они связаны с терминалом. При желании ты можешь заставить шелл использовать вместо терминала реальные файлы, примерно так: myprogram < stdin.txt > stdout.txt 2> stderr.txt
Аноним 20/10/19 Вск 01:19:27 1500391499
>>1500332
Про linux не знаю, в шинде это хэндлы файловых объектов в ядре, эти объекты ссылаются на объекты устройств, с объектами устройств связаны драйверы. Когда прога читает/пишет драйверы получают соответствующие запросы. Что конкретно они с этими запросами делают зависит от конкретного места записи/чтения.
Если это консоль, драйвер консоли перенаправит запрос соответствующему процессу консоли и вернет ответ. Если это реальный файл, запрос пройдет по всему стеку драйверов от файловой системы до диска. Ну короче ты понял.
Аноним 20/10/19 Вск 02:57:30 1500404500
>>1500332
Книжку писал юниксоид, там всё - файлы. В винде так не принято, да и тут написано же "стандартные потоки ввода/вывода" консоли.
На самом деле это устаревшая ерунда, ведь если программа с WinMain никаких консолей не создается. Если надо, можно создать консоль вручную или прицепить чужую.
Аноним 20/10/19 Вск 15:59:22 1500691501
>>1500404
В винде хэндлы принципиально ничем не отличаются. GetStdHandle(STD_OUTPUT_HANDLE) - точно такой же "файл", в который можно писать с помощью WriteFile.

> это устаревшая ерунда
Виндой мир не ограничивается.
ПЕРЕКАТ Аноним # OP 20/10/19 Вск 18:44:07 1500892502
Аноним 22/10/19 Втр 18:48:05 1502383503
>>1498403
>fopen
эм бля я изначально так и сделал, но это хуйня которая мне не нужна
Аноним 04/11/19 Пнд 21:28:17 1513310504
S0NLamQ-h8s.jpg (16Кб, 294x308)
294x308
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов