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

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

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

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

78 Кб, 792x1023
C Programming Language #27 # OP 27 дек, 03:14 1112990 В конец треда | Веб

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

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

Что читать:

- Классика от Отцов: http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Годное пособие для гуманитариев: http://web.archive.org/web/20160727235220/http://c.learncodethehardway.org/book/ (автор внезапно захотел денег)
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- man/Dash/zealdocs

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

- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- 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://www.iso-9899.info/wiki/Books#Learning_C

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

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

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

- №24: https://arhivach.org/thread/291766/
- №25: https://arhivach.org/thread/303902/
- №26: https://arhivach.org/thread/315652/

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

Ответы13126133251773618648191832154223023258512704527270282803482435899

27 дек, 05:59 2 1113015

первый среди смузихлебов

Ответы13027

27 дек, 09:34 3 1113027

>>1113015
О! Ещё одна макака-неосилятор выскочила.

27 дек, 14:16 4 1113102

test

sage 27 дек, 15:37 5 1113126

>>1112990 (OP)
>так и на прикладном уровне
Господи, не надо так троллить, пожалуйста. Just don't.

Ответы13131

27 дек, 15:44 6 1113131

>>1113126
Зачем ты сагаешь в тематике? Да еще и в general-треде?

27 дек, 16:40 7 1113156

сисюны, стоит ли вкатываться в джаву на полшишечки?

Ответы13171

27 дек, 17:21 8 1113171

>>1113156
После сишечки можно вкатываться куда угодно и на всю шышге.

28 дек, 00:57 9 1113325

>>1112990 (OP)
спрашиваю как у си богов что такое сегмент программы учу си и asm и вот код
12BD:0100 где 0100 это адрес первой команды , а вот 12bd это сегмент программы что такое этот сегмент и от куда он берется

Ответы1332713350

28 дек, 01:01 10 1113327

>>1113325
Начало твоей области кода, хранится в регистре CS на процессорах Intel.
Раньше было и на других процессорах.
Не обнаружено на MIPS, ARM, POWER что не делает процессоры лучше или хуже
До сих пор кое-где используется ради переходов между библиотеками.

28 дек, 02:28 11 1113350

>>1113325
> что такое этот сегмент
В реальном режиме x86 сегменты - это особенность адресации. Номер сегмента умножается на 16, и к нему прибавляется офсет (12BD:0100 -> 12BD0 + 0100 -> на адресную шину пойдет адрес 12CD0). Номер сегмента можно записать в сегментный регистр и адресоваться в пределах 64К от него, экономя память за счет использования 16-битных офсетов (near) вместо 32-битных (far) адресов, в большинстве случаев избегать поправок (релокаций), и изменяя значения сегментных регистров, иметь в целом до мегабайта адресного пространства. В современных (32-/64-битных) ОС для x86 сегменты хоть и остались, но практически потеряли смысл - памяти дохуя, можно использовать полноценные адреса (хотя в винде через сегменты, хранящиеся в регистрах fs/gs, ходят в TEB, например). Как-то так. В целом, пока не добрался до изучения защищенного режима, считай, что сегмент - это просто такой кусок адреса.

Ответы14345

31 дек, 02:12 12 1114345

>>1113350
>В целом, пока не добрался до изучения защищенного режима, считай, что сегмент - это просто такой кусок адреса.
А может лучше с этого и стоит начинать? Ведь же реальный режим по сути ебучий легаси-костыль который уже не одно десятилетие ебёт неокрепшие умы.

Ответы1435214353

sage 31 дек, 03:05 13 1114352

>>1114345
Под защищенным режимом я имел в виду именно ручной переход real->protected (и, возможно, в long mode) с установкой дескрипторов сегментов, с включением страничной адресации и т. д. Есть вероятность не добраться до этого никогда, если оно тебе не нужно.
> Ведь же реальный режим по сути ебучий легаси-костыль
Ну да, смысла в изучении реалмода нет, но ведь там и учить нечего (пара вечеров максимум) - сегменты, таблица векторов прерываний, существование far/near. Функции BIOS/DOS конкетно к реалмоду отношения не имеют, и разбирать их незачем.

Ответы14356

31 дек, 03:07 14 1114353

>>1114345
>А может лучше с этого и стоит начинать? Ведь же реальный режим по сути ебучий легаси-костыль который уже не одно десятилетие ебёт неокрепшие умы.
x86 гновно ебаное для пидоров, лучше arm

Ответы1435614366

31 дек, 03:26 15 1114356

>>1114352
>но ведь там и учить нечего
>ручной переход real->protected
Знания выветрятся без практики.
>>1114353
>лучше arm
А чё не MIPS? Или ума не хватило разобраться в архитектурах? Если будешь дальше въезжать в IT с такими радикальными лозунгами, то далеко не уедешь.

Ответы1435814366

31 дек, 03:31 16 1114358

>>1114356
>Если будешь дальше въезжать в IT с такими радикальными лозунгами, то далеко не уедешь.
я уже уехал и дропнул x86 нахуй, эта ебаный архитектурный франкенштейн не заслуживающий никакого внимания. да и смысла в его изучении? будешь очередной минет ос писать? а вот arm это переспиктивняк для любого байтоеба

Ответы14398

sage 31 дек, 03:49 17 1114366

>>1114353
>>1114356
> лучше arm
> лучше MIPS
Асм сам по себе уже давно нахуй не нужен. Но для отладки и инспекции своего сишного кода, очевидно, нужно знать ту архитектуру, под которую пишешь. И большинство из вас, сколько бы вы не выебывались, сидит на машине с x86 и для нее же пишет код.

Ответы1436714398

31 дек, 03:59 18 1114367

>>1114366
>сидит на машине с x86 и для нее же пишет код.
и чо? удел байтоебов ринг 3

Ответы14398

31 дек, 10:27 19 1114398

>>1114358
>>1114367
Малыш, ты явно перечитал лурку. Ты даже не понимаешь, что это разные архитектуры с разными задачами. Ну уж если заговорил про кольца защиты, то должен знать, что байтоёбство вот как раз и позволяет писать код под любым уровнем защиты. Хотя откуда тебе знать, если ты элементарных принципов не понимаешь.
>>1114366
Ты это к чему сюда принёс?

Мда, начались каникулы и понабежали спициалисты.

Ответы144021455222028

31 дек, 10:52 20 1114402

>>1114398
бакалавры, сэр

31 дек, 18:59 21 1114552

>>1114398
школотрон не палицо. написал тебе код под любым уровнем защиты.

1 янв, 00:35 22 1114634

С наступающим 48-ым годом и поменьше вам SIGSEGV'ов в новом году!
До 32-битного переполнения ещё по крайней мере 20 лет, так что у вас всё впереди!

Ответы14639

1 янв, 00:57 23 1114639

>>1114634
> До 32-битного переполнения ещё по крайней мере 20 лет
Всем unsigned, посоны!

2 янв, 22:01 24 1115083

Отцы! Я как-то, в годах 90-х, задрочился на ассемблер 8080(+ZX80), но потом судьба порешала по иному(папка сказал, что буду Родину защищать). Вот сейчас решил вкатится в погромирование по новому. Как вообще сишечка для старого пердуна 40-ка лет со знанием ассемблера 8-разрядных машин, есть ещё надежды вкатиться по полной? С чего начать? Подзаебало читать одни и те же книжки, где идёт размусоливание простых истин со системами исчисления и пр.

Ответы1509315101

2 янв, 22:26 25 1115093

>>1115083
В шапке тркда все есть, K&R 3 издание для начала неплохо зайдет

2 янв, 23:11 26 1115101

>>1115083
>40-ка лет со знанием ассемблера 8-разрядных

Я на 8 лет младше, также был освоен 8 битный асм. Решил уже освоить что нибудь более высокоуровневое, ато заебался хотеть и лениться.

Да конечно, без проблем освоишь. Я не выёбывался, взял за два месяца изучил первые две главы книжки "Константин Поляков си". Ошибок дохуя в книжке, но зато легко усваивается.

Как справочник использую "Керниган,Ритчи - Программирование на C.2ed.2009.djvu" и "Прохоренок Н.А. - Программирование на С++ в Visual Studio 2010 Express - 2010".
Ещё документацию по WinApi "Win32API_First_Steps.chm", очень нужно, если под Windows чтото пилить.
Компилятор mingw.

Изучай основы. Ставь себе цели и выполняй.

7 янв, 20:15 27 1117013

Аноны, че можно простенькое написать на С полезного?Я сейчас почитываю учебник из шапки, но блять эти задачи в конце глав не интересные и не вызывают желание их делать.
P.S ПРогером я не собираюсь быть,учу для себя

Ответы17015

7 янв, 20:18 28 1117015

>>1117013
CVE-2017-5754 реализуй.

8 янв, 09:52 29 1117184

аноноы, кто нить байтоебил под RISC-V? перспективна ли писечка или очередной хайп?

Ответы171851719017635

22 Кб, 242x300
8 янв, 09:54 30 1117185

>>1117184
otkleilas

8 янв, 10:13 31 1117190

>>1117184
Но её даже не хайпят.

Ответы17191

8 янв, 10:19 32 1117191

>>1117190
>хайпят
Western Digital to Use RISC-V for Controllers, Processors, Purpose-Built Platforms
Western Digital Gives A Billion Unit Boost To Open Source RISC-V CPU
NVIDIA to use RISC-V for its next-gen GPU microcontroller

тебя там в смузихлебочной заперли?

Ответы17194

8 янв, 10:21 33 1117194

>>1117191
И в какие ЖД WD поставит эти RISC-V в качестве контроллеров?

Ответы17195

8 янв, 10:24 34 1117195

>>1117194
ня

https://www.anandtech.com/show/12133/western-digital-to-develop-and-use-risc-v-for-controllers

Ответы17197

8 янв, 10:28 35 1117197

>>1117195
Ну хорошо, ты ответил на мой вопрос.
Тогда скажу тебе, что:
1. Здесь никто биты не сдвигал нигде, кроме как под x86_64.
2. Рилейтед работу в Рашке ты не найдёшь.

Ответы17200

8 янв, 10:32 36 1117200

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

Ответы1720417475

8 янв, 10:37 37 1117204

>>1117200
Хорошая идея, светлая.
Ну, подождём.

Ответы17205

8 янв, 10:38 38 1117205

>>1117204
>Ну, подождём.
ну подожди

sage 8 янв, 20:40 39 1117475

>>1117200
> тенденция идет на замену проприетарных ARM бесплатным сабжем
Не вижу тенденции. Вижу эксперименты. Такие эксперименты постоянно, и обычно они ни к чему не приводят. Заменить ARM на что-либо, это как заменить сишечку на раст. Хотя книжку выше почитать стоит в любом случае. Чем больше ты знаешь - тем больше ты нужен.

9 янв, 02:47 40 1117635

>>1117184
Очередной фон Неймановский убийца чего-то-там?
Для взлёта этой хуйни надо много денег несмотря на то, что как бе оупен. Вот когда начнут студентов дрочить по теме в каком-нибудь калтеке(да даже НГУ!), то тогда стоит уже репу чесать, а так только чистый факультатив, что бы мозги не застоялись.
Дальше дрочим байты на арм, мипс и, прости госпаде, х86.

9 янв, 14:26 41 1117736

>>1112990 (OP)
Я хочу войтивайти, планирую начать аутировать в Си, что есть годного на русском для даунов гуманитариев навернуть, желательно с практическими примерами, чтобы можно было набрать и вывести хелоу ворд, а может даже мигнуть светодиодом на мышке? Какой компилятор выбрать? Какие компиляторы проще для начала обучения и какие чаще используются на работе?

Ответы1774317773

9 янв, 14:37 42 1117743

>>1117736
гуманитарий?
нахуй те сишка, пожалеешь, только проебаное время
ебашь веб

Ответы17748

9 янв, 14:43 43 1117748

>>1117743
Я не хочу веб. Думаю над си и пайтоном. Планирую получить вышку программиста, там наверняка будут лабораторные работы, причем все только на Си (судя по учебным планам говновузов), хотелось бы ковырнуть его заранее, заодно проникнуться будущей работой как следует.

Ответы17753

9 янв, 14:56 44 1117753

>>1117748
Скачай CodeBlocks и книжку K&R. В K&R упражнения могут показаться легкими, тогда надо взять лабораторные какого-нибудь вуза. В блоках уже есть компиляторы всех сортов, но какая разница чем компилировать? Я думаю это вкусовщина высокого уровня

Ответы17772

9 янв, 15:45 45 1117772

>>1117753
Ок. У меня глупый вопрос, есть какая-то официальная русификация? Я понимаю, что код на английском и я уже осилил перевод слов #include main, но на начальном уровне было бы проще, если Code::Blocks мог в русский и не надо было бы искать перевод некоторых слов из меню и больше сосредоточиться на книге.

Ответы17774

9 янв, 15:46 46 1117773

>>1117736
Гарвардский курс CS50. Там Си, а также немного петухона, веба, БД.

Ответы17775

86 Кб, 873x409
9 янв, 15:46 47 1117774

>>1117772
Функцию выбора языка я нашел, а самого языка нет...

Ответы17810

9 янв, 15:50 48 1117775

>>1117773
Кайф, спасибо, нашел видео лекции на русском https://www.youtube.com/watch?time_continue=32&v=SW_UCzFO7X0

Ответы177781781923623

9 янв, 15:57 49 1117778

>>1117775
Раз ты на русском решил, то там немного старые лекции (от 2015), но тоже сойдут, хотя вместо питона будет похапе. Также советую решать все задачники, там довольно интересные задачи, хотя не знаю переведены ли они на русский. Также советую поковырять денек скратч, про который будет речь во второй лекции, прикольная штука.

Ответы17819

9 янв, 17:06 50 1117810

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

9 янв, 17:15 51 1117819

>>1117775
>>1117778
ИМХО Книжки читаются со своей скоростью, а не со скоростью лектора да и обычным поиском в них можно воспользоваться.

P.S тс, будь аккуратен в том, пишешь ли ты в CodeBlocks на C или на C++. Потому что тут есть минорные различия (не ебу как со стандартами, может так уже в обоих языках) например в C++ ты можешь написать
struct MyStructure {};...

main(){
MyStructure actual_structure;}

А в си - нет. Там надо будет писать:
struct MyStructure actual_structure;

9 янв, 19:48 52 1117899

Где подробно написано про оператор goto?
Меня интересует область видимости меток и различные ограничения при создании меток.

Ответы1791918077

9 янв, 20:51 53 1117919

>>1117899
Если не ошибаюсь, в си метки ставишь куда хочешь и обращаешься к ним откуда хочешь. В плюсах метки видны только внутри функции.

Ответы1794717956

9 янв, 22:13 54 1117947

>>1117919
>куда хочешь и обращаешься к ним откуда хочешь
В пределах файла исходника. Хотя можно попробовать через extern ебануть, но это уже откровенная индусятина и за такое надо пиздить и унижать всем сосачем.

Ответы17957

9 янв, 22:45 55 1117956

>>1117919
>в си метки ставишь куда хочешь и обращаешься к ним откуда хочешь
что?

Ответы17965

9 янв, 22:46 56 1117957

>>1117947
>Хотя можно попробовать через extern ебануть
что?

Ответы1796517972

9 янв, 22:53 57 1117965

>>1117957
>>1117956
Сам подумал, что поехал, но говорить не стал.
Скажи мне, что они видны только в пределах функции.

Ответы17978

9 янв, 23:11 58 1117972

>>1117957
Тебе объяснять значение слова попробовать? Иди дальше, шаблонный ишак.

9 янв, 23:21 59 1117978

>>1117965
Эта фишка видимости (я на 90% уверен в своих словах) есть в плюсах, не в си

Алсо про раскидывание гоуту по файлам: я думаю сработаеь, ведь препроцессор тупой как пробка и просто вставляет файл хедера в твой код

Ответы17982

9 янв, 23:29 60 1117982

>>1117978
Да не, ну нахрен, после препроцессора по жопе пойдёт.
setjmp.h наше всё

Ответы1799218075

9 янв, 23:50 61 1117992

>>1117982
но сам факт товагисчи, сам факт!

Ответы18045

sage 10 янв, 04:50 62 1118045

>>1117992
Какой факт? С goto ходить можно в пределах функции, область видимости метки - тоже только фукнция.

Ответы18070

10 янв, 09:50 63 1118070

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

10 янв, 10:08 64 1118075

>>1117982
какие применения лонгджампа в продекшене знаешь?
я только одно: когда необходимо продолжить работу в обработчике сигнала

Ответы1813118188

10 янв, 10:12 65 1118077

>>1117899
>оператор goto?
кстати, какие use cases знаете?
я только два: удобно организовывать обработку ошибок в функции, обычно goto ERROR, завернутый в макрос
второе - выход из двойного цикла, с goto получается лаконично и наглядно

Ответы18131

10 янв, 12:36 66 1118131

>>1118077
Скакать по коду чтобы кроме тебя никто не мог прочитать
>>1118075
Возможно в рефакторинге легаси кода

10 янв, 15:13 67 1118188

>>1118075
obvious green-threads

Ответы18237

10 янв, 16:51 68 1118237

>>1118188
я писал корутины на лонгджампах - это не по стандарту, и, например, гцц падает с ошибкой повреждения стека.

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

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

11 янв, 12:59 69 1118648

>>1112990 (OP)
Каким IDE для C пользуетесь на линуксе?

Ответы1869718711187351875418835

11 янв, 15:01 70 1118697

>>1118648
SciTe.
Кто-нибудь, дайте мне что-нибудь легковесное и практичное, как Notepad++, под линь.

Ответы187341877028282

11 янв, 15:30 71 1118711

>>1118648
>Каким IDE для C пользуетесь на линуксе?
Clion
qtcreator

11 янв, 16:47 72 1118734

>>1118697
Kate

11 янв, 16:48 73 1118735

>>1118648
KDevelop
QTCreator
Eclipse
В порядке частоты использования.

11 янв, 17:26 74 1118754

>>1118648
emacs без автодополнения.

Ответы18862

11 янв, 17:54 75 1118770

>>1118697
vim

Ответы18803

11 янв, 19:42 76 1118803

>>1118770
> 2k18
> редактор кода учить сложнее, чем синтаксис ЯП

sage 11 янв, 21:01 77 1118835

>>1118648
Саблайм. Не IDE, но переход по символам есть, поддержка гита есть, компиляция по кнопке тоже. А большего для мелких и средних по размеру проектов на Си и не нужно.

11 янв, 22:58 78 1118862

>>1118754
Хоть педали-то прикрутил, сердешный?

14 Кб, 836x77
11 янв, 23:17 79 1118872

Это бле больше на стеб похоже. У меня же условия срабатывают после энтера. Я все равно получаю сначала что ввожу потом этот же вывод. Или тут подразумевается в исходники самого баша лезть....

Ответы1888218907

11 янв, 23:34 80 1118882

>>1118872
putc();

Ответы18888

11 янв, 23:53 81 1118888

>>1118882
Не-не-не. В Книге этого еше не было до задания. Не скилла же в гугле они хотят.

Ответы18912

sage 12 янв, 01:30 82 1118907

>>1118872
> Я все равно получаю сначала что ввожу потом этот же вывод.
Ну вот, вводишь строку, а выводишь столько строк, сколько слов в строке.

12 янв, 01:34 83 1118908

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

Ответы18912

12 янв, 02:11 84 1118912

>>1118908
В любой нормальной книге по крестам написано, что сначала стоит изучить хотя бы в общих чертах сишечку, всяие юнионы, типы и прочие стракты.
>>1118888
>Не скилла же в гугле они хотят.
А почему бы и нет? Если будешь дрочиться как зубрила, то толку от тебя будет мало. Чё за задание, в каком талмуде встретил?

Ответы1901519178

34 Кб, 362x500
12 янв, 14:09 85 1119015

>>1118912
благодарствую что ответил! Спасибо, начну учить Си с нуля и параллельно читать архитектуру компа Таненбаума!

Ответы19035

12 янв, 14:52 86 1119035

>>1119015
>начну учить Си
с какой целью?
дон хуан всегда подсмеивался над кастаньедой что тот до знакомства с ним знал кучу ненужного, того что ему никогда на практике не пригодится

Ответы1903619052

12 янв, 14:53 87 1119036

>>1119035
>ь
бля

12 янв, 15:22 88 1119052

>>1119035
Ты дурак, что ли? Тебя тоже в школе учили ненужным основам русского языка и математики?
Хотя, если ты цитируешь Кастанеду, то уже пропащий человек.

Ответы19072

12 янв, 16:13 89 1119072

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

Ответы19087

12 янв, 16:56 90 1119087

>>1119072
Дура необразованная, ты хоть понимаешь о чём речь идёт?

Ответы19141

12 янв, 19:02 91 1119141

>>1119087
о чем, сладенький?
интересно узнать

110 Кб, 500x424
12 янв, 20:59 92 1119167

Я случайно хaрькaчь, на аиб забил года 3 назад, а тут совсем некуда было зайти и я вспомнил.
А тут Си-тред, а я как раз Сишник
Как чел, зарабатывающий себе на хлеб с икоркой на Сишечке, без плюсов мерзких и прочего дам советов ньюфагам и прочим мидлам. И некоторым от этого будет бомбить, инфа соточка. Потому что я напился виски и хочу, отъебитесь
Забей на всё, кроме С99 - 11-й перемудрен нинужен, а анси не может в объявление переменной в фор-цикле и пару нужных писечек (а точнее gnu99 смотри ниже)
Учи posix и экосистему пинукса. Эмбедед говно и днище нищенское, на остальных ОС жонглеры оопшные свопятся, а линукс кормит и поит, охуенная тема, рикаминдую©
У gcc много писек, о которых ты и мечтать не думал, дрочи их, они охуенные - каждый раз что-то новое. А остальное? Да кому оно нахуй вперлось, все эти интеловские компиляторы и прочие пеллесы имеют процент как линукс на десктопе, всем похуй на них. При этом они работают обычно даже если ты долбоеб и хуесос выбрал эмбеддед. Ещё кланг, но то для особых случаев
Птредс круто, но блядь fork и сопустствующая экосистема тоже охуенны. Ты знал, что можно между процессами можно прокидывать файл-дескрипторы? А можно блядь, прикинь!
Асинхронщина круто. Не будь ретроградом - пердоль epoll, а у кого его нет пусть страдают, хуесосы инвалиды
Пердоль gdb, он охуенен и спасет твою жопу
Пердоль valgrind, он охуенен, даже когда gdb не помог
Программируй, хватайся за всё. Книги, статейки и доки это кру4то, но всем нахуй не надо, опыт это супер, осоюенно в такой сфере как Сишное программирование, где знания и экспериенс оч тяжело передать

Ответы191721920819297

12 янв, 21:22 93 1119172

>>1119167
А кем работаешь?

Ответы19205

12 янв, 21:41 94 1119178

>>1118912
>Чё за задание, в каком талмуде встретил?
K&R же!

Ответы19404

14 Кб, 230x53
12 янв, 22:12 95 1119183

>>1112990 (OP)
i --> 0;
Что это за синтаксис? C11? Или так всегда можно писать?

Ответы1920719208

12 янв, 22:46 96 1119205

>>1119172
Кладовщиком.

Ответы19226

12 янв, 22:49 97 1119207

>>1119183
инкремент и условие, пидорас не может в форматирование

Ответы19212

12 янв, 22:54 98 1119208

>>1119167
fork'и, чтобы потом exec и умереть.
Птхреадс для работы.
Алсо, fd же разделяются при fork() по дефолту.
>>1119183
i-- >0

12 янв, 23:06 99 1119212

>>1119207
это такая шутка, не первой свежести.

12 янв, 23:25 100 1119226

>>1119205
Я серьезный ответ хочу

13 янв, 04:29 101 1119292

Увидел на руби конференции, парень рассказал, что чтобы стать норм программистом, надо в том числе знать С иначе ты ничего не понимаешь, как все работает на самом деле. И вот я тут, рад всех видеть, аве С, хуй соси. Хочу засвидетельствовать свое почтение сишникам. Сразу вопрос: надо ли учить ассемблер, чтобы понимать, что происходит в С?

Ответы192931933019338

13 янв, 04:48 102 1119293

>>1119292
Нет

Ответы19295

13 янв, 04:55 103 1119295

>>1119293
спасибо, начнем учить сразу С

sage 13 янв, 05:50 104 1119297

>>1119167
> 11-й перемудрен нинужен
> компиляторы официально знают о потоках
> атомики
> сишник
Ты устарел и нинужен. У тебя еще есть работа, но со следующей у тебя может выйти облом. И да, тебе будет от этого бомбить, жду. (Дальше не читал, наверняка все советы того же уровня)

Ответы1930824653

13 янв, 09:01 105 1119308

>>1119297
>компиляторы официально знают о потоках
а ты смешной.

13 янв, 09:09 106 1119309

#include <iostream>

int main()
{
long n, a, i, min1, min2, min3, max1, max2, max3;
min1 = 100, max3 = -100, min2 = 100, max2 = -100,min3 = 100, max1 = -100;
scanf("%ld",&n);
for (i = 1; i <= n; i++){
scanf("%ld",&a);
if (a >= max3){
max1 = max2;
max2 = max3;
max3 = a;
}
if (a != max3 && a >= max2){
max2 = a;
}
if (a != max3 && a != max2 && a >= max1){
max1 = a;
}
if (a <= min1){
min3 = min2;
min2 = min1;
min1 = a;
}
if (a != min1 && a <= min2){
min2 = a;
}
if (a != min1 && a != min2 && a <= min3){
min3 = a;
}
}

if((min1 min2) >= (max2 max3)){
printf("%ld %ld %ld",min1,min2,max3);

}
else
{
printf("%ld %ld %ld",max1,max2,max3);
}

}

13 янв, 09:09 106 1119309

#include <iostream>

int main()
{
long n, a, i, min1, min2, min3, max1, max2, max3;
min1 = 100, max3 = -100, min2 = 100, max2 = -100,min3 = 100, max1 = -100;
scanf("%ld",&n);
for (i = 1; i <= n; i++){
scanf("%ld",&a);
if (a >= max3){
max1 = max2;
max2 = max3;
max3 = a;
}
if (a != max3 && a >= max2){
max2 = a;
}
if (a != max3 && a != max2 && a >= max1){
max1 = a;
}
if (a <= min1){
min3 = min2;
min2 = min1;
min1 = a;
}
if (a != min1 && a <= min2){
min2 = a;
}
if (a != min1 && a != min2 && a <= min3){
min3 = a;
}
}

if((min1 min2) >= (max2 max3)){
printf("%ld %ld %ld",min1,min2,max3);

}
else
{
printf("%ld %ld %ld",max1,max2,max3);
}

}

Показать весь текст
Ответы1932919413

13 янв, 11:22 107 1119329

>>1119309
А я люблю всё по файлам раскидывать, всё по функциям. Чтобы главный цикл небыл таким.

В деле программирования, главное вовремя всё рассортировать и придумать архитектуру программы.

13 янв, 11:26 108 1119330

>>1119292
>Сразу вопрос: надо ли учить ассемблер, чтобы понимать, что происходит в С?

Желательно знать про то, как работает программа.

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

Ответы19514

13 янв, 11:50 109 1119338

>>1119292
пшел нахуй

Ответы19514

13 янв, 12:59 110 1119361

Test

13 янв, 13:04 111 1119362

ребят, на каком уровне нужно знать С\С++ что бы попасть junior'ом на работу в ДС сейчас?

Ответы19365

13 янв, 13:15 112 1119365

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

13 янв, 15:16 113 1119404

>>1119178
Выкинь её нахуй.
Во-первых она не для новичков, а во-вторых она интересна только 2,5 олдфагам, что бы вспомнить как оно было раньше. Читай Прата, там рассматриваются последние важные изменения в стандарте(С99) да и для новичков более понятна и разжёвана.

Ответы1952323025

13 янв, 15:31 114 1119413

>>1119309
Откуда этот пиздец пришёл?

Ответы1943119449

13 янв, 16:15 115 1119431

>>1119413
скажи ещё ты так не писал ни разу.

13 янв, 16:40 116 1119449

>>1119413
от матанопитушни, это они там экономят на символах

13 янв, 18:48 117 1119514

>>1119330
Вот это хороший ответ, спасибо!

>>1119338
Ждал, ждал, специально упомянул руби, чтобы затронуть нотки снобизма. Хотя, может, ты посылаешь в принципе всех новичков кроме ассемблеров.

Ответы20565

45 Кб, 779x550
13 янв, 19:08 118 1119521

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

Ответы1952819549

13 янв, 19:09 119 1119523

>>1119404
Люблю жрать кактусы.

13 янв, 19:21 120 1119528

>>1119521
в форе проверится условие и проебется символ, так как ты его перезапишешь вызовом гетчар

Ответы19530

13 янв, 19:29 121 1119530

>>1119528
GDB показывает что там пробел. Даже блять если убераю вайл и делаю условие одним фором то все норм. То понятно что в форе проебвается но не понятно почему так. Символ проебвается вызовом гетчара в вайле.

49 Кб, 779x550
13 янв, 20:30 122 1119549

>>1119521
А чего бы ему не проёбываться, если ты при входе в while вызвал getchar(), потом нихуя не сделал и снова вызвал getchar() уже в цикле for при проверке условия. Убери получение символа либо вниз цикла фор, либо туда как на скрине.

Ответы19562

13 янв, 20:58 123 1119562

>>1119549
Да, разобрался, спасибо.

63 Кб, 881x678
13 янв, 22:35 124 1119599

То что жёлтым выделил - это что? Приведение типа указателя (которое вернёт выражение "count ? true : false") к "указатель на функцию возвращающую int и принимающую 2 аргумента-указателя на void" или нет?
Если всё верно и это приведение типа, то для чего оно нужно (на случай если функция возвращает double, а не int или что-либо иное)?

Ответы1960219612

13 янв, 22:45 125 1119602

>>1119599
Всё верно
>ля чего оно нужно
Чтобы тип последнего аргумента qsort() соответствовал прототипу (подчёркнуто зелёным сверху).

13 янв, 23:19 126 1119612

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

Ответы19617

13 янв, 23:33 127 1119617

>>1119612
Большинство конпеляторов сожрёт код и без приведения, но выдаст варнинг. Приведение для того и нужно -- указать конпелятору, что код так написан намеренно, а не по ошибке.

Ответы1961919807

13 янв, 23:36 128 1119619

>>1119617
Скомпилировать или не скомпилировалось - это очень плохая метрика качества кода на Си.

Ответы19623

13 янв, 23:43 129 1119623

>>1119619
Ага, а заинлайнится или не заинлайнится обёртка для стандартной функции, которая только и делает, что кастит параметры -- это охуенная метрика.

14 янв, 13:49 130 1119807

>>1119617
я бы кастовал к void@ - не вижу смысла писать лишний код.

Ответы19862

14 янв, 15:24 131 1119862

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

но опять же, вряд ли функцию стандартной библиотеке будут менять.

15 янв, 23:36 132 1120565

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

Чтоб асмом себе мозги не насиловать, можно на ютубе посмотреть, может есть.

Хотя асм это такое дело, хоть на денди хеловорды писать, одна и таже хуйня.

16 янв, 14:32 133 1120773

можно ли написать сайт на c

Ответы20775209002228922543

16 янв, 14:40 134 1120775

>>1120773
конешно, пишешь cgi или fastcgi модуль на си (или другие расширения веб-серверов используешь)

16 янв, 19:13 135 1120884

Как вкатиться в системное программирование? С языком знаком.

Ответы20900

16 янв, 19:42 136 1120900

>>1120773
Да хоть на ассемблере можешь транслировать лил даже VLIW, но зачем? Если ты не зелёный, то проблема только в том, что придётся сначала написать бекенд на сишечке. Фронтенд уже будет твоей личной реализацией RFC. В принципе, в современном IT всё так и делается.
>>1120884
Если задаёшь такой вопрос, то ты не знаком с языком. Скорее, просто выучил синтаксис. Ты код лялиха читал?
Если у тебя есть англо-русский словарь это не значит, что ты знаешь ангельский.

Ответы20925

Здравствуйте! 16 янв, 21:13 137 1120924

Как быть с memory allocation в тех же линуксах в плане ошибок? Я часто видел в примерах кода на си, что значение, возвращаемое функциями malloc и calloc проверяют на неравенство нулю и если оно не выполняется, то делают что-то вроде printf("Memory allocation error\n"); exit(1);. Я подумал, что, возможно, malloc вернёт значение равное нулю в случае, когда системе не будет хватать виртуальной памяти и она даст шанс программе подождать и сделать это чуть позже или что-то вроде того и хотел спросить у вас: что делать, когда malloc возвращает нуль?

Но, прежде чем это всё написать, я сделал эксперимент с утечкой в две строчки для проверки того, что malloc вообще может венуть 0, например, в результате истощения свободной виртуальной памяти:

while (malloc(1000));
printf("Memory allocation failed\n");

И как оказалось malloc не возвращает 0. Вместо этого я получаю сообщение о том, что программа была просто прибита (очевидно из-за того, что забрала всю память).

Теперь вопрос стоит так: в каких вообще случаях malloc может вернуть 0? И ещё один дополнительный: как можно программе хотя бы попытаться сохранить какие-то данные или лог, прежде, чем быть прибитой ОСью.

Ответы20926209272102121054

16 янв, 21:15 138 1120925

>>1120900
Разумеется я говорил про синтаксис. че ты такой нервный?

Ответы20929

16 янв, 21:16 139 1120926

>>1120924
https://www.etalabs.net/overcommit.html

Ответы2092720959

sage 16 янв, 21:17 140 1120927

>>1120924
>>1120926
Более длинный ответ: если ты хочешь контроля и надежности, используй ОС, а не прошивку для роутеров.

Ответы2093320959

16 янв, 21:25 141 1120929

>>1120925
Тогда дрочи таненбаума и сорцы лялиха.

Ответы20984

16 янв, 21:31 142 1120933

>>1120927
Но ведь именно в прошивке для роутеров контроль и надёжность важны как нигде.

16 янв, 22:08 143 1120959

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

>>1120927
То есть ты считаешь что линукс как надёжная ОС не годится, я правильно понимаю?

Ответы20995

16 янв, 22:47 144 1120984

>>1120929
Я сейчас как раз дрочу Таненбаума, спасибо. Но вот как дрочить миллионы строк в сорцах линукса? Или ты про первую версию?

Ответы20986

16 янв, 22:54 145 1120986

>>1120984
Когда-то на русском находил охуенную книгу, в которой разбирались отдельные кусочки ядра (древнего) линупша. Там более-менее понятно было.
К сожалению, книжка проебалась, а название и автора я забыл.
Может кто знает?

sage 16 янв, 23:28 146 1120995

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

Ответы21089

17 янв, 00:16 147 1121021

>>1120924
> И как оказалось malloc не возвращает 0. Вместо этого я получаю сообщение о том, что программа была просто прибита (очевидно из-за того, что забрала всю память).
Раз на раз не приходится. Я как-то запускал подобную программу, иной раз OOM killer её прибивал, иной раз она сама падала, т.к. malloc() возвращал NULL. Но я запускал её под рутом и лочил уже выделенные чанки через mlock().

17 янв, 01:46 148 1121054

>>1120924
В общем, поделюсь тем, что я сам выяснил.

В линуксе OOM killer выходит на охоту без предупреждения. Единственное спасение - это настройка политик выделения памяти под конкретную задачу, которую выполняет машина, так как можно только задать максимальное количество памяти от общего объёма, которое будет доступно каждому процессу. То есть если задать максимум от имеющейся ОЗУ для каждого процесса как максимум доступной к выделению памяти, то он (если без свапа) будет убит не дойдя до предела. Если предел меньше количества свободной памяти, то по его достижению маллоки начнут возвращать нули, выделения не будет происходить, а киллер не шелохнётся. Короче основной вывод таков, что киллер работает без каких либо предупреждений в виде возвращения нуля функцией выделения памяти, которые могли бы быть, наверно. Как страшно жить

Если всё-же повезло и была отловлена невозможность выделения памяти, то радости всё-равно мало, ибо что дальше делать - непонятно.
Кто-то считает, что ситуация почти безвыходная и нужно просто делать аборт, потому что какое-нибудь сохранение данных пользователя или даже репорт об ошибке так же нуждаются во временном выделении памяти https://eli.thegreenplace.net/2009/10/30/handling-out-of-memory-conditions-in-c
Кто-то считает, что это очень и очень плохо, особенно для библиотек, когда всё просто закрывается из-за истощения памяти https://stackoverflow.com/a/7590738/9221810
Мнения разные и каждый по-своему прав. А что делать и кто виноват как всегда разбираться двачерам.

Ответы21059

sage 17 янв, 02:50 149 1121059

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

Второй вариант: маллоки делятся на фатальные и нефатальные (ошибки от фатальных обрабатывать бессмысленно по определению, а какую версию использовать, решает сам софт), нефатальные маллоки "нормальные", и при нехватке памяти они возвращают NULL, а фатальные срут в лог/постят нотификацию, если есть куда, и зависают, пытаясь выделить память в цикле. В этом случае получается своего рода DoS, но рано или поздно приходит биомасса, которая все разруливает ручками, и данные не теряются.

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

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

Ответы2107221090

17 янв, 06:04 150 1121072

>>1121059
модно раскидал.

sage 17 янв, 08:16 151 1121089

>>1120995
Твое мнение очень важно для нас, спасибо.

17 янв, 08:17 152 1121090

>>1121059
>кусок освобождается
Кем освобождается и что дальше происходит?
Можно с этого места подробнее?

Ответы21091

17 янв, 08:20 153 1121091

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

Ответы21434

sage 17 янв, 22:30 154 1121434

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

Ответы2146022044

17 янв, 23:18 155 1121460

>>1121434
https://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick

18 янв, 02:09 156 1121542

2 Кб, 348x193 Кб, 226x36

что делать?понимаю шо не влезает, делать то шо>>1112990 (OP)

Ответы2157022342

18 янв, 06:21 157 1121570

>>1121542
__int128?

Ответы21581

18 янв, 08:29 158 1121581

>>1121570
как это юзать? тупо
__int128 i=1432423423442342;

Ответы21588

18 янв, 09:29 159 1121588

>>1121581
Тебе для каких целей нужна такая переменная?
__int128 не стандартизировано и на твоей системе конпелятор может заругаться.

Ответы22739

18 янв, 18:21 160 1121911

Ищу юниора для поддержки и доработки кода, желательно знание СPython но не обязательно

Ответы2204222323

18 янв, 21:37 161 1122028

>>1114398
если писать под венду(7x64), то это макс ринг 3, ибо чтобы запилить дрова(чтобы робить на нулевом ринге) надо подписывать их, ибо патч гёрд наебнет тебя(хотя есть обходы). Ну или работать в режиме отладки.

Ответы22260

18 янв, 22:04 162 1122042

>>1121911
скоко денег
какая нагрузка

18 янв, 22:05 163 1122044

>>1121434
хули ты, тварь, пишешь под сажей очевидные вещи
хиля ты выебувываешься

19 янв, 08:02 164 1122260

>>1122028
Ты зачем это выкокал тут?

Ответы22277

19 янв, 09:39 165 1122277

>>1122260
Тебя дурашечка уму разуму научить. А то сидишь в проперженных труханах, про ринги ничего не знаешь.

Ответы22699

19 янв, 10:08 166 1122289

>>1120773
Конечно, пишишь веб сервер, на него цепляешь свою логику обработки cgi и все. Ну на пальцах: делаешь сокеты, ловишь запросы, читаешь заголовок http, смотришь чо там, разбираешь его, загружаешь что нужно, отправляешь ответ. вот и все блиать.

19 янв, 11:46 167 1122323

>>1121911
Подробнее же, ну.

19 янв, 12:22 168 1122342

>>1121542
Длинную арифметику.

Ответы2269922739

19 янв, 20:49 169 1122543

>>1120773
Можно. Алсо, на крестах даже веб-фреймворки есть, кто бы мог подумать. Один из них: https://www.webtoolkit.eu/wt

20 янв, 01:55 170 1122699

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

1,1 Мб, 1920x1080
20 янв, 09:07 171 1122739

>>1122342
>>1121588
чуваки, вы издеваетесь? я прошу вас дать пример кода в котором вы инициализируете переменную так чтобы туда влезло число которое я вам дал в релейтед 1, вам так сложно 1 строчку написать?

Ответы2274222744

20 янв, 09:20 172 1122742

>>1122739
Тебе же сказали, что бы в столбик считал. Разбиваешь число и фпирёд.
За тебя ещё и код нахуярить?

20 янв, 09:33 173 1122744

>>1122739
Додик, ну что ты мозги всем ебёшь? Используй float для своего числа.

20 янв, 13:43 174 1122814

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

Ответы2302824276

20 янв, 16:15 175 1122868

Оцените нубский бесполезный код. Понимаю что тут и комментировать нечего, но всё же, давайте все замечания, недочёты и т.п.
https://gist.github.com/anonymous/d69a7b826f8a1b2330aef173fb121ba3

Ответы23014

20 янв, 20:14 176 1123014

>>1122868
Нахуй те while(1) цикл в safeNumberInput()? И нахуй тебе там вообще рекурсия? Вообще все эти "safe" инпуты вызывают много вопросов. Почему не передавать эту хуйню в виде аргументов командной строки? А то на вид какая-то лаба1.

20 янв, 20:41 177 1123023

>>1112990 (OP)
Вот решил поизучать С в свободное время. Читаю книжку, которая на ОП-пике. Дошел до пример с вводом текста и получается какая-то хуита.

Вот этот код должен подсчитывать количество символов в введенном тексте.

#include <stdio.h>

main()
{
double nc;

for(nc=0; getchar() != EOF; ++nc)
;

printf("%.0f\n", nc);

}

Но при запуске и вводе текста происходит ровным счетом нихуя. Почему так?

Ответы2302523028

20 янв, 20:49 178 1123025

Вы уже заебали. На оппике эта книжка стоит как монумент павшим. В 2018 её вообще вредно читать, только поклоняться.
>>1123023
>>>
>>1119404

Ответы2302723028

20 янв, 20:54 179 1123027

>>1123025
>На оппике эта книжка стоит как монумент павшим.
Почему мне тогда все знакомые программисты советовали читать именно ее?

Но все же почему код из книжки вообще нихуя не работает? Разве С с тех пор изменился так сильно, что код перестал работать вообще?

Хотя если внести printf внутрь цикла, то будет видно, как ведется счет в nc.

>Читай Прата
Что за прат?

И в чем посоветуешь писать код? Пока использую CodeLite, вроде норм но много лишнего как по мне.

Ответы23041

20 янв, 20:55 180 1123028

>>1122814
Попробуй что-нибудь рассказать нам. Как крашится, с каким кодом? Где крашится? Под какой виндой? Какие версии функций, -A или -W?

>>1123023
Надо, видимо, добавить этот вопрос в шапку крупными буквами. Хотя, если я правильно помню, он освещался в книге. getchar() возвращает EOF, когда данные в потоке ввода (stdin) заканчиваются. А заканчиваются они в трех случаях: 1) ты вводишь данные с консоли и жмешь Ctrl+Z в винде или Ctrl+D в линуксе, чтобы завершить ввод; 2) ты редиректишь ввод пайпами cat file.c | program или перенаправлением ввода program < file.c, и данные в пайпе закончились; 3) ты ассоциируешь stdin с файлом, и ты дочитал до конца файла.

>>1123025
Вы заебали каждые несколько тредов устраивать срачи о книжках. K&R все вокруг рекомендуют, ты никого не переубедишь. И да, некоторым проще читать K&R, чем Прату.

Ответы230292304123047

20 янв, 20:59 181 1123029

>>1123028
Ввожу текст в консольке и нажимаю ctrl+z, а он лишь добавляет ^Z к тексту и все.

Ответы2303023041

20 янв, 21:01 182 1123030

>>1123029
Ввод в консольке по умолчанию line buffered, поэтому вводи Ctrl+Z, Enter.

Ответы23032

20 янв, 21:04 183 1123032

>>1123030
>вводи Ctrl+Z, Enter.
Чет это работает только если перейти на новую строчку. На текущей не работает.

И хули он неправильно считает? Символов же 5

Ответы23033

5 Кб, 979x512
20 янв, 21:05 184 1123033

>>1123032
Пик забыл

Ответы230362304123045

20 янв, 21:07 185 1123036

>>1123033
Ты что дебил? Строчку не учитываешь после нажатия цтрл зи ентер?

Ответы23039

20 янв, 21:09 186 1123039

>>1123036
Так там нихуя нет, схуяли ее учитывает?

Ответы23062

20 янв, 21:10 187 1123041

>>1123027
>Что за прат?
Стивен Прата, есть в шапке.
>Почему мне тогда все знакомые программисты советовали читать именно ее?
Поменьше слушай динозавров.
>Но все же почему код из книжки вообще нихуя не работает?
Потому что книжка не для начинающих, а для не знающих сишечку. Вредная она для нуба.
>>1123033
Сишечку по К&Р в винде не изучают.
>>1123028
>И да, некоторым проще читать K&R, чем Прату.
Некоторым и сборник анекдотов проще читать.
>>1123029
В консольке любой ввод завершается энтером. Т.е. не забываем про символ \n

Ответы23045

20 янв, 21:15 188 1123045

>>1123033
#include <stdio.h>
int main(void) { char c; while ((c = getchar()) != EOF) { printf("%.2x ", c); } }

>>1123041
Сишечку приятно в винде учить. В винде есть отладчики. А линукс может предложить новичку только gdb, навсегда отбив у него охоту что-то отлаживать быстро и по-людски, а не printf()-ами.

Ответы2305023051230552305623112

20 янв, 21:18 189 1123047

>>1123028
>что-нибудь рассказать нам
да нечего, просто писец и все. вындовс 10, 64. думаю это пидерский гцц, он еще на одном проджекте мозг ебет.

20 янв, 21:27 190 1123050

>>1123045
>Сишечку приятно в винде учить.
Вот одна из причин почему надо выкинуть КР.
>В винде есть отладчики.
Можно было бы по-старчески погундеть, мол отладчик должен в голове формироваться, но всё-таки ты прав в этом.

20 янв, 21:27 191 1123051

>>1123045
еще по поводу main. Я вообще начинал учить С++, но мне посоветовали сперва освоить просто С. Так вот, в C++ всегда надо ставить int main() и return(0) в конце. В С же можно использовать просто main() без всего. Так нахера этот return в С писать?

Ответы23053

20 янв, 21:34 192 1123053

>>1123051
>В С же можно использовать просто main() без всего.
Можно не значит не нужно.
Если объявишь возвращаемый тип не void, то конпелятор заругается. Для main можно ставить как возвращаемое значение для системы, что функция завершилась нормально и без ошибок return (0), но ТОЛЬКО для main.

Ответы2305423058

20 янв, 21:34 193 1123054

>>1123053
> Если объявишь возвращаемый тип не void
ты хотел сказать не int?

Ответы23059

20 янв, 21:35 194 1123055

>>1123045
>А линукс может предложить новичку только gdb
В общем-то у текстовых редакторов есть интеграция с gdb, и процесс отладки получается вполне сносным. Автокомплит тоже работает.

20 янв, 21:36 195 1123056

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

Ответы23086

20 янв, 21:38 196 1123058

>>1123053
Что такое вообще возвращаемый тип и нахера return(0) делать?

Ответы23059

20 янв, 21:43 197 1123059

>>1123054
void main() равно просто main() у динозавров
В обоих случаях return не обязателен.
>ты хотел сказать не int?
Нет, именно то сказал, что хотел.
>>1123058
Если какая-нибудь функция(не только main) должна возвращать значение (int func();), то соответственно нужен return (int), если функция только принимает(или вообще не принимает) значения(func();), то конпелятор заругается на любой return т.к. не объявлен возвращаемый тип в функции.

20 янв, 21:45 198 1123061

Скачал я вашего Прата. Ебать там все как обьемно написано. Даже про обычный int аж на 4 страницы расписали.

Ответы2306823077

20 янв, 21:46 199 1123062

>>1123039
Ты что, дебил? Crlf (\r\n — 0D0A) по твоему это «ничего»?

20 янв, 21:55 200 1123068

>>1123061
Ну вот как осилишь, то можешь качать того же Прата про кресты. Тоже объёмная и разжёвано всё.

20 янв, 22:06 201 1123074

карандаш надежней ручки
пишет всегда, в любой ситуации и положении

20 янв, 22:07 202 1123077

>>1123061
нахуя по сишке читать что-то другое, когда есть библия?

Ответы23080

20 янв, 22:10 203 1123080

>>1123077
Зелёный, тебе в /b

20 янв, 22:22 204 1123086

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

20 янв, 23:01 205 1123100

Есть ли в windows.h функция преобразующая код клавиши в название?

Ответы2310323104

20 янв, 23:04 206 1123103

>>1123100
https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx

Ответы23105

20 янв, 23:04 207 1123104

>>1123100
Есть GetKeyNameText, оно работает в большинстве случаев.

Ответы2310523107

20 янв, 23:04 208 1123105

>>1123103
>>1123104
Cпасибо!

20 янв, 23:20 209 1123107

>>1123104
Блять, она нихуя не работает!
Windows.h вообще глаза режет

20 янв, 23:31 210 1123112

>>1123045
>А линукс может предложить новичку только gdb
вот тут не понял, а что есть в виндувсе? ты ведь про интеграцию с редактором? понимаешь что хуйню порешь?

20 янв, 23:36 211 1123115

кстати к вопросу, на виндувсе есть альтернатива волгринд?

Ответы23124

21 янв, 00:14 212 1123124

>>1123115
valgrind - это охуенная куча фич. Тебе утечки искать? Так -fsanitize=address есть везде. А что до остального, то у винды есть всякие performance analysis toolkit и куча встроенных инструментов в Студии.

Ответы23140

21 янв, 01:15 213 1123140

>>1123124
а студия щас только под винду? забавно, так ни разу и не открывал.

21 янв, 17:14 214 1123430

Антоны, реально ли найти работу на Cи?

Ответы2343123444

21 янв, 17:14 215 1123431

>>1123430
А почему нет?

Ответы23432

21 янв, 17:15 216 1123432

>>1123431
В каких областях он востребован? Востребован больше плюсов?

Ответы23436

21 янв, 17:16 217 1123436

>>1123432
Так Си и Си++ это одно и то же дерьмо, нет?

Ответы23439

21 янв, 17:18 218 1123439

>>1123436
Разные же языки.
С ООПом и без него

21 янв, 17:21 219 1123444

>>1123430
Думаю даже не стоит пытаться, учи лучше пэхапэ, там реальней бабло поднять. А Си чисто для души.

Ответы23447

21 янв, 17:23 220 1123447

>>1123444
Еще CSS, html, javascript?

Ответы23454

21 янв, 17:26 221 1123453

Было чувство, что в первый раз на лед стал, оказывается я делал байтоебство.

21 янв, 17:27 222 1123454

>>1123447
ну на базовом-то надо знать. Но я имел ввиду бэкэнд, базы данных, фреймворки популярные(Laravel,Symphony) Ну зайди ты на хх, посмотри какие требования. Что как маленький-то...

Ответы23657

21 янв, 19:30 223 1123623

>>1117775
Посмотрел 5 уроков. Почти полностью безполезная штука в изучении С. Там почти все примеры решаются с помощью их же библиотеки cs50.h, которой нет в С.

893 Кб, 400x554
21 янв, 19:43 224 1123629

Бля, читаю K&R, не все упражнения получается сделать.

Ответы2363023889

21 янв, 19:43 225 1123630

>>1123629
Я не понимаю как сделать упражнение, где надо значение EOF вывести на экран.

Ответы23632

21 янв, 19:47 226 1123632

>>1123630
printf("EOF: %d\n", EOF);

21 янв, 20:29 227 1123657

>>1123454
>Laravel,Symphony
Ты тупой?

Ответы23690

21 янв, 21:12 228 1123690

>>1123657
Что не так?

168 Кб, 625x439
21 янв, 23:34 229 1123889

>>1123629
>читаю K&R
Ты чёрт

Ответы23926

58 Кб, 800x600
21 янв, 23:56 230 1123926

>>1123889
Чому?

Ответы23929

21 янв, 23:59 231 1123929

>>1123926
Потому что слушаешь всяких мамкиных советчиков-долбоёбов.
Читать надо не древнее говно, а свежак с последними изменениями в стандарте.

Ответы23938

22 янв, 00:03 232 1123938

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

Ответы239392395424014

22 янв, 00:06 233 1123939

>>1123938
>легаси кто суппортить будет, козлик ты проткнутый?
ЛОЛ! Вот такие долбоёбины как ты и будут, за жрат.
Что бы понимать язык надо не суппортить всякое васянское говно и не дрочить на разницу в стандартах, а писать код.

Ответы24095

22 янв, 00:17 234 1123954

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

Ответы2395524014

22 янв, 00:18 235 1123955

>>1123954
Просто начни писать на JS. Тебе понравится.

Ответы23961

22 янв, 00:22 236 1123961

>>1123955
> эти выпады
ты жалок.

Ответы23972

22 янв, 00:30 237 1123972

>>1123961
Это все твои оправдания, чтобы только не писать на js. Перестань. Просто начни писать.

Ответы23978

22 янв, 00:35 238 1123978

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

Ответы23982

22 янв, 00:44 239 1123982

>>1123978
Ничего не нужно учиться и уметь, я тебе гарантирую. Я сам 10 лет писала на C и Fasm. Разрабатывал драйвера и ОСРВ. Но потом начал писать на JS и теперь я просто счастлив. Начни писать и ты, и ты поймешь как прекрасен этот мир.

Ответы24014

22 янв, 01:29 240 1124014

>>1123938
Ты денегенерат, ты хоть понимаешь это?
Какое нахуй легаси и коммерческий код для нуба-вкатывальщика? Ему нужны знания, новые знания а не высеры старых пердунов ИТТ. Ты даже дальше хелловорда не ушёл, раз пишешь такую чушь и вся твоя активность заключается в засирании проектов никому не нужными коммитами. Убейся нахуй.
>>1123954
>так не уважать старину
Ещё один денегнерат. Какая нахуй старина для новичка, блять? Ему учиться надо, а не дрочить на бородатых дядь.
>>1123982
Двачую, но к этому надо самому придти. Тупездням-хелловордщикам этого не объяснишь.

Ответы2409524493

22 янв, 07:35 241 1124095

>>1123939
>>1124014
Просто идите на хуй хипстеры вонючие. В ынтерпрайзе хватает легаси до жопы, его надо переписывать, за что лаве платят так-то. Либо поддерживать, за что так же платят бабки. Если переписывать софт, то выйдет сильно дороже. Так что уебки малолетние мне не рассказывайте как оно там в мире программирования.

22 янв, 14:04 242 1124276

по поводу этого >>1122814
пофиксил баг, причина в том, что один конпелятор выдавал в argv[0] полный путь к файлу, а другой только его имя. пачему?111

Ответы24495

22 янв, 19:24 243 1124493

>>1124014
Потому что содержимое argv[0] зависит от способа запуска программы (например, банально - с полным путем она запущена или с относительным), а при желании туда можно вообще "хуйпизда" положить в любой ОС. Не стоит слишком доверять agrv[0].

Ответы2449524513

sage 22 янв, 19:25 244 1124495

>>1124276
>>1124493
Промахнулся.

22 янв, 19:44 245 1124513

>>1124493
>Не стоит слишком доверять agrv[0].
а я доверился... в том то и дело, что например древний ватком при любом запуске ложил туда полный путь как и древняя студия.
а теперь расскажи как туда положить хуйпизду, просто интересно.

Ответы24624

22 янв, 23:12 246 1124624

>>1124513
> например древний ватком при любом запуске ложил туда
А мог и не ложить. Стандарт просит класть туда program name или пустую строку, но что конкретно является program name никак не оговаривается. Любая вменяемая реализация (кроме шелкодов и прочих намеренно или случайно кривых программ) положит туда какой-то путь до исполняемого файла. Но не более.

> а теперь расскажи как туда положить хуйпизду
https://ideone.com/WIKC3H (в винде практически аналогично, разве что CreateProcess не подменяет твой процесс).

Ответы24633

22 янв, 23:31 247 1124633

>>1124624
>https://ideone.com/WIKC3H
чот пиздос, не проеб ли это в апи?

Ответы2463825940

sage 22 янв, 23:45 248 1124638

>>1124633
Это нормально. Ненормально то, что ps по умолчанию выдает командную строку в отличие от таскменеджеров винды, где по умолчанию имя exe-шника, а командную строку нужно включать/просить специально.

Ответы24641

22 янв, 23:51 249 1124641

>>1124638
>Это нормально.
вот зачем это нужно? имя передаешь первым аргументом, дублируешь его в массиве, действительное имя все равно узнается вызовом readlink и т.п., х.з. короче.

23 янв, 00:07 250 1124653

>>1119297
nigga what?

23 янв, 01:43 251 1124693

Стыдно за студентов, которые ведутся на зеленых итт.

23 янв, 01:52 252 1124700

Лучше бы вы все изучали JavaScript.

Ответы25037

797 Кб, 2560x1700
23 янв, 14:15 253 1124844

Добры день, ребят ситуация такая. В пятницу общался с работодателем и пришлось закрыть комп и уехать по делам на выходные (да я у родителей сейчас и помогаю им). В понедельник приехал и увидел что он в пятницу на email отправил тестовое задание. Вчера приступил к его выполнению. Что стоит написать работодателю и стоит ли что либо писать?
Хотел написать следующее :"Здравствуйте, хотел бы уточнить сроки выполнения тестового задания. Приступил к выполнению задания вчера, в связи с личными обстоятельствами."
Или просто написать про сроки выполнения? Задачки не сложные, я на джуна претендую.
Как быть анонимы? Как он отреагирует на это? Стоит ли ему сообщать что вчера только начал выполнять и в нагрузку намекуть почему? Или просто спросить по срокам выполнения? Как быть...

Ответы2503925145

23 янв, 18:41 254 1125037

>>1124700
Лучше бы ты не толстил.

23 янв, 18:43 255 1125039

>>1124844
Отправить решение задач. Всё. Если с его стороны не было указано дедлайна, значит ему похуй. И тебе должно быть похуй.

68 Кб, 312x516
23 янв, 21:18 256 1125145

>>1124844
>тестовое задание

93 Кб, 768x1024
24 янв, 11:44 257 1125419

Здрасьте. Подскажите, что гуманитарию-вкатывалющику лучше читать. Начал Подбельского&Фомина, но чтобы понять нужно перечитывать по 5 раз и делать умный вид. Теперь нашел ваш тред и рекомендацию Пратса, где все очень разжевано, но в 2.5 раза больше текста в сравнении. Так вот, считаете нужным дочитывать сих господ или перекатываться на Пратса?

Ответы25649

24 янв, 18:06 258 1125573

Сап, программач. Есть каталог с вроде как драйверами для дисплея. Как все это дело компилировать я что-то не догоняю. Дисплей собираюсь подключать к Orange Pi, она на ARM. Никто не подскажет, можно ли из этого что-нибудь собрать?
http://rgho.st/7CjknTCjX

Ответы2558525674

24 янв, 18:31 259 1125585

>>1125573
Этот код для вполне конкретного микроконтроллера. Вряд ли он особо пригодится, покуда у тебя Orange Pi.
Что за дисплей? Ты уже проовал его как-то заставить работать с Orange Pi?

Ответы25885

112 Кб, 1491x711
24 янв, 18:50 260 1125591

Здравствуйте, есть код который проверяет скорость чтения из файла на четырех файлах, для каждого из которых он генерирует 100 Кб входных данных, разбивая их на строки со случайным размером от 1 символа до N символов, причем N разное для каждого из файлов, а затем построчно считывает получившиеся файлы в буфер.
Т.е. это лаба, суть лабы показать что чем крупнее фрагменты данных, отправляющиеся в вызов ReadFile (соотв. чем меньше вызовов ReadFile), тем быстрее работает код.

Программа работает нестабильно, как правило несколько раз поработает как надо, потом несколько раз вылетает во время выполнения с ошибкой сегментации. Причем если из программы убрать вывод результата (название файла, скорость чтения, верхний предел размера строки), она вообще не вылетает. На скрине стек вызовов в момент вылета - в недрах printf какая-то ошибка в crt, короче я студиозус и не понимаю в чем проблема. Ошибки связанные с индексом полностью исключены (да они бы и не вели в ntdll, лол), грешил на стек, мало ли я там что-то порчу, все мало-мальски большие массивы начал выделять malloc'ом, а воз и ныне там.

Ответы25674

24 янв, 20:38 261 1125649

>>1125419
Бери то, что понятнее. Цель же не прочитать книгу, а получить знания

24 янв, 21:13 262 1125674

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

>>1125591
Ну, во-первых, если N меньше десятков килобай, тогда твоя лаба меряет лишь накладные расходы на системный вызов, ибо кэши. Во-вторых, все равно кэши. А в-третьих, всего кода ты не дал, гадать сложно. Ты сейчас вполне можешь повреждать кучу при чтении, на это намекает и твой стектрейс. Уверен, что HugeBufferForFile достаточно huge? Выдели его наоборот со static, и посмотри, не изменится ли место ошибки. Алсо, попробуй временно положить в последний аргумент printf 1.23 вместо своего значения.

Ответы25687

24 янв, 21:53 263 1125687

>>1125674
Спасибо, буду разбираться.
Вот код кстати https://pastebin.com/LFLA0NAk

Ответы25714

24 янв, 22:39 264 1125714

>>1125687
Для начала:
> char filenames[NUMBER_OF_FILES];
Тут ты кладешь младшие байты указателей на строки в массив char. А нужно в массив указателей на char.

> константы
Это тебе не кресты. const в Си - не константы, а переменные, в которые ты добровольно согласился не писать. Константы делают через #define. В результате вместо массивов фиксированного размера на стеке ты делаешь VLA (само по себе это не слишком плохо, но без malloc ты мог вполне не влезать в стек безо всякой диагностики).

А главное, ты генеришь строки рандомной длины без ограничения минимального размера. Из какого астрала ты взял, что их не будет более MAX_NUMBER_OF_STRINGS_IN_FILE?
> endOfStringPositions[currentFile][currentString] = carriage;
И что вот тут ты будешь портить память? Воткни printf currentString, и ты узнаешь о себе много нового.

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

Ответы2572933139

24 янв, 22:55 265 1125729

>>1125714
>char filenames[NUMBER_OF_FILES];
Только что, разбираясь с кодом, исправил с варианта "так как надо" на вариант который скинул тебе, сам потому что еще разбираюсь в коде (который я и наваял полгода назад). Переделал обратно.

>константы
VLA же всё равно на стеке выделяется? Да и вообще всё это на переполнение стека на мой молодой взгляд не похоже, stack overflow это вроде бы 0xC00000FD, а у меня сегфолты черт знает где.

Насчет размеров - мне показалось, что будет правильным принять вот такие вещи:
1) Я генерирую файл минимум в FILE_MIN_LENGTH байт, и когда обнаруживаю выход за рамки этой величины, прекращаю запись.
2) Соответственно, при построчной проверке на размер, максимально возможный размер файла - это когда я предыдущую строку уложил прямо в этот лимит, а потом записал самую большую строку из тех которыми я оперирую, т.е. FILE_MIN_LENGTH + MAX_STRING_SIZE
3) А с MAX_NUMBER_OF_STRINGS_IN_FILE проеб, потому что их будет (FILE_MAX_LENGTH / 64).

Ответы2573625761

24 янв, 23:06 266 1125736

>>1125729
Ну конкретной причиной падения в том коде, что ты скинул, было повреждение кучи при записи в endOfStringPositions. В таких случаях очень хорошо помогает -fsanitize=address в шланге, не пришлось бы и гадать.

Ответы25743

24 янв, 23:12 267 1125743

>>1125736
И вправду, в currentString какая-то дичь.

Ответы25761

24 янв, 23:47 268 1125761

>>1125729
>>1125743
> потому что их будет (FILE_MAX_LENGTH / 64).
> И вправду, в currentString какая-то дичь.
Минимальный размер строки = 1 ((rand() % ...) вернул ноль, ты прибавил один), плюс \n, тогда 2. Максимальное количество строк = размер файла / 2. Поэтому и дичь.

25 янв, 07:56 269 1125851

>>1112990 (OP)
>Чем конпелировать:
>
>- Очевидный GCC.
>- clang: оче годно, батя рекомендует.
>- Intel C++ Compiler: оптимизации, тысячи их.
>- Visual Studio 2017 Community Edition
Чем конпелировать:

> Очевидный GCC.
НЕ РАБОТАЕТ на винде у меня, его нельзя включить, запускается только докачивалка всякого говна.
>clang: оче годно, батя рекомендует.
Не работает, после установки есть только UNISTALL кнопка.
> Visual Studio 2017 Community Edition
стоит 2015, не запускает ХЕЛЛОУВОРЛД ТАК КАК БЛЯДЬ ЕМУ С++ НУЖЕН

Во истину в айти остались одни дауны, всё через жопу.

Ответы2585626297

25 янв, 08:10 270 1125856

>>1125851
Слишком толсто, попробуйте потоньше.

25 янв, 09:01 271 1125885

>>1125585
Дисплей этот:
https://www.waveshare.com/product/modules/oleds-lcds/graphic-lcd/4.3inch-480x272-touch-lcd-b.htm
Код взял с сайта производителя этого дисплея. Заставить его работать так и не смог, максимум подсветку включил. Тач не нужен, мне достаточно хотя бы что бы он определился как фреймбуфер.

25 янв, 10:52 272 1125940

>>1124633
Нет, это наоборот даёт преимущество, т.к. одна и та же программа может вести себя по-разному в зависимости от значения в argv[0]. Вот хороший пример:

https://svnweb.freebsd.org/base/head/sbin/md5/md5.c?revision=307658&view=markup#l167

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

Ответы26297

42 Кб, 1397x49
25 янв, 15:58 273 1126072

В си надо чтоле каждый элемент массива явно задавать? Сцук, херанул я значит массив 80 на 480, значения где надо прописал, остальное по дефолту не трогал, чтоб нулями захерачил - а он мне под конец какую-то хуйню выдает. Ну я поебался там малясь, дошел до того, что тупо массив этот 40 на 480, заполненный нулями выдает такую же хуйню, присвоил-таки каждому элементу значение 0 - и заработало епт. Массив флоат, бзв. Хотя, с интом тоже вроде такая шляпа была.
Че за херня? Я прогу первоначально на древних гентах с древним гсс накарябал - норм. Домой пришел, мингв накатил - там этот пиздец. Ну я попросил друга на линухе компильнуть - не, нихуя, такая же шляпа.

Ответы26297

25 янв, 16:52 274 1126107

Сисяны, а как повлияло знание языка на вашу жизнь? Только давайте без зелени.
Например, у меня появился какой-то интерес к жизни и хобби. Раньше любил каждый вечер залудить пивка с сухариками или копчёной кетой, позырить футураму под шышками, поебать знакомых шлюх, запилить пару классов в жабе... Жизнь текла, но как-то не хватало чего-то особенного, что бы аж дух захватывало. Потом решил, что негоже рядовой макаке ебашить код как машинистке и решил помаленьку вкатиться в Си, ну что бы знать как оно всё изнутри, и просто охуел от указателей: Указателей на массивы, на функции, указатели на указатели функций.... Блядь, меня аж до сих пор прёт от это мощщи! Почему остальные макаки не хотят познать Сишечку?

Ответы261182612926344

25 янв, 17:15 275 1126118

>>1126107

>Почему остальные макаки не хотят познать Сишечку?
Потому что они в ВУЗике вдоволь наигрались с Сишечкой.

Ответы26120

25 янв, 17:18 276 1126120

>>1126118
В вузиках играют с алгоритмиками, но не с сишечкой.

25 янв, 17:24 277 1126129

>>1126107
> Только давайте без зелени.
> дальше идёт абзац толстоты
иди-ка ты нахуй

Ответы26146

25 янв, 17:42 278 1126146

>>1126129
Что мешает пропустить абзац жырноты и запилить свою тонкую пасту?

25 янв, 21:00 279 1126297

>>1125851
> НЕ РАБОТАЕТ на винде у меня
Инстоллишь MSYS2, потом:
pacman -S mingw-w64-i686-toolchain mingw-w64-i686-clang
gcc file.c
clang file.c

> стоит 2015, не запускает ХЕЛЛОУВОРЛД ТАК КАК БЛЯДЬ ЕМУ С++ НУЖЕНmi
Кто кроме тебя виноват, что ты не поставил поддержку крестов? Компилятор там общий для C и C++.

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

>>1125940
Не аргумент. Разное поведение достигается симлинками, в argv[0] попадает имя симлинка.

>>1126072
Куда ты херанул? В стек? Из кучи маллоком? Тогда нужо обнулять. Обнулил, но все равно не работает? Значит, неправильно обнулил. Тащи код, телепаты уже заебались за 27 тредов.

Ответы2633826493

25 янв, 21:44 280 1126338

>>1126297
>Кто кроме тебя виноват, что ты не поставил поддержку крестов? Компилятор там общий для C и C++.
>в айти остались одни дауны
Фиксану за тебя - в микрософт остались одни дауны, нагородили в конпеляторе своей ебаной студии так, что без поллитры не поймешь как собрать там сишный код нормально.

Ответы26349

25 янв, 21:51 281 1126344

>>1126107
>Указателей на массивы, на функции, указатели на указатели функций.... Блядь, меня аж до сих пор прёт от это мощщи!
Такая-то мощь, хранить адрес другой ячейки памяти

25 янв, 21:56 282 1126349

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

26 янв, 01:29 283 1126493

>>1126297
>Тащи код
Да держи. Хуйня из под коня, а не работает. Я гугланул эту тему, попробовал, тут либо задавать значения в цикле, либо при объявлении массива, последнее кажется самым верным. Ващи наес. Чет он сначала нули выдает и не парится, на старом компиле ему похуй, а тут вдруг приебаться решил. Везде и всегда нули херачат по-умоланию, этот чето доебался. Кароч, на ващих ссях нужно шоб было однозначно все объявлено и присвоено без умолчаний, а то хуй те в ротеш. Ясно понятно.

#include <stdio.h>

int main()
{
int i, j;
float A[80][480]; //= {0};

for (i = 0; i < 80; i++) {
for (j = 0; j < 480; j++) {

//A[j] = 0;
printf("%.3f ", A[j]);
}
printf("\n");
}
}

Ответы2650026603

26 янв, 01:35 284 1126500

>>1126493
> Везде и всегда нули херачат по-умоланию
А если тебе не нужно тратить время на обнуление? Если ты в этот массив строкой ниже читать из файла будешь, и все равно его целиком или частично перезапишешь? Предлагаешь заниматься бессмысленными действиями и тормозить, как те языки, где нули по умолчанию?

А в коде твоем да, массив на стеке, содержит мусор, который был на стеке до выполнения функции main(). Если раскомментировать = { 0 }, все отлично заработает. Как это вяжется с твоим утверждением, что
> значения где надо прописал, остальное по дефолту не трогал
Ты отдельно писал что ли? Для тебя сделали красивый синтаксис: float foo[100] = { [3] = 1.0f, [42] = 2.0f, [99] = 100.0f }; Все, что не инициализируешь, оно отлично заполнит нулями без тебя. Если совсем инициализатора не будет никакого, как у тебя, тогда не заполнит, потому что не просил никто.

Ответы26534

26 янв, 02:12 285 1126534

>>1126500
>Если ты в этот массив строкой ниже читать из файла будешь, и все равно его целиком или частично перезапишешь?
Тут логично, хуй с ним.

199 Кб, 683x1024
26 янв, 02:17 286 1126540

Ребят подскажите как решать это, нихера не могу понять
С меня что нить, нужно хотя бы мат аппарат под это дело заточить, а я уже третий день голову ломаю и нихера сообразить не могу.
Кубик, грани которого помечены цифрами от 1 до 6, бросают N раз. Найти вероятность того, что сумма выпавших чисел будет равна Q.
Ограничения: 1 <= N <= 500, 1 <= Q <= 3000.
Входные данные
В первой строке находятся числа N и Q через пробел.
Выходные данные

Вероятность того, что сумма выпавших чисел будет равна Q.

Примеры

Входные данные
1 1
Выходные данные
1.66666666666667E-0001
Входные данные
2 2
Выходные данные
2.77777777777778E-0002

26 янв, 09:30 287 1126603

>>1126493
Вместо A[j] надо A[j]

26 янв, 17:24 288 1126780

кто что знает про российский конпелятор UCC от этих вот https://www.astrosoft.ru/products/development/compiler/

почему они окуклились и не дают его пощупать?

Ответы2689726907

26 янв, 20:20 289 1126897

>>1126780
Нахуй он тебе сдался? Это точно не гцц попова?

Ответы26917

26 янв, 20:33 290 1126907

>>1126780
Начнём с того, что в далёком-далёком 199x году много кто их делал. Большинство тех фирм благополучно здохли, а те, кто остался — работают на, как видим, оборонный комплекс.
И действительно, на кой хер тебе он сдался. Самое трудное в компиляторе — ни разу не разбор исподных текстов и не построение синтаксического дерева, а распределение регистров. Сия великосложная ЗАДАЧА у них либо не решена вовсе, либо решена и запатентована (и вообще говоря, фирма и не обязана это никому открывать.)

Ответы26917

26 янв, 20:48 291 1126917

>>1126897
вроде сами скрафтили
>>1126907
хотелось бы могучего русского конпелятора си

кстати, разве если свелосипедить/форкнуть свой конпелятор на волне импортозамещения, то это будет плохой идеей?

Ответы26946

26 янв, 21:08 292 1126946

>>1126917
> кстати, разве если свелосипедить/форкнуть свой конпелятор на волне импортозамещения, то это будет плохой идеей?
Полноценный компилятор Си можно написать за месяц (в одно рыло). Тесты за полгода. Качественный кодогенератор к нему можно писать бесконечно. С крестами по срокам все сильно хуже. Но только зачем? Чем принципиально "могучий русский" компилятор отличается от того же гцц с патчами от могучих русских? Что же касается импортозамещения, то там основная проблема не сделать, а сертифицироваться где только можно и пропихнуться куда нельзя.

Ответы26958

26 янв, 21:30 293 1126958

>>1126946
>гцц с патчами
гцц это ебаный черный чщик, это раз. джва, это что нормальной альтернативы для кросконпеляции кроме него и нет.
>С крестами
без крестов
>а сертифицироваться где только можно
прчему это должно быть проблемой, кроме UCC в реестре никого и нет

Ответы26963

26 янв, 21:32 294 1126963

>>1126958
> нормальной альтернативы для кросконпеляции
Дали ему LLVM, нет, хочу велосипедить.

Ответы26966

26 янв, 21:34 295 1126966

>>1126963
>LLVM
он на крестах, он большой, он монстр

26 янв, 23:44 296 1127045

>>1112990 (OP)
блин,пасиба
поступил в уник, паскаля не знаю и тут сразу лабы по си , делать что не знаю
Хоть литературы почитаю

Ответы27076

27 янв, 00:46 297 1127076

>>1127045
>поступил в уник
в январе?

Ответы30438

27 янв, 13:28 298 1127270

>>1112990 (OP)
Мир вашим байтам, Антоны!
Решил вкатиться в программированиетехнарь, не гуманитарий, в школке и в универе преподавался Паскаль. Посоветуйте небольшой IDE на Шиндоус, а не 100Гиговый vs2017, раз...
>Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.

Ответы272802751527527

27 янв, 13:38 299 1127280

>>1127270
иде для пидоров, ставь мингв64 и нотепад++

Ответы27282

27 янв, 13:43 300 1127282

>>1127280
Два чаю. От нотэпад плюс плюс кончаю.

Ответы27532

27 янв, 20:04 301 1127515

>>1127270
Для "вкатиться" Pelles C очень даже норм. Он не подходит для сборки продакшен кода. Но когда ты будешь в состоянии написать что-то нормальное, сборка из командной строке через GCC или Visaul Studio Build Tools не будет для тебя проблемой.

Ответы27555

27 янв, 20:18 302 1127527

>>1127270
>Решил вкатиться в программированиетехнарь, не гуманитарий, в школке и в универе преподавался Паскаль. Посоветуйте небольшой IDE на Шиндоус, а не 100Гиговый vs2017, раз...

Code::Blocks и шланг.

27 янв, 20:23 303 1127532

>>1127282
Двачую, грустно от одной мысли, что его нет под линукс

Ответы27534

27 янв, 20:26 304 1127534

>>1127532
Под линукс есть Neovim и Emacs. Более того, они есть не только под линукс, но когда ты об этом узнаёшь, то это уже почти не важно.

Ответы2753527536

27 янв, 20:27 305 1127535

>>1127534
>Neovim и Spacemacs
Пофиксил тогда уж.

27 янв, 20:28 306 1127536

>>1127534
Сколько там emacs с зависимостями просит места?

Ответы27539

27 янв, 20:32 307 1127539

>>1127536
> Installed Size : 67.7 MiB
Аутичный немного вопрос, если честно.

Ответы27542

27 янв, 20:38 308 1127542

>>1127539
Нет, просто всегда думал, что emacs bloated говно

27 янв, 21:12 309 1127555

>>1127515
>Visaul Studio Build Tools
уже этого нет

Ответы27560

10 Кб, 549x220
27 янв, 21:21 310 1127560

>>1127555
Да что ты говоришь? https://www.visualstudio.com/downloads/

Ответы27574

27 янв, 22:02 311 1127574

>>1127560
в курсе что такое билд тулз?

Ответы27575

27 янв, 22:06 312 1127575

>>1127574
з.ы. это говно мне поставило MSBuild без конпелятора Си

Ответы27579

sage 27 янв, 22:11 313 1127579

>>1127575
Прочитай хотя бы текст скриншота внимательно.

Ответы27592

27 янв, 22:34 314 1127592

>>1127579
сам пробовал это говно ставить?

Ответы2759327703

27 янв, 22:36 315 1127593

>>1127592
з.ы. вот версия последняя нормальная версия
https://www.microsoft.com/en-us/download/details.aspx?id=48159

sage 28 янв, 01:46 316 1127703

>>1127592
Не просто пробовал: пользуюсь.

28 янв, 20:36 317 1128254

Находили версию "Алгоритмических трюков для погромиздов", где можно различить выделенное жирным и не жирным?
Это же писец.

28 янв, 20:59 318 1128280

>>1112990 (OP)
Что учить C или C++?

Ответы2871328716

28 янв, 21:01 319 1128282

>>1118697
> легковесное и практичное, как Notepad++, под линь.
Notepadqq ну же

Ответы28322

28 янв, 22:40 320 1128322

>>1128282
kWrite, Kate — имхо, тоже самое.

29 янв, 17:21 321 1128711

Почему в студии нет с и надо через какие-то костыли его выводить?

Ответы28728

29 янв, 17:22 322 1128713

>>1128280
C для микроконтроллеров. Кресты для всего остального.

29 янв, 17:28 323 1128716

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

Ответы28727

29 янв, 17:45 324 1128727

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

Ответы28730

29 янв, 17:50 325 1128728

>>1128711
В студии есть Си. Создаешь пустой Win32 проект, а добавляя новые файлы, правишь расширения на .c

29 янв, 17:53 326 1128730

>>1128727
Я к тому что там ты достигнешь результата быстрее за счёт того что код пишется очень быстро и коротко. Так что тупо зубрить там надо недолго.

Ответы28731

29 янв, 17:55 327 1128731

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

Ответы28740

29 янв, 18:06 328 1128740

>>1128731
> На Питуна неиронично предлагают учиться по ютуберам, а книги какие-то устаревающие со скоростью света и не особо полезные.
Бред. Для новчика вполне допустимо сейчас взять какую-нибудь книгу по Python 2.6 (но лучше по любому 3.x - он уже 10 лет существует!) и нормально разобраться в питоне. По крайней мере, это будет примерно тем же самым, что и изучение Си по K&R. Зато в питоне у тебя уже есть структуры данных, и не придется в каждой новой программе переизобретать динамические массивы или долго страдать, пытаясь подключить какой-нибудь openssl. Если язык нужен, чтобы быстро что-то говнокодить, то учить Си - плохой выбор.

Ответы28745

29 янв, 18:17 329 1128745

>>1128740
>Для новчика
>Си по K&R
Ты еблан или долбоёб? Как там, в 80-х?

29 янв, 20:14 330 1128820

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

Ответы2882328830

29 янв, 20:16 331 1128823

>>1128820
Идеологически кресты немного ближе к пайтону, правда тебе не хватит на них памяти.
Почитай K&R.
Тебе и C99 сойдёт, особенно для ускорения.

Ответы28827

29 янв, 20:20 332 1128827

>>1128823
>правда тебе не хватит на них памяти
Вот из-за этого и беспокоюсь, все таки не моя область, что бы полностью плюсы учить
>Тебе и C99 сойдёт, особенно для ускорения.
А разве в новых версиях нет каких-то особых фишечек, которые позволят запилить более гибкие и функциональные возможности?

29 янв, 20:22 333 1128830

>>1128820
Сижка не проще

29 янв, 20:39 334 1128838

Короче не знаю. Я уже много лет болтаюсь в каком-то дерьме. Периодически пишу код и перестаю на пару лет. Такими темпами я уже вроде бы как умею писать код, но языки толком не изучил. Почти всё заканчивается на том, что мне просто нечего писать. Вот сейчас пытаюсь одновременно пинтон с сижкой осваивать, но литература к языкам написана для совсем уж конченных даунов. Не знаю что делать и что накатывать, а главное, какие задачи решать.
Помогите выбраться из этой ямы. В частности, я не знаю структуру программ. Например, вот в сижке есть main, а что в него выводить я не очень понимаю. Видел программы, где основная часть прописана в виде классов, а в main выводится только создание экземпляра и всё.
Деятельность планирую связать с контроллерами, научными расётами и немножко ии.

Ответы28839

29 янв, 20:42 335 1128839

>>1128838
Ещё я привык всеми способами избегать использования переменных, если это возможно. Не знаю насколько это правильно.

Ответы2886928997

29 янв, 21:31 336 1128869

>>1128839
> Ещё я привык всеми способами избегать использования переменных
Вы только посмотрите на эту игру аутиста с самим собой.

30 янв, 01:12 337 1128997

>>1128839
>всеми способами избегать использования переменных
предпочитаешь вместо аргументов пихать функции при вызове:
a(b(), c(), d()); ?

Ответы29054

30 янв, 02:18 338 1129009

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

Ответы290102903229043

30 янв, 02:31 339 1129010

>>1129009
gdb под какимнить эклипсом или кутем

30 янв, 07:51 340 1129032

>>1129009
emacs + gdb

30 янв, 09:13 341 1129043

>>1129009
>Сисяны, а как лучше отлаживать прогу?

Юнит-тестами и ассертами.

30 янв, 09:41 342 1129051

https://ideone.com/NpkkFt

Сисяч, чому такая хуйня?

Ответы2905629058

30 янв, 09:54 343 1129054

>>1128997
Да

30 янв, 09:57 344 1129056

>>1129051

Тому.

https://ideone.com/ib1H71

У тебя x , y, z , w складываются в одну и ту же переменную, потому что дебич и не знаешь как юнион работает.

Ответы29060

30 янв, 10:00 345 1129058

>>1129051
Ты юнион со страктом не перепутал?
У тебя тип юнион размером с массив флоат, а при каждом определении переменных флоат ты юзал только первый флоат из юниона(каждый раз значение перезаписывается), а остальные три инициализированы нулями ещё при старте и никак не изменяются по ходу дела кода.

Ответы29060

30 янв, 10:05 346 1129060

>>1129056
>>1129058

Спасибо.

>>1129058

> Ты юнион со страктом не перепутал?

Нет. Я хочу чтобы к одним и тем же данным можно было и как к отдельным полям xyzw и как к элементам массива обращаться.

30 янв, 11:21 347 1129080

1,3 Мб, 2560x19201,1 Мб, 2560x1920

Не покупайте это дерьмо. Вы толькос мотрите что они пишут. Нигде не поясняется, что на самом деле это адрес.

Ответы29145292952932929369

30 янв, 11:50 348 1129104

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

30 янв, 13:33 349 1129145

>>1129080
А ведь ты мог купить читалку и Прату.

Ответы29175

30 янв, 14:56 350 1129173

Рейт
https://pastebin.com/CiWsF7zZ

Ответы29244

30 янв, 14:58 351 1129175

>>1129145
Если покупать, то хорошую. А так просто мимопроходил и решил почему бы и нет, пусть будет. Хотя я уже далеко не начинающий. Другой литературы по С не было.

30 янв, 17:12 352 1129244

>>1129173
Пустые скобки - это либо очень старый Си, либо кресты. Если у тебя нет аргументов, пиши int func(void). Вывод результатов мог бы в одном месте делать. Форматирование твое - признак ньюфага. Рано или поздно ты осознаешь и глупостями типа выравнивания в исходном коде заниматься перестанешь (максимум в хедерах, если оправдано).

Ответы2924529258

30 янв, 17:16 353 1129245

>>1129244
>Пустые скобки - это либо очень старый Си
Компилятор PellesC плез, я хз где еще такая ебнутость.

Ответы2927429280

30 янв, 17:49 354 1129258

>>1129244
С выравниваниями код красивее. Главное привычку выработать.
А вообще правильно что всё в одной функции? Я не могу нащупать эту границу, что надо в функцию толкать, а что в main кидать.
А на счёт пустых скобок я думаю нет особой разницы, что void, что так, работает. Просто привычка с питона осталась.

Ответы29280

30 янв, 18:13 355 1129274

>>1129245
PellesC это IDE, не слышал про их компилятор.

Ответы2927929280

30 янв, 18:20 356 1129279

>>1129274
Компилятор который входит в эту иде? Не? Я тут эксперт не учи меня

30 янв, 18:21 357 1129280

>>1129245
> я хз где еще такая ебнутость
В стандарте языка. Если ты объявляешь функцию как int foo() где-нибудь в хедере, то ты можешь ее вызвать как foo() или foo(1) или foo(1, 2, 3, 4, 5) - предупреждений не будет. Если ты хочешь плодить подобный говнокод - плоди, но нормальные люди, чтобы показать, что у функции нет параметров, пишут вместо них void.

>>1129258
> А вообще правильно что всё в одной функции?
Код дублируется? Ты будешь вызывать функцию из двух и более разных мест? Ты будешь вызывать функцию не из main()? main() выполняет какую угодно другую задачу?

>>1129274
Pelles C - набор программ для разработки, включающий в том числе IDE и компилятор. Компилятор там - хорошо похаканный LCC.

Ответы29282

30 янв, 18:27 358 1129282

>>1129280
>предупреждений не будет
А сори, я просто не в борланде компилирую. Даже в Tcc предупреждение вроде есть. Так то я пишу void чтоб если что пелесом компилить под виндой, но ненужна.

Ответы29292

30 янв, 18:57 359 1129292

>>1129282
> Даже в Tcc предупреждение вроде есть
Нет, предупреждений не будет, и не может быть, потому что это валидный код на Си. Но синтаксис устаревший, и этот синтаксис рано или поздно будет выброшен. Вот, проверяй:
// foo.c
void foo() { return; }
// bar.c
extern void foo();

int bar(void)
{
foo();
foo(1.0, 2, "three");
}

Ответы29300

30 янв, 19:01 360 1129295

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

Ответы29306

30 янв, 19:07 361 1129300

>>1129292
wstrict-prototype ругается на пустые скобки, спутал видимо я.

30 янв, 19:14 362 1129306

>>1129295
Вообще-то да. Надо вводную показать как работает память кудахтера и команды.

Ответы2931229329

30 янв, 19:19 363 1129312

>>1129306
Двачую, всегда советую с ассемблера начинать.

Ответы2931329329

30 янв, 19:20 364 1129313

>>1129312
Хрень сейчас сказал.

Ответы29316

30 янв, 19:23 365 1129316

>>1129313
Почему? А потом вопросы хули
char* tx = "hello world";
tx[5] = '!';
мне выдает ошибку, че такое указатели итд.

Ответы29329

30 янв, 19:51 366 1129329

>>1129306
>>1129312
>>1129316
Книга для тех, ктотзнакомится с языком Си, а не с фундаметальными основами программирования. Ну и это el piquador >>1129080 даже не сомзволил выложить оглавление, обычно в таких книгах вся сложная часть оставлена в конце, чтобы желание не отбить изучать язык.

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

Ответы293322933329369

30 янв, 19:54 367 1129332

>>1129329
Всё, Миллер-шмиллер, не бомби.

30 янв, 19:54 368 1129333

>>1129329
Так я про начало изучение с ассемблером.

30 янв, 22:00 369 1129369

>>1129080
А нахуй ты её купил, ты хоть знаешь этих "авторов"? В лучшем случае это какой-то индус за еду нарерайтил.
>>1129329
Макака проткнутая, пиздуй обратно в свой загон в /b
Ты хоть сам понял, что ты тут высрал?

Ответы29372

30 янв, 22:05 370 1129372

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

Ответы2937729468

168 Кб, 625x439
30 янв, 22:20 371 1129377

>>1129372
Чмо мохнатое, ты зачем мне пишешь про свои фантазии как ты в пять лет хуярил функции высшего порядка одной силой мысли?
Я тебе уже сказал, пиздуй в свой загон и там учи своей индусятине, чёрт ебаный.

31 янв, 08:03 372 1129468

>>1129372
>детеородный
А ручонки-то дрожат.

Ответы29511

31 янв, 12:22 373 1129511

>>1129468
Дейтериеродный*

31 янв, 13:59 374 1129531

Рейт
https://pastebin.com/tUZhFhzH

Ответы295822966429665

31 янв, 15:28 375 1129580

Есть короче один while-цикл. Как сделать выход из цикла при получении из stdout какого-нибудь EOF?

Ответы29654

31 янв, 15:30 376 1129582

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

31 янв, 17:56 377 1129654

>>1129580
If () break;

Ответы29657

31 янв, 18:00 378 1129657

>>1129654
Ну, условие естественно,

31 янв, 18:01 379 1129659

Можно вместо "if else" юзать "? :" ? Насколько они отличаются по быстродействии? Говорят вторая лучше, но она же нечитаема вообще.

Ответы296602966229667

31 янв, 18:03 380 1129660

>>1129659
Я надеюсь, ты это в шутку написал.

31 янв, 18:14 381 1129662

>>1129659
> Насколько они отличаются по быстродействии
Не отличаются.

> вторая лучше, но она же нечитаема вообще
Тернарный оператор лучше и читаемее, если выражение простое:
foo = (bar) ? b : c + 1;
А вот такое уже спорно:
digits = (foo < 10) ? 1 : (foo < 100) ? 2 : 3;

31 янв, 18:31 382 1129664

>>1129531
> getch
Нестандартное говно. Если не можешь обойтись, используй _getch().

> scanf
Попробуй ввести fuck вместо Y.

> File founded
Файл основан.

> yn = ' ';
Первый раз еще есть смысл. А вот второй раз зачем?

> fpInput
Возвращай указатель на FILE - избавишься от ненужной глобальной переменной.

> feof
По большей части нинужен. Ну то есть тут оно как бы норм, но если в цикле будет дополнительная какая-то логика с прочитанными символами - ты соснешь. feof() возвращает 1 только когда тебе уже вернули EOF при чтении: либо fgetc() вернул EOF, либо fread прочитал меньше затребованного, но не до этого. Например, если у тебя пустой файл, ты его открыл, но еще не читал, feof(fp) будет 0, хотя данных нет.

> if скобка
Они взаимоисключающие. Юзай if ... else if или даже сразу while (1) { switch (fgetc(fpInput)) { case EOF: return; case '{': ... }}.

Ответы29691

31 янв, 18:31 383 1129665

>>1129531
> getch
Нестандартное говно. Если не можешь обойтись, используй _getch().

> scanf
Попробуй ввести fuck вместо Y.

> File founded
Файл основан.

> yn = ' ';
Первый раз еще есть смысл. А вот второй раз зачем?

> fpInput
Возвращай указатель на FILE - избавишься от ненужной глобальной переменной.

> feof
По большей части нинужен. Ну то есть тут оно как бы норм, но если в цикле будет дополнительная какая-то логика с прочитанными символами - ты соснешь. feof() возвращает 1 только когда тебе уже вернули EOF при чтении: либо fgetc() вернул EOF, либо fread прочитал меньше затребованного, но не до этого. Например, если у тебя пустой файл, ты его открыл, но еще не читал, feof(fp) будет 0, хотя данных нет.

> if скобка
Они взаимоисключающие. Юзай if ... else if или даже сразу while (1) { switch (fgetc(fpInput)) { case EOF: return; case '{': ... }}.

82 Кб, 916x491
31 янв, 18:33 384 1129667

>>1129659
первое - стейтмент, второе - выражение.
как видно, результат выражения сначала копируется в eax, а потом в память. одна лишняя операция!

Ответы2968631567

12 Кб, 473x244
31 янв, 19:04 385 1129686

>>1129667
Не умеешь - не берись. https://godbolt.org/g/9io79a

>>1129677
Идешь по двумерному массиву с помощью for, вложенного в for, смотришь, есть ли элемент, который больше нуля, смотришь, есть ли элемент, чей остаток от деления на 10 равен a.

31 янв, 19:08 386 1129691

>>1129664
>Попробуй ввести fuck вместо Y.
Пробывал. Он Y/N воспринимает
>Первый раз еще есть смысл. А вот второй раз зачем?
Второй для сброса.
>> feof
>По большей части нинужен. Ну то есть тут оно как бы норм, но если в цикле будет дополнительная какая-то логика с прочитанными символами - ты соснешь. feof() возвращает 1 только когда тебе уже вернули EOF при чтении: либо fgetc() вернул EOF, либо fread прочитал меньше затребованного, но не до этого. Например, если у тебя пустой файл, ты его открыл, но еще не читал, feof(fp) будет 0, хотя данных нет.
Но надо же как-то файл до конца проверить.
>> if скобка
>Они взаимоисключающие. Юзай if ... else if или даже сразу while (1) { switch (fgetc(fpInput)) { case EOF: return; case '{': ... }}.
Где-то читал, что свитч луше юзать тогда, когда условий выбора примерно больше 4х.

31 янв, 19:09 387 1129694

>>1129690
Ну a - это какая-нибудь переменная, содержащая заданное значение, наверное? Ну или a - это шестнадцатеричное число, тогда ты можешь сравнивать остаток от деления на 16 с 0xA.

31 янв, 19:13 388 1129701

Как считать число из строки в файле? Предполагаю, что там беспорядочный набор из чисел и пробелов.
Почему многие не любят fgetc и getch? Читать посимвольно разве не лучше чем читать всю строку сразу? А если строка больше чем строковая переменная? Ещё память выделять под неё.

Ответы29733

31 янв, 19:52 389 1129733

>>1129701
fscanf().

> Читать посимвольно разве не лучше
Накладные расходны на вызов fgetc() каждый символ vs. накладные расходны на вызов fgets() с достаточно большим буфером?

> А если строка больше чем строковая переменная?
Дочитаешь.

> Ещё память выделять под неё
char buffer[4096]. Руки отвалились?

Ответы2981129813

31 янв, 21:38 390 1129811

>>1129733
Сканом пробовал. Читает неадекватно. %.c%d%.c Вот так ещё читает, но формат у него какой-то другой и потому выводит рандомные числа из памяти.

Ответы29829

31 янв, 21:40 391 1129813

>>1129733
Будто gets так же не посимвольно заполняет строку в массив. Её всё равно обрабатывать придётся таким же алгоритмом.

Ответы2982729829

31 янв, 21:59 392 1129827

>>1129813
не так же. ты думаешь драйвер диска каждый отдельный байт читает? он читает сразу большой кусок в буфер. еще ос кеширует и оптимизурет чтение файлов, потому что IO это очень медленные операции. читая по байту ты проебываешь все оптипизации и скорость

31 янв, 22:00 393 1129829

>>1129813
fgets читает одним куском много в буфер FILE, потом ищет \n (часто какой-нибудь SIMD или на худой конец 32-битными словами). Вызовов функций - три (в идеале). C fgetc() в дополнение ко всему этому ты имеешь n вызовов fgetc(), где n - длина строки.

>>1129811
Это ты читаешь неадекватно. Где код?

1 фев, 15:25 394 1130129

Пацаны, как быстренько перекатиться из Плюсов в основу? Возникла такая ситуация, в принципе.

Ответы30141

1 фев, 16:13 395 1130141

>>1130129
> Пацаны, как быстренько перекатиться из Плюсов в основу? Возникла такая ситуация, в принципе.

1) Забыть про существование ключевых слов class, template, bool, true,false (последние 3, впрочем, есть в новых стандартах)

2) Забыть про методы в структурах - структуры содержат онли переменные.

3) Забыть про перегрузку функций - функции с одним и тем же именем недопустимы.

4) Переменные нельзя обьявлять в теле for (в новых стандартах не актуально)

5) for(huitka:huitki) и auto - забудь, их нет.

6) Обьявление экзаемпляра структуры требует ключевого слова struct (так же как и при обьявлении самого типа). Можно избежать путем typedef struct{...} huitka;. Если в теле структуры используется указатель на саму эту структуру - то typedef struct Huitka {...Huitka* huitka;...} huitka.

Из того что навскидку вспомнил.

Теперь про методики.

1) Полюбить ключевые слова static и extern, научись ими пользоваться и ты сможешь писать модульный код.

static прячет видимость процедур и глобальных переменных до уровня файла , в котором они обьявлены. Если же static используется в теле функции - то такая переменная создается неявно в куче, а не на стеке и сохраняет свое значение между вызвовами, но при этом область её видимости - только внутри этой функции. Можно так писать корутины и прочую дичь.

2) Выучить препроцессор и стараться им не пользоваться в идеале никогда.

1 фев, 16:13 395 1130141

>>1130129
> Пацаны, как быстренько перекатиться из Плюсов в основу? Возникла такая ситуация, в принципе.

1) Забыть про существование ключевых слов class, template, bool, true,false (последние 3, впрочем, есть в новых стандартах)

2) Забыть про методы в структурах - структуры содержат онли переменные.

3) Забыть про перегрузку функций - функции с одним и тем же именем недопустимы.

4) Переменные нельзя обьявлять в теле for (в новых стандартах не актуально)

5) for(huitka:huitki) и auto - забудь, их нет.

6) Обьявление экзаемпляра структуры требует ключевого слова struct (так же как и при обьявлении самого типа). Можно избежать путем typedef struct{...} huitka;. Если в теле структуры используется указатель на саму эту структуру - то typedef struct Huitka {...Huitka* huitka;...} huitka.

Из того что навскидку вспомнил.

Теперь про методики.

1) Полюбить ключевые слова static и extern, научись ими пользоваться и ты сможешь писать модульный код.

static прячет видимость процедур и глобальных переменных до уровня файла , в котором они обьявлены. Если же static используется в теле функции - то такая переменная создается неявно в куче, а не на стеке и сохраняет свое значение между вызвовами, но при этом область её видимости - только внутри этой функции. Можно так писать корутины и прочую дичь.

2) Выучить препроцессор и стараться им не пользоваться в идеале никогда.

Показать весь текст
Ответы30221302233061837289

1 фев, 18:22 396 1130221

>>1130141
>стараться им не пользоваться в идеале никогда.
а как ты кросплатформенную мокропиську писать будешь?

sage 1 фев, 18:23 397 1130223

>>1130141
> переменная создается неявно в куче
Кучу с секцией данных не путай, да?

Ответы30225

1 фев, 18:25 398 1130225

>>1130223
Падажи, секция данных же просто пишется на диск и содержит переменные, инициализированные до рантайма, как и bss, или я что-то перепутал?
А там речь про static в функции.

Ответы30226

sage 1 фев, 18:27 399 1130226

>>1130225
static в функции == глобальная переменная, чье имя не видно вне функции.

Ответы30228

1 фев, 18:33 400 1130228

>>1130226
> глобальная переменная, чье имя не видно вне функции.
Вот так можно абсолютно любого человека ввести в заблуждение.
Ты мне скажи, как это всё выглядит.
Вот, на ПЗУ уже лежат инициализированные переменные, нулями или константами, все они типа static.
Я во время исполнения в функции её приватному static'у присваиваю, куда значение попадает?
Когда секция данных с ПЗУ попадает в РАМ, там ещё резервируется под ещё неинициализированные данные? Не слышал о таком.

Ответы30242

sage 1 фев, 18:53 401 1130242

>>1130228
Ты пишешь:
void func(void) {
static int x; // Инициализируется нулем
static int y = 2;
x++;
y++;
}
Компилятор создает две инициализированных глобальных переменных (инициализированных потому, что неинициализированная static неюзабельна), кладет в секцию данных, обзывает как-нибудь @xxx@11 и @xxx@22 (конвенции у всех разные, но эти имена ни с чем не пересекаются). Получаем эффект, что переменные по сути глобальные, но имена автогенеренные, и поэтому обратиться к ним из другой функции ты не можешь.
Что касается загрузки, то неконстантные данные копируются в RAM, потом после них (ну или до) обнуляется кусок RAM размером с .bss. Константные данные и код тоже могут копироваться, если место есть (обращения к ROM обычно медленнее) это уж как скрипт линкеру напишешь и загрузчик.

Аноним 2 фев, 00:33 402 1130438

>>1127076
ну нет естественно, но лабы то я не сдал

2 фев, 01:03 403 1130451

мудрые сисюны, ищу структуру данных типа trie, но где слова сортированы по частоте, вот например как здесь:

https://cs.stackexchange.com/questions/79810/trie-sorting-based-on-word-frequency/79875

Ответы3045230570

2 фев, 01:03 404 1130452

>>1130451
з.ы. ну или хэш, нужно что бы поиск слова в нем был очень-очень быстрым

Ответы30570

2 фев, 07:44 405 1130570

>>1130451
>>1130452

https://github.com/petewarden/c_hashmap

2 фев, 11:25 406 1130618

>>1130141
>1) Полюбить ключевые слова static и extern, научись ими пользоваться и ты сможешь писать модульный код.
>
ИМХО, ради этого и стоит сишечкой заниматься.

3 фев, 07:58 407 1131114

Поясните, почему этот код выдаёт Access violation на строке с free(&matrix1)? В сях нельзя освободить память, не выделенную напрямую через calloc/malloc что ли?

https://pastebin.com/gdPyfc4d

Ответы3113531138

3 фев, 09:19 408 1131135

>>1131114
Ты пытаешься освободить память которую ты не выделял, а вернее выделял не ты и не в куче.

Ты наверно хочешь освободить все строчки матрицы, память для которых ты выделил, а так же массив, содержащий эти строчки, память на который ты выделил немного ранее и положил указатель на это дело в поле matrix (всё это выделение происходит в функции getMatrix). Так и напиши себе маленький деструктор, который будет это делать для каждой матрицы - освобождать сначала все строчки (или столбцы, смотря как ты сам для себя это интерпретируешь) а потом массив с указателями на эти строчки.

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

Ответы31149

3 фев, 09:22 409 1131138

>>1131114
То есть да
> В сях нельзя освободить память, не выделенную напрямую через calloc/malloc что ли?
Нельзя и не нужно, собственно, никому.

3 фев, 09:49 410 1131149

>>1131135
>а вернее выделял не ты и не в куче
То есть, получается, по сути free нужен чтобы освободить память, выделенную для чего-то в куче? а любое значение, инициализированное не через выделение памяти (calloc/malloc) пишется в стек?

Ответы31153

3 фев, 10:05 411 1131153

>>1131149
Да, именно так и есть. На каждый malloc/calloc должен быть free, остальное всё в стеке и за это беспокоится ты не должен ни в коем случае. Но в стек помещается не очень много данных, точно не знаю сколько, этот объём исчисляется, вроде бы, мегабайтами. Для больших объёмов данных и существует динамическое выделение памяти в куче.

В языках более высокого уровня как правило за это динамическое выделение памяти отвечает оператор new, а за освобождение оператор delete или просто garbage collector сам за тобой всё убирает. А иногда управление памятью от тебя вообще скрыто и переложено на плечи виртуальной машины или интерпретатора. Вроде бы так.

Ответы31155

3 фев, 10:09 412 1131155

>>1131153
Понятно, спасибо за ответы, анон

3 фев, 19:26 413 1131567

>>1129667
-O1 нивелирует эту разницу

183 Кб, 1920x1080
Coding buddy wanted 4 фев, 23:30 414 1132402

Короч читаю этих ваших Ричи и Кернигана и пытаюсь делать задачки, иногда возникают вопросы и хотелось бы иметь кого-то с кем можно посоветоваться. Может быть кто-то тоже сейчас занимается по этой книге и желает скооперироваться? Ну там, обмениваться опытом, пояснять друг-другу если кто-то что-то не понял. Если интересно пишите на dv,rPkabANUSprotpK@onmailPUNCTUMco<U'm.

Ответы3241832436

4 фев, 23:56 415 1132418

>>1132402
Пиши тут, все равно тред полудохлый. По скриншоту - нахуй тебе все эти _CODE? Тебе символьные константы дали.

Ответы32600

5 фев, 00:33 416 1132436

>>1132402
>иногда возникают вопросы и хотелось бы иметь кого-то с кем можно посоветоваться
300 р/час, скайп
устраивает?

Ответы32453

5 фев, 00:59 417 1132453

>>1132436
>300 р/час, скайп
А пипиську на камеру подрочишь? :3

Ответы33192

5 фев, 09:05 418 1132600

46 Кб, 712x49047 Кб, 712x490

>>1132418
Объясни чем const лучше define'а? Я вот разницы вообще не вижу, может быть она в чём-то другом проявляется или просто в других ситуациях, не столь простых?

Ответы3260433139

5 фев, 09:12 419 1132604

>>1132600
define это макрос, раскрывается на уровне пррепроцессинга. const это полноценная сущность имеющая адрес в памяти и тип. она оптимизируется уже компилятором. у твоей AAA в define например нет типа.

Ответы32607

5 фев, 09:17 420 1132607

>>1132604
Можешь привести конкретный пример кода, когда не изменяющая своего значения переменная, живущая в памяти, объективно хоть чем-то лучше объявленных в макросе непосредственных значений?

Ответы32612

5 фев, 09:25 421 1132612

>>1132607
Сам я на стеке нашёл версию, что якобы с константой дебаг легче, но при оптимизации компилятор всё равно их переводит в непосредственные значения. https://stackoverflow.com/questions/6442328/what-is-the-difference-between-define-and-const
Так же там все поголовно пишут что const лучше define'а, не очень подробно объясняя свою позицию. Как я сам на скринах показал, что компилятор оптимизирует константу даже с флагом -O0, (это же вроде значит что без оптимизации, так?). Хотелось бы просто увидеть реальный пример от знающих.

Ответы32623

5 фев, 09:30 422 1132616

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

Ответы3289833197

5 фев, 09:33 423 1132623

>>1132612
>при оптимизации компилятор всё равно их переводит
Отключи оптимизации.

Лучше для дебага потому что в случае неладного, компилятор тебе выплюнет имя константы, в случае с макросами такого имени нет. Тебе кажется что разницы нет, пока у тебя в проекте тих констант по пальцам пересчитать. А теперь представь, что у тебя проект размера какого-нибудь chromium, и везде вместо констант дефайны

Ответы32639

5 фев, 09:46 424 1132639

>>1132623
Плюс у константы есть тип и адрес.

Ответы33139

5 фев, 15:39 425 1132898

>>1132616
В обоих случаях выделяется большой кусок памяти.

Ответы32902

5 фев, 15:45 426 1132902

>>1132898
>В обоих случаях выделяется большой кусок памяти.

Так а в чем смысл pool allocator то тогда?

Ответы3290833180

5 фев, 16:01 427 1132908

>>1132902
Чтобы хранить небольшие объекты, которые часто выделяются/освобождаются, дабы избежать излишней фрагментации памяти.

5 фев, 21:24 428 1133139

>>1132600
Во-первых, const хуже чем дефайн: >>1125714. Во-вторых, я говорил не о об этом, а о том, что '\t' уже достаточно явно говорит обо всем, и поэтому делать #define TAB_CODE нинужно.

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

Ответы33248

5 фев, 22:57 429 1133180

>>1132902
я знаю, но не скажу

5 фев, 23:06 430 1133192

>>1132453
нет

5 фев, 23:19 431 1133197

>>1132616
> тут я нихуя не понял смысла
Смысл пула в том, что оно O(1). Раз у тебя блоки одного типа (читай: одного размера), ты избегаешь всего оверхеда, который создает менеджер кучи - при запросе блока ты просто берешь первый из списка свободных, при освобождении - просто добавляешь его в список свободных.

Ответы33284

6 фев, 00:10 432 1133233

Не работает даже не лаба1.с, а простейшая хуета. ГДБ говорит вот это:
"Program received signal SIGSEGV, Segmentation fault.
In ungetwc () (C:\WINDOWS\System32\msvcrt.dll)"
Чиво, блять?! Какого хуя он показывает не на какой строчке он споткнулся, а шидовскую дллку?

Ответы33241

6 фев, 00:29 433 1133241

>>1133233
Повредил какие-то внутренности stdin, и ungetwc у тебя падает. Хрустального шара, чтобы узнать, где именно ты все сломал, у gdb нет, и он показывает, где упало.

6 фев, 00:45 434 1133248

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

Ответы33281

6 фев, 00:50 435 1133250

6 фев, 00:51 436 1133251

c#

6 фев, 05:22 437 1133281

>>1133248
Мы там выше про базовые (примитивные) типы, которые можно заменить на литерал. #define X 1 лучше чем const int X = 1. #define Y "test" иногда лучше, чем static const char Y[] = "test"; и уж точно лучше, чем const char *const Y = "test".
А вот указатели на константу или константные массивы действительно необходимы.

6 фев, 06:58 438 1133284

>>1133197
Разве большинство реализаций malloc не работают также? Тоже О(1), при условии, что в ранее выделенном bucket есть свободное место. Оверхед только в виде записи метаданных при каждой аллокации.

Ответы33293

6 фев, 08:10 439 1133293

>>1133284
Ты в целом прав, да. Менеджеры кучи пишут не дураки, и пулы под небольшие объекты фиксированного размера обычно уже реализованы в malloc(), и они O(1), пока там есть место. А вот для слегка более крупных объектов (скажем, больше 256 байт) все уже будет не так радужно, и ты уже вполне можешь поиметь как оверхед на поиск, так и фрагментацию.

> при условии, что в ранее выделенном bucket есть свободное место
Вот об этом никак не узнать, это зависит от malloc() с которой ты линкуешься, а у нас итт игра в кроссплатформенный язык. В то же время над своими собственными пулами у тебя столько контроля, сколько ты захочешь, и ты точно знаешь, когда именно оно кончится, кто виноват, и что делать.

6 фев, 16:33 440 1133523

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

Ответы3352433634

6 фев, 16:35 441 1133524

>>1133523
у кернигана в "программном окружении unix" вообще ни разу вроде malloc не применен, хотя там к концу книги не сказать что совсем уж хеллоуворды

sage 6 фев, 19:41 442 1133634

>>1133523
Грузишь такой файл, а оно "ну короч, одновременно можно открыть 8 файлов, а вы открываете девятый". И ты такой берешь IDA, и вслух предполагая, куда тем, кто это сделал, стоит засунуть свой дзен, патчишь размеры массива. В сотне мест, которые с этим массивом работают.

Ответы3407034188

7 фев, 14:33 443 1134070

>>1133634
еще и сажу влепил
какой самоуверенный щеночек

Ответы34188

sage 7 фев, 16:44 444 1134188

>>1133634
Двачую тащем-то. Если не ебмеддед, то никакого смысла в этом дрочестве нет.

>>1134070
Назло тебе я тоже сажу влепил :3

Ответы34681

8 фев, 12:41 445 1134597

Если сделать
#define TEST
то есть объявить имя без соответствующего значения, то компилятор сработает без ошибок, при этом в значении не будет ни мусора, ни нуля. А как тогда инициализация происходит? Ведь какое-то дефолтное значение должно быть.

Ответы34630

8 фев, 13:30 446 1134630

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

Делается флажок, что имя задефайнено.

Можно делать условную компиляцию с помощью #ifdef, который как раз и проверяет, задефайнено ли что то.

Ответы34970

8 фев, 14:38 447 1134681

>>1134188
>никакого смысла в этом дрочестве нет.
А подрочить?
Я люблю обмазываться собственными менеджерами памяти желательно несколькими сразу - для разных сценариев использования

29 Кб, 771x326
8 фев, 17:54 448 1134824

>>1112990 (OP)
В чем проблема?

Ответы34963

8 фев, 20:26 449 1134963

>>1134824
Makefile не содержит правил для 'Test'. Очень трудно по этому скриншоту что-то конкретное диагностировать. Скорее всего у тебя в IDE компиляция как-то неправильно настроена.

8 фев, 20:41 450 1134970

>>1134630
>Делается флажок, что имя задефайнено.
Где он хранится? Как получить этот адрес памяти?

Ответы34983

8 фев, 21:04 451 1134983

>>1134970
Флажок делает препроцессор для себя, что бы в последующем использовать в возможной конструкции #ifdef и т.п. при подготовке кода для компиляции. В итоговом коде никакого флажка нет и не будет.

10 фев, 14:42 452 1135899

>>1112990 (OP)
Как прочитать вывод программы запущенной через posix_spawn()?

Ответы35982

10 фев, 16:34 453 1135982

>>1135899
Создать pipe?

Ответы35986

10 фев, 16:40 454 1135986

>>1135982
Алсо, твой spawn_posix с аттрибутами NULL, походу, ведёт себя как fork+exec.
Ну и почему у тебя дескрипторы открытые теряются?

16 Кб, 567x364
10 фев, 21:39 455 1136197

Анон, что случилось с моей программой?
В моей маленькой утилите были огромные утечки памяти. Чтобы их найти, задействовал _CRTDBG_MAP_ALLOC во всех библиотеках, которые подключались к проекту (в моём проекте этот дефайн был определён, утечка была в сторонней либе). После этого освобождение памяти стало работать очень медленно. Сделал небольшой тест с циклом на 10кк malloc(12), затем другой с free. И если malloc работает достаточно быстро, то free, можно сказать, и не работает вовсе. Просто не пойму, что такого изменилось? Делал вызов _CrtSetDbgFlag с 0, убирал эту функцию, убирал _CRTDBG_MAP_ALLOC во всех проектах. Всё-равно ничего не помогло. Такое чувство, что каким-то образом включилась проверка каждого блока перед освобождением, которая происходит в недрах ntdll.

Ответы36205

10 фев, 21:45 456 1136205

>>1136197
Удали объектники. Может, у тебя не ребилдится что-то. Алсо, посмотри в gflags.exe (или в реестре ImageFileExecutionOptions), не стоит ли для твоего exe отладочная куча (или можешь просто имя exe сменить временно).

Ответы36217

10 фев, 21:53 457 1136217

>>1136205
>Удали объектники
Полностью пересобирал проект уже несколько раз.
>посмотри в gflags.exe
Ни одного отмеченного чекбокса.
>ImageFileExecutionOptions
Параметр в реестре не найден.
>или можешь просто имя exe сменить временно
Не помогло.
Выделяется память достаточно быстро. Тот цикл выполняется секунд за 10. А вот освобождения этой памяти даже дождаться не могу.

Ответы36221

10 фев, 21:57 458 1136221

>>1136217
Хотя и выделение памяти стало на порядок дольше. Сейчас специально закомментировал строчку освобождения в библиотеке. Работает очень медленно. ntdll.dll!_RtlDebugAllocateHeap@12() + 0xb5 bytes
Меня вот это смущает. Как оно включилось? Почему до этого не было?

Ответы36230

10 фев, 22:05 459 1136230

>>1136221
Мегабыстрым гуглением нашёл временное решение проблемы.
http://preshing.com/20110717/the-windows-heap-is-slow-when-launched-from-the-debugger/
В настройках проекта в закладке Debugging параметр Environment установить (добавить) _NO_DEBUG_HEAP=1. Почему эта проблема вылезла сейчас - мне не понятно.

Ответы36264

10 фев, 22:41 460 1136264

>>1136230
Всё заработало. И, как мне показалось, даже быстрее, чем было, что несколько странно. Похоже, что какая-то новая программа, установленная мной вчера-позавчера, установила глобальный флаг проверки хипа под отладчиком. Хотя он и так был, только не такая ресурсоёмкая проверка была, потому что сейчас, как уже написал, дебаг-версия программы работает быстрее, чем было до этого.
Заодно хочу попросить порекомендовать мне менеджер памяти. Требования: возможность включения/отключения работы в многопоточном приложении, создание независимых друг от друга менеджеров, ну и чтобы на сишке был. Присматриваюсь к dlmalloc, вроде там есть возможность создания нескольких экземпляров, но через глобальные переменные (TLS, скорее всего), что не хотелось бы. Или взять стандартный виндовый Heap?

Ответы36410

11 фев, 01:57 461 1136381

Как в C рандом сделать?

Ответы36410

11 фев, 04:11 462 1136410

>>1136381
#include <stdlib.h>
srand() для инициализации, rand() для получения инта в диапазоне 0..RAND_MAX. Математика для изменения диапазона. Если говнорандом не подходит, возьми любую сишную реализацию mersenne twister.

>>1136264
> порекомендовать мне менеджер памяти.
Я бы виндовую кучу взял, если другие платформы не нужны в ближайшее время. Что не так с TLS, кстати?

Ответы36735

14 Кб, 668x430
11 фев, 17:38 463 1136735

>>1136410
>Я бы виндовую кучу взял
Тоже так думаю. Хотя сейчас даже дебаг-версия очень шустро заработала, поэтому необходимость как-то сама-собой отпала. Только если опять json да xml парсить нужно будет заново, то можно сделать для каждого потока свой хип, чтобы большую часть времени не ждать в блокировке, потому что очень много мелких блоков памяти создаётся во время парсинга.
>Что не так с TLS, кстати?
С ним всё в порядке, но это несколько неудобно по сравнению с явной передачей в функцию. Нужно в начале нового потока добавлять код, который бы записывал нужное значение в TLS. Вообще, как-то странно разработчики библиотек подходят к подобному вопросу. Не так уж и много библиотек, которые явно позволяют задать свои функции вместо стандартных malloc/free. Ещё меньше, которые позволяют задать ещё и аргумент для передачи в эти функции. И уж совсем единицы, которые позволяют задавать эти функции и параметр при, например, создании каждого объекта, как zlib, в которую перед распаковкой/сжатием можно передать (а можно и не передавать) указатель на обе функции и дополнительный аргумент для этих функций. Понятно, что этим мало кто пользуется, но если понадобилось, то что делать?

12 фев, 06:50 464 1137281

Какой пидор решил что начать изучения с книги Прата - хорошая идея? Я блядь уже прочел 150 страниц этого говна, а до сих пор не научилчя делать что-то труднее вывода текста на экран и подсчет символов. Нахуя мне знать все то говно, что написано в книге? Воды в ней я ебал, даже условные операторы будут только на 200+ странице.

Ответы37285

12 фев, 07:21 465 1137285

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

Ответы37290

12 фев, 07:32 466 1137289

>>1130141
>static прячет видимость процедур и глобальных переменных до уровня файла , в котором они обьявлены
Объясните мне такой static, а то на стэковерфло пишут: "In C language "file scope" is the largest scope ever. For that reason, there's no point in limiting anything to a single file"
Понятно, какой результат мы получаем от этого статик-чёрта, но что по сути своей он означает?

Ответы37311

12 фев, 07:45 467 1137290

>>1137285
Я не против изучения языка. Но нахуя блядь лезть в то как числа хранятся в памяти, описывать числа в восьмиричном представлении и шестнадцатиричном? Лезть в ASCII-код сотни спецификаторов вывода % ?

Яж про что и говорю - изучение условных операторов идет только с 200+ страницы.

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

Ответы37311

12 фев, 09:07 468 1137311

>>1137289
> но что по сути своей он означает?
В Си есть scope и есть linkage.

Scope (область видимости) определяет, где видно имя чего-либо, и действительно, в Си максимальный scope - это единица компиляции (файл+инклуды). Как ни старайся, а переменную в соседнем файле компилятор не увидит.

Linkage (связь) определяет, являются ли декларации объекта с одним именем связанными декларациями, ссылающимися на один объект или же просто разными декларациями. И static (на уровне файла) как раз влияет на linkage. Со статиком ты можешь иметь в одном файле static int foo и в другом файле static int foo, но они не будут связаны, т.е., будут отдельными независимыми переменными, т.к., static задает им internal linkage. А вот если у тебя будет просто int foo и int foo в разных файлах, то они будут по умолчанию extern, и будут ссылаться на одну и ту же переменную. Заметь, что имя по-прежнему видно только в пределах единицы компиляции, но объект, на который ссылается имя с extern, общий для всех объектных файлов.

>>1137290
> Но нахуя блядь лезть в то как числа хранятся в памяти, описывать числа в восьмиричном представлении и шестнадцатиричном?
Ты вообще по-хорошему это знать должен еще до того, как вкатываться в любой язык. Не зная, как числа хранятся в памяти, ты будешь недоумевать, почему у тебя 255+1 внезапно стало 0, а 32767+1 почему-то вообще -32768, или почему твоя программа, хранящая размеры в переменных с плавающей точкой с точностью до микрона внезапно начинает ошибаться на метр, а иногда на два. Или почему 1 << 31 компилятор GCC просто взял и выкинул, и вся твоя арифметика пошла по пизде.

Понимание двоичной/шестнадцатеричной системы счисления - мастхэв, без первой ты не поймешь представления чисел в железе, без второй тебе будет очень тоскливо записывать всякие маски и степени двойки. Да и вообще, что может быть сложного в сумме степеней основания? Ты ведь учился в школе?

Спецификаторов форматирования не сотня, а десяток, они по большей части логичны - запомни, какие примерно существуют, а когда столкнешься на практике - перечитаешь. Зубрить это не нужно. К тому же, они названы не наобум, неужели decimal, hexadecimal, string, char, float само не запомнится?

> Не лучше ди сперва обучить всем основам, а лишь потом углубляться в тонкости языка?
У тебя два стула: потратить 3-4 месяца, получить более-менее полное представление о языке, после чего начать понемногу совершенствоваться или вкатиться за пару недель, прочитав K&R, но потом несколько лет писать код, состоящий из непонимания и неопределенного поведения более чем полностью. Но если тебе просто скучно или сложно, можешь сначала K&R прочитать, а Прату доосилить потом.

12 фев, 09:07 468 1137311

>>1137289
> но что по сути своей он означает?
В Си есть scope и есть linkage.

Scope (область видимости) определяет, где видно имя чего-либо, и действительно, в Си максимальный scope - это единица компиляции (файл+инклуды). Как ни старайся, а переменную в соседнем файле компилятор не увидит.

Linkage (связь) определяет, являются ли декларации объекта с одним именем связанными декларациями, ссылающимися на один объект или же просто разными декларациями. И static (на уровне файла) как раз влияет на linkage. Со статиком ты можешь иметь в одном файле static int foo и в другом файле static int foo, но они не будут связаны, т.е., будут отдельными независимыми переменными, т.к., static задает им internal linkage. А вот если у тебя будет просто int foo и int foo в разных файлах, то они будут по умолчанию extern, и будут ссылаться на одну и ту же переменную. Заметь, что имя по-прежнему видно только в пределах единицы компиляции, но объект, на который ссылается имя с extern, общий для всех объектных файлов.

>>1137290
> Но нахуя блядь лезть в то как числа хранятся в памяти, описывать числа в восьмиричном представлении и шестнадцатиричном?
Ты вообще по-хорошему это знать должен еще до того, как вкатываться в любой язык. Не зная, как числа хранятся в памяти, ты будешь недоумевать, почему у тебя 255+1 внезапно стало 0, а 32767+1 почему-то вообще -32768, или почему твоя программа, хранящая размеры в переменных с плавающей точкой с точностью до микрона внезапно начинает ошибаться на метр, а иногда на два. Или почему 1 << 31 компилятор GCC просто взял и выкинул, и вся твоя арифметика пошла по пизде.

Понимание двоичной/шестнадцатеричной системы счисления - мастхэв, без первой ты не поймешь представления чисел в железе, без второй тебе будет очень тоскливо записывать всякие маски и степени двойки. Да и вообще, что может быть сложного в сумме степеней основания? Ты ведь учился в школе?

Спецификаторов форматирования не сотня, а десяток, они по большей части логичны - запомни, какие примерно существуют, а когда столкнешься на практике - перечитаешь. Зубрить это не нужно. К тому же, они названы не наобум, неужели decimal, hexadecimal, string, char, float само не запомнится?

> Не лучше ди сперва обучить всем основам, а лишь потом углубляться в тонкости языка?
У тебя два стула: потратить 3-4 месяца, получить более-менее полное представление о языке, после чего начать понемногу совершенствоваться или вкатиться за пару недель, прочитав K&R, но потом несколько лет писать код, состоящий из непонимания и неопределенного поведения более чем полностью. Но если тебе просто скучно или сложно, можешь сначала K&R прочитать, а Прату доосилить потом.

Показать весь текст
Ответы3731437587

12 фев, 09:24 469 1137314

>>1137311
Но ты даже не встретишь эти ошибки, если будешь использовать long вместо int.

Про двоичную систему согласен, даже 16х наверно пригодится, но 8х система счисления нахуя нужна то? Ничего сложного в этом нет, но нахуя об этом расписвать на начальном этапе обучения?

Специфиуаторов больше десятка. Основных штук 10, потом идут всякие hh, hu и прочее говно. Затем еще есть +, пробел, 0, которые внешний вид меняют. И все это бывает используется вместе.
Кстати, в чем отличие %d от %i? Ведь они оба выводят значение в int.

Вообще я учу для себя, чисто по фану. Моя работа с программированием не связана никак. Поэтому подход в K&R, где сразу практика, а только потом обьяснения, мне нравится больше. Но напрягает, что K&R - довольно устаревшая книга.

И кстати, потом из С в С++ сложно будет перекатиться? Я сперва начинал учить С++, но мне посоветовали что лучше начать изучение именно с обвчного С.

Ответы37318373193779738372

12 фев, 09:37 470 1137318

>>1137314
>И кстати, потом из С в С++ сложно будет перекатиться? Я сперва начинал учить С++, но мне посоветовали что лучше начать изучение именно с обвчного С.

В современный С++ с его шаблонами и прочими лямбдами - сложнее, нужно мозг завново ломать, лет 15 назад, когда основным стилем был "си с классами" перекатываться было проще.

12 фев, 09:39 471 1137319

>>1137314

Восмеричная система стала неактуальной уже во второй половине 20 века с появлением System/360 и байтов/слов кратных степени двойки.

12 фев, 15:50 472 1137587

>>1137311
>И static (на уровне файла) как раз влияет на linkage
Почему тот же statiс ещё и помогает сохранять значение переменной внутри функции?

Ответы37797

12 фев, 21:22 473 1137797

>>1137587
> Почему тот же statiс ещё и помогает сохранять значение переменной внутри функции?
Потому что это его основное предназначение. Но чтобы не плодить лишних кейвордов, у static есть еще пара значений (например, начиная с C99 существует синтаксис вида int foo[static 10] в формальных параметрах функции). Сложно сказать, хорошо это или плохо в целом, но когда привыкнешь, вполне норм.

>>1137314
> но 8х система счисления нахуя нужна то
Нахуй не нужна. Практически единственное применение сейчас - права файлов в POSIX. Ну и выстрелы себе в ногу у новичков, которые случайно или для красоты написали 010 вместо 10.

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

> Кстати, в чем отличие %d от %i?
Для printf ни в чем (старая msvcrt в винде не умеет в том числе и в %i), оно добавлено для баланса с scanf. А вот в scanf %d (decimal) распарсит только десятичное число, а %i (integer) распарсит любой формат, который поддерживается языком для интов - например, %d из "010" прочитает 10, а %i прочитает 8.

Ответы37970

13 фев, 05:18 474 1137970

>>1137797
> у static есть еще пара значений
Спасибо. Всё никак не мог разобраться, что общего между этими двумя статиками, а тут у него просто разные значения в разных ситуациях

Ответы38513

13 фев, 16:55 475 1138273

Посоветуйте IDE для Си. Чтобы все было понятно. Для дауноа как я уж.

Ответы38278

13 фев, 16:57 476 1138276

Есть ли смысл указываться в си? Язык нравится, но насчет будущего трудоустройства страшновато.

Ответы3828238283

13 фев, 17:01 477 1138278

>>1138273
geany

13 фев, 17:05 478 1138282

>>1138276
Чё те страшновато? Ты целка чтоли? Ну не пойдёт си, тогда Rust покатит.

Ответы38287

13 фев, 17:05 479 1138283

>>1138276
1C учи

Ответы38287

13 фев, 17:14 480 1138287

>>1138282
Да пиздптый язык. Просто хз нужен ли кому-то гаишник будет.
>>1138283
Хули Вы все тут такие агрессивные?

Ответы38292

13 фев, 17:19 481 1138292

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

13 фев, 19:54 482 1138372

>>1137314
>K&R - довольно устаревшая книга
Что конкретно там устарело?

Ответы3840738727

13 фев, 21:21 483 1138407

>>1138372

компьютеры на лампах больше не собирают

Ответы38416

13 фев, 21:40 484 1138416

>>1138407

Но K&R не писали си для ламповых компьютеров. PDP-11 был уже полностью на микросхемах (поздние модели и вовсе с интегрированным цпу на отдельном чипе).

Ответы38435

13 фев, 22:23 485 1138435

>>1138416

хорошо тогда репостну эту шутеечку в тред о лиспе

14 фев, 00:44 486 1138513

>>1137970
Ну общее между ними тоже есть. static указывает, что переменная не является автоматической (выделенной на стеке) и существует в течение всей жизни программы.

14 фев, 10:59 487 1138604

Наивный вопрос, поясните нубу:
В с99 появилось возможность инициализировать структуры и массивы прям по месту, что-то типа: (struct Yoba){1, 2, 777}. Собственно, как-то подобным образом, в одну строчку, можно проинициализировать указатель, выделив предварительно память?

Ответы38636

14 фев, 11:44 488 1138636

>>1138604
Да, делаешь указатель
int *ptr = (int) malloc (свои значения)

Ответы38642

14 фев, 11:56 489 1138642

>>1138636
Спасибо, у меня что-то не очень выходит. Вот код:

struct Entry {int val; char const name;};
typedef struct Entry Entry;

int main(void)
{
Entry ptr = (Entry*) malloc (sizeof(Entry)) {55, "hello"} ;
printf("name: %s, val: %d\n", ptr->name, ptr->val);
}

Надеюсь макаба не пожрёт звёздочки. И тут синтактическая ошибка. GCC если что. Как правильно сделать?

Ответы38653

14 фев, 12:23 490 1138653

>>1138642
1. Ты не инициализируешь структуру, а выделяешь под нее память и пытаешься работать с указателем на нее как с структурой
2. malloc дает тебе указатель на место в памяти, плюс ты приводишь его к указателю на структуру, а переменную объявляешь типа твоей Entry.

Ответы38667

14 фев, 12:39 491 1138667

>>1138653
>Ты не инициализируешь структуру, а выделяешь под нее память и пытаешься работать с указателем на нее как с структурой
А как вот её проинициализировать выделив память? Продемонстрируй, пожалуйста, я совсем слабо врубаюсь. Что я хочу так это однострочный аналог:
PtrEntry ptr = malloc (sizeof(Entry));
ptr-> name = 'Foo'; ptr->val = 66;
где PtrEntry - указатель на Entry.

>а переменную объявляешь типа твоей Entry
Там звёздочка поедена.

Ответы38708

14 фев, 12:41 492 1138668

Как сделать проект на Си в Visual Studio?

Ответы38675

14 фев, 12:53 493 1138675

>>1138668

создаешь C++ проект потом переименовываешь main.cpp в main.c и вуаля епт

Ответы38742

14 фев, 13:53 494 1138708

>>1138667
Попробуй разыменовать переменную-указатель и присвоить структуру нужным способом (Entry ptr = ...; ptr = (struct Yoba){...};

Ответы38710

14 фев, 13:55 495 1138710

>>1138708
Макаба съела звездочки у ptr.

14 фев, 14:20 496 1138727

>>1138372
Там описан только самый первый стандарт Си, например.

Ответы38823

14 фев, 14:38 497 1138742

>>1138675
И без подводных камней?

Ответы38750

14 фев, 14:51 498 1138750

>>1138742
без
только ставь семнадцатую или пятнадцатую студию более ранние версии вообще не поддерживают c99 ни в какую

14 фев, 15:59 499 1138823

>>1138727
В книге разбираемые примеры настолько упрощенные, что фичи более новых стандартов не нужны.

14 фев, 17:52 500 1138885

Нужно ли байтоебу знать схемотехнику?

Ответы38890

14 фев, 18:22 501 1138890

>>1138885
желательно, но ты ее постигнешь байтоеблей

14 фев, 20:28 502 1138942

В argv поступают юникодные строки кириллицы. Каждый символ занимает несколько байт, то есть strlen() выдаст неправильное кол-во символов. А чтоб сработало wcslen(), то тип должен быть wchar_t. Под виндой можно тип для argv сразу такой поставить и зафигачить wmain, а под линуксом только char. То есть для линуксовых прог нужно создавать отдельный массив типа wchar_t, в который конвертировать char из argv и только потом работать с получившимся или есть способ получше?

Ответы3896238964

14 фев, 21:09 503 1138962

>>1138942
https://en.wikibooks.org/wiki/C_Programming/wchar.h#Wide_Characters

14 фев, 21:11 504 1138964

>>1138942
Тебе приходит UTF-8, и значение, которое возвращает strlen() должно тебя устроить в большинстве случаев. Если ты собираешься делать какую-то обработку, то да, тебе стоит сконвертировать текст в UTF-16 или даже в UTF-32. Но если тебе просто посчитать более "правильную" длину, то без проверок валидности UTF-8, ты можешь посчитать символы достаточно просто: идешь по строке байт за байтом и считаешь только те байты, для которых (n & 0xc0) != 0x80 (т.е., пропуская все continuation bytes).

Ответы39012

14 фев, 21:12 505 1138966

>>1138954 (OP)
>>1138954 (OP)
>>1138954 (OP)
>>1138954 (OP)
>>1138954 (OP)

14 фев, 22:42 506 1139012

>>1138964
Ясно. Еще если где-то сделать printf() перед wprintf(), то последний не сработает. Чем обусловлена такая несовместимость?

Ответы39063

15 фев, 00:58 507 1139063

>>1139012
Стандартом. Когда ты используешь функции из wchar.h, текстовый поток ввода-вывода становится юникодным или, наоборот, не-юникодным, когда используешь обычные функции. В целом, так проще. Можно было бы сделать так, чтобы все работало в обоих случаях, но разработчики стандарта решили упростить жизнь разработчикам библиотеки, и само поведение библиотеки упростить. Подумай о том, как сложно разгребать мешанину, если ты выведешь начальный байт какой-нибудь многобайтовой Shift-JIS (или даже той же UTF-8), приправишь юникодным символом через fputwc(), и что должно попасть в файл в итоге. И как это будет работать, если такие файлы между записями еще и читать.

19 фев, 22:48 508 1142511

Что-то совсем умирает тред. Все постигли дзен?

Ответы42517

# OP 19 фев, 23:00 509 1142517

>>1142511
ПЕРЕКАТ ЖЕ >>1138954 (OP)

Ответы42523

19 фев, 23:23 510 1142523

>>1142517
Блядь, что-то не сразу заметил. Спасибо, Антон, а то бы сейчас тут тупил в одну харю.

Тред утонул или удален.
Это копия, сохраненная 23 марта 2018 года.

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

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

« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion