Сохранен 517
https://2ch.hk/pr/res/1370497.html
Архивач перешёл на постоянный домен ARHIVACH.NG. Независимо от дальнейшего развития событий, сайт всегда доступен через Tor.
Ваши пожертвования помогают нам оплачивать хостинг и домены.

C Programming Language #42 /clang/

 Аноним OP 26/03/19 Втр 18:55:08 #1 №1370497 
C Programming Language.png
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

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

Что читать:

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

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

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

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

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

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

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

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

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

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

Stephen G. [email protected] "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)

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

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

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

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

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

- №39: https://arhivach.ng/thread/423396/
- №40: https://arhivach.ng/thread/428550/
- №41: https://arhivach.ng/thread/434018/
Аноним 26/03/19 Втр 18:58:54 #2 №1370500 
покакал segment fault'ом
Аноним 26/03/19 Втр 19:15:03 #3 №1370508 
Краткий обзор языка для вкатывающихся:
https://github.com/adambard/learnxinyminutes-docs/blob/master/c.html.markdown
https://github.com/adambard/learnxinyminutes-docs/blob/master/ru-ru/c-ru.html.markdown
Дополняйте/переводите.
Аноним 26/03/19 Втр 19:46:30 #4 №1370522 
изображение.png
изображение.png
>>1370497 (OP)
И сразу деанан:
https://github.com/PolazhinetsA/univer/blob/master/kod.c
https://pikabu.ru/@PolazhinetsA
Аноним 26/03/19 Втр 20:43:38 #5 №1370547 
>>1370522
Ты сделал мой вечер))) Я думал, шутишь
Аноним 26/03/19 Втр 20:44:55 #6 №1370549 
>>1370495
>И коды у тебя неправильные
Этот момент не понял...
Аноним 26/03/19 Втр 20:53:59 #7 №1370555 
Какой-то надмозг деанонит нахуй никому не интересного студента в Си-треде. Продолжаем зоонаблюдение...
Аноним 26/03/19 Втр 20:59:17 #8 №1370561 
>>1370499
А где взять исходник шапки треда? А то я хотел нормальный перекат запилить, но не разобрался, и решил реквест-тредом из /e/ порофлить. Оказалось, правда, что >> на посты с других досок не кликабельно.
Аноним 26/03/19 Втр 21:30:16 #9 №1370570 
>>1370555
>...
Девочка, сколько тебе лет?
Аноним 26/03/19 Втр 21:37:04 #10 №1370572 
>>1370570
может просто "Loading..." хотел закосплеить
Аноним 26/03/19 Втр 22:50:29 #11 №1370603 
>>1370561
ранььше можно было так /b/1488148
Аноним 26/03/19 Втр 22:51:02 #12 №1370605 
>>/b/1488148
Аноним 27/03/19 Срд 01:01:21 #13 №1370653 
>>1370522
Сука пикабушник просочился! Да еще и в богоподобный Си тред! Ссаными тряпками его!
Аноним 27/03/19 Срд 01:22:02 #14 №1370656 
>>1370653
>Ссаными тряпками его
Только на лом не наматывайте, не над так жестко. Я ведь исправляюсь, редко на Пикабу захожу с тех пор, как Двач открыл.
Аноним OP 27/03/19 Срд 01:37:28 #15 №1370660 
>>1370561
> А где взять исходник шапки треда
Раньше на пиратпаде был, но сначала его вандалили, а потом пиратпад и вовсе сдох, так что теперь нигде. Если хотите перекатывать вместо меня или переписать, могу выложить.
sage[mailto:sage] Аноним 27/03/19 Срд 05:31:36 #16 №1370675 
>>1370508
Прокрутил в рандомное место:
> Be careful when shifting signed integers - the following are undefined:
> Будьте осторожны при сдвиге беззнакового int, эти операции не определены:

> (with some constraints)
> (с некоторыми искажениями)
Перевод от бога.

> 1.0 / 2.0 = 0.5, плюс-минус погрешность потому что, цифры с плавающей точкой вычисляются неточно!
И много там этой погрешности в этом конкретном примере? Назовите цифру!
Аноним 27/03/19 Срд 09:39:13 #17 №1370706 
Почему все так плохо с вводом-выводом текста? Вместо нормальной библиотеки ввода-вывода куча printf, gets/puts, fgets/puts, gets_s/puts_s. Чтобы ввести строку текста надо знать 3 оператора с ньюансами их работы по выделению памяти, работе с невидимыми символами и еще всяким вуду. Зачем? Кто там пилил с11, это же полный пиздец. В итоге простая вещь как ввод строки превращается в мозгоебство. Вот нахуй так жить?  
Аноним 27/03/19 Срд 10:19:09 #18 №1370713 
>>1370706
>Почему все так плохо с вводом-выводом текста?
В языке нет нативной поддержки строк, что ты хочешь.
Аноним 27/03/19 Срд 11:20:31 #19 №1370733 
>>1370706
>2019
>выводить текст в консоль
Найс трал, бро.
Аноним 27/03/19 Срд 11:25:48 #20 №1370735 
>>1370675
В данном случае ее нет, 1/2 же прекрасно представляется как степень двойки.
Аноним 27/03/19 Срд 12:10:09 #21 №1370748 
>>1370706
ну, потому что Си, кагбэ, для того и нужен, чтоб там не было всяких вызовов функций без вызовов функций (конструктор при объявлении переменной), а строка - это не byte, и даже не word, и даже не dword, и даже не qword какой-то. О чем думали разработчики регламента Формулы-1, когда не прикрутили обязательную установку кондиционера и музыки на болид?
Аноним 27/03/19 Срд 12:13:25 #22 №1370751 
>>1370733
Посмотри, как ты заживешь, если во всем мире исчезнут консольные программы.
Аноним 27/03/19 Срд 14:29:36 #23 №1370794 
>>1370522
а тгавля будет?
Аноним 27/03/19 Срд 14:57:25 #24 №1370804 
>>1370751
Назови объективные причины почему твой высер консольный.
Аноним 27/03/19 Срд 15:03:13 #25 №1370807 
.
Аноним 27/03/19 Срд 15:06:37 #26 №1370809 
>>1370804
Бремя доказательства лежит на приебавшемся. Почему он не должен быть консольным?
Аноним 27/03/19 Срд 15:12:15 #27 №1370814 
>>1370804
Только не надо передергивать про высеры, уважаемый демагог. Я про сервера, которые крутятся под Linux без иксов, и прочее-прочее. Впрочем, дело не в этом. Просто какой-то гуманитарий высказывает сугубо религиозный, без аргументов по существу, хейт инструмента за больший возраст. Изобретение GUI, несмотря на все удобства, не умаляет удобств консоли в некоторых случаях, как бы тебе этого ни хотелось. Перечислять не буду, незачем унижаться перед дегенератом, который принципиально не хочет сам искать инфу, не ласкающую собственное мнение.
Аноним 27/03/19 Срд 15:17:59 #28 №1370818 
>>1370804
Если для задачи не принципиально, то по-дефолту выпиливаются лишние действия. Занимать дизайнерством, когда первоначальная задача этого не требует, как-то попахивает прокрастинацией.
Аноним 27/03/19 Срд 15:19:29 #29 №1370820 
>>1370809
Написать программу - не с девушкой познакомиться. Тут в приоритете вопрос "почему да?", а не "почему нет?"
Аноним 27/03/19 Срд 15:31:05 #30 №1370825 
Хуя вы его откармливаете.
Аноним 27/03/19 Срд 15:32:34 #31 №1370826 
>>1370820
Отвергая - предлагай: какой должен быть вывод?
Аноним 27/03/19 Срд 15:44:06 #32 №1370835 
>>1370826
электроды к яйцам можешь, если забыл предмет разговора
Аноним 27/03/19 Срд 15:46:51 #33 №1370837 
>>1370804
Консольные программы проще автоматизируются и комбинируются друг с другом. GUI хорош только низким порогом вхождения, и то не всегда.
Но даже если у тебя гуевое приложение, для отладки все равно нужно срать логи в консоль либо в файл, не принципиально, поэтому все проблемы остаются
Аноним 27/03/19 Срд 15:49:34 #34 №1370840 
>>1370835
Все, петушок слился.
Аноним 27/03/19 Срд 15:51:23 #35 №1370841 
>>1370840
ты заключил?
Аноним 27/03/19 Срд 15:52:56 #36 №1370843 
Аноны, посоветуйте дыхательную гимнастику, как не подгорать с таких долбоебов?
Аноним 27/03/19 Срд 16:18:09 #37 №1370850 
>>1370843
Представь, что ты заглатываешь большое дилдо своего парня-членодевки, и глубоко дыши.
Аноним 27/03/19 Срд 16:20:58 #38 №1370852 
Произошел тралленг
Аноним 27/03/19 Срд 16:45:05 #39 №1370861 
Иногда я захожу в рандомный тред и встреваю в чужой тралленг, не понимая сути разговора. Смешно наблюдать разрывы жоп, когда каждая сторона конфликта, подшивая туза, пытается меня оскорблять.
Аноним 27/03/19 Срд 16:47:47 #40 №1370863 
>>1370861
Тоже так делаю. Рекомендую.
sage[mailto:sage] Аноним 27/03/19 Срд 18:11:14 #41 №1370915 
>>1370706
> Почему все так плохо с вводом-выводом текста
Потому что языку полвека, и по меркам тех времен, когда его делали, все было вполне норм.

> Вместо нормальной библиотеки ввода-вывода
Чего тебе не хватает? Радуги? Функции без префикса f для удобства, чтобы stdin везде не писать. Семейство функций с суффиксом _s продавила Microsoft, но его уже обосрали все, кто только мог, и возможно, его уберут в следующем стандарте.

> Чтобы ввести строку текста надо знать 3 оператора с ньюансами их работы по выделению памяти
Да, чтобы писать на Си, нужно его знать целиком, иначе тебя ждет UB, ноги - вот это все. Не нравится - у тебя есть питон или какой-нибудь {}+[], прости господи.
Аноним 27/03/19 Срд 18:18:31 #42 №1370918 
>>1370915
Чому тебе так пригорает от питона? Уже который раз вижу как у тебя горит пукан. си мой первый и может последний язык
Аноним 27/03/19 Срд 18:27:01 #43 №1370919 
>>1370915
>возможно, его уберут в следующем стандарте
А что так? Вполне неплохой костылик для безопасности, лучше бы в стандартную библиотеку добавили.
Аноним 27/03/19 Срд 18:29:36 #44 №1370922 
>>1370918
Почему пригорает? Просто предложил язык, в котором для выполнения input() не нужно знать про указатели. Я и сам на нем пишу.

>>1370919
> А что так?
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1967.htm
> лучше бы в стандартную библиотеку добавили
Оно и так там, просто опционально.
Аноним 27/03/19 Срд 18:32:36 #45 №1370924 
>>1370922
Хм, в gcc не хватает.
Аноним 27/03/19 Срд 20:07:49 #46 №1370980 
>>1370922
>Почему пригорает?
Потому что аноним регулярно пишет хейтспичи на тему питона, вот я и интересуюсь.
Аноним 27/03/19 Срд 20:27:04 #47 №1370988 
Анон, помоги.
https://pastebin.com/U49dQSJe - Суть задачи такова: Создать программу которая собирает инфу про авто(номер, марка,год выпуска, прозвище чек). Вывести на экран инфу. Если в номерах встречается цифри 1 и 9 - отметить(Н.П символом - '@'). Отсортировать по убыванию.
Так вот. У меня вылазят ошибки в сортировке. Памаги.
Аноним 27/03/19 Срд 20:44:53 #48 №1370994 
>>1370915
>{}+[]
Лучшего описания жабаскрипта не видел, спасибо, анон.
Аноним 27/03/19 Срд 20:59:34 #49 №1371004 
>>1370988
> Так вот. У меня вылазят ошибки в сортировке
В 13 строке у тебя зачем массив? В 46 строке у тебя более правильнный код закомментирован. В 50 строке у тебя должен быть strchr или цикл. Сортировка тоже неправильная: во-первых, ты недописал пузырек, у тебя 3, 2, 1 отсортируется как 2, 1, 3, тебе нужен еще внутренний цикл; во-вторых, сортировка вообще должна быть по убыванию, а не по возрастанию.
Аноним 27/03/19 Срд 23:08:12 #50 №1371184 
Жеесть, до этого прошел весь учебник кантора по js, теперь начал проходить K&R по си. ЭТо пиздос, раз в 10 сложнее чем жыес.
Аноним 28/03/19 Чтв 01:57:19 #51 №1371223 
Есть кто-то в треде, работавший с C g?
Аноним 28/03/19 Чтв 03:24:32 #52 №1371243 
>>1371184
а мог бы пет проекты писать...
Господин 28/03/19 Чтв 07:18:22 #53 №1371257 
Устал от того что с С я никому не нужен кроме себя. Хочу вкатиться в С#, и осесть в офисе где нибудь, стать офисным слизняком, радоваться ЗП, плюшкам от компании, а по пятницам бежать в бар и хуярить пиво, зная, что завтра суббота!

Много ли займет времени на перекат? При условии, что пишу на С в течении 2х лет почти каждый день, не смущает что нужно будет сидеть сутками за компом, даже в радость!
Аноним 28/03/19 Чтв 07:32:40 #54 №1371261 
Как в виндовой консоли вывести русский текст? Какая-то ебала с кодировкой и выводится одна хуйня вместо текста.
Аноним 28/03/19 Чтв 07:36:16 #55 №1371264 
>>1371257
Ну так разница в том что на с ты пишешь для себя. А на с# будешь писать для дяди. Времени индвидуально, от 2-3 месяцев на вкат джуном.
>>1371261
Локаль нужна.
#include <locale.h>
setlocale(LC_ALL, "Rus");
Аноним 28/03/19 Чтв 08:09:18 #56 №1371269 
>>1371264
А на Андроиде как вывести русский текст? Сетлокаль рус не помогает.
Аноним 28/03/19 Чтв 08:25:17 #57 №1371274 
1494422614137.png
>>1371261
Аноним 28/03/19 Чтв 09:06:39 #58 №1371277 
>>1371264
2-3 месяца при условии, что я буду вкатываться каждый день по 7-8 часов??? Или ты взял сразу по максимуму в переходе с процедурного языка на ооп?
Аноним 28/03/19 Чтв 09:42:51 #59 №1371288 
>>1371274
Это что за агрессивный уебок?
Аноним 28/03/19 Чтв 09:59:22 #60 №1371292 
>>1371288
Что это за жалкое тупое чмо с жирным комплексом неполноценности? Отвращение к говну это не агрессия, а естественная реакция приличного человека. Агрессия бывает только с равными.
Аноним 28/03/19 Чтв 10:07:09 #61 №1371295 
>>1371292
>Агрессия бывает только с равными.
wtf-am-i-reading.jpg
Аноним 28/03/19 Чтв 10:42:41 #62 №1371303 
>>1371292
Ты поехавший, ты в курсе?
Аноним 28/03/19 Чтв 10:50:48 #63 №1371307 
>>1371303
Говорят "поехавший" когда не понимают сказанного, но своё суждение выдать надо, ведь не хочется себе признаваться что не очень умный и не понял.

>>1371295
С равными и вышестоящими. С нижестоящими бывает только презрение, омерзение, ну в таком духе. Агрессия же требует сил, что означает достойного противника как минимум твоего уровня.
Аноним 28/03/19 Чтв 10:55:17 #64 №1371309 
>>1371292
Агрессия означает страх и неуверенность. Классический случай - моська и слон. Когда человек в себе уверен, ему нахуй не надо быть агрессивным.
Аноним 28/03/19 Чтв 11:06:15 #65 №1371310 
>>1371257
Я так и сделал, рад работе в компании. Вкатился за полгода.
криптователь малвари
Аноним 28/03/19 Чтв 12:32:46 #66 №1371336 
>>1371309
Так и сказал. Слон выше моськи, вот моська и бесится, а слон может только наступить и брезгливо вытирать её кишки с ноги, сетуя как мерзко от её останков воняет. Да, слон выражается негативно про моську, но это не агрессия, а вот когда она тявкает на слона, это агрессия.

Еще можно сказать, агрессия это когда есть целенаправленное действие в отношении субъекта, когда у агрессора есть цель, что означает он воспринимает цель всерьез. Выражение же презрения или омерзения таковыми не являются, тут нет никакой цели по отношению к мерзости, только естественная реакция.
Аноним 28/03/19 Чтв 13:01:49 #67 №1371346 
>>1371336
Пользуйся общепринятым определением, а не выдумывай свое.
Аноним 28/03/19 Чтв 13:05:24 #68 №1371349 
>>1371346
Гоните этого тролля. Хотя тогда ветка умрет
Аноним 28/03/19 Чтв 13:15:40 #69 №1371355 
>>1371336
>>1371346
>>1371349
Ебал вас всех.
Аноним 28/03/19 Чтв 13:25:37 #70 №1371358 
>>1371355
Выеби меня плиз.
Аноним 28/03/19 Чтв 13:28:06 #71 №1371360 
>>1371358
Всех кроме тебя.
Аноним 28/03/19 Чтв 14:03:35 #72 №1371396 
>>1371261
Пиши свой хелловорд в кодировке OEM 866.
Аноним 28/03/19 Чтв 18:22:12 #73 №1371547 
>>1371360
Даже на сосаче меня не ебут.
Аноним 28/03/19 Чтв 18:58:02 #74 №1371570 
>>1371547
СИсаче
Аноним 28/03/19 Чтв 22:03:20 #75 №1371633 
Какого хуя проги из того самого учебника не компилятся и мне приходится их самому править? Это фича такая, да?
Аноним 28/03/19 Чтв 22:04:48 #76 №1371634 
>>1371633
Покажи, что у тебя не компилится и с каким сообщением.
Аноним 28/03/19 Чтв 22:10:16 #77 №1371636 
>>1371634
Из 1.10 главы.
Прога из учебника: https://ideone.com/zWuvGN
После правок, ошибок компиляции нет, но она не работает: https://ideone.com/5uSRNy
Аноним 28/03/19 Чтв 22:13:23 #78 №1371637 
>>1371636
Разобрался, но это всё равно долбоебизм. И нахуя ее тогда хвалить, если там всё уже устарело ?
Аноним 28/03/19 Чтв 22:19:51 #79 №1371643 
>>1371637
Тебе сложно при компиляции поставить -ansi ???
Аноним 28/03/19 Чтв 22:21:48 #80 №1371645 
>>1371643
Эта книга не должна предполагать такой хуйни. Иначе её нужно выкидывать на помойку истории, где ей, видимо, и место.
Аноним 28/03/19 Чтв 22:23:05 #81 №1371646 
>>1371645>>1371645
Не хочу тратить на тебя время, неосилятор.
Иди сайтики делать, там документация раз в полгода обновляется, зато всегда свежая и пахнет
Аноним 28/03/19 Чтв 22:27:12 #82 №1371650 
>>1371645
В смысле не должна блять? На её обложке большими буквами написано ANSI
Аноним 28/03/19 Чтв 22:39:16 #83 №1371651 
>>1371650
В прямом блять. На заборе тоже много чо написано. Или мне приснится должно, что надо вписывать -ансихуйсоси каждый раз, чо за маразм?
Аноним 28/03/19 Чтв 22:40:52 #84 №1371652 
>>1371636
> но она не работает
Она ждет ввода, а ты ввода не предоставил.

>>1371637
> Разобрался, но это всё равно долбоебизм
Долбоебизм - это неспособность скопировать программу без четырех опечаток.
Аноним 28/03/19 Чтв 22:42:27 #85 №1371653 
>>1371652
Попробуй тоньше.
Аноним 28/03/19 Чтв 22:56:03 #86 №1371659 
>>1371653
Попробуй убрать ; после дефайна, даун
Аноним 28/03/19 Чтв 22:58:07 #87 №1371662 
>>1371659
так она всё равно не компилится, шизоид
Аноним 28/03/19 Чтв 22:58:55 #88 №1371663 
Эх щас бы ребенку-троллю решившему что в тред какого-то говноскрипта зашел отвечать.
Аноним 28/03/19 Чтв 22:59:45 #89 №1371664 
>>1371662
Нет ты. https://ideone.com/p8UA21
Аноним 29/03/19 Птн 02:03:48 #90 №1371719 
>>1371645
>>1371651
>я скопировал код с ошибкой
>не понимаю почему не работает, потому что не понимаю как он работает
>ря где книжки си за 23 часа и час на обед
Оставь это дело, братишка.
Если тебе нужно что-то новое и актуальное в плане использования каких-то новых фич, то тебе в веб/плюсы/жабу, си не тот язык, где ты можешь жаловаться на отсутствие свистоперделок, если ты что-то делаешь на си и понимаешь что тебе чего-то в языке реально не хватает, то поздравляю, ты выбрал для данной задачи неподходящий языкхотя на си это тоже можно сделать, чтобы это ни было, но вопрос сколько времени это займёт
Аноним 29/03/19 Птн 02:34:10 #91 №1371722 
>>1371719
>плюсы
Чтобы он сразу в обморок от злости упал? Тонко.
Аноним 29/03/19 Птн 05:54:30 #92 №1371738 
>>1371722
Зато фич много.
Аноним 29/03/19 Птн 06:02:17 #93 №1371739 
>>1371637
Добро пожаловать. Читай прата, но там тоже ошибок много.
Аноним 29/03/19 Птн 06:03:06 #94 №1371740 
Вот есть функция винапи MessageBox. Как мне вызвать ее только со своей оболочкой? Делаю вот так:
typedef (int* MessageBox_t)(
HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType
);
MessageBox_t MessageBox;
Но прекомпилятор мне гудит мол соси хуй FUNCTION REDEFINITION. У С++ бояр есть namespace, а мне что делать??
Аноним 29/03/19 Птн 08:12:43 #95 №1371759 
>>1371740
> а мне что делать??
Бочку. В крестах с неймспейсами твой my::MessageBox станет [email protected]@@[email protected]@[email protected], в Си ты можешь сам назвать функцию MyMessageBox и не выделываться. Если очень хочется назваться именно MessageBox (например, в существующем коде кто-то это вызывает, а найти и заменить - не вариант), ты можешь сделать так:
// В Windows API MessageBox - это дефайн для MessageBoxA или MessageBoxW,
// в зависимости от UNICODE.
#undef MessageBox
MessageBox_t MyMessageBox;
#define MessageBox MyMessageBox
// И на случай, если код не через дефайн вызывает:
#ifdef UNICODE
#define MessageBoxW MyMessageBox
#else
#define MessageBoxA MyMessageBox
#endif
И тогда ты сломаешься разве что на &MessageBox.
Аноним 29/03/19 Птн 09:37:39 #96 №1371798 
Читаю и грустно, то не используй, это не используй, здесь компилятор не позволяет. Почему все так плохо?
Аноним 29/03/19 Птн 09:49:52 #97 №1371804 
>>1371798
Зато просто и работает на каждом утюге.
Аноним 29/03/19 Птн 09:55:34 #98 №1371807 
>>1371804
>просто
В каком месте просто? Дочитываю прата и пока что не понял где тут просто.
Аноним 29/03/19 Птн 09:58:14 #99 №1371808 
>>1371807
С крестами сравни.
Аноним 29/03/19 Птн 10:04:34 #100 №1371814 
>>1371798
Держи в курсе, даун, тут не твой твиттер.
Аноним 29/03/19 Птн 10:30:57 #101 №1371834 
>>1371808
Там тоже не сказать, что прям сложно. Особенно если велосипеды не изобретать.
Аноним 29/03/19 Птн 10:45:27 #102 №1371842 
>>1371808
Да это в крестах нахуевертили хуй пойми что. Пишу один и тот же код, на С все работает, на С++ валит с кучей ебанутых ошибок.
Аноним 29/03/19 Птн 11:58:50 #103 №1371869 
>>1371842
Ебанутая - твоя мамаша. А ошибки все разные, каждая со своим смыслом и причиной. Если ты не понимаешь и не различаешь, значит только ты ебанутый дебил.
Аноним 29/03/19 Птн 16:30:57 #104 №1371963 
Как запихать числовую переменную в массив? Допустим а=0123456789, а в массиве x[10] должно быть 10 значений от 0 до 9. Такое вообще возможно?
Аноним 29/03/19 Птн 16:45:26 #105 №1371966 
>>1371963
Что?
Аноним 29/03/19 Птн 16:45:32 #106 №1371967 
Если я пишу клиент/сервер на tcp сокетах, как можно под это дерьмо написать тесты? Например, как проверить реакцию клиента на отключение сервера и зафиксировать это в тестах?
Аноним 29/03/19 Птн 16:51:28 #107 №1371969 
>>1371966
Есть числовая переменная. Нужно ее числа запихать в массив. Есть a=12345 и нужно чтобы в массиве x[1]=1, x[2]=2, x[3]=3 и так далее. Это реально?
Аноним 29/03/19 Птн 17:02:30 #108 №1371974 
>>1371969
itoa
Ну или руками ебани, делов-то.
Аноним 29/03/19 Птн 17:03:52 #109 №1371976 
>>1371969
Берешь остаток от деления на 10 и пихаешь его в массив, делишь число на 10 и берешь остаток от деления и т.д.
Аноним 29/03/19 Птн 17:09:05 #110 №1371981 
>>1371974
> itoa
Чего?
> Ну или руками ебани, делов-то.
А как? Я просто ток начал изучать си, сам нихуя не программист.
>>1371976
У меня 2 вопроса. Как брать остаток от числа и пихать его в массив. И не будет ли при таком подходе массив развернутым задом наперед? Получится же массив с 54321.
Аноним 29/03/19 Птн 17:55:55 #111 №1371999 
Screenshot2019-03-29-21-49-17-317com.n0n3m4.droidc.png
Screenshot2019-03-29-21-49-51-478com.n0n3m4.droidc.png
Screenshot2019-03-29-21-54-40-131com.n0n3m4.droidc.png
Так, у меня у самого вроде бы получилось что-то. Забил массив с конца до начала, все вроде нормально.Вывожу его потом в правильном порядке и откуда-то 24 появляется в самом первом значении массива. Что за нахуй?

И массив становится дробным, насколько я вижу когда забивается. Но почему при выводе в прямом порядке если указать формат f получается хуйня как на 3 пике?
Аноним 29/03/19 Птн 18:08:16 #112 №1372008 
>>1371999
>Вывожу его потом в правильном порядке и откуда-то 24 появляется в самом первом значении массива. Что за нахуй?
Распечатай этот массив до того, как ты его заполняешь, и посмотри на результат.

Остаток от деления можно делать проще: b = a % 10
Аноним 29/03/19 Птн 18:20:55 #113 №1372015 
Screenshot2019-03-29-22-17-26-733com.n0n3m4.droidc.png
Screenshot2019-03-29-22-18-12-841com.n0n3m4.droidc.png
>>1372008
Смотри, в начале забил массив числом 123 и вывел с указанием массива. При распечатке в правильном порядке почему-то первые 2 массива остались 123. Это как так?
Аноним 29/03/19 Птн 18:29:08 #114 №1372016 
>>1372015
Ты эти значение не туда присвоил и вышел за пределы массива.
Си сложный язык в этом плане, люди постоянно так делают, а потом злые хацкеры уязвимости находят в их программах.
Аноним 29/03/19 Птн 19:14:37 #115 №1372027 
Screenshot2019-03-29-23-13-33-220com.n0n3m4.droidc.png
>>1372016
Вот, смотри, я вроде с длиной массива все исправил, в обратном порядке он всем 9 ячейкам массива число от 9 до 1 назначил. Но в прямом порядке все равно первое значение дефолтное - 123. Что я упустил?

#include <stdio.h>

main()
{
int a = 123456789;
double b,c =0;
char name[8];
int i=8;

for (i=0; i<9; i++)
name=123;

while(i >0)
{
\tc=a;
\ta=a/10;
\tb=c-a*10;
\t
\tname=b;
\ti=i-1;
//\tprintf("%1.1f \n", b);
\tprintf("name[%2d] = %.f \n",i, name);
}

printf("\n");

for (i=0; i<9; i++)
printf("name[%2d] = %d \n",i, name);

return 0;
}
Аноним 29/03/19 Птн 19:16:52 #116 №1372029 
>>1372027
Блять, нахуй ты сюда это притащил? На ванде скинь.
Аноним 29/03/19 Птн 19:17:34 #117 №1372030 
>>1372029
Чего?
Аноним 29/03/19 Птн 19:26:23 #118 №1372033 
image.png
>>1372027
Аноним 29/03/19 Птн 20:01:10 #119 №1372038 
изображение.png
>>1372027
Аноним 29/03/19 Птн 20:07:26 #120 №1372040 
>>1372030
https://wandbox.org/permlink/E0yJMYyfaFBDjGTV
Аноним 29/03/19 Птн 20:14:54 #121 №1372045 
Screenshot2019-03-30-00-09-50-603com.n0n3m4.droidc.png
Screenshot2019-03-30-00-12-09-528com.n0n3m4.droidc.png
>>1372033
Во, работает! Только я не понял нахуя перед while присваивать i=8, я ведь это в самом начале делал.

И почему массив из 10 чисел, если а имеет только 8 цифр? Если его сделать до 8, то почему при записи в правильном порядке 8 массив становится нулем? (Пик2);
>>1372038
Спасибо, но как-то перегружено. Можно же и не разворачивать массив, а сразу заполнять его с конца, как я.
Аноним 29/03/19 Птн 20:15:43 #122 №1372047 
>>1372045
> только 9 цифр
Быстрофикс.
Аноним 29/03/19 Птн 20:17:05 #123 №1372048 
>>1372047
Потому что, сука, запись идёт только с 8 до 0, а остальные элементы пустые
Аноним 29/03/19 Птн 20:20:56 #124 №1372053 
>>1372045
>Спасибо, но как-то перегружено. Можно же и не разворачивать массив, а сразу заполнять его с конца, как я.
Что делать будешь, если величина числа неизвестна? У меня-то сожрет от одной и до 16 если последнее в int влезет
Аноним 29/03/19 Птн 20:22:56 #125 №1372055 
image.png
>>1372045
> Только я не понял нахуя перед while присваивать i=8, я ведь это в самом начале делал.
Потому что после for-цикла i равняется 9, но индексация начинается с нуля, то есть для массива из 9 значений последний индекс 9 - 1 = 8.
Аноним 29/03/19 Птн 20:33:37 #126 №1372061 
>>1372048
Ну так у меня и чисел 9, как раз с 8 до 0 массивы и забиты.

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

>>1372055
Теперь понял, благодарю.
Аноним 30/03/19 Суб 08:37:00 #127 №1372223 
>>1371869
Нифига ты подорвался, школотрон, вот и пиздуй тогда в С++ тред и дрочи на свой ОПП, контейнеры и лямбды. А тут серьезные дяди капчуют в стиле императивной парадигмы на венгерской нотации.
Аноним 30/03/19 Суб 08:43:07 #128 №1372224 
>>1371759
Спасибо анончик, везде нахуярил макросов, чувствую себя сеньером 300к/сек. Чаю!
Аноним 30/03/19 Суб 16:48:37 #129 №1372369 
>>1372223
Идиот, блять, тебе сколько лет?
Ахуеть, выебываться на кресты в ситреде — это надо быть вообще тотальным бараном
Аноним 30/03/19 Суб 19:51:42 #130 №1372426 
image.png
Да ПОЧЕМУ?
Обработка очень большого файла, лабораторная Аноним 30/03/19 Суб 20:09:58 #131 №1372431 
С первого семестра работаю над лабораторной алгоритм Бойера Мура Хорспула:
https://sites.google.com/site/pathofdeveloper/home/programmirovanie-na-azyke-vysokogo-urovna/zadaci-pervogo-semestra/poisk-podstroki-metodom-bojera-mura
Уже середина второго а конца и края не видно, никак не осилю последний пункт лабораторной:

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

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

Вот эта концептуально неправильная программа:
https://pastebin.com/cmYHPqvc

Вот я попытался использовать двойной массив:
https://pastebin.com/gTyqAuYT
Эта программа вообще ни одного теста не проходит. Выводит лишние символы в конце, и при некотором подборе тестовой строки лишние символы, при обработке символов вблизи границы двух массивов
Аноним 30/03/19 Суб 21:19:15 #132 №1372464 
изображение.png
>>1372431
А в чем проблема-то? Вот пример, на стыке. Подстрока занимает позиции с 14 по 19, буфер в размером 16.
https://pastebin.com/avTga2dG
Аноним 30/03/19 Суб 21:20:44 #133 №1372466 
>>1372464
Блять, в функцию bmh параметр fpos случайно протек. Игнорируй его, он не используется.
Аноним 31/03/19 Вск 15:33:21 #134 №1372741 
>>1370497 (OP)
Можно ли в С выделить память для динамического массива структур, чтобы указатели при этом были равны NULL?

При выделении памяти таким образом TNode result = (TNode) calloc(sizeof(TNode), hash_size);
указатели в массиве result уже содержат элемент
Аноним 31/03/19 Вск 15:35:40 #135 №1372743 
>>1372741
первый и второй TNode со звёздочкой, да
Аноним 31/03/19 Вск 18:04:00 #136 №1372830 
>>1372741
выделяешь, потом memset()
Аноним 31/03/19 Вск 18:45:58 #137 №1372846 
>>1372830
Просто каллок должен сразу нулями сетить выделенную память, разве нет?
мимо
Аноним 31/03/19 Вск 19:17:30 #138 №1372855 
>>1372846
Ну вообще да. Ты точно за границу не вылазишь?
Аноним 31/03/19 Вск 20:33:50 #139 №1372878 
>>1372855
Да очередной даун тралит тупостью. В описании функции черным по белому написано про обнуление. После этого получить не нули и винить функцию, разыскивая другие варианты, ну это сам понимаешь.
Аноним 31/03/19 Вск 22:08:11 #140 №1372915 
>>1372878
>доверять документации стандартной либы си
Аноним 31/03/19 Вск 23:19:30 #141 №1372948 
Есть шарящие в WINAPI аноны? Как сделать передачу переменных через анонимный пайп с main потока в любой дочерний?
можно на самом простом примере
Аноним 01/04/19 Пнд 00:05:24 #142 №1372961 
>>1372948
че? у тебя же потоки, те процесс общий, нет необходимости в межпроцессорном взаимодействии.. нах те пайпы
sage[mailto:sage] Аноним 01/04/19 Пнд 00:06:09 #143 №1372962 
>>1372948
С потока? Через пайп? Зачем такие извращения? Пайпы - для процессов. А для потоков просто запиши в переменную, просто прочитай. Можешь критическую секцию притащить для синхронизации.
Аноним 01/04/19 Пнд 00:06:36 #144 №1372964 
>>1372961
>>1372962
у меня препод тупой гандон просит такую хуйню делать
Аноним 01/04/19 Пнд 00:18:18 #145 №1372973 
>>1372964
Возможно, ты не так понял, и там все же процессы. Для процессов делается так: создаешь пайп CreatePipe, в lpPipeAttributes пишешь нулевой дескриптор и TRUE для bInheritHandle. Потом CreateProcess все дела, хэндлы можешь сконвертить в строку и аргументами передать. Если процесс не сам создаешь, то OpenProcess/DuplicateHandle, хэндл передаешь любым способом IPC, хоть оконным сообщением. Ну и потом просто WriteFile во write-хэндл, читаешь дочерним процессом ReaFile из read-хэндла, все дела. А если тебе точно нужны именно потоки, то просто создаешь пайп, lpPipeAttributes можно NULL, хэндлы в глобальные переменные и просто WriteFile с одной стороны, ReadFile с другой.
Аноним 01/04/19 Пнд 00:30:46 #146 №1372981 
>>1372973
Нет, там потоки как раз. Мы CreateProcess даже не изучали, у нас тема - синхронизация потоков в винапи, на первом курсе блеать. Использование пайпов в потоках препод объясняет тем, что глобальные переменные юзать не всегда безопасно.

Наверн для потоков код будет примерно такой же?
Аноним 01/04/19 Пнд 00:33:58 #147 №1372984 
>>1372981
Бля обосрался, это в какой шараге такое?
Аноним 01/04/19 Пнд 00:44:38 #148 №1372990 
>>1372984
Бонч

Я сам обсираюсь с лаб у этого препода. Походу программа по предмету нигде не установлена вот он и творит такую хуйню. У прошлогодних челов вообще LabView было на этом предмете.
Аноним 01/04/19 Пнд 01:15:13 #149 №1372994 
>>1372981
> Наверн для потоков код будет примерно такой же?
Ну я же тебе сказал: для потоков тебе не нужно ебаться с наследованием/дублированием хэндла пайпа и его передачей, просто создай пайп, пиши с одного конца, а читай на другом.

> что глобальные переменные юзать не всегда безопасно
В винде овердохуя примитивов синхронизации, пригодных, чтобы их защитить. И даже без глобальных переменных, существуют банальные SendMessage/GetMessage.
Аноним 01/04/19 Пнд 08:49:12 #150 №1373063 
Насколько реально дизассемблировать программу уровня хэлоуворд? И возможно ли ее отредактировать чтобы она писала будбайворд, например?
Аноним 01/04/19 Пнд 08:55:44 #151 №1373064 
>>1373063
> Насколько реально дизассемблировать программу уровня хэлоуворд?
Очень просто.

> И возможно ли ее отредактировать чтобы она писала будбайворд, например?
Если длина новой строки <= длине старой строки, просто изменяешь ее в любом хекс-редакторе. Если строка длиннее старой, то будет лишь ненамного сложнее, но тоже без особых проблем.

Если есть какая-то реальная задача, а не просто любопытство, иди в RE-тредик с конкретными вопросами: >>1369180 (OP)
Аноним 01/04/19 Пнд 09:40:23 #152 №1373082 
Сап, кому не сложно, киньте ссылку на теоретический материал или книгу про односвязные, двусвязные списки, в которой эта тема более менее понятно расписана, а то ваще нихуя не понятно.
Аноним 01/04/19 Пнд 10:19:55 #153 №1373094 
>>1373064
Да я для работы сделал одну небольшую консольную программу, которая в самом начале выводит создано таким-то. А один мудак хочет убрать эту строку(но ему пока лень или он тупой). Есть способ защитится от этого?
Аноним 01/04/19 Пнд 10:35:19 #154 №1373100 
>>1373082
>теоретический материал или книгу про односвязные, двусвязные списки
Что там можно не понять?
Аноним 01/04/19 Пнд 10:43:22 #155 №1373105 
>>1373094
Если боишься, что он в бинарнике заменит строчку, то пройдись по строке xor-ом, например, пусть поищет. Или сгенерируй строку процедурно.
Это примеры простеньких защит от дурака. От человека с серьезными намерениями тебя ничто не защитит.
Аноним 01/04/19 Пнд 10:58:10 #156 №1373112 
>>1373094
Проверить вывелась ли твоя строка, если нет молча делать пакости, например чтобы программа стала портить результаты, пропускать что-нибудь.
Аноним 01/04/19 Пнд 11:14:04 #157 №1373115 
>>1373094
Можно просто запаковать программу этими кулхацкерскими пакерами, уменьшающими размер экзешника.
Аноним 01/04/19 Пнд 11:19:29 #158 №1373116 
>>1373094
Можно сделать через acsIi код, и еще если совсем не лень добавить сдвиг.
Аноним 01/04/19 Пнд 12:16:18 #159 №1373123 
>>1373116
xor'а достаточно. Если человек способен выпилить xor, он способен и call printf забить nop'ами. А для поиска-замены в хекс-едиторе xor поможет.
Аноним 01/04/19 Пнд 13:05:14 #160 №1373134 
>>1373105
Что ещё за xor?
Аноним 01/04/19 Пнд 13:09:09 #161 №1373137 
>>1373134
https://en.wikipedia.org/wiki/XOR_cipher
Аноним 01/04/19 Пнд 13:27:42 #162 №1373145 
Screenshot2019-04-01-17-12-05-105com.n0n3m4.droidc.png
>>1373105
>>1373112
>>1373115
>>1373116
А вот такой способ, который я придумал, пойдет? Шифрую слово в числовую переменную, потом разбиваю ее по 2 цифры и вывожу массивом? В теории так он вообще хуй найдет слова или даже намек на них.

Ещё и можно в коде сравнивать равна ли переменная а такому то числу. сжал весь код в кучу чтобы на один скрин влез.
Аноним 01/04/19 Пнд 20:41:43 #163 №1373366 
>>1373082
> книгу про односвязные, двусвязные списки
Каждая первая книга, в названии которой упоминаются структуры данных.

>>1373145
> А вот такой способ, который я придумал, пойдет?
Ну вот смотри. Наблюдаемое поведение: программа выводит копирайты, а потом делает что-то полезное. Человек смотрит код и видит, что первой вызывается вот эта твоя функция. Возиться с расшифровкой? Нахуя?! Он просто удалит всю функцию целиком, да и все. Алсо, ASCII-код в константе очень заметен. Если же ему нужно будет заменить сообщение на свое, размера функции ему будет более чем достаточно, чтобы запихнуть туда вместо кода расшифровки свой printf со своим, незашифрованным сообщением.
Аноним 01/04/19 Пнд 22:39:29 #164 №1373455 
image.png
Ну ахуеть, решил тут вкатиться значит и не могу даже хеллоуворлд отпринтить. Как фиксить?
Господин 01/04/19 Пнд 23:55:15 #165 №1373506 
Написать консольную утилиту, которая позволяет загружать и скачивать из GoogleDrive произвольный двоичный файл (произвольного формата и размера), с помощью REST API.

Это на С реально сделать? Если да, то намекните как...
Аноним 02/04/19 Втр 01:28:29 #166 №1373542 
>>1373506
На каком этапе у тебя возникла проблема?
Аноним 02/04/19 Втр 02:19:36 #167 №1373549 
>>1373542
Авторизация...
Аноним 02/04/19 Втр 03:38:31 #168 №1373554 
>>1373549
Какую либу для работы с рест выбрал? Какая там авторизация? Что уже сделал?
Аноним 02/04/19 Втр 04:08:20 #169 №1373556 
>>1373554
Вот тут и жопа, либ для C/C++ нет.

Authorizing requests with OAuth 2.0
Your application must use OAuth 2.0 to authorize requests. No other authorization protocols are supported.

Client libraries are available for the following languages:

Go
Java
.NET
Node.js
PHP
Python
Ruby

Ну вот как бы и все, заебись мне сказали напишите на любом удобном для вас языке:)))
Аноним 02/04/19 Втр 08:01:38 #170 №1373579 
>>1373455
FILE _iob[] = { stdin, stdout, stderr };

extern "C" FILE
__cdecl __iob_func(void)
{
return _iob;
}
Аноним 02/04/19 Втр 11:19:37 #171 №1373648 
>>1373556
Гугление выявило вот это:
https://github.com/Microsoft/cpprestsdk/blob/master/Release/samples/Oauth2Client/Oauth2Client.cpp
Не подойдёт? Вроде по коду он как раз осуществляет все шаги авторизации.
Аноним 02/04/19 Втр 11:42:37 #172 №1373658 
>>1373648
Я уже остыл, это мне типа тестовые задание дал дяденька для тестирования, нах оно мне надо, такие танцы уже на стадии тестирования.
Аноним 02/04/19 Втр 11:47:24 #173 №1373659 
>>1373658
>заебись мне сказали напишите на любом удобном для вас языке
Ну и сделай на языке, который больше всего для этого подходит. Всему есть своё время и место, и в твоём конкретно случае явно подразумевали не Си.
Аноним 02/04/19 Втр 11:55:02 #174 №1373668 
>>1373659
В моем резюме указано С, других языков я не учил, так как думал, что сначала надо 1 отъебать так, чтобы как рыба в воде! Но видать не судьба, придется как все блять, 1000 овер языков, знаний во всех почти 0, зато ебать универсал и можешь вот такую хуйню на тесте состряпать и пилить говно для народа дальше по приказам дядек.
Аноним 02/04/19 Втр 11:58:49 #175 №1373673 
>>1373668
ты не тот язык выбрал надо было джаву (энтерпрайз), джаваскрипт (фуллстэк) или питон (скрейпинг, машоб)
Аноним 02/04/19 Втр 12:08:48 #176 №1373677 
>>1373673
JS - это помойка к которой я близко не подойду.
Java - не нравится, я пробовал, воротит. меня вообще воротит от ООП.

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

Python как отдельный язык не рассматривается, скрипто-пушка и не больше. Только в связке с каким либо другим языком или в вебе где это блядский JS.
Аноним 02/04/19 Втр 12:09:56 #177 №1373678 
>>1373668
>сначала надо 1 отъебать так, чтобы как рыба в воде
Мыслишь, в принципе, верно. Но проблема в том, что один язык никогда не покроет 100% проблем, и знать на "хорошо" нужно хотя бы ещё пару. Та же скриптодрисня бывает очень полезна. Прочитай пару туториалов по питону за сегодня и ты уже завтра сможешь быстро сделать это тестовое.
>пилить говно для народа дальше по приказам дядек
Чувак, ты и так на дядю устраиваешься работать. Не хочешь - открывай своё дело, где все будут писать чисто на Си. Даже платы описывать будете на Си, без какого-либо Верилога.
Аноним 02/04/19 Втр 12:12:20 #178 №1373679 
>>1373678
Подписываюсь под каждым словом, переломило меня сегодня!
Аноним 02/04/19 Втр 12:40:26 #179 №1373686 
>>1373556
https://github.com/reddit-archive/reddit/wiki/OAuth2-Quick-Start-Example
Вместо консольного curl'а переписываешь все под libcurl

>>1373677
Ты слишком много выебываешься и являешься типичным таким самым умным задротиком.
JS, Java, C#, Python - все эти языки придумали люди, которые на несколько порядков умнее и круче тебя. Они все заслуживают изучения. Если ты думаешь, что можно вот так просто объявить что-то недостойным изучения и не учить это, то рыночек тебя порешает.
Аноним 02/04/19 Втр 12:41:43 #180 №1373687 
Что нужно знать о работе тулчейна сборки языка Си?
На собеседовании будут об этом спрашивать, скорее всего
Аноним 02/04/19 Втр 12:55:41 #181 №1373693 
>>1373686
Я претендовал на звание самый умный? Чтобы ты крякалку свою открыл!? В своей жизни я решаю, кто заслуживает изучения, а кто нет и в высерных советах не нуждаюся от Мань вроде тебя. Я уверен на все 99% твои знания в каждом из языков это 5-10%, копни тебя глубже и ты лопнешь как пузырь мыльный.

Кому-то в жизни диктуют правила, а кто-то в жизни диктует их сам.
Аноним 02/04/19 Втр 13:00:10 #182 №1373696 
>>1373686
И эти языки на порядки умнее меня. Когда в лицо с вертухи на простом хэлловорлде тычут ООП - я теряюсь.
И вообще, как научиться писать более-менее сложные программы? Я на каком-то моменте роста ее размера просто встаю в ступор и дальше уже ничего не идет.
Мимо
sage[mailto:sage] Аноним 02/04/19 Втр 13:18:53 #183 №1373699 
>>1373693
tips fedora
Аноним 02/04/19 Втр 13:23:02 #184 №1373703 
суть двача.png
>>1373693
>Я претендовал на звание самый умный? Чтобы ты крякалку свою открыл!?
Ох, ирония.
Откуда у тебя такое сильное отношение к вещам, которых ты даже не знаешь? Я понимаю, если бы у тебя был либо прямой опыт работы с ними, либо ты уже был просто профессионалом и видел проекты/людей, которые используют эти технологии и парадигмы. Но судя по постам ты - бывший школьник, который год учил Си и алгоритмы. Да, это похвально, но это (и постинг на двачах) не даёт тебе должной компетенции. >>1373686 правильно тебя охарактеризовал.
>Кому-то в жизни диктуют правила, а кто-то в жизни диктует их сам.
Между тем именно ты попросил о помощи с тестовым заданием.
Мимодругойанон-кун
Аноним 02/04/19 Втр 13:26:22 #185 №1373704 
Люблю жс конечно, чистый который, без фреймворков. Я один такой?
Аноним 02/04/19 Втр 13:30:24 #186 №1373710 
>>1373579
Думаешь я не пробовал гуглить? Это не помогает.
Аноним 02/04/19 Втр 13:31:12 #187 №1373712 
>>1373710
Ты код-то нам покажи.
Аноним 02/04/19 Втр 13:47:57 #188 №1373724 
image.png
>>1373712
Аноним 02/04/19 Втр 13:52:06 #189 №1373726 
>>1373724
Либы include какие сделал? VС++ компилятор?
Аноним 02/04/19 Втр 13:52:14 #190 №1373727 
>>1373696
>И вообще, как научиться писать более-менее сложные программы?
Это примерно "как научиться захламлять стол". Никак. Сам захламится. А твоя задача регулярно его убирать - вешать шкафы, в них класть коробочки, завести каталог где у тебя что лежит и так далее. Ты вот это не умеешь, в итоге на своем захламленном столе уже ничего найти не можешь. Убирайся. Рисуй простые диаграммы, как и куда у тебя текут данные. Выражай это напрямую в коде. И так далее. "Совершенный код" можешь почитать например.
Аноним 02/04/19 Втр 14:03:47 #191 №1373734 
>>1373726
#include <Windows.h>
#include <stdio.h>

Visual studio 2017
Аноним 02/04/19 Втр 14:14:46 #192 №1373747 
>>1373734
Хрен знает, надо настройки проекта смотреть. У меня без ошибок на 2017
Аноним 02/04/19 Втр 14:27:29 #193 №1373759 
>>1373727
Тоже хочу прочитать совершенный код, но хочу именно бумажную версию, ее можно где-то купить?
Аноним 02/04/19 Втр 14:30:15 #194 №1373762 
>>1373759
На Озоне со скидке 1009 руб. Читай - топ книга.
Аноним 02/04/19 Втр 14:31:18 #195 №1373763 
>>1373762
О, спасибо, закажу.
Аноним 02/04/19 Втр 15:16:33 #196 №1373786 
>>1373727
Дополню анона, хорошо помогает чтение кода небольших программ, написанных хорошими специалистами. Многие приемы, стилистические нюансы можно позаимствовать.
Аноним 02/04/19 Втр 15:40:48 #197 №1373797 
>>1373703
Откуда вы все повылезали, сосач-мастера... Если я пишу, значит я знаю о чем говорю Маня, свои умо-заключение оставь для себя и себе подобных, помощи я ниукого тут не просил, а уж тем более у таких макак как ты! Вопрос стоял о возможности реализации, на этом языке или нет, так как лично я ничего путного не нашел и в надежде, что тут живут адекваты, закинул удочку, поймал 1го адекватного и (2х сосачеров ты в их числе). Так что отрыгиваю вам 2им в ебало!
Аноним 02/04/19 Втр 15:44:39 #198 №1373802 
>>1373797
На си можно написать все, вопрос только в том имеет ли это смысл, если на другом языке это можно написать в 2-3 раза быстрее.
Аноним 02/04/19 Втр 15:49:54 #199 №1373805 
>>1373802
Написал тебе за щеку в 10 раз быстрее.
Аноним 02/04/19 Втр 16:01:14 #200 №1373809 
>>1373797
Просто возьми питон, там в одну либу все это делается, urllib импортируешь и прям по мануалке отправляешь запросы
Аноним 02/04/19 Втр 16:04:14 #201 №1373810 
>>1373802
Это понятно, язык ведь для господ. Но я уже понял, что без танцев тут никуда и успокоился давно. Вдруг кто-то раньше с таким сталкивался и есть готовая библиотека или алгоритм под рукой, поэтому и спросил. Тему можно закрыть, пока сосачеры новые не подъехали...
Аноним 02/04/19 Втр 16:07:12 #202 №1373812 
>>1373809
Уже понял все, пересмотрел свои взгляды, буду осваивать новое сквозь зубы, а вдруг и понравится что-то! Буду пробовать себе в других языках и папу С не забывать!
Аноним 02/04/19 Втр 16:08:53 #203 №1373813 
>>1373786
Например?
Аноним 02/04/19 Втр 16:46:48 #204 №1373817 
>>1373813
linux core
https://github.com/torvalds/linux
Аноним 02/04/19 Втр 16:50:58 #205 №1373819 
>>1373817
>небольших
>ядро линуха
>gnu-стиль
Я лучше уже ядро OpenBSD тогда почитаю, лол.
Аноним 02/04/19 Втр 16:57:40 #206 №1373820 
>>1373819
>ядро
>gnu-стиль
Это не гну. Гну стиль это вот это:
https://github.com/coreutils/coreutils/blob/master/src/yes.c
По-моему как раз у кернеля вполне нормальный стиль кода.
https://github.com/torvalds/linux/blob/master/drivers/hid/hid-core.c
Аноним 02/04/19 Втр 18:20:44 #207 №1373859 
>>1373820
Забавно. Особенно, что многие вещи пытаются вызывать системную (?) функцию uname. Но в исходниках я не нашел ее реализацию.
Аноним 02/04/19 Втр 18:44:45 #208 №1373874 
>>1373859
Где ты нашел uname?
Аноним 02/04/19 Втр 18:57:51 #209 №1373880 
>>1373874
Например в coreutils uname.c
if (uname (&name) == -1)
А так вызовы по куче исходников kernel linux встречаются.
Аноним 03/04/19 Срд 13:34:37 #210 №1374231 
Поясните за функции. Я сделал функцию, которая принимает 2 переменные - просто число и число, которое функция берет как размер массива и возвращает принтф массива.

Вот в чем проблема. Первый раз вызываю функцию с аргументами 123456 и 5. Она выводит 123456 как и положено. Но если вызвать второй раз и размер массива будет меньше предыдущего, например 000 и 2, то функция выведет 000456, взяв 456 из прошлого массива. И теперь 2 вопроса:

1. Какого хуя так получается? Я же второй раз массив указываю равным 3 значениям, как он становится длиннее?

2. И разве при каждом вызове своей функции все что внутри нее происходило не обнуляется?
Аноним 03/04/19 Срд 13:46:32 #211 №1374235 
>>1374231
Покажи свой говнокод.
Аноним 03/04/19 Срд 13:47:47 #212 №1374237 
>>1374231
> принтф массива
По-русски можно? Или лучше сразу код.
Аноним 03/04/19 Срд 14:05:05 #213 №1374251 
Screenshot2019-04-03-18-04-29-204com.n0n3m4.droidc.png
>>1374235
>>1374237
Вот:
https://pastebin.com/6yqAg2us

А получается результат как на пике.
Аноним 03/04/19 Срд 14:10:06 #214 №1374255 
>>1374251
%s выводит строку до завершающего \0. У тебя где завершающий ноль? Алсо, VLA зло.
Аноним 03/04/19 Срд 14:11:12 #215 №1374257 
>>1374231
Ну так 2 раза обращаешься к 1 массиву в 1 функции, во второй раз записываешь только 3 первых символа, так и должно работать. Читай про время хранения данных в си.
Аноним 03/04/19 Срд 14:13:51 #216 №1374259 
>>1374255
А как сделать чтобы в конце конец строки был? В переменные а и b их же не добавить.

Что такое VLA?

БТВ, а можно делать конструкцию вида return while{}? У меня чет ошибки хуячит.
Аноним 03/04/19 Срд 14:18:39 #217 №1374265 
>>1374259
>А как сделать чтобы в конце конец строки был?
name[x - 1] = '\0', к примеру
Аноним 03/04/19 Срд 14:20:08 #218 №1374269 
>>1374259
> А как сделать чтобы в конце конец строки был?
name[size2] = '\0' после цикла с иксами.

> Что такое VLA?
Массив, размер которого зависит от переменной (char name[x]). Делай всегда 16 байт и все (в long long ты можешь закодировать около десяти символов, плюс чтобы нолик поместился, и округляем до степени двойки, чтобы красиво было).

> конструкцию вида return while{}?
Что она должна делать по твоему мнению?
Аноним 03/04/19 Срд 14:26:01 #219 №1374279 
Screenshot2019-04-03-18-22-06-209com.n0n3m4.droidc.png
Screenshot2019-04-03-18-23-04-443com.n0n3m4.droidc.png
>>1374265
Почему х-1?
>>1374269
И у тебя тоже х-1 получается. Я сам уже догадался что надо в последний массив запихнуть \0 сразу после иксов. Но я впихнул его в name(x), а не name(x-1) и все заработало.


Так что такое VLA?
Аноним 03/04/19 Срд 14:27:25 #220 №1374282 
>>1374279
Последний вопрос не актуален, не дочитал до конца.
Аноним 03/04/19 Срд 14:28:33 #221 №1374284 
>>1374279
>в последний массив
В последний элемент массива
>name(x)
Плохо, у тебя массив начинается с 0, а последний будет x-1. Ты можешь например адрес возврата из функции в стеке повредить и программа упадет.
Аноним 03/04/19 Срд 14:29:30 #222 №1374287 
>>1374279
> Почему х-1?
Потому что это самый последний элемент в массиве. А name[x] уже за пределами массива. И вообще, твое говно пишется так:
https://ideone.com/rKic5h
Аноним 03/04/19 Срд 14:29:56 #223 №1374288 
>>1374284
Дополню, лучше char name[x + 1]; задавай и name[x] = '\0'; устанавливай.
Аноним 03/04/19 Срд 14:38:47 #224 №1374294 
image.png
>>1374231
Норм результат?
Аноним 03/04/19 Срд 14:46:22 #225 №1374297 
>>1374294
Дополню. Вот код: https://pastebin.com/e2rfsJEz
У тебя там неправильно массив внутри функции объявляется. Тебе нужен динамическое выделение памяти, а не статическое.
Аноним 03/04/19 Срд 14:50:08 #226 №1374301 
>>1374297
Лол. Это спецолимпиада по созданию еще более сложной реализации? Тогда предлагаю класть очередную букву в голову связного списка, а потом проходить по списку, собирая результат в массив. И, конечно, не обойтись без динамического выделения памяти.

Алсо,
> #include <malloc.h>
ты откуда вылез вообще?
Аноним 03/04/19 Срд 14:55:39 #227 №1374304 
>>1374301
У меня с таким выделением памяти даже не компилит, поэтому исправил на более правильное. Ничего вы этом сложного нет. На одну строчку больше.
Аноним 03/04/19 Срд 14:58:20 #228 №1374307 
>>1374304
> У меня с таким выделением памяти даже не компилит
Ну так может это повод проапгрейдить компилятор до чего-нибудь, поддерживающего хотя бы C99?

> Ничего вы этом сложного нет. На одну строчку больше.
Ну да, какая разница: уменьшить указатель стека одной инструкцией или сходить через три обертки до маллока, а потом еще и free проебать.
Аноним 03/04/19 Срд 15:09:21 #229 №1374312 
>>1374307
Да... free проебал. Но указатели, это не правильно. Ты ведь не выделяешь память, а просто указываешь индекс в памяти, которая может быть занята чем то другим.
Аноним 03/04/19 Срд 15:24:56 #230 №1374319 
>>1374312
В стеке? Гарантировано выделенная память проебана?
Аноним 03/04/19 Срд 16:04:06 #231 №1374345 
>>1374319
Не знаю, мне кажется выделение памяти через указатели, это не совсем безопасная работа с памятью. Все что угодно может произойти, нужно контролироваться выход за приделы массива, можно сослаться не на тот адрес в памяти, может возникнуть проблемы с кучей в памяти. Хз, хз... крч.
Аноним 03/04/19 Срд 16:10:59 #232 №1374349 
>>1374345
У malloc есть 2 варианта, или они находит тебе подходящий участок памяти и возвращает на него указатель, или не находит и возвращает нулевой указатель. Опасного в этом ничего нет. Память забита случайным мусором, очистка которого ложится на плечи разработчика для быстродействия. Выход за границы... Ну тут как бы надо себя контролировать, да.
Рекомендую почитать Роберта Сикорда "Безопасное программирование на С и С++", главу "Управление динамической памятью". Там автор прекрасно расписывает все возможности накосячить и даже самые известные уязвимости основанные на этом.
Аноним 03/04/19 Срд 16:16:22 #233 №1374351 
Аноны, вкатываюсь потихоньку в коддинг, научится уже php, sql, js и html\css, сделал один крупный полу-рабочий проектик и десяток неюзабельного говна, но никогда не хотел работать в веб, просто как-то получилось, что начал со сценарных и вроде как имею результаты (даже на работу приглашали, лол). Потихоньку начал учить c++ по липману и вроде почти проблем не возникает особых. Но услышал, что перед всем этим говном лучше научиться чистому Си, мол, он мозги выпрямляет, достаточно простой в основе своей и мощный. Почитал шапку, там все на ангельском. Не то, чтобы я с ним не дружу, но дискомфорт в глазах возникает, да и напряжно, особенно при встрече с неизвестными доселе терминами и словами. Так вот, можете подсказать что нибудь? Какую-нибудь годную книгу с задачками. Или читать Кернигана из шапки и не глядеть по сторонам? И вообще стоит ли начинать с Си или сразу лучше окунуться в кресты?
Аноним 03/04/19 Срд 16:19:13 #234 №1374354 
>>1374349
Сяп, почитаю. А насчет того, что malloc может не найти памяти... тут два варианта: 1)подождать некоторое время, и потом попробовать еще раз; 2)сообщить юзеру о нехватки памяти, и выйти с программы. А вот с указателями такого не провернешь.
Аноним 03/04/19 Срд 16:21:07 #235 №1374356 
>>1374349
Вообще если все контролировать, а не бездумно фигачить указатели, то все конечно гуд. Только не думаю, что это сильно проще, чем malloc.
Аноним 03/04/19 Срд 16:21:37 #236 №1374357 
>>1374354
Помоему ты путаешь модели организации памяти и термин указатели.
Аноним 03/04/19 Срд 16:23:46 #237 №1374360 
>>1374351
В основном тут рекомендуют Прата. Я его не читал. Читал Дейтелов - ну оно для ньюфагов, на мой взгялд даже избыточно разжевывают.
Аноним 03/04/19 Срд 16:25:04 #238 №1374363 
>>1374349
Ты зря стараешься. У >>1374345 непонимание автоматических переменных, маллок тут ни при чем. Он уцепился за слово "указатель", но не увидел слово "стек".
Аноним 03/04/19 Срд 16:27:45 #239 №1374365 
>>1374363
Догадался уже >>1374357
Аноним 03/04/19 Срд 18:16:26 #240 №1374418 
>>1374351
Если кресты для хеловорлдов и программ типа введи_имя-узай_ебал_ли_я_такую_телку, то нет. Иначе — в любом нормальном пособии по крестам, основы си (указатели, ДУП) будут затронуты. Смело покупайте крестоучебники, у них в треде годноту советуют
Аноним 03/04/19 Срд 18:17:38 #241 №1374420 
По крестам и си я читаю прату.
Аноним 03/04/19 Срд 18:22:12 #242 №1374425 
Снимок.PNG
Снимок2.PNG
Снимок3.PNG
Суп прогач, есть одна laba2.cbp...
Проблема на пиках. Почему второй вызов scanf() обнуляет переменную, считанную первым вызовом? Причём если сделать наоборот, то всё работает. Но препода наоборот не устраивает.
Аноним 03/04/19 Срд 18:31:35 #243 №1374432 
>>1374425
Аперсанд то поставь, епта.
Аноним 03/04/19 Срд 18:33:07 #244 №1374434 
>>1374425
char f_mask[9]; лол
Аноним 03/04/19 Срд 18:33:19 #245 №1374435 
>>1374420
у тебя есть библия (k&r), нет, буду говноедом
Аноним 03/04/19 Срд 18:34:40 #246 №1374436 
>>1374425
>одна laba2.cbp
когда ты выпустишься, в мире уже произойдеть тотальный экономический кризис, а в россии будет гражданская война и люди будут есть людей
так чтож нахуя ты сейчас это делашь, не понятно
Аноним 03/04/19 Срд 18:38:36 #247 №1374439 
>>1374432
Нахуя мне адрес указателя? Такую хуйню, к тому же, компилятор не пропускает.
>>1374434
Ебать я даун. Я же строку читаю.
Аноним 03/04/19 Срд 18:41:06 #248 №1374440 
>>1374439
Энжой юр повреждение стека концом строки.
Аноним 03/04/19 Срд 18:41:34 #249 №1374442 
>>1374425
Потому что %8s, чтобы ограничить длину присваиваемой строки. А если не ограничиваешь, то ты сам себе буратино.
Аноним 03/04/19 Срд 18:42:10 #250 №1374444 
>>1374432
Не. Всё-таки пускает. Только потом не работает.
Аноним 03/04/19 Срд 18:43:17 #251 №1374445 
>>1374418
хуйня
ни в одном учебнике по си, даже в священной k&r, нет рассказа о том, как реально используется си на практике
нихуя не объясняется всякая магия указателей на функции в связке со структурами, что позволяет мутить ооп и компонентное программирование
нихуя не объясняется как делать adt на макросах или на войдах или на юнионах
нихуя не объясняется как делать вариадики на юнионах
нихуя не объясняется как делать динамический полиморфизм на vtable
нихуя не пишут про такие типа мелочки, что строку формата для prinf (и даже сканф, что вообще за гранью этих книг) можно тоже формировать динамически и подсовывать
нихуя не пишут как использовать setjmp/longjmp для обработки сигланов и эмуляции исключений
во всех книгах пишут - утю-тю, go to хуевая практика, не юзайте дети, а откроешь сорцы там этим говном каждая вторая функция набита
обработка реальных данных? бля, да типичная обработка - открываем мапу, голая память и давай на нее ебаные пожатые структурки накладывать с массивами, эта дрисня в реальном коде повсеместно
и такого только по возможностям языка, что не освещены типа в учебниках можно десятки навспоминать

по итогу книги по сям вообще ничему нахуй не учат

Аноним 03/04/19 Срд 18:45:22 #252 №1374448 
>>1374445
>нихуя не пишут про такие типа мелочки, что строку формата для printf можно генерировать и подсовывать
Так этож очевидно, ёпт.
Аноним 03/04/19 Срд 18:46:23 #253 №1374450 
>>1374445
ах, да, отдельная мякотка - макросы
в учебниках типа, утю-тю, дети, смотрите, мы можем написать макрос max который типа наибольшее число выбирает! охуенно!
а на практике на макросах лепят ебанутейшую кодогенрацию в которой черт ногу сломит, склейка строк вообще наше священное знание, епт
Аноним 03/04/19 Срд 18:56:37 #254 №1374462 
я, кстати, в порыве горячечного озарения какое то время назад сформулировал два фатальных недостатка крестов, а именно:
- отсутствие abi, что вынуждает на границах бинарных модулей лепить старый сишный интерфейс, а лучшее что из этого можно выжать - com модель майрософта, или гномовскую gtk (которая была скопирована с com, внезапно) , ну и сверху обмазать темплейтами для удобства - atl, а общем все равно это все будет технологиями полувековой давности в своей основе, лол
- второе - это невозможность отказаться от киллер-фичи макросов сишных - а именно склейки строк, как следствие невозможность продвинутой кодогенерации, так как темплейты крестов работают уже на уровне определенных лексем, они не могут порождать новые; ну или в качестве полной альтернативы, вообще использовать стороннюю кодогерацию
Аноним 03/04/19 Срд 18:59:00 #255 №1374465 
>>1374462
> а именно склейки строк, как следствие невозможность продвинутой кодогенерации
В каком языке ты занимаешься продвинутой кодогенерацией на уровне склейки строк?
Аноним 03/04/19 Срд 18:59:23 #256 №1374467 
>>1374445
> по итогу книги по сям вообще ничему нахуй не учат
Книги по сям учат сям. А то, что ты перечислил - это по большей части общие для всех компилируемых языков подходы.

> setjmp/longjmp для обработки сигланов
Ловите наркомана.

> во всех книгах пишут - утю-тю, go to хуевая практика
Во всех книгах пишут ровно два допустимых случая использования: выход из глубокого цикла и переход вперед на обработчик ошибок.

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

>>1374450
> а на практике на макросах лепят ебанутейшую кодогенрацию в которой черт ногу сломит
Люди, которые не осилили макросы, обычно умеют хотя бы делать -E. Но вообще я крайне редко вижу в проектах совсем уж нечитаемые макросы уровня http://jhnet.co.uk/articles/cpp_magic
Аноним 03/04/19 Срд 19:00:00 #257 №1374469 
>>1374435
Кто сказал, что я её не читаю? Да и там только анси си, что является 80% от обычного си
Аноним 03/04/19 Срд 19:03:46 #258 №1374477 
>>1371969
for(i = 0; i < "длина_числа"; ++i){
a = x % 10;
x /= 10;
}
Аноним 03/04/19 Срд 19:05:11 #259 №1374478 
>>1374477
а [ i ]
Аноним 03/04/19 Срд 19:05:52 #260 №1374480 
>>1374287
Как элемент массива name(x) может быть за пределами массива размером х?
>>1374284
> Плохо, у тебя массив начинается с 0, а последний будет x-1. Ты можешь например адрес возврата из функции в стеке повредить и программа упадет.

Ну так я за х беру число букв, а т.к. массив начинается с нуля, то получается у меня как раз от 0 до х-1 это буквы а х - '\0'.
Аноним 03/04/19 Срд 19:08:17 #261 №1374483 
>>1374480
> Как элемент массива name(x) может быть за пределами массива размером х?
Молча. Если массив, допустим, из трех элементов, то x = 3, а валидные индексы элементов 0, 1, 2, но не 3.
Аноним 03/04/19 Срд 19:08:48 #262 №1374484 
>>1374480
>а х - '\0'.
Начнем с простого.
х = 3;
char t[x]; [0, 1, 2] - 3 элемента. А ты собрался пихать в t[3] - за пределами массива '\0'. Ты тупо пишешь в переменную в стеке до твоего char t[x]
Аноним 03/04/19 Срд 19:13:57 #263 №1374489 
>>1374465
в си, сладенький
две решеточки рулят промышленным программированием на си, если ты не знал
Аноним 03/04/19 Срд 19:15:12 #264 №1374490 
>>1374489
А причем здесь фатальные недостатки крестов? Твою мысль не понять.
Аноним 03/04/19 Срд 19:16:05 #265 №1374493 
>>1374489
Какие решеточки? Литералы и без решеточек клеятся, привет.
Аноним 03/04/19 Срд 19:18:13 #266 №1374496 
>>1374467
>>1374445
Так а по факту, что читать чтобы не зашквариться? Или сразу кресты без задней мысли и ничего не потеряю? А то после веба половину нихуя не понимаю что вы тут описали
Аноним 03/04/19 Срд 19:18:55 #267 №1374498 
>>1374496
Хоть что-нибудь, кроме двачей.
Аноним 03/04/19 Срд 19:21:06 #268 №1374500 
>>1374496
C primer plus, C++ primer plus
Оба шестого издания. Все бля, сиди и читай.
Аноним 03/04/19 Срд 19:21:24 #269 №1374501 
>>1374467
а как ты будешь восстанавливаться после обработки сигнала? только длинным переходом
кто тут наркоман?
Аноним 03/04/19 Срд 19:21:55 #270 №1374504 
>>1374483
>>1374484
Разве char(5) это не 0,1,2,3,4,5? Все, понял. Я думал это до какого числа массив идёт.
Аноним 03/04/19 Срд 19:23:45 #271 №1374508 
>>1374490
то что ты все равно должен будешь пользоваться возможностями сишных макросов, пусть они и будут замешаны уже с темплейтами вместе
Аноним 03/04/19 Срд 19:25:47 #272 №1374509 
>>1374508
Чем тебе предоставленные типы/средства не устраивают?
STL string? bstr от майков?
Аноним 03/04/19 Срд 19:26:08 #273 №1374510 
>>1374493
речь не о литералах, а о лексемах, дружок
сишные макросы позволяют порождать новые лексемы
а крестовые шаблоны - нет
всекаешь?
Аноним 03/04/19 Срд 19:26:48 #274 №1374512 
15434741481931.mp4
>>1374445
>ряяяя букварь не учит писать как пушкин! Как так! Произвол!
Ну ты бы постеснялся. Понимаешь писать на си это не о ебать мы сделали новую нейросетку как напитоне, это не о ебать клевый сайт с перделками как на жаваскрипте. Писать на си это творчество, это искусство, это страдание, это эксельсиор.
Аноним 03/04/19 Срд 19:28:49 #275 №1374513 
>>1374510
из за этого, кстати, весь код под микроконтроллеры покрыт дрисней из макросов, прямо как деды (буквально) писали
а на шаблоны со скрипом переходят
Аноним 03/04/19 Срд 19:29:53 #276 №1374514 
>>1374512
для меня писать на си - это как срать под кустом, потому что в округе нет туалета

Аноним 03/04/19 Срд 19:39:41 #277 №1374521 
>>1374360
Прата тоже разжевывает всё очень подробно, что аж приходится пропускать очевидные абзацы.
Аноним 03/04/19 Срд 19:41:22 #278 №1374523 
>>1374436
>в россии будет гражданская война и люди будут есть людей
Инфа 100%?
Аноним 03/04/19 Срд 19:43:16 #279 №1374525 
>>1374510
> речь не о литералах, а о лексемах
Так и говорил бы, что клеишь токены, а не строчки.

> из за этого, кстати, весь код под микроконтроллеры покрыт дрисней из макросов
Мой не покрыт, даже странно. Ну если не считать констант и тех макросов, которые используются в качестве замены __attribute__((always_inline)). Покажи пример, зачем еще в мк макросы?
Аноним 03/04/19 Срд 19:44:27 #280 №1374526 
>>1374445
Напиши кратко и понятно и опубликуй там >>1370508 и еще переведи.
Аноним 03/04/19 Срд 19:49:45 #281 №1374536 
>>1374445
Goto вроде нужна как замена break, если нужно срочно выйти из глубины вложенных циклов.
Аноним 03/04/19 Срд 19:54:41 #282 №1374540 
15117406030083.jpg
>>1370497 (OP)
Нужно ли всегда обьявлять (Declare) функцию перед описанием (Definition)? Попробовал без обьявления, компилируется в gcc. Тогда какого учебники требуют это делать?
Аноним 03/04/19 Срд 19:57:01 #283 №1374542 
>>1374540
Я понимаю, что декларация нужна, если код раскидан в нескольких файлах, или когда подключаю заголовки. Но в моем случае пока один .c файл с кодом.
Аноним 03/04/19 Срд 19:59:26 #284 №1374544 
>>1374540
Если функция в одной компилируемой единице с вызывающе и перед ней, то нет. Если ты в заголовочном файле сделал сразу definition функции, то попробуй включить во вторую компилируемую единицу, получишь ошибки.
Аноним 03/04/19 Срд 20:21:29 #285 №1374557 
>>1374523
ну дык обычно же все этим заканчивается, не?
случается война, кризис, люди едят людей, 95% погибает
и все начинается заново
вот, к примеру, на великой китайской равнине было несколько таких циклов, зафиксированных хрониками: людей размножалось до 50 млн, потом случался кризис и погибало почти все население, а потом снова все начиналось
и книжка гумилева так называется: "конец и вновь начало"
а сегодняшняя ситуация уникальна, тк механизация сельского хозяйства и введение искусственных удобрений позволило повысить эффективность сх на порядок, как следствие на китайской равнине щас живет 500 млн человек
что и делает ситуацию еще боллее опасной чем раньше
тк в случае обрушения экономики жестокость дойдет до предела, каннибализмом, в частности, будут заниматся не один-пару сезонов ближе к весне, а несколько десятилетий
просто одни банды каннибалов будут вырезать другие банды, что оказались послабей
и так пока не останется несколько тысяч мужчин и нескольких десятков женщин
из сотен миллионов
Аноним 03/04/19 Срд 20:22:02 #286 №1374559 
>>1374525
дык ты делаешь таки кодогенерацию на макросах или все руками хуячишь что ли?
Аноним 03/04/19 Срд 20:22:14 #287 №1374560 
>>1374500
Спасибо. Сегодня-завтра начну грызть. А насчет https://www.cypress.com/file/56651/download из шапки что скажешь?
>>1374498
Тоже полезный совет. Но, все таки, самый сильный старт и фидбек (особенно в простых вещах) на практике дал именно харкач.
Аноним 03/04/19 Срд 20:25:42 #288 №1374563 
>>1374557
Вот до чего Сишка людей доводит...
Аноним 04/04/19 Чтв 00:49:58 #289 №1374715 
>>1370497 (OP)
В регистре r16 записано число 0b10101010. Второй, третий, четвёртый, и пятый биты нужно поменять на 1110, не меняя при этом остальные. То есть надо сделать такую замену.
10101010 //Исходный регистр
     1110 //То, на что надо заменить
10111100 //Регистр после замены.
Это возможно как то кратко сделать, или надо только менять каждый бит отдельной операцией?
Аноним 04/04/19 Чтв 01:18:24 #290 №1374721 
>>1374715
> возможно как то кратко сделать, или надо только менять каждый бит отдельной операцией?
Побитовые операции работают с каждым битом независимо, поэтому ты можешь без проблем менять все нужные биты разом точно так же, как ты делал с одним битом. Делаешь маску - битовую строку, где все биты, которые нужно сохранить - установлены, а которые будут меняться - сброшены. Применяешь маску к регистру с помощью &, тем самым сбрасывая в 0 то, что будешь менять и оставляя неизменным то, что менять не нужно. И потом |-ом ставишь в 1 нужные биты. Т.е., примерно так (можешь в макрос обернуть):
mask = ~(0b1111 << 2); // = ~0b111100 = 0b1111...1111000011b
new_bits = 0b1110 << 2; // = 0b111000
value = 0b10101010;
value = (value & mask) | new_bits;

> 1110 //То, на что надо заменить
Нет. Каноничная нумерация - справа с нулевого бита, а у тебя с первого.
Аноним 04/04/19 Чтв 04:13:34 #291 №1374747 
>>1374721
Зачем ты двигаешь, а не сразу пишешь нужное число?
Аноним 04/04/19 Чтв 06:54:45 #292 №1374758 

>>1374747
Так как необходимо менять с второго бита, можно конечно написать полностью число и с ним сделать побитовые операции.... но это же не имеет значение.
P.s. не автор того сообщения.
Аноним 04/04/19 Чтв 07:57:11 #293 №1374768 
>>1374514
Ну и съебись нахуй отсюда, макака ебанная!
Аноним 04/04/19 Чтв 09:35:53 #294 №1374799 
>>1374715

mov r16, 0b10101010

mov 1, r15
shl r15, 4 // сколько бит заменить
dec r15
shrl r15, 1 // начиная с какого
or r16, r15

mov r15, 0b1110
shl r15, 1 // начиная с какого
and r16, r15
Аноним 04/04/19 Чтв 09:58:08 #295 №1374807 
>>1374747
> Зачем ты двигаешь
Затем же, зачем использую переменные - чтобы проиллюстрировать подход.
Аноним 04/04/19 Чтв 14:08:35 #296 №1374932 
>>1374807
Разве готовое число не яснее? У тебя скорее обфускация, мешающая нормально увидеть маску, а значит понять как она работает. Даже сам в комменте нормальное число пишешь, лол. Пишешь по сути "2+(1+3-2)" вместо "2+2".
Аноним 04/04/19 Чтв 15:52:44 #297 №1374968 
Где взять последнее издание K&R на русском?
Аноним 04/04/19 Чтв 15:55:52 #298 №1374971 
>>1374932
В интернете, отлично гуглится. Последнее русское издание - третье.
Аноним 04/04/19 Чтв 15:56:19 #299 №1374972 
>>1374968
Купи С Классическое издание (Полное Руководство) Г.Шилдт
Я купил не пожалел, много интересного.
Аноним 04/04/19 Чтв 16:01:47 #300 №1374974 
>>1374972
Да мне бы спиздить, а то скоро на улице жить уже буду.
>>1374971
Ты мне, наверное, адресовать хотел.
http://www.it-059.ru/pluginfile.php/181/mod_folder/content/0/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/%D0%AF%D0%B7%D1%8B%D0%BA%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%BD%D0%B0%20%D0%A1%D0%B8.%20%D0%98%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5%203-%D0%B5%20%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5.pdf <- Оно? При переходе принудительно качать пдф начинает, к слову
Аноним 04/04/19 Чтв 16:24:58 #301 №1374981 
>>1374974
Да, оно, и качество вроде норм.
Аноним 04/04/19 Чтв 17:02:04 #302 №1374993 
>>1374972
Анон ВЕЩЬ спрашивает, а ты заместо какое-то Г подсовываешь.
Аноним 04/04/19 Чтв 17:38:59 #303 №1375006 
>>1374993
Ты читал ее сосачер?
Аноним 04/04/19 Чтв 19:54:41 #304 №1375087 
>>1375006
Я читал в 2003 году и завалил экзамен.
Аноним 04/04/19 Чтв 21:15:07 #305 №1375115 
>>1375087
На какие вопросы ответить не смог?
Аноним 04/04/19 Чтв 21:23:21 #306 №1375119 
>>1375115
Там был старый борландовский компилятор, уже не помню какая версия. И я завалил практическую часть. Препод попробовал сам запустить её, обосрался и отправил на осень. Какой-то косяк был при распределении памяти.
Аноним 04/04/19 Чтв 21:25:32 #307 №1375120 
>>1375119
Borland c++ 3.1, кажется. А ещё borland Pascal 7.1, лол
Аноним 04/04/19 Чтв 21:40:28 #308 №1375129 
>>1375006
Нет, не читал, но по описанию это точно не то, что нужно анону, который ищет K&R. Да и хуесосят этого Шилдта на буржуйских интернетах, мол, неча было джависту в чужое лезть.
Аноним 04/04/19 Чтв 22:57:39 #309 №1375159 
>>1375129
Мань, ты хотябы разберись пред тем как обсираться... ок?

Шилдт — писатель и учёный в сфере компьютерных наук, получил образование и учёную степень в Иллинойском университете в Урбана-Шампейн. Был членом комитета ANSI, который принимал стандарты С в 1989 году и комитета ISO, принимавшего стандарты C++ в 1998.

Одним из наиболее длительных проектов Шилдта был интерпретатор Little C, который является примером рекурсивного нисходящего парсера. Эта программа была впервые напечатана в журнале Dr. Dobb's Journal в августе 1989 года под названием «Построение Вашего собственного интерпретатора С» (Building your own C interpreter). Этот пример был включен в книгу Born to Code In C (Osborne, 1989), а также в более позднее издание книги C: The Complete Reference.

Интересным моментом книги The Art of C++ является интерпретатор языка Mini-C++ (язык Mini-C++ даже не поддерживает ключевое слово «class», также минимальная и искусственная роль была отведена cin и cout). Код Mini-C++ можно найти в сети Интернет, а книга больше не издаётся.

Также был напечатан интерпретатор BASIC, называвшийся Small BASIC, написанный на С в первом издании книги Turbo C: The Complete Reference, и на языке Java в книге The Art of Java .
Аноним 04/04/19 Чтв 22:59:35 #310 №1375160 
>>1375159
Иди нахуй со своим шилдтом, серьезно. Мань-хуянь. Говно его книги.
Аноним 04/04/19 Чтв 23:40:26 #311 №1375173 
Почему мой хеловорлд из 20 символов на выходе весит 41 килобайт нахуй?
Аноним 05/04/19 Птн 00:03:06 #312 №1375184 
>>1375173
Потому что отладочные символы и рантайм: код, требующийся для реализации твоих argc/argv (в винде), твоего printf, твоего stdout и прочих локалей, которые все равно нужны, хоть ты их и не используешь явно, а также код, который тянут за собой реализации вышеперечисленного. А вот если линковаться динамически, то хелловорлд будет 2-8К, в зависимости от платформы.
Аноним 05/04/19 Птн 01:16:53 #313 №1375207 
image.png
>>1370497 (OP)
Кошмар. Сегодня пробывал написать простенький генератор паролей на чистом Си с использованием WINAPI. ЭТО БОЛЬ! Еле написал обработчик для кнопки, но когда дело дошло до текстового поля, я обнаружил, что оно не редактируется, и судя по всему необходимо писать отдельную функцию, которая будет принимать скан-коды нажатия клавиш на клавиатуре и переводя их в ASCII сохранять в динамический массив одновременно выводя в текстовое поле, чтобы видеть, что набираешь. Как жить дальше?
Аноним 05/04/19 Птн 01:26:05 #314 №1375211 
>>1375207
> Как жить дальше?
Писать на расте консольные утилиты.
Аноним 05/04/19 Птн 01:27:59 #315 №1375213 
>>1375207
Ебать ты чмоха, уроки иди учи
Аноним 05/04/19 Птн 01:34:41 #316 №1375215 
>>1375213
Ебать ты урок, чмох иди учи
Аноним 05/04/19 Птн 01:50:28 #317 №1375226 
>>1375211
Не, лучше вернусь на Qt программировать мышкой. Раст не нужен, кста.
Аноним 05/04/19 Птн 02:49:53 #318 №1375243 
>>1375207
> WINAPI. ЭТО БОЛЬ!
Гуи на винапи не боль, а 100 шаблонных строк. Их нужно написать один раз, а потом просто копировать из проекта в проект. Мало того, существует гуи на винапи из одной строки не считая обработку событий: DialogBoxParam().

> судя по всему необходимо писать отдельную функцию, которая будет принимать скан-коды нажатия клавиш на клавиатуре
Какие еще нахуй сканкоды? Ты что-то делаешь не так. Можешь код притащить, но вангую отсутствие вызова DefWindowProc() или другой тупой баг.
Аноним 05/04/19 Птн 05:17:30 #319 №1375251 
>>1375243
>или другой тупой баг
Гены тупой шлюхи это неисправимый баг на всю жизнь.
Просто посмотри на это:
>вернусь на Qt
Что такое Qt? Это взяли кресты и сделали из них джаваскрипт. И вот выродки, пишущие на таком говне потом кукарекают. Неудивительно, что необучаемая макака не смогла прочитать как работать с окрами в Winapi, высрала вслепую нерабочий код, и убежала обратно на свою парашу, громко взвизгнув "Winapi - говно!".
И ладно бы только это, но тут ситуация куда серьезней - почему кресто-джаваскрипто макака сидит и кукарекает в треде СИ? Ладно бы в крестотреде, можно было бы понять, но тут уже никакого адекватного объяснения нет, просто тупое говно срет тупостью где ему не место вообще.
Аноним 05/04/19 Птн 06:57:34 #320 №1375262 
Можно ли сделать конвертирование файла doc в txt? И насколько это геморно?
Аноним 05/04/19 Птн 07:20:55 #321 №1375269 
>>1375160
Хуйня это Маня, рыгающая дерьмом в этом треде, а Шилдт ебет тебя по всем параметрам в жизни, потому что у тебя Маня, кроме высера в тредах на сосаче, больше нихуя в жизни нет и не будет!
Аноним 05/04/19 Птн 07:26:34 #322 №1375271 
>>1375087>>1375087
Год выпуска 2017-2018, может тоже нахуй идти вместе с Маней даун блять!
Аноним 05/04/19 Птн 09:11:03 #323 №1375294 
>>1375251
"Со слов Сассмана, «Программирование сегодня больше напоминает науку: вы берете часть библиотеки и «тыкаете» в нее — смотрите на то, что она делает. Затем вы спрашиваете себя, «Могу ли я настроить это так, чтобы оно делало то, что мне нужно?». Подход «анализ через синтез», используемый в SICP, когда вы строите большую систему из простых, маленьких частей, стал неактуальным. Сегодня мы программируем «методом тыка»."
С просторов интернета, но, к сожалению, процесс необратимый. Мало кому нужно качество, подавай количество.
Аноним 05/04/19 Птн 09:12:33 #324 №1375297 
>>1375262
Если найдешь доки по стандарту doc.
Аноним 05/04/19 Птн 09:14:09 #325 №1375298 
>>1375271
Я про K&R. Шилдта только по плюсам.
мимо >>1375087
Аноним 05/04/19 Птн 09:23:15 #326 №1375301 
>>1375262
Слишком геморно, если парсить файл. А вот .docx уже норм. Но если у тебя винда, и на целевой машине установлен ворд, то можно через COM попросить его открыть файл и либо получить текст, либо прямо вордом же и сохранить как .txt. Гугли по CreateObject(Word.Application) да, CreateObject - это VB, но на сишечке работать с COM тоже можно.
Аноним 05/04/19 Птн 10:23:12 #327 №1375316 
>>1375269
Ебать гуманитария порвало. "Сперва добейся, потом пизди", когда вы все передохнете? Хороший технарь вовсе не обязательно хороший преподаватель. Тут про книги речь шла, при чем даже если книга годная, в чем я сомневаюсь, один хуй неуместна. Ты же высрал нахуй никому не интересную историю достижений из Википедии. Ты не слишком умный, да?
Аноним 05/04/19 Птн 10:32:57 #328 №1375319 
>>1374349
Почитал эту поэмку. Где можно почитать об памяти выделяемой под вызов функции (т.е. под автоматические переменные). Просто как это вижу я: есть мк с памятью 32 кб, на этапе компиляции выделяется память под статические переменные, и под сам код, остается скажем... 16 кб. Потом, в процессе выполнения некоторой функции нам необходимо выделить память на 3 раза выделить память (под три массива). И вот первые два массива заполнили оставшеюся память на 90%. И последнему массиву не хватило памяти. Разве если мы выделяем память через указатели, не может быть такого, что из-за нехватки памяти, мы выделим память с середины второго массива, и похерим его? Буду раз если разъясните или скажете где почитать, как там, на физическом уровне выделяется память.
Аноним 05/04/19 Птн 10:39:38 #329 №1375321 
>>1375316
Я не намерен тратить свое время, на падаль вроде тебя говноед, можешь дальше тут извергать свою рыготину стирая пальцы об клавиатуру. А я тупо сру тебе на голову и иду дальше...

Кому будет интересно прочтет.
Аноним 05/04/19 Птн 10:58:40 #330 №1375330 
>>1375319
>Где можно почитать об памяти выделяемой под вызов функции
Для начала в вики "Соглашение о вызове". Там описаны популярные способы передачи и выделения.
>И последнему массиву не хватило памяти.
И получишь указатель на 0. Не хватило - увы, страдай, оптимизируй.
Нюанс еще в том, что malloc выделяет непрерывный кусок памяти. Херить уже выделенные участки она не будет.
Почитать... Курни MSDN malloc/realloc/free
Аноним 05/04/19 Птн 11:10:39 #331 №1375333 
>>1375330
Я как раз таки шарю за malloc, но там челик >>1374287 выделял память указателями, а не malloc. Крч, лень объяснять, просто хочу выяснить выделять память указателями это траханье, или нет. Потому что всегда считал это зашваром.

Аноним 05/04/19 Птн 11:12:46 #332 №1375335 
>>1375333
Для начала расскажи мне, как выделять память указателями?
Аноним 05/04/19 Птн 11:32:14 #333 №1375338 
>>1375335
Скинул же ссылку на его код. Хреново выразился, он сперва создавал буфер, а потом перемещался по буферу с помощью указателей. Просто посмотри по ссылке код.
Аноним 05/04/19 Птн 11:41:12 #334 №1375343 
>>1375338
И что тебе не понравилось? Собственно Си массив, это непрерывный участок памяти, который тебе выделил компилятор. Компилятор даже не заморачивается контролем его длины если конечно не был запрос на динамеческое выделение и границ. Ты можешь свободно перемещаться по нему через указатели. Устанавливаешь на 0 (индексация с нуля) и передвигаешься на размер элемента. Собственно, когда ты обращаешься myarray[2], тебе так же все расчитывается указатель на 0 элемент + 2 * sizeof(тип массива).

С одной стороны может показаться дико, но по факту максимальное быстродействие и гибкость. Например в int массиве, тебе ничто не мешает перемещаться побайтово . Это удобно для работы со строковыми массивами часто. Если ты пишешь крайне надежный код, то да - лучше использовать готовые библиотечные решения.
Аноним 05/04/19 Птн 12:08:06 #335 №1375353 
>>1375343
Не понравилось то, что обоссали malloc, типо это все херня. Крч, вскрыли мой комплекс неполноцености, и я пытался себе доказать, что malloc не говно, и что я не полный говноед.
P.s. Но на самом деле я дурачек, что вообще на такой фигней загнался.
Аноним 05/04/19 Птн 12:17:02 #336 №1375358 
>>1375353
Запросить массив, как делал чувак выше
char buf[100]; - память будет выделена в стеке (просто указатель стека подрастет на 100 байт).
Выделить
char\ buf = (char\) malloc(100); - память будет выделена где-то в далеко куче. (звездочки после char сожрет макаба).

У обоих способов есть свои плюсы и минусы:
У стека - быстро выделяет, быстро перемещается, так же быстро освобождается. Особенность - при выходе из области видимости - указатель стека вернется ДО состояния входа в область видимости и он станет недоступен. Из недостатков - очень большой объем не выделишь, привет stack overflow.
У кучи - можешь запросить огромный кусок памяти (ограничивается архитектурой ОС, привет файлы подкачки). При выходе из области видимости не теряется. Из минусов - при обращении выполняется длинный переход (тут лучше у специалистов ассемблера спросить, я его последний раз копал лет 12 назад), медленне чем при работе со стеком. Ну и если забыл сделать free, то до завершения твоего процесса кусок памяти утерян.
Аноним 05/04/19 Птн 13:05:12 #337 №1375383 
>>1375358
>при обращении выполняется длинный переход
O_______O
Чувак, реальный режим процессора - это начало 90-х. Ты походу не 12 лет назад ассемблер копал, а вчера из криокамеры вылез.

Стэк с большой вероятностью будет находиться в кэше процессора, поэтому он чуть быстрее. Но и массив в куче может быть закэширован, так что не все так однозначно.
Аноним 05/04/19 Птн 13:08:38 #338 №1375384 
>>1375383
Да я не спорю, написал же лучше пояснят. Загуглил, да - сейчас организация памяти изменилась. Но я уже давно ниже библиотечных функций не лажу.
Аноним 05/04/19 Птн 13:22:35 #339 №1375392 
>>1375358
>тут лучше у специалистов ассемблера спросить, я его последний раз копал лет 12 назад
Не совсем так. Тут всё дело в кеше. Попробую объяснить оче по-простому, а то займёт большой пост. Если данный участок памяти есть в кеше - значит разницы в производительности не будет. Если нет в кеше - значит в первый раз обращение будет медленнее.

Но это важно только для high-performance задач (всякой обработки изображений, научных вычислений и игорей). Для остального кода этот эффект за счёт out of order execution невидим. Пока там одна команда ждёт завершения операции с памятью проц уже успевает выполнить следующие 10-20 инструкций.
Аноним 05/04/19 Птн 13:23:51 #340 №1375394 
>>1375243
>Гуи на винапи не боль, а 100 шаблонных строк.
Я понимаю, только нигде нет нормального гайда или книги, где бы всё подробно и с примерами расписывалось.

>Можешь код притащить
https://ideone.com/cUt15v
Аноним 05/04/19 Птн 13:25:55 #341 №1375397 
>>1375392
Век живи - век учись! Спасибо. Что можно читнуть на эту тему?
Аноним 05/04/19 Птн 13:31:34 #342 №1375400 
>>1375397
http://blogs.rsdn.org/ikemefula/2929998
Аноним 05/04/19 Птн 13:43:01 #343 №1375402 
>>1375397
В Data Oriented Programming Майка Актона (https://youtu.be/rX0ItVEVjHc) много обо этом говорится (хотя он сосноледевелопер, у них там всё намного хуже с памятью обстоит, да и он сам слишком хайпает этот подход).
Говорят также, что https://people.freebsd.org/~lstewart/articles/cpumemory.pdf хорошая вещь, но, пролистав, там уж слишком много всего (те же DMA и NUMA - можно всю жизнь прожить, не столкнувшись с ними).
Аноним 05/04/19 Птн 14:02:39 #344 №1375406 
>>1375402

Идут жавасеньер с сыном-хипстером фронтендером по улице и видят как немытый байтоеб развесистой нечитабельной лапшой кеш машине ублажает. Сынок такой спрашивает : "Папа а что это дядя делает ?" Папа отвечает: "А это, сынок, байтобомжара без Xeon Gold 256GB RAM мучается, денег то нет"
Аноним 05/04/19 Птн 14:03:45 #345 №1375407 
>>1375394
\twhile ((state = GetMessage(&msg, NULL, 0, 0)) != 0)
\t{
\t\tTranslateMessage(&msg);
\t\tDispatchMessage(&msg);
\t}
TranslateMessage:
Translates virtual-key messages into character messages
Аноним 05/04/19 Птн 14:09:52 #346 №1375412 
Правда, что скиллового Сишника определяет кол-во макросов в коде? Чем больше макросов и чем мощнее абузится препроцессор, тем скиловей кодер. Пруф ми вронг.
Аноним 05/04/19 Птн 14:13:30 #347 №1375416 
>>1375412
>
>Правда, что скиллового Сишника определяет кол-во макросов в коде? Чем больше макросов и чем мощнее абузится препроцессор, тем скиловей кодер. Пруф ми вронг.

Всё дело в том, что С - процедурный язык со всеми вытекающими.

И если ты будешь писать на нем большой проект вроде линуксядра или постгреса то ты неизбежно уткнешься в отсутствие высокоуровневых средств и будешь велосипедить недоООП и недоконтрактное программирование на макросах.
Аноним 05/04/19 Птн 15:03:17 #348 №1375437 
>>1375416
Все дело в том, что ты просто долбоеб и иди нахуй.
Аноним 05/04/19 Птн 15:59:58 #349 №1375457 
>>1375437
кекнул с тебя
Аноним 05/04/19 Птн 16:04:05 #350 №1375458 
>>1375412
дык если проэкт типа крутой и под несклько платформ то тебе придется делать условную компиляцию на макросах
второе, кодогенерацию сишники тоже на макросах делают, а когда уже их не хватает, подключают сторонние средства - норм сишник вместо того чтобы сотню раз ебашить похожую структуру и функции ее обработки пишет макрос, тупо сокращающий количество повторяющегося кода
Аноним 05/04/19 Птн 16:06:53 #351 №1375459 
>>1375383
в проце вообще то специальные инструкции по обработке стеков есть, а стеки что предоставляет операционная система, их используют
а эти стеки ос, в свою очередь, используют компиляторы си для организации, собственно сишного стека
Аноним 05/04/19 Птн 16:09:29 #352 №1375461 
вы еще забываете, что помимо стека и кучи, в вашем распоряжении еще и глобальная память
у которой тоже свои оптимизации, она относительно быстро выделяется на старте работы программы
зачастую вообще вся работа с ней проиходит, кучу не используют, стек только для обслуживания вызовов функций
Аноним 05/04/19 Птн 17:48:01 #353 №1375531 
>>1375461
По подоробнее про глобальную память и ее отличие от кучи, пожалуйста. Насколько помню (для WinAPI) GlobalAlloc и LocalAlloc были актуальны в Win16. C Win32 это оболочки для HeapAlloc. Соответственно я считал, что куча и есть глобальная (в рамках процесса).
Аноним 05/04/19 Птн 18:45:28 #354 №1375568 
Анонче, недавно тут искал K&R на русском и обосрался. Примеры это пиздец жопный. Они сука не работают. Вот для примера: https://ideone.com/ttziwr . Через гугление понял, что нужен int перед main(), дефайн попадает в прототип функции каким то хуем, а getline вообще зарезервирован. Это пиздец. Как быть? Я же язык второй-третий день учу. Это перевод хуевый или просто книга морально устарела? Я бля до половины явлений сам дохожу раньше чем чето начинает работать, а другую половину просто гуглю. И так через одну главу. Пиздец.
Аноним 05/04/19 Птн 18:47:38 #355 №1375569 
image.png
>>1375568
Еще тут такая ебала была, кстати. Долго пытался понять я дурак или лыжи не едут
Аноним 05/04/19 Птн 18:48:59 #356 №1375570 
>>1375569
Все таки я дурак. Какая-то хрень на мониторе, одной скобки не было видно
Аноним 05/04/19 Птн 19:12:26 #357 №1375580 
>>1375416
>ты будешь писать
>вроде линуксядра или постгреса
А еще станешь президентом или черным властелином мира.
Аноним 05/04/19 Птн 19:14:41 #358 №1375582 
Днем пилил мд5 хеширование с солью на си. Щас тянка попросила купить соли. Думал как купить рандомные цифры и что она собралась шифровать. Ппц я поплыл, у вас тоже такое бывает?
Аноним 05/04/19 Птн 19:44:50 #359 №1375592 
image.png
>>1375407
Вау, работает, спасибо. На самом деле, у меня ещё осталась пара вопросов по WINAPI. Например, почему компоненты и шрифты выглядят так, как будто они сделаны под Windows 98? Есть ли какой-нибудь сбособ сделать их более нативными и современными? И ещё, есть ли метод динамическии изменять расположение компонентов на форме, чтобы при изменении размеров окна, кнопки и текстовые поля всегда оставались в центре.
Аноним 05/04/19 Птн 20:52:23 #360 №1375621 
>>1375592
После создание edit, создай шрифт с нужными параметрами и отправь полю ввода сообщение с инфой о шрифте.

HFONT hFont = CreateFont(12, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "Arial");

SendMessage(Edit, WM_SETFONT, WPARAM(hFont), TRUE);
Аноним 05/04/19 Птн 20:54:31 #361 №1375625 
>>1375592
>метод динамическии изменять расположение компонентов на форме, чтобы при изменении размеров окна, кнопки и текстовые поля всегда оставались в центре.
Скорее всего придется отлавливать сообщение WM_SIZE, вытаскивать размеры окна и пересчитывать размеры компонентов.
Аноним 05/04/19 Птн 21:29:14 #362 №1375638 
>>1375621
Выдаёт ошибку

main.c:(.text+0x32f): undefined reference to `[email protected]'
Аноним 05/04/19 Птн 21:30:28 #363 №1375639 
>>1375625
Хотелось бы более детально об этом узнать.
Аноним 05/04/19 Птн 21:50:08 #364 №1375647 
image.png
Котлеты читеры здесь? Меня уже 3 месяца не банят.
Аноним 05/04/19 Птн 21:56:44 #365 №1375655 
>>1375638
Компилятор какой?
Аноним 05/04/19 Птн 22:03:38 #366 №1375664 
>>1375655
gcc MinGW.
Аноним 05/04/19 Птн 22:20:57 #367 №1375674 
>>1375664
-lgdi32 добавь к строке опций компилятора.
Аноним 05/04/19 Птн 22:23:48 #368 №1375675 
>>1375674
Не помогло.
Аноним 05/04/19 Птн 22:24:41 #369 №1375678 
>>1375674
>>1375675
А, нет, вот теперь помогло. Спасибо.
Аноним 05/04/19 Птн 22:44:48 #370 №1375696 

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

> Буду раз если разъясните или скажете где почитать, как там, на физическом уровне выделяется память.
Ну вот тебе простой full descending стек и более-менее обычный лэйаут (для простоты представим, что мы загрузились в память и выполняемся оттуда):
static char ram[16384];
// Код с адреса 0, там же и глобальные переменные.
char ∗code = (char ∗) ram;
// Куча сразу после кода, растет к старшим адресам.
char ∗heap = code + SIZE_OF_CODE;
// Стек растет с самого верхнего адреса вниз.
uintptr_t ∗sp = (uintptr_t ∗) (ram + sizeof(ram) - sizeof(uintptr_t));

void push(uintptr_t value) { assert(sp); ∗--sp = value; }
uintptr_t pop(void) { return ∗sp++; }

>>1375353
> Не понравилось то, что обоссали malloc, типо это все херня.
malloc() не херня, просто не нужно использовать malloc() там, где можно обойтись автоматической переменной, потому что у malloc() есть накладные расходы, потому что malloc() может вообще в ядро пойти за памятью, а автоматическая переменная (на стеке) либо совсем бесплатная или либо почти (если ОС умеет автоматически расширять стек, ей нужно page fault обработать для этого). Поэтому если у тебя максимальный размер массива заранее известен, и это не мегабайты, и передавать массив наружу из функции ты не планируешь, то malloc() избыточен.

>>1375394
> понимаю, только нигде нет нормального гайда или книги
В MSDN кроме описаний функций есть еще примеры. Прямо минимальными кусками: создаем окно, пишем WindowProc(), пишем message pump, не проебывая TranslateMessage() и т.д. Посмотри внимательно. Можешь слить на торрентах Platform SDK 2003, оно офлайновое и удобное, а то современные маркдауны в MSDN хуево читаются.

>>1375531
> Соответственно я считал, что куча и есть глобальная (в рамках процесса).
В винде нет кучи в традиционном понимании (т.е., никаких brk() и прочей ереси). В винде ты можешь только выделять страницы в адресном пространстве (где угодно, лишь бы не занято было) всякими VirtualAlloc(). А если тебе сложно, у тебя есть HeapCreate(), которая создаст тебе экземпляр кучи, управляющей памятью не на уровне страниц, а на уровне блоков разного размера. Одну такую кучу для тебя делает сама система при старте процесса, ты можешь получить ее GetProcessHeap(), но ты можешь создать дополнительные.

>>1375568
> Через гугление понял, что нужен int перед main()
cc -ansi govnokod.c
Но да, одна из причин читать Прату - отсутствие необходимости писать на кривом С89 вместо C11.

>>1375592
Про шрифт тебе написали, для красивых кнопочек сделай манифест с common controls 6 (так и гугли: windows manifest common controls).
Аноним 05/04/19 Птн 22:50:31 #371 №1375702 
>>1375696
Да, про манифест я уже загуглил, там прям на сайте Майкрософт лежит код для него. Только есть здесь одна проблема - если манифест просто лежит в папке с проектом, то при перенесении исполняемого файла .exe стиль теряется. Можно ли как-нибудь этот манифест "запихнуть" прямо в екзешник?
Аноним 05/04/19 Птн 22:55:51 #372 №1375705 
>>1375702
Да. В ресурсы. Делаешь .rc-файл, в котором пишешь 1 MANIFEST "manifest.xml" (естественно, manifest.xml должен рядом лежать), скармливаешь gcc вместе с исходником. Если не сожрет (не помню), то сначала windres -i file.rc -o file.o.
Аноним 05/04/19 Птн 23:07:12 #373 №1375711 
 .jpg
>>1375705
Еее, красота. Исполняемый файл с графическим интерфейсом занимает 46 килобайт. Когда я писал на Qt, средний .exe занимал 20Мб. Спасибо, анончики.
Аноним 05/04/19 Птн 23:09:28 #374 №1375712 
>>1375711
Многовато. Ты с -s собираешь?
Аноним 06/04/19 Суб 00:01:26 #375 №1375726 
>>1375712
Нет, просто gcc main.c resources.o -lgdi32. Но я не гонюсь за объёмом, по-моему, производительность важнее.
Аноним 06/04/19 Суб 00:02:17 #376 №1375727 
>>1375712
С параметром -s 22Кб.
[mailto:f] anonymous 06/04/19 Суб 01:09:38 #377 №1375752 
Безымянный.jpg
сап,двачик.Помоги неучу написать прогу,не врубаюсь в стеки ,хоть убей(
Аноним 06/04/19 Суб 01:22:59 #378 №1375758 
>>1375752
struct stack {
Int anus }
Аноним 06/04/19 Суб 10:30:56 #379 №1375847 
>>1375752
typedef struct {
int звездочка stack;
Int top;
int max;
} Stack;

Stack s;

void make_stack( int size)
{
s->stack = (int зв )malloc(sizeof(int) зв size);
s->top = 0;
s->max =size-1;
}

voidpush(int val)
{
if(top<size)
s->stack[s->top++] = val;
else
printf("pzdc");
}

int pop(void)
{
if(top>0)
return s->stack[--s->top];
else {
printf("pzdc");
return 12345678;
}

Аноним 06/04/19 Суб 10:32:48 #380 №1375848 
>>1375696
>cc -ansi govnokod.c
Спасибо.
>Но да, одна из причин читать Прату - отсутствие необходимости писать на кривом С89 вместо C11.
Как-то не хочется скакать от одного к другому, оставаясь на уровне хелоуворлдов. А вообще, ты шарящий, подскажи, сколько времени проходит с момента, когда перестаешь дристать хуйню и начинаешь писать нормальные программы? А то как-то не все задачи с первого раза поддаются. Яваскрипт за месяц весь учебник прочел, задачи перерешал и начал от нехуй делать начал пытаться сэмулировать физику в браузере, лол (только потом узнал что это в канвасе делается и от печали забил). А тут ебучие строки мне в рот дают
Аноним 06/04/19 Суб 10:45:16 #381 №1375850 
>>1375726
Вангую, этот хлам даже на ХР не запустится, хотя использует апи из вин 3.1
Аноним 06/04/19 Суб 10:58:49 #382 №1375861 
>>1375848
> подскажи, сколько времени проходит с момента, когда перестаешь дристать хуйню и начинаешь писать нормальные программы
Чтобы не было стыдно за свой код, понадобится леть десять.

> узнал что это в канвасе делается и от печали забил
Канвас - это ж двеодна строка, и уже можно рисовать: const context2d = document.body.appendChild(document.createElement('canvas')).getContext('2d'). Отчего печаль-то?

>>1375850
Запустится даже на 9x, если собирать без -DUNICODE (у анона единственная XP-шная вещь - это манифест, но предыдущие версии винды его просто читать не будут).
Аноним 06/04/19 Суб 11:06:38 #383 №1375865 
Читаю искусство эксплоита и там упомянется перл. В вики написано что перл написан на основе си, стоит ли читать что-то по перлу дополнительно? Ну и посоветуйте годных книг по тематике около си пока чебурнет не запилили.
Аноним 06/04/19 Суб 11:45:28 #384 №1375875 
>>1375848
Я изначально учил жабаскрипт чтобы в канвасе рисовать и больше ничего не умею. Это довольно легко, только этот 2д канвас медленный, тыщи объектов в реальном времени там не порисуешь.

А в сишке что вместо канваса используется? GDI? На сколько он быстр?
Аноним 06/04/19 Суб 11:57:57 #385 №1375879 
>>1375861
>Канвас - это ж двеодна строка, и уже можно рисовать: const context2d = document.body.appendChild(document.createElement('canvas')).getContext('2d'). Отчего печаль-то?

Значит я туповат. Увидел, что нужно учить его API и стало уныло. Ебал я в рот эти пиксели ебучие. Нахуя они мне, если я могу высрать див, задать его геометрию пальцем левой ноги, сгенерировать карту коллизий и двигать охуевая от ебучих багов когда одна из координат случайной вершины заходит за координаты противоположной вершины при повороте куба. Спустя час еботни я опустил руки
А в сишке сейчас пытался сделать функцию entab по учебнику 2 часа где-то, сделал только с подсказкой. Пиздец. До этого начинало баговать при пробелах хуй пойми почему вообще. Разочарован в себе полностью. Что ты делаешь Керриган, мудило?
Аноним 06/04/19 Суб 12:24:55 #386 №1375893 
>>1375875
В сишке ничего не используется. Только через сердства WinAPI или библиотеки (OpenGL, DirectX)
Аноним 06/04/19 Суб 12:25:38 #387 №1375894 
>>1375879
> Разочарован в себе полностью.
Пилите, Шура, пилите (с)
Практикой руки выпрямляются.
Аноним 06/04/19 Суб 12:35:19 #388 №1375901 
>>1375894
Хочется в это верить. Впервые батя сказал "учи эту ебалу и иди программируй микроконтроллеры". В городе нет не то что толковых, а вообще каких либо программистов, одни менеджеры и судоводители (портовый город). Потому даже за малые познания платят достаточно много. Когда скриптовые языки учил, только хуями меня крыл. К слову, он сам в девяностых-нулевых писал какую-то хуйню на языке ассемблера для домашних компов по заказу.
Аноним 06/04/19 Суб 12:36:43 #389 №1375902 
>>1375875
Ничего в сишке нет. Сишка это абстрактный язык абстрактного пека, у которого есть только процессор, память и текстовый терминал. Всё остальное это опциональное оборудование и поддерживается сторонними библиотеками конкретной ос и этого оборудования.
Аноним 06/04/19 Суб 13:34:54 #390 №1375935 
>>1375865
> перл написан на основе си
В перле какие-то кусочки сишного синтаксиса есть, ну так они много где есть, хоть в PHP, хоть в JS.

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

>>1375902
> есть только процессор, память и текстовый терминал
Еще есть файлы. А во freestanding-окружении наоборот вообще ничего нет, кроме того, что у тебя в программе написано: ни терминала, ни динамической памяти.
Аноним 06/04/19 Суб 14:13:34 #391 №1375954 
>>1375865
Перл хороший, но... да, он полумертв. Лично мне нравится больше чем тот же Питон.
Аноним 06/04/19 Суб 16:55:18 #392 №1376028 
Почему если я делаю ctrl c -> ctrl v в консоль, на месте перевода строки появляются рандомные символы на выводе? Есть предположение, что это проблема вставляемого текста (перевод является символом перевода или что то в этом роде), но как это можно вылечить?
Аноним 06/04/19 Суб 17:00:09 #393 №1376031 
Безымянный.png
>>1376028
Пометил некоторые красным.
На скрине идет
======
ввод
++++++
вывод
======
Скопировал рандомные сообщения из треда
Аноним 06/04/19 Суб 17:49:16 #394 №1376053 
1.PNG
2.PNG
>>1375850
Оно, конечно, запускается, но как-то странно. Если компилировать с манифестом, то компоненты просто не отображаются.

Кстати,
>2019
>XP
Аноним 06/04/19 Суб 18:29:02 #395 №1376074 
>>1376053
Странный эффект, может что-то с манифестом. Вообще я ожидал что экзешник не запустится из за пометки совместимости с семеркой и выше, как на новых студиях по умолчанию. Видел много таких опенсорсных программ. Видимо всё же опция нужна? Странно.
И справа у тебя окно выглядит наполовину современным, как win2k-стиль. Без манифеста сырые окна должны выглядеть как тут >>1375592.
Ну и так, к слову, вручную каждое поле и кнопку никто не делает через CreateWindow. Подобные диалоги рисуются мышкой в редакторе ресурсов и в коде создаются сразу целиком одной функцией. Но лепить портянки case-ов для обработки сообщений всё равно нужно руками. Без библиотек, это скрывающих, получается очень уродливая громоздкая фигня при каком-то количестве контролсов на форме.

>Кстати,
>2019
>XP
Глупость. С таким же успехом можно написать
>2019
>C
Си совсем не модный сейчас, так что ты тут тогда делаешь, раз такой модный?
Я думал Си это язык для тех кто знает что и как он хочет программировать, а не атрибут выебонов пальцезагнутых.

Аноним 06/04/19 Суб 18:35:59 #396 №1376088 
>>1376053
Да, я забыл тебе сказать. InitCommonControls() вызови в WinMain перед созданием окна (и -lcomctl32). Потому что манифест манифестирует, а дллки у тебя в импортах нет.

> XP
Пишу эти строки с XP. Ничего не тормозит, никакой телеметрии, никто не ребутит мой компьютер без спроса ради апдейтов.

>>1376074
> Подобные диалоги рисуются мышкой в редакторе ресурсов и в коде создаются сразу целиком одной функцией.
Да, можно CreateDialog, но это не всегда удобно. Да и смысла нет ради трех окон.

> Но лепить портянки case-ов для обработки сообщений всё равно нужно руками
Можно ознакомиться с использованием windowsx.h, там чуть более красивые макросы.
Аноним 06/04/19 Суб 18:55:46 #397 №1376104 
 .png
>>1376088
Вот теперь другое дело, спасибо ^_^

>Пишу эти строки с XP.
Там же поддержка уже закончилась, даже критические обновления не приходят, что создаёт серьёзную проблему с безопасностью. Уж лучше пусть MS следит, чем васян из соседнего подъезда.

А сравнение Windows XP и языка C считаю некорректным. C динамично развивается и обновляется, самый последний выпуск C18 2018 года. Си не модный? Да его форсят сейчас везде, где только можно.
Аноним 06/04/19 Суб 19:06:08 #398 №1376110 
>>1375954
+
Аноним 07/04/19 Вск 01:02:21 #399 №1376371 
Доброй ночи, мастера старой школы. Я тут внезапно задумался... а не осилить ли мне Кнута? Много где упоминается, как мастхэв вне времени. Технические неудобства, связанные с возрастом книги, меня пугают значительно меньше, чем моральные неудобства от молодых книг, написанных под аудиторию "есть комп - хочу вкатиться" (в наш век надо поискать, у кого компа нету). Но времени тоже не вагон, вот и хочу услышать чье-то мудрое мнение насчет пользы от подобной годноты. да да да, за время, что писал пост, мог уже бегло ознакомиться, иду нахуй
Аноним 07/04/19 Вск 01:57:59 #400 №1376410 
бамп
Аноним 07/04/19 Вск 02:56:08 #401 №1376427 
>>1376371
Не возражаю, можно.
Аноним 07/04/19 Вск 09:09:29 #402 №1376491 
Почему в Си нельзя возвращать и принимать по-значению, не по указателю несколько значений? Как я понимаю в этом случае данные располагаются рядом в памяти на стеке. Да и удобно было бы зачастую.
Аноним 07/04/19 Вск 09:36:40 #403 №1376506 
...Такой способ навелосипедил. Это вообще легально?
typedef struct{ int a,b; } __strc;
__strc func(void)
{
return (__strc){1,2};
}
int a= func().a;
int b= func().b;
Аноним 07/04/19 Вск 09:43:29 #404 №1376512 
Привет, расскажите про переносимость подробнее. Я нуфаг
Аноним 07/04/19 Вск 09:58:34 #405 №1376520 
>>1376371
> а не осилить ли мне Кнута
Кнут - справочник.

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

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

>>1376512
Переносимости нет, это миф. Если ты будешь четко следовать стандарту Си, будешь избегать всяких undefined/unspecified/implementation defined behavior, будешь очень много думать о знаках и минимальных лимитах интов, то, скорее всего, твой код заработает на любой рандомной системе. Но это все равно полностью не избавляет тебя от ебли при портировании: обчно сколько-нибудь сложной программе мало stdio/stdlib для работы, приходится дергать системные функции, которые везде свои (или отличаются в каких-то мелочах, что еще хуже).
Аноним 07/04/19 Вск 10:09:45 #406 №1376529 
>>1376520
Можно вернуть сразу два значения так:
__strc ab= func;
И в догонку вопрос:
float(ЗВЕЗДА) mirror_vec3(float v[3])
{
return (float[3])
{
-v[0],
-v[1],
-v[2],
};
}
В gcc компилируется без предупреждений. Я как понимаю в данном случае возвращается указатель на float[3] созданный вне функции?
Аноним 07/04/19 Вск 10:10:22 #407 №1376530 
>>1376520
Хорошо а если не заработает то что будет? Как вообще понимать не заработант? Все же типа по правилам написано.
Аноним 07/04/19 Вск 10:19:28 #408 №1376536 
>>1376529
нет, у тебя UB и твой код говно, потому что ты возвращаешь указатель на локальную переменную, которая дохнет вне функции
Аноним 07/04/19 Вск 10:24:58 #409 №1376539 
>>1376536
Но почему тогда когда я явно создаю локальный массив и возвращаю на него указатель, компилятор ругается, а в этом случае нет, может догадывается создать массив на стеке вне функции?
Аноним 07/04/19 Вск 10:39:35 #410 №1376547 
>>1376530
> Как вообще понимать не заработант?
Ну вот ты такой пишешь: for (int i = 0; i < 100000; ++i), а у тебя опа, и 16-битная система с 16-битным интом. Или ты такой пишешь fopen("приветмир.txt", "r"), а у тебя винда, которая UTF-8 в именах файлов не прожует. И такого дохуя.

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

> на стеке вне функции
Это как? При возврате из функции ее кадр стека уничтожается нахуй, а создавать что-то ниже своего кадра нельзя, потому что там УЖЕ лежат чужие данные.
Аноним 07/04/19 Вск 10:39:56 #411 №1376548 
>>1376539
>компилятор ругается
Компилятор не ругается, он не твоя мамка, придурок. В отличие от мамки, компилятор не живет своей собственной жизнью чтобы доставить тебе неприятности. Компилятор сообщает тебе, что ты обосрался, кроме этого он ничего не думает и не делает, только указывает на твои ошибки, беспристрастно и объективно. Следовательно, на сообщения об ошибках у тебя есть только одна правильная стратегия поведения - исправляться самому.
Аноним 07/04/19 Вск 10:42:39 #412 №1376549 
>>1376548
> компилятор не живет своей собственной жизнью чтобы доставить тебе неприятности
Че, правда? А диагностика на это:
size_t n; if (n = strlen(something)) printf("Non-empty string (%zu characters)\n", n);
разве не сделана, чтобы меня заебать тупыми придирками и доставить мне неприятности? Прямо как мамка.
Аноним 07/04/19 Вск 10:50:55 #413 №1376553 
>>1376549
Во-первых, что за пидорская "диагностика"? Нет такого слова, учись говорить правильно, а то так и умрешь тупым.
Во-вторых, предупреждение на очевидную ошибку это всегда хорошо. Заодно учит малолетних ебланов не выебываться, а писать нормальный ясный код. Но если ты упоротый даун, можешь отключить, обычно предупреждения отключаемы.
Аноним 07/04/19 Вск 11:02:55 #414 №1376560 
>>1376553
> что за пидорская "диагностика"
Иди расскажи разработчикам компиляторов, как им диагностики называть: https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html

> предупреждение на очевидную ошибку это всегда хорошо
Это когда ошибка есть.

> писать нормальный ясный код
Это нормальный ясный код. Гораздо более ясный, чем if ((n = strlen(something)) != 0), где можно запутаться в скобках даже с подсветкой, особенно когда там больше одного выражения с присваиванием. Просто тебя к этому говну приучили, поэтому тебе кажется, что оно норм, а вот это >>1376549 - нет.
Аноним 07/04/19 Вск 11:39:03 #415 №1376582 
>>1376560
Окей, пусть будет диагностика.

Предупреждения это не ошибки, они не мешают компиляции и работе программы. Плохого в них ничего нет, а наоборот, только польза. Язык гибкий, позволяет писать хуйню и не различить либо это ошибка, либо ты специально так написал, поэтому в любом случае лучше лишний раз уведомить, чем промолчать, а потом человек будет ломать голову почему у него не так работает. Если же ты знаешь, значит знаешь и проблем нет.
>тебя к этому говну приучили
Объясни мне, где ты тут увидел "говно" и чему тут "приучать"? Можешь не отвечать, я и так знаю.
Ты у мамы маленькое чсвшное олимпиадное говно, которое вместо программирования надрачивает языком своё чсв, поэтому и бесится когда видит сообщения, намекающие на ошибки. Ведь это противоречит цели маленького ублюдка - чувствовать себя умным, идеальным без ошибок.

Так вот, тупое говно. Си это язык программирования, предназначенный для написания программ, помогающий программисту уменьшить количество ошибок и облегчить их нахождение. Он совсем не предназначен ласкать чувства всяких хуесосов вроде тебя. Если твои говенные чувства что-то задевает, пиздуй к врачу или в биорекатор, мне похуй куда, главное нахуй отсюда, ибо тут тред программирования, а не решения биопроблем быдла.
Аноним 07/04/19 Вск 12:41:01 #416 №1376608 
>>1376582
>Предупреждения это не ошибки, они не мешают компиляции и работе программы.
Тонко.
Аноним 07/04/19 Вск 12:53:57 #417 №1376618 
kr.jpeg
Увидел в локалшопе и не удержался. Пойдет в коллекцию.
Аноним 07/04/19 Вск 14:02:42 #418 №1376667 
image.png
Аноны, че за хуйня? У меня четырехбайтный unsigned меньше нуля
Аноним 07/04/19 Вск 14:07:16 #419 №1376673 
>>1376667
Код то покажи. Не исключено неявное приведенеие типа.
Аноним 07/04/19 Вск 14:29:28 #420 №1376695 
>>1376582
> Плохого в них ничего нет, а наоборот, только польза
Со статическими анализаторами дело имел? Попробуй. Они вываливают на тебя мегабайты однотипных придирок, а ты разгребай эту свою пользу. Ну ладно, там можно изредка в игнор подобавлять, особенно если игнор как у людей, в отдельном файле, а не в комментарии рядом с кодом. А вот с ворнингами компилятора так не прокатит, во многих проектах принято -Werror и нехуй.

>>1376667
У тебя %d в printf-е. Сделай %u, и все будет.
Аноним 07/04/19 Вск 14:31:20 #421 №1376696 
>>1376582
> Си это язык программирования, предназначенный для написания программ, помогающий программисту уменьшить количество ошибок и облегчить их нахождение
Прочитал пост целиком и дико, неистово проиграл.
Аноним 07/04/19 Вск 15:15:39 #422 №1376723 
Анон, помоги с реализацией односвязного списка. В общем проблема заключается в крайнем цикле, выскакивает ошибка.
Только сегодня начал динамические структуры данных
https://pastebin.com/V5LTxX7f
Аноним 07/04/19 Вск 15:15:57 #423 №1376725 
>>1376723
*изучать
фикс
Аноним 07/04/19 Вск 15:21:01 #424 №1376726 
>>1376723
последнее выражение должно быть таким.
t = t->next
фикс
но все равно не работает
Аноним 07/04/19 Вск 15:23:44 #425 №1376728 
>>1376726
> но все равно не работает
Возможно, потому что ты сначала делаешь free(), а потом из освобожденного элемента читаешь указатель на следующий?
Аноним 07/04/19 Вск 15:28:19 #426 №1376732 
>>1376728
А освобождать память тогда в новом цикле?
Аноним 07/04/19 Вск 15:31:08 #427 №1376735 
>>1376732
dynamic ∗next = t->next;
free(t);
t = next;
Аноним 07/04/19 Вск 15:40:33 #428 №1376739 
>>1376735
То есть вот так я правильно освобожу память?
t = p;
while (t)
{
\tprintf("%d\n", t->key);
\tp = t->next;
\tfree(t);
\tt = p;
}
Аноним 07/04/19 Вск 15:42:27 #429 №1376741 
>>1376735
>>1376739
или новый указатель создавать
Аноним 07/04/19 Вск 15:47:33 #430 №1376746 
>>1376741
Ну да, норм.
Аноним 07/04/19 Вск 15:49:28 #431 №1376749 
>>1376746
Бля, сорян за дотошность
То есть вот так я правильно реализовал?
https://pastebin.com/g443HuHM
Аноним 07/04/19 Вск 15:50:36 #432 №1376750 
>>1376739
А нахуя тебе принтф тут? Нихуя не понимаю что ты пытаешься сделать. Нахуя тебе аутпут того что ты удаляешь, и да по ресурсам в однопоточке это будет полнейший пиздец
Аноним 07/04/19 Вск 15:53:16 #433 №1376751 
>>1376750
Да принтф со значением элемента забыл убрать, я просто сначала хотел выводить элемент и адрес следующего, для наглядности как список работает.
Аноним 07/04/19 Вск 17:04:19 #434 №1376780 
>>1376618
Бля можешь первые несколько и последние несколько страниц зафотать включая обложку позади?
Аноним 07/04/19 Вск 17:20:49 #435 №1376787 
>>1376780
Зачем тебе?
Аноним 07/04/19 Вск 18:02:04 #436 №1376804 
Анонче, помогите. Не получается нагуглить. Вообщем, мне надо вернуть массив из функции, а он возвращает хуйню. По задаче я должен на вход принимать строку шестнадцатеричных чисел, возвращать строку десятеричных. Сделал несколько функций для этого, а функцию, которая преобразует число в строку сделать не получается. Вернее, не получается вернуть эту строку. Хелп
Аноним 07/04/19 Вск 18:07:06 #437 №1376810 
>>1376804
Массивы из функций не возвращают, их туда подают в виде указателя, а функция просто делает с массивом что надо и ничего возвращать не нужно.
Аноним 07/04/19 Вск 18:35:24 #438 №1376820 
>>1376804
Традиционная форма:
bool do_whatever_you_want(char ∗output, const char ∗input, size_t max_length);
Аноним 07/04/19 Вск 18:39:58 #439 №1376823 
>>1376804
char ЗВЁЗД stroka = malloc(len);
// заполняешь stroka чем надо
return stroka;

Но потом надо будет free указатель, пока не потерял
Аноним 07/04/19 Вск 19:30:31 #440 №1376839 
>>1376823
Да я хз че это, еще не дошел может или пропустил мимо глаз. Только вторая глава учебника все таки. Я уже закончил, все работает? кроме одной мелочи - если число содержит цифру ноль, то он его режет и дальше не читает. Это происходит по той причине, что перевожу число в строку я таким образом, что сначала цикл вычисляет длину длину числа справа налево, а потом получает каждую цифру слева направо и вносит в строку. Но длину он узнает по условию цикла, что остаток от деления не равен прошлому остатку от деления. Пока еще не придумал как это пофиксить.
Аноним 07/04/19 Вск 19:38:55 #441 №1376842 
>>1376839
> Но длину он узнает по условию цикла, что остаток от деления не равен прошлому остатку от деления.
Очень странный способ. Правильный:
unsigned int num_digits;
if (!number) {
num_digits = 1; // Для 0 - одна цифра 0.
} else {
// Считаем цифры. Можно свернуть до лукапов в массиве степеней двойки, можно логарифм посчитать, а можно в лоб:
for (num_digits = 0; number; number /= 10) { num_digits++; }
}
Аноним 07/04/19 Вск 19:56:54 #442 №1376849 
image.png
>>1376842
Удобно, буду иметь ввиду, спасибо. У меня выглядит сейчас как на скрине.

А вообще оказалось что в задаче от меня требовалось просто перевести шестнадцатеричное в строке типа "0xAF" в десятичное, иначе выдать ошибку, а я ебанул хероту, которая ищет все шестнадцатеричные в строке и преобразует всю строку с подменой на десятеричные. Типа "govno 0xAF and 0x12F lol" станет "govno 175 and 303 lol". Пиздец
Аноним 07/04/19 Вск 20:30:20 #443 №1376862 
Делаю реализацию добавление в очередь по книжке Уинера
https://pastebin.com/Je5vj6wr
вылетает исключение на строчке
cur = cur->next;
Как фиксить?
Аноним 07/04/19 Вск 20:43:05 #444 №1376869 
>>1376862
Память под q1 кто выделять будет?
Аноним 07/04/19 Вск 20:44:04 #445 №1376870 
>>1376862
Ну у тебя q1 указывает в небеса, инициализируй его. Алсо, ты можешь убрать обработку крайних случаев, если продолжишь работать с указателем на указатель в insert:
void insert(queue ∗∗q, int item)
{
queue ∗elem;
// q - указатель на очередь или указатель на next последнего ненулевого элемента.
while ((elem = ∗q) != NULL) { q = &elem->next; }
elem = malloc(sizeof(∗elem));
if (elem) {
elem->info = item;
elem->next = NULL;
∗q = elem;
}
}
Аноним 07/04/19 Вск 20:46:47 #446 №1376872 
>>1376862
Хорошей практикой считается инициализация переменых при объявлении.
Например, queue *q1 = NULL; прекрасно показывает указатель в никуда
Аноним 07/04/19 Вск 20:49:10 #447 №1376875 
>>1376869
>>1376870
>>1376872
Получается выделение памяти под q1 в цикле делать?
Аноним 07/04/19 Вск 20:51:09 #448 №1376876 
>>1376875
Перед вызовом твоих функций
Аноним 07/04/19 Вск 20:57:19 #449 №1376882 
>>1376876
Я конеш мог в цикле это сделать все, но похуй, я все равно тупой.
Что я делаю тут не так? Все равно исключение.
queue ЗВЕЗДА q1 = NULL;
q1 = (queue ЗВЕЗДА)malloc(5*sizeof(queue));
insert(&q1, 1);
insert(&q1, 2);
insert(&q1, 3);
insert(&q1, 4);
insert(&q1, 5);
Аноним 07/04/19 Вск 21:07:09 #450 №1376884 
>>1376882
https://pastebin.com/XdiYTBbC
Теоретически, компилятора под рукой нет.
Аноним 07/04/19 Вск 21:15:55 #451 №1376894 
>>1376884
Все работает, благодарю. Но еще вопрос, и он достаточно тупой. При удалении всех элементов, освобождать потом память надо?
Аноним 07/04/19 Вск 21:23:30 #452 №1376899 
>>1376894
Да, для каждого malloc. В твоём случае в цикле все next. И потом саму q1. free.
Аноним 07/04/19 Вск 21:45:59 #453 №1376916 
>>1376884
Нахуй там не нужен никакой маллок. Там нужно в main присвоить q1 NULL и все.
Аноним 07/04/19 Вск 22:14:12 #454 №1376927 
>>1376787
Подрочу
Аноним 07/04/19 Вск 22:51:47 #455 №1376952 
Пацаны, как реализовать удаление определенных элементов в очереди, например, только отрицательных, а потом опять организовать вывод очереди уже без них?
Получается 3 функции для добавления, удаления и вывода надо писать?
Аноним 07/04/19 Вск 23:26:05 #456 №1376967 
>>1376695
Двачую, меня так мисра заебала, просто ужас.
Аноним 07/04/19 Вск 23:38:59 #457 №1376978 
>>1376952
Ну можешь привыкать код на функции разбивать, это правильно. Можешь просто три цикла вхуячить в main().
Аноним 08/04/19 Пнд 09:46:55 #458 №1377076 
>>1376839
Да я про malloc погнал чуток. Дергать аллокатор ради какой-то строчишки - сомнительный вариант. Можешь возвращать, как это делает asctime(). Делается глобальный буфер достаточного размера (массив char[] объявленный вне функции), чтобы он лежал не в стеке, а в сегменте данных, заполняешь его нужным контентом и возвращаешь указатель на него. Но в месте использования его лучше или сразу копировать в свой strcpy(buf, ctime(t)), или использовать как константу puts(ctime(t)). Прекрасно работает, и ничего не ломается, ровно до тех пор, пока вызывается лишь из одного потока.
https://sourceware.org/git/?p=glibc.git;a=blob;f=time/asctime.c;h=de763e00e0414f3fdd751ffed4b1093e235eec1a;hb=HEAD
Аноним 08/04/19 Пнд 11:15:07 #459 №1377108 
>>1377076
Очень плохой подход, в стандартной библиотеке он используется, потому что уже это легаси уже не исправишь, а не потому, что так удобнее.

И нужно хотя бы делать не глобальную переменную, а static внутри функции, и в С11 еще _Thread_local появились, представляешь?

> в месте использования его лучше или сразу копировать в свой strcpy(buf, ctime(t))
Вот именно поэтому так делать и не стоит. Если ты сразу будешь копировать, почему бы просто не передать указатель на buf в функцию? А если ты вдруг скопировать забудешь или подумаешь, мол, все равно сейчаc printf()-ом распечатаю, незачем лишний раз копировать, а позже в этот же printf() добавишь еще какой-нибудь вызов (из 3rd-party библиотеки, например), который тоже захочет вызвать ctime(), тебя ждет веселая ебля с отладчиком. И, казалось бы, при чем тут errno?

В большинстве случаев передавать в функцию указатель на буфер под результат более чем достаточнео. Вот если размер результата заранее предсказать сложно, и это больше чем единицы килобайт, тогда можно и malloc().
Аноним 08/04/19 Пнд 12:43:58 #460 №1377136 
Печатаю в консольку текст из файла. Почему он съедает вторую букву?

char temp[100];

fscanf(fp, "%s", temp);

while (temp[0] != EOF)
{
\t\tputchar(temp[0]);
temp[0] = getc(fp);
}

fclose(fp);

return(0);
}

В файле написано вот это:
01 101 201 301
02 203 101 111
03 934 110 234
04 049 110 136
05 213 101 137

А печатает он это:
0 101 201 301
02 203 101 111
03 934 110 234
04 049 110 136
05 213 101 137

Куда 1 проебалась в самом начале?

Аноним 08/04/19 Пнд 12:59:03 #461 №1377139 
>>1377136
у тебя в temp пишется строка, а читается символ, поменяй в fscanf() на %c
Аноним 08/04/19 Пнд 13:13:58 #462 №1377145 
image.png
image.png
Аноны, помогите срочно. Есть две функции (на пиках), они работают по разному. Проблема кроется именно в этой функции. Один из вариантов - вариант решебника, другой мой. Весь остальной код совершенно одинаков, багует только на этом сегменте. Так вот, в решебнике почему-то len (длинна второго массива) умудряется быть равной k, у меня для этого приходится отнимать от длины единицу. Я уже заебался. В чем проблема то блять? Одна и та же функция
Аноним 08/04/19 Пнд 13:17:44 #463 №1377146 
>>1377145
Разница в ;
Аноним 08/04/19 Пнд 13:18:29 #464 №1377147 
>>1377145
Блять, я понял почему. Второй цикл просто цифры считает и останавливается если находит совпадение и длина k оказывается меньшей, чем длина регулярки. Пиздец я пол часа шаманил. Ну что за хуета, опять день начался с неправильно решенной задачи
Аноним 08/04/19 Пнд 13:20:13 #465 №1377148 
>>1377145
; Тебе даже табуляцией размечено как бы.
Аноним 08/04/19 Пнд 13:23:55 #466 №1377149 
>>1377139
Уже поменял и работает. Но я так и не понял почему проебось именно второе значение, а все остальные на месте. Ведь даже если брать строкой, то он все равно должен был 01 взять, а не 0.
Аноним 08/04/19 Пнд 13:27:27 #467 №1377150 
>>1377149
Ты ретардед? У тебя вывод putchar(), название функции ничего не говорит?
Аноним 08/04/19 Пнд 13:46:07 #468 №1377153 
>>1377150
Я в курсе, но почему тогда остальные символы вывелись без проблем?
Аноним 08/04/19 Пнд 13:58:02 #469 №1377161 
Screenshot2019-04-08-17-53-58-930com.n0n3m4.droidc.png
Ещё вопрос. Вот 2 варианта:

while (n <100)
\t{
\t\tprintf("%c", temp[n]);
\t\tn++;
\t}

while (n <100)
\t{
\t\tprintf("%c", temp[0]);
\t\ttemp[0] = getc(fp);
\t\tn++;
\t}

Почему в первом случае получается хуйня какая-то, а во втором все норм?

Почему в массиве если не выводить его по символам внутри находится какая-то хуйня, а не содержимое файла?
Аноним 08/04/19 Пнд 14:00:55 #470 №1377163 
>>1377161
Ты уверен, что файл у тебя в 1 байтовой кодировке?
Аноним 08/04/19 Пнд 14:12:07 #471 №1377168 
Screenshot2019-04-08-18-06-38-504com.alphainventor.filemana[...].png
Screenshot2019-04-08-18-09-51-299com.n0n3m4.droidc.png
>>1377163
Ну да, обычный тхт файл. Вот какие значения у массива выводятся с %d при принте.

В чем проблема?
Аноним 08/04/19 Пнд 14:20:07 #472 №1377169 
>>1377168
Это ты шо, прям на ведре кодишь?))
Аноним 08/04/19 Пнд 14:20:32 #473 №1377170 
долбоеб блять иди дедов почитай про отличие строк от символов, дебил ты ебаный
Аноним 08/04/19 Пнд 14:22:19 #474 №1377172 
>>1377169
Ну да, я не программист, учу с в свободное время вместо игр на мобилке. Интересно даже.
Аноним 08/04/19 Пнд 14:23:21 #475 №1377173 
>>1377170
Хули ты такой ебанутый, нормально ответить можешь?
Аноним 08/04/19 Пнд 14:25:04 #476 №1377174 
>>1377172
while (n <100)
{
printf("%c", temp[0]);
temp[0] = getc(fp);
n++;
}

Здесь тебе n вообще не нужен получается. Ты 100 раз постишь хуйню. Ты бы мог просто символ в переменной хранить же временно.
Аноним 08/04/19 Пнд 14:33:21 #477 №1377178 
>>1377174
Ниже я по нормальному вывожу через

while (temp[0] != EOF || end !=1)
{
\t\tputchar(temp[0]);
temp[0] = getc(fp);
}

Но мне интересно почему

while (n <100)
\t{
\t\tprintf("%d|", temp[n]);
\t\tn++;
\t}

выдает хуйню что при %c что при %d. Разве команда fscanf(fp, "%c", temp); не записывает посимвольно содержимое файла в массив?
Аноним 08/04/19 Пнд 14:34:00 #478 №1377179 
>>1377172
А ещё, если у тебя ведро, то дефолтная кодировка файла — это наверно ж UTF-8. А getf только с askii работает.

https://linux.die.net/man/3/ugetc

Попробуй эту функцию вместо getc.
Аноним 08/04/19 Пнд 14:34:59 #479 №1377180 
>>1377179
>ascii
Аноним 08/04/19 Пнд 14:37:55 #480 №1377181 
>>1377179
У меня getc нормально выводит, смотри пост выше.
Аноним 08/04/19 Пнд 15:14:02 #481 №1377194 
>>1377136
>>1377153
>>1377161
> Почему он съедает вторую букву?
%s читает последовательность до первого пробела, т.е., "01". putchar() выводит '0', getc() читает пробел, putchar() его выводит, getc() читает 1 из 101 итд.

> Почему в массиве если не выводить его по символам внутри находится какая-то хуйня
Потому что ты прочитал туда хуйню или потому что ты не иницилизировал n.
Аноним 08/04/19 Пнд 15:20:36 #482 №1377195 
>>1377179
UTF-8 и есть char, если не использовать символы выше лимита аски.
Аноним 08/04/19 Пнд 15:50:36 #483 №1377199 
Image 437.png
Image 438.png
>>1377194
>%s читает последовательность до первого пробела, т.е., "01". putchar() выводит '0', getc() читает пробел, putchar() его выводит, getc() читает 1 из 101 итд.

почему тогда все числа кроме первого вывелись правильно? По твоей логике у меня были бы только числа из 1 цифры.

>Потому что ты прочитал туда хуйню или потому что ты не иницилизировал n.

Вот на пк написал, весь код. printf выводит хуйню( и с %c и с %d), а putc все норм выводит из файла. Какого хуя?
Аноним 08/04/19 Пнд 15:58:40 #484 №1377201 
>>1377199
> почему тогда все числа кроме первого вывелись правильно
Потому что ты только первое слово прочитал scanf()-ом, а остальные читал посимвольно getchar()-ом.

> Вот на пк написал, весь код
Ты прочитал один символ fscanf()-ом, а выводишь целый массив, неинициализированный, т.е., заполненный говном. Зачем ты вообще этот fscanf() втыкаешь?
Аноним 08/04/19 Пнд 16:10:32 #485 №1377206 
>>1377201
Кажись начинаю понимать. fscanf записывает в массив только первый символ из файла и все(ну и слово если это %s )? А как тогда сделать чтобы fscanf прочитал весь файл и запихнул его в массив, не выводя его при этом?
Аноним 08/04/19 Пнд 16:16:17 #486 №1377207 
Image 439.png
>>1377206
Сам погуглил, нашел что %[] просматривает набор символов. Вроде работает, я правильно сделал? Но вот что это за говно после вывода отображается?
Аноним 08/04/19 Пнд 16:24:47 #487 №1377210 
>>1377207
for (int i = 0; i < 200; ++i)
temp = '\0';

Почистить массив перед использованием.
Аноним 08/04/19 Пнд 16:25:36 #488 №1377212 
>>1377210
temp[ i ] = '\0\;
Макаба символы жрет
Аноним 08/04/19 Пнд 16:31:10 #489 №1377213 
>>1377210
Благодарю, я так и понял что у меня массив на 200 символов, а занято только чуть более 100. А символ '\0' что означает?

И да - а можно сделать чтобы массив сам нужной ширины был?

>Макаба символы жрет
Cобственно я поэтому и считаю переменной n, а не i.
Аноним 08/04/19 Пнд 16:35:47 #490 №1377214 
>>1377213
Тут должна быть лекция про "Нуль-терминированные строки", но в википедии лучше описано.
Вообщем когда компьютеры были большие, а программы маленькие, начали использовать вместо строк - массивы символов. А концом строки считался первый встреченный символ '\0', оно же число 0.
Аноним 08/04/19 Пнд 16:36:55 #491 №1377215 
>>1377213
>И да - а можно сделать чтобы массив сам нужной ширины был?
Думаю нет, кто кроме тебя знает сколько там символов? Надо посчитать размер файла, выделить память под него и тд
Аноним 08/04/19 Пнд 16:40:30 #492 №1377216 
>>1377214
Я думал конец массива это EOF. и почему кстати EOF не в кавычках '' ?

>>1377215
странно, я думал можно как-то динамически выделять, но видимо не в С?
Аноним 08/04/19 Пнд 16:44:56 #493 №1377218 
>>1377216
>EOF
Всего лишь константа определенная #define в недрах библиотеки.
>странно, я думал можно как-то динамически выделять, но видимо не в С?
Чтобы он тебе автоматом выделил память под содержимое файла - нет. Только руками. Плата за гибкость и скорость - определенные неудобства.
Аноним 08/04/19 Пнд 17:00:35 #494 №1377220 
>>1377206
> как тогда сделать чтобы fscanf прочитал весь файл
Ты не поверишь, но для этого придумали fread.

>>1377216
> Я думал конец массива это EOF
EOF (end of file) - это специальное значение, которое не влазит в char, которое некоторые функции возвращают при достижении конца файла. Когда дело доходит до массивов, ни о каких EOF речи уже не идет.

>>1377218
> Чтобы он тебе автоматом выделил память под содержимое файла - нет
Ну файл-то и смапить можно, только это не для новичка.
Аноним 08/04/19 Пнд 17:20:02 #495 №1377228 
>>1377220
>Ну файл-то и смапить можно
Ты про WinAPI?
Аноним 08/04/19 Пнд 17:24:31 #496 №1377231 
>>1377228
Ну от ОС зависит. Если винда, то очевидно Windows API: CreateFile/CreateFileMapping/MapViewOfFile, все дела, если линукс, то open/mmap.
Аноним 08/04/19 Пнд 17:28:06 #497 №1377232 
>>1377231
Понял, через WinAPI давно делал. А в линукс не так давно кодить стал и стараюсь максимально независимый от платформы код писать. Думал может какую-то библиотеку удобную завезли.
Аноним 09/04/19 Втр 01:15:40 #498 №1377469 
>>1377213
Можно, делаешь отдельную функцию, доходить до конца массива циклом с счётчиком и ввделяешь память память путем счётчик * sizeof char
Аноним 09/04/19 Втр 01:16:09 #499 №1377470 
>>1377469
>конца файла*
Аноним 09/04/19 Втр 05:51:10 #500 №1377520 
Screenshot2019-04-09-09-47-21-067com.n0n3m4.droidc.png
Screenshot2019-04-09-09-47-32-588com.n0n3m4.droidc.png
Такой вопрос. Я беру сравниваю первые 2 числа из файла и если они не совпадают с заданными, то сжираю всю строку. Для одного раза это сработало и выводить вторую строку начиная с 02. Но цикл почему-то не работает и сжирается строка все равно только один раз.

Где я проебался?
Аноним 09/04/19 Втр 07:04:03 #501 №1377530 
>>1377520
fseek(fp, 0, SEEK_SET); после каждой итерации
Аноним 09/04/19 Втр 07:04:58 #502 №1377531 
>>1377530
Хотя нет, ты же один раз из файла читаешь. Туплю спросони.
Аноним 09/04/19 Втр 07:08:03 #503 №1377532 
>>1377520
Что за buffer[1], что в нем? Почему везде temp[0]? Что мешает завести просто char temp?
Аноним 09/04/19 Втр 08:06:04 #504 №1377539 
Screenshot2019-04-09-11-23-46-543com.n0n3m4.droidc.png
Уже сам разоьрался. Нижнее условие с while перестает обрабатываться потому что в первый раз оно заканчивается на \n, а дальше первое условие уже не выполняется и не берет символы из файла.

Поэтому я добавил getc после цикла и все норм стало. А переменную а добавил потому что первым условие м если оно верно съедается первый символ.

Все правильно сделал?

>>1377532
> Что за buffer[1], что в нем?
Вообще там дата будет, а пока я вручную его указываю.

>Почему везде temp[0]? Что мешает завести просто char temp?
А зачем?
Аноним 09/04/19 Втр 08:13:59 #505 №1377541 
>>1377539
Ееее, программирование на ведре :З

А ты нативно компилишь пот arm64, или какие-то онлайн компиляторы юзаешь?
Аноним 09/04/19 Втр 08:16:21 #506 №1377542 
Есть главное окно, а в нём 3 дочерних. Как рендерить в одно из этих дочерних окон? Как изменить главный цикл с учётом того, что требуется сохранить обработку сообщений и сверх того в одно из дочерних окон должна рендериться сцена? Как для этой задачи инициировать OpenGL?
Аноним 09/04/19 Втр 08:31:05 #507 №1377545 
Screenshot2019-04-09-12-18-44-839com.n0n3m4.droidc.png
>>1377541
Пишу и компилю целиком на Андроиде. Если случайно сделать бесконечный цикл, особенно если он что-то выводит на экран, то это сразу пизда. Поэтому приходится сохранятся перед запуском.
Аноним 09/04/19 Втр 08:55:02 #508 №1377551 
Screenshot2019-04-09-12-52-31-830com.n0n3m4.droidc.png
Screenshot2019-04-09-12-52-41-679com.n0n3m4.droidc.png
Так, ещё проблема. Судя по тому что не выводится сообщение end цикл не заканчивается нихуя. Почему? Ведь должен же у файла быть конец?
Аноним 09/04/19 Втр 10:43:30 #509 №1377589 
>>1377542
> Как рендерить в одно из этих дочерних окон?
Так же как и в главное. По WM_CREATE, когда все дочерние окна создашь, получаешь DC дочернего, с этим DC создаешь OpenGL rendering context, делаешь текущим, рендеришь.

> требуется сохранить обработку сообщений
Можно по таймеру инвалидировать, по WM_PAINT рисовать, если сцена несложная и/или не нужен стабильный/высокий FPS. Можешь стандартным циклом типа: while (true) { while (PeekMessage(...)) { Translate/DispatchMessage } Render() }, от того, что окно дочернее, ничего не поменяется. Только когда классы окон будешь создавать, разберись там со всякими WS_CLIPCHILDREN/CLIPSIBLINGS.

>>1377551
Все твои ошибки - от отвратительнейшего говнокода. В частности, от всех этих кучах лишних getc() и нечитаемых temp[0]. В данном случае ты скорее всего проебываешь EOF еще выще, в строке 57, где ты его нихуя не проверяешь (или в других местах того цикла).
Аноним 09/04/19 Втр 11:01:58 #510 №1377596 
>>1377542
Какой главный цикл, шизик. Если у тебя оконное приложение, там цикл оконных сообщений, а не рисования. Рисуешь по WM_PAINT.
ПЕРЕКАТ Аноним OP 09/04/19 Втр 11:59:19 #511 №1377622 
>>1377621 (OP)
>>1377621 (OP)
>>1377621 (OP)
>>1377621 (OP)
>>1377621 (OP)
Аноним 09/04/19 Втр 12:26:27 #512 №1377650 
>>1377589
> Все твои ошибки - от отвратительнейшего говнокода.
Что именно говнокод, помимо того что я вместо символьной переменной использую массив и все пихаю в нулевой же массив? По идее я дальше буду в этот массив уже нужный текст из файла пихать. Да и я только учусь + пишу на мобиле.

>В частности, от всех этих кучах лишних getc() и нечитаемых temp[0].
В чем проблема моих getc?

>В данном случае ты скорее всего проебываешь EOF еще выще, в строке 57, где ты его нихуя не проверяешь (или в других местах того цикла).

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

Вот код целиком. Где ошибка?
https://pastebin.com/cpCSDt2M
Аноним 09/04/19 Втр 17:08:43 #513 №1377818 
F55BD8AF-463D-4F16-A9DB-541660EDA916.png
Стивен прата в своей книжке утверждает что в приложении б книги ритчи не описывается стандартная библиотека однако приложение б как раз содержит это описание. Че за хуйня
Аноним 09/04/19 Втр 17:19:46 #514 №1377821 
>>1377818
К слову что вообще за стандарт языка да и еще библиотеки
Аноним 09/04/19 Втр 18:59:08 #515 №1377883 
>>1377818
Насколько я помню, приложения B в первом издании K&R вообще не было, было только A с описанием языка, о чем и речь.
Аноним 09/04/19 Втр 19:01:08 #516 №1377884 
>>1377883
Да кстати, спасибо за помощь. Рили там ток приложение а.
Аноним 09/04/19 Втр 19:02:52 #517 №1377886 
А я тем временем напоминаю, что у нас уже новый тредик:

>>1377621 (OP)
>>1377621 (OP)
>>1377621 (OP)
>>1377621 (OP)
>>1377621 (OP)
comments powered by Disqus

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