Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.Пожалуйста, пользуйтесь https://ideone.com/ или http://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [i] или ∗.Что читать:- Классика от Отцов: http://www.cypress.com/file/56651/download- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.- Годное пособие для гуманитариев: http://web.archive.org/web/20160727235220/http://c.learncodethehardway.org/book/ (автор внезапно захотел денег)- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)- man/Dash/zealdocsЧем конпелировать:- Очевидный GCC.- clang: оче годно, батя рекомендует.- Intel C++ Compiler: оптимизации, тысячи их.- Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.- TCC: очень маленький компилятор с багами и неполной поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.Что еще почитать:http://c-faq.com/FAQ из comp.lang.c. Древний, но все еще актуален.Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.Ben Klemens "21st Century C: C Tips from the New School" (2012)Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+StandardЕще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_CОнлайн-утилиты:- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.Прошлые треды:- №25: https://arhivach.org/thread/303902/- №26: https://arhivach.org/thread/315652/- №27: https://arhivach.org/thread/325831/Шапка: http://piratepad.net/bJ1SdmkZyu
Плюсы не нужны, когда есть JS.
>>1138955Вилки не нужны, когда есть ботинки.
>>1139069Ботинки не нужны имхо.
Чтобы всю ламповость С понять, надо пильнуть на нем какую-нибудь матан задачку, из серии поиска больших простых чисел.
Есть текстовый файл вида номер - текст. Мне надо чтобы ты вводил номер и получал в ответ текст из файла в консоль. Как проще всего это сделать? Прайм пока прочитал до 4 главы, стоит прочитать 13 главу про файловый ввод-вывод?
>>1140090Регулярками. grep 45 path/to/file
>>1140094Что за регулярки и где про это прочитать?
>>1140096Регулярные выражения — regular expression. man grep, findstr /?
>>1140102Окей, а 13 глава прайма поможет мне сделать что я хочу?
>>1140111Йес оф корс.
>>1140116 Чет прочитал главу и не нашел как там найти нужное слово в файле
>>1140172Ты уде читал главу, про логические операторы? А про работу со строками?Тебе всего то надо получить со входа данные в виде номера и по нему искать. Жля этого делаешь цикл до конца файла и через if чекаешь переменную с искомой подстрокой во всех строках
>>1140195Пока нет, но уже пользовался условными операторами. Я сам хотел сделать массив, куда пихать по 3 символа из файла и сравнивать каждые 3 символа массив с числом, который ввел пользователь. И после того как совпало, то выводить дальнейшие символы на экран. Как тебе такая идея?
>>1140248Хуевая.
>>1140262Почему?
Эм, какого хуя?
>>1140273Потому что тебе надо лучше читать файл в цикле по 20 строк и делать проверку, потом стирать из памяти и продолжать читать файл. Но это все хуйня.Перегоняй файлы в csv, импортируй их в sqlite3 БД и работай как с нормальной БД, а не страдай хуйнец с парсингом.
>>1140292Там нде сканф &s в конце надо
>>1140325> Потому что тебе надо лучше читать файл в цикле по 20 строк и делать проверку, потом стирать из памяти и продолжать читать файл. Но это все хуйня.Это еще зачем? И как ты найдешь нужное число среди 20 строк? > Перегоняй файлы в csv, импортируй их в sqlite3 БД и работай как с нормальной БД, а не страдай хуйнец с парсингом.Я это делаю чисто для фана, так что мне не всралась субд, я хочу сам на С написать программу. Так, делаю наброски. Сделал преобразование введеного числа в массив. Это получилось. Но у меня не получается закончить while - при условии ch! = EOF цикл продолжает выдавать неизвестные символы бесконечно. Опытным путем выяснил что неизвестному символу соответствует номер 255 и с условием ch! = 255 цикл завершается. Откуда берутся эти символы, если в текстовом файле последний символ - Z? Вот сам код:#include <stdio.h>int main(void){char num[5];int ch;int i;char mm[3];char temp[100];puts("input: ");gets(num);for (i=0; i<3; i++){ mm = num; printf("mm[%d]=%c \n",i , mm);}//основаFILE * fp; fp = fopen("wicked.txt", "r"); while(ch != 255){for (i=0; i<80; i++){temp= getc(fp);ch= temp;putchar(temp);}}printf("\n""%d", ch);scanf ("%d", &num);return 0;}
>>1140425Вот что на выходе получается. Как я понимаю, эти неизвестные символы появляются после того как у цикла for закончились символы из файла, но он все равно делает цикл 80 раз, верно? Что с этим делать? Сделать условием цикла ch! = 90 (что соответствует заглавной Z) не получается, цикл на Z не останавливается.
Обмазываюсь GDB, хотел бы вкатиться в системное программирование и обратную разработку. Gdb виндовой, шел в комплекте с mingw. Вопрос - какого хуя не работает attach [pid] когда я пытаюсь подключиться к половине софта? Can't attach to process и все. Восьмерка x64, я админ, всё норм.
>текстовый файл вида номер - текст>используй регулярные выражения> Перегоняй файлы в csv, импортируй их в sqlite3 БД и работай как с нормальной БДkek
>>1140429Сделал вывод значений через каждые 3 символа. В файле первач строка написана как 001 fi
>>1140470Какого хуя мой пост порезался? В файле написано "001 fi
>>1140475Сука! Какого хуя мой пост порезался? В файле написано "001 fi
>>1140292Анончик, подскажи, куда складываются скомпилированные программы в этом c4droid? И как их потом запускать? Хелпа или фака нет
>>1140470>>1140477>>1140483в армии? в тюрьме?
>>1140491На том свете...
>>1140491Нет, просто угорел с идеи писать на си прямо на телефоне. Но по ходу не работает ни хера.Вроде разобрался с компиляцией и сохранением. Надо экспорт делать. Как теперь запустить программу с параметрами?
>>1140495Хуясе, работает. Лонгтап на "Run" даёт вводить аргументы.
>>1140491>в армии? в тюрьме? вна украине
>>1140456> я админУ тебя команденая строка с elevated привилегиями (от админа) запущена, или просто по клику?
>>1140509Вот тоже про это думал, запускал от админа - ноль эффекта.
Ебанёшься с этими вашими сями.Короче, пишу лабу в студии, в дебажном режиме. Уже всё полностью оттестил, всё работает, включаю релизный. И тут хуяк, 50 ошибок при сборке, про не несовпадение типов и про не заполненные заголовки.Ок, исправил, запустил, всё вроде норм. Переставляю режим сборки снова в Debug, пытаюсь собрать, а оно хуяк и вон что выдаёт, типа константы несколько раз определяются. Как так получается я не очень понял, и почему то оно выдаётся только в режиме сборки Debug x86. Под 64 спокойно собирается. Вот как так то?
>>1140681Хуй знает как, но оно решилось. Ссылки я нигде не убирал, может просто пересборка помогла. Интелисенс с сями просто отвратно работает, всё таки
>>1140470>>1140429Бамп вопросу
>>1140681>студииговноед, уходи
>>1140713ЯННП, что ты хочешь сделать, где проверка на EOF, зачем странные присваивания массива к массиву, что у тебя там за компилятор, и вообще, почему ты делаешь это на телефоне, а не как люди. Попробуй выложить на пастебин исходник, текстовый файл и что ты хочешь получить, а мы обосрем.
Зачем Си когда есть С++? Я не хочу затевать холивар, мне просто искренне интересно.
>>1140986Затем, что выучить Си возможно. Крестов целиком не знает даже WG21.
>>1140990Значит если смотреть объективно, то особой разницы нет?
>>1140995Ну я предпочитаю понимать, что в коде происходит. В крестах код может выглядеть просто, но иметь овердохуя подводных камней.
>>1141001А в плане востребованности? На рынке труда кого больше ищут и кому больше платят?
>>1141002на "рынке труда" никого уже последние года не ищут, а выбирают лучших
>>1141003А зарплата у лучших крестовиков или сишников будет лучше? То есть лучше не вкатываться в программирование и идти в каких-нибудь экономистов?
>>1141004Не советую вкатываться в си или кресты, если не интересует эмбеддед. Возьми что-нибудь более востребованное. Посмотри вакансии - сейчас кругом веб.
>>1141006Это до очередного доткома. Нейроночки, вычисления для суперкомпьютеров и хуева тонна других областей, где этот веб на хуй не нужен. Самое главное туда попасть, но если учишь си на харкаче, то конечно лучше вкатываться в веб. Серьезные люди в универ ходят для наработки связей, чтобы на практику куда-нибудь взяли на проект. Все эти мантры про универ не нужен — бред. Универ нужен для социализации, а знания все великие программеры так-то черпали не толькл от преподов или криг, а наступая на грабли.
>>1141008Дотком? Was ist das?
>>1141009Вот и выросло поколение. В гугол животное.
>>1141010Сука, я блять понимаю, что такое доткомы, просто оно никак не вписывается со всем остальным твоим предложением, поэтому я попросил узнать твою локальную интерпретацию этого понятия, епты.
>>1141008> где этот веб на хуй не нуженЭто ты так считаешь. Всякие низкоуровневые либы пишутся не так уж и часто, а вот дергать за них можно хоть жаваскриптом.
>>1141012Рынок переполнен нахуй ненужными веб макаками. Спрос ниже предложения. Демпингуют все кто только может, даже лебедев.Косвенно об этом и ютуб говорит, признавая факт, что реальные покупатели рекламы уходят, и банеры в адвордсе а-ля улетный лендинг за 10к ₽ под ключ.
>>11410021С
>>1141018> Рынок переполнен нахуй ненужными веб макакамиРынок может быть переполнен сайтами. Но вот вакансий для макак овердохуя, а вакансию для сишника ты хуй найдешь сейчас. И даже если найдешь, окажется, что ты не соответствуешь заявленным требованиям.
>>1141015Это ты переоцениваешь. Есть пласт областей, где это ненужно. Теже драйверописатели или бигдата или узконаправленный софт для управления работой схд под гипервизором...
>>1141022Так вакансии все за еду, а «писать» три вопроса на стаковерфлоу + 2 плагина из npm.Касаемо Си вакансий такая ситуация, потому что их и на рынок не выводят, ибо общение как в секте.Хочешь работу? Ходи на митапы сишников, светись как только можешь и рассылай резюме сам в конторы.А почему не соответствуешь, знаешь? Потому что сишники это в основном задроты матана, там особый круг общения, который нужно поддерживать, чтобы не деградировать.Вы можете мне не верить и шуточки шутить, с картинками смешными, но знайте, в первую очередь живое общение в среде себе подобных складывает о вас впечатление, а не ваши копипасты в свой гит.
>>1141028> Так вакансии все за едуЦенник примерно одинаковый, что для фронтэндера, что для байтоеба.> сишники это в основном задроты матанаИстории все охуительней. Детектирую студента, бывшего олимпиадника.
>>1141036Будь по твоему.
Как заставить gcc высрать ту часть препроцессирования, которую он смог сделать, даже если <govno.h> не найдено, и еррор посему в итоге.
Как в C включить поддержку русского языка?
>>1141058cpp file.c (препроцессирование в stdout), cc -E file.c (то же, что и предыдущее), cc -save-temps file.c (искать file.i рядом с file.c)>>1141061> включить поддержку русского языкаЗависит от ОС. Гугли setlocale +названиеос.
>>1141065Мне нужно в андроиде подключить русский язык.
>>1141061setlocale(LC_ALL, "Russian");
Какими IDE кто тут пользуется?
>>1141128никакими
>>1141131Лох
>>1141128Какими, к хуям, IDE? Vi наше всё. В другом терминале запускаю скрипт сборки, в третьем в links тред открыт.
>>1141135А ещё есть Ctrl+z, bg и fg что позволяет часто ограничиться одним терминалом.
>>1141138>терминалCMD KRUTO
>>1141138%
>>1141139Что ты сказать-то пытаешься?
>>1141128emacs
Линуксовая прога на входе получает символы вида \u0424. Как их проще всего декодировать, чтобы потом вывести в читаемом виде?
>>1141305Именно в таком виде? Ну так декодируй, просто же. Сматчишь \u, проверишь, что потом 4 isxdigit() подряд, и либо сам число посчитаешь, либо strtoul(str, 16). Ну а потом можешь либо printf c %ls и массив wchar_t, который у тебя получился, либо в UTF-8 закодируй и обычным %s выводи.
>>11413051. Ну типа берёшь такой вот питоновский код https://wandbox.org/permlink/Ockamqto6hfwc3hEs = input()print(s.encode('utf-8').decode('unicode-escape'))2. Потом типа ищёшь/пишешь реализацию popen2/3 на C3. Споунишь (проверочное слово spawn) из C-проги процесс питона, отправляешь символы вида \u0424 ему в stdin, забираешь резульатт из stdoutПроще некуда.Альтернативный вариант: встраиваешь в свою прогу интерпретатор питона через его C API.
>>1141077Не работает нифига.
>>1141319Спасибо, получилось.
>>1141077А в винде как сделать? Вот этот код #include <stdio.h>#include <locale.h>int main(int argc, char argv[]){ setlocale(LC_ALL, "Rus"); printf("Привет мир! \n"); int a; scanf("%d", &a); return 0;}выдает то что на скрине
>>1141607А в винде все сложно. Зависит от компилятора. Основная проблема в том, что виндовая консоль не умеет в UTF-8. Варианты:1) Сохранить исходники в кодировке Windows-1251, а не в UTF-8. Сделать setlocale(LC_CTYPE, "1251") или setlocale(LC_CTYPE, "866").2) Использовать гораздо менее известный, зато немного более правильный способ: исходники в UTF-8, локаль Rus, но с ключиком -fexec-charset=cp866 Для этого тебе понадобится гцц или шланг (в вижуалстудио тоже можно задать Execution Charset в свойствах проекта, как в других компиляторах - не знаю).
>>1141621>Сохранить исходники в кодировке Windows-1251, а не в UTF-8.Это как?>Сделать setlocale(LC_CTYPE, "1251") или setlocale(LC_CTYPE, "866").не помогает.
>>1141627> Сохранить исходники в кодировке Windows-1251, а не в UTF-8.> Это как? Боже. Ну покажи скриншот своего редактора. Где код пишешь?
>>1141629В CodeLite
>>1141631сразу уточню, что менял в правом углу UTF-8 на Windows-1251, но результата это не дало.
>>1141631Вон там справа внизу окна у тебя UTF-8 написано. Попробуй потыкать, хуй знает. Справку по редактору найди.
>>1141640>>1141637
>>1141642Ну хуй знает, должно работать.
>>1141607Запускай в powershell, там вроде проблем нет с ютф-8. Как бы повершелл в дрисятке по умолчанию идет вместо смд.ехе, на хуй ты это говно мамонта откопал?
>>1141739> там вроде проблем нет с ютф-8Там есть проблема. Оно умеет в CHCP 65001, да, но по умолчанию там вообще какая-то хуета, даже не 1251/866. Каждый раз менять кодировку заебешься, впрочем как и рассказывать пользователям, почему у них крякозябры. К тому же, шелл, который иногда открывается сразу, а иногда при старте неведомо чем занят секунд по пять, шеллом называться не имеет права.
>>1141754По 5 секунд он открывается подгружая модули. Даже на ссд в рэйде и 32 Гб ОЗУ. Но это майкрософт, у них это норма.Касаемо кодировки боюсь соврать, но в шелле более полная поддержка ютф-8. Даже переключать не надо. Элементарно делаешьdir /s . > report.txtИ смотришь хекс редактором на заголовок файла или в текстовом редакторе.chcp это архаика из смд.ехе.Ставь альтернативный шелл.
Здаров, ушлепки. Зашел перднуть в ваш тред. Ненавижу С.
>>1141769Красава, спасибо, что отметился, а теперь катись к хуям.
>>1141768> Но это майкрософт, у них это норма.сmd.exe по-прежнему запускается мгновенно. У того же самого майкрософта.> dir /s . > report.txtИ нахуй нужен "шелл", если он не может даже отображать текст?> chcp это архаика из смд.ехе.exe-файлы, у которых стоит /SUBSYSTEM:CONSOLE, открываются в виндовой консоли, а не в этом дерьме, которое к ОС даже прикрутить нормально не удосужились. В консоли нет UTF-8, в консоли кодировки по-прежнему переключаются через chcp (и соответствующими функциями API). Когда в качестве системной консоли прикрутят павершелл, ты будешь рассказывать об архаике. Но не раньше.> Ставь альтернативный шеллНичем не отличается от GUI-приложения, которое рисует свою "консоль" самостоятельно. И настолько же нинужно. Ну то есть, для разработчика очень даже норм, если программа, которая пользуется чем-то нестандартным, дальше его машины не уйдет. ConEmu охуенный, умеет и в ANSI-последовательности, и в UTF-8, и даже в символы двойной ширины.
>>1141739А как сделать чтобы мой экзешник открывался в повершелле?
Такой вопрос - можно ли получить текущее значение даты?
>>1141607Поставь себе бубунту в WSL
>>1142194Не знаю о чем ты. Я хочу чтобы моя программа переставала работать после определенного периода. Это можно сделать в С?
>>1142048Конечно нет. Как ты себе представлешь?Это что-то из области фантастики.
>>1142221По мне так, надо сделать следующую схему:В программе ставим пока не узнается время панель загрузки и просим подождать некоторое время. Пользователь не выдержит и свернет ее. Но надо оформить дело так, чтобы она продолжала пахать в фоновом режиме (то есть просто уменьшить координаты окна до 0).Затем надо поставить хук, который будет считывать со страниц браузера при помощи регулярки числа похожие на значения времени. Потом уже получить это значение и дело в шляпе. Задачка-то то простая.
>>1142235Может надо написать драйвер, который будет запрашивать у биоса данные о времени?
>>1142221>>1142235Вы сейчас серьезно? Си никак не может узнать текущую дату?
>>1142221Нет, ты мылишь загнанно в рамки своих мыслей, освободись и найди *к р е а Думаю, что лучшее решение - написать нейросеть которая по географическим координатам и падению света\положениию солнца будет определять время дня. По крайней мере, мы так получим платформонезависимое ПО.
>>1142239Мог бы проиграть, а не дуться тут
>>1142239Нет, все проще. Просто обратись по адресу памяти где находится данные о значении времени в ОС и считай оттуда.
>>1142245Ты ебу дал? Надо просто написать скрипт на JS, шарпее и интегрировать его с кодом на Си.
>>1142245Дамп ядра с опорой на Meltdown подойдёт?А как потом парсить?
>>1142243Что касается мобильных платформ, то одним из решений является фиксация момента вхождения в ночной режим.
>>1142250Не будет работать на процессорах AMD! Слишком костыльное решение, лучше какой-нибудь >>1142235
>>1142255А твой хук будет работать на любом браузере?
Пиздец петросяны повылезали.
>>1142259Будет написан хук под все браузеры. Хук лишний написать можно, а твой способ как не старайся не сделай универсальным.
>>1142261Но ведь есть ещё Spectre.
>>1142262А строковый молот?
>>1142262Я слышал, что библиотечная функция основана как раз на ней.
>>1141780На conemu я и намекал.По всем остальным пунктам — пошел ты на хуй мудак ебаный, нашелся тут умник хуев. Смд.ехе архаика признано даже в майкрософте. По умолчанию в дрисятке запускается именно повершелл. Как там криворукие макаки пишут, что у них смд вылазиет я хуй его знает, читать мсдн лучше надо. Майки обновляют свои гайды по написанию приложений. Хули ты петух вонючий тут раздухарился я в душе не ебу. Сажи тебе педроте недоношенной.
Как вам CLION?
>>1142048time.h: time, localtime, strftime - вот это все.
>>1142283Ты сейчас качаешь последнюю вижуалстудио и пишешь нам консольное приложение, которое при даблклике запускается в "консоли" повершелла и выводит русский текст, закодированный в UTF-8. Можешь читать MSDN лучше, можешь даже прошение швятому балмеру написать. Не получится - уебывай со своим повершеллом, откуда пришел.
есть ли какой нибудь задачник по си ?а тов у прата слишком много водыни где ни могу найти справочник по си на русском может есть где?
>>1142694Codeforce.com
https://ideone.com/NFcfkaчто не так коомпилятор жалуется на \на цикл getchar хотя правильно на писалвызов я напишу учю си в codeBlocks
>>1142763>учу си в codeBlocksне твоё это, забей
>>1142763Даже я, прочитавший недавно 4 главы праты вижу с ходу косяк. Хули ты в символьную константу пытаешься запихнуть строку?
>>1142768что ты меня путаешь она и будет принимать по 1 символу пока не встретит конец
>>1142770Йобу дал? Схуяли у тебя S1 и S2 будут принимать более 1 символа?
>>1142772стого что%с это символа %s строка ты еыбу даля уже делал упражнения с этим кодом все принимает
>>1142776Ебать, ты путаешь тип переменной и вид данных, которые выводишь.
>>1142763> что не так коомпилятор жалуется на \на цикл getchar хотя правильно на писал>prog.c:12:1: error: function definition is not allowed here>{>^>1 error generated.
>>1142787>вызов я напишу
>>1142787Да у него там пиздец ошибок, скобок хуй пойми где и как понаоткрывал.
>>1142776Ты объявил две переменные размером в один символ. Пытаешься взяв указатель на переменную размером в один байт писать туда строку. Не надо так. Во-первых, тебе нужно использовать указатели или массивы (указатель звездочка после char массив - после названия переменных квадратные скобочки с числом элементов внутри).Во-вторых, если используешь указатели, то тебе нужно выделить память функцией mallocВ-третьих, если ты хочешь читать строки хуйпойми какой длины, то scanf тебе не подойдет и тебе нужно писать велосипед вроде такого:https://stackoverflow.com/a/16871702
>>1142793> если ты хочешь читать строки хуйпойми какой длины, то scanf тебе не подойдет А хули нет? Делаешь массив как long Long и все.
>>1142694Там нет воды в задачах, они в конце каждой главы перечислены. А дополнительно на любом программистском форуме можешь найти задачи, которые там ставят вопрошающие.
Аноны, я пишу код в sublime, а потом компилирую через gcc. Это по понятиям?
А если у меня есть переменная типа short:short value = 1;Если я прибавлю единицу, то есть:value = value + 1;То она приведется в тип int?
>>1143029Да, я вообще tcc компилирую
Как в gcc изменить название компилируемого файла на винде?
>>1143032Больной ублюдок
>>1143030У тебя переменная типа short, или макаба съела указатели? Нет, она останется short, но вычисления будут идти так: value = (short) ((int)1 + (int)value) (естественно, в реальности компилятор может и в 16 битах посчитать, если будет уверен, что поведение будет полностью аналогично).>>1143029Вполне по понятиям, можешь билд-систему в саблайме настроить на gcc или на мейк-файлы - получишь подсветку ошибок.>>1143034> в gcc изменить название компилируемого файла-o filename.exe
>>1143047>подсветку ошибокО, тогда студия вообще не нужна будет.
Посоны, как лучше всего запомнить синтаксис? Где найти задачки и попрактиковатьс?Да, он сейчас используется?
>>1143032> Посоны, как лучше всего запомнить синтаксис?Пиши код. Часто пиши код. И не пренебрегай чтением чужого.> Где найти задачки и попрактиковатьс?Несколькими постами выше >>1142811, алсо форчонговские пики рулеточками для кодеров (может быть, кто-нибудь скинет?).> Да, он сейчас используется?Нет. Сейчас все принято писать на JS. Даже твоя ОС написана на JS, даже интерпретатор JS написан на JS.
>>1143101>>1143098Промахнулся.
>>1142694мы тебе скажем, а ты еще их сделаешь, устроишся на работу и будешь создавать конкуренциюдавай как нибудь сам поищи в интернетах
>>1143103Спасибо
Не могу запомнить массивы и циклы while и do while. Есть инфа подробнее?
>>1143117Страшно представить что будет на указателях.
>>1143117Практика, только практика спасёт отца русской демократии. Находишь те же самые примеры и вручную их вводишь. Не тупо копипастинг, а именно ручками и головой.>>1143134Проблема только в методике обучения. все думают, что достаточно прочитать какой-нибудь талмуд и уже станут ебашит код с закрытыми глазами, а вот на практику в процессе изучения забивают.Вот типичный представитель >>1142694 смотрю в внигу, фижу фигу.
>>1143106А я бы хотел, чтобы люди писали новые полезные библиотеки и прочие проги, ибо у малого количества людей на все ресурсов не хватит.
Кто нибудь мне может объяснить как это > https://icculus.org/physfsГавно работает, какой то поехавший запихал в файл данные, я их никак не могу достать, ничего не помогает, binwalk и ещё кучу мокрописек опробовал
Приведение типов у malloc нужно для того, чтобы самому настраивать арифметику указателей, или что?
>>1143106>устроишься на работу>работу>CиПроиграл.
>>1143645Антоны, все действительно так плохо?
>>1143657нет
>>1143664пидора ответ
>>1143679Пидор пидорка видит из далека.
>>1143684Пидор пидорка, видящего пидорка издалека
>>1143686А ну блядь, гомодрилл вонючий, не проецируй.я вообще мимо, решил дровишек подкинуть, а ты в свои уже записал
Признавайтесь, указатель это структура такая, пусть и неявная?Ведь когда мы приводим его к type, мы по сути влияем на его смещение при переходе от type[n] к type[n+1], вот только где нужные для этого перехода данные хранятся?
>>1143728В большинстве случаев это целое число.Иногда может быть и структура, гугли fat pointers
>>1143606У этой функции возвращаемый тип — "void звёздочка", т.е. указатель-на-что-угодно. Его и приводят к тому типу, какой нужен в программе.
>>1143733Целое число это адрес в памяти.А как его смещать, если я хочу двигаться по индексам элементов? Разве не нужно ещё число?
В чем прикол этой картинки? Ведь код верный же , не?
>>1143741На процессорах до 286 было нужно. Теперь не нужно.
>>1143744Хыхы.В if не сверяется, а приравнивается к true, а потом возвращается значение, присвоенное этой var.Т.е. при if у тебя это становится true.Проиграл, в общем-то.>>1143745Magic.
>>1143744Код-то верный на все сто, но вот...
>>1143747Да пока разглядывал, уже сам заметил это, но все равно спасибо.
>>1143687Зачем обижаешь так?
>>1143740А по идее можно и не менять тип?
Для сишки желателен линукс?
>>1143762Строго обязателен.
>>1143764Что делать если нет возможности?
>>1143766Для начала сочинить ситуацию, когда её реально нет.
>>1143767Батя отпиздит за даулбут на ноуте.
>>1143767Что не нравится ему? Норм код же.
>>1143774Забыл приклеить...
>>1143776Попробуй это.cpp -v /dev/null -o /dev/nullДолжен получить директории, в которых компилятор ищет хедеры.В одной из этих директорий должен быть stdio.h
>>1143782>cpp -v /dev/null -o /dev/nullИ потом надо будет настроить поиск хедеров ему?
>>1143741>А как его смещать, если я хочу двигаться по индексам элементов? Разве не нужно ещё число?Компилятор такой смотрит-смотрит на тип указателя и хуяк - видит какой тип и такой хуяк тут же ассемблер и смещение такой запиливает на нужное количество байт. https://godbolt.org/g/nCwpoS
>>1143753Ты не сможешь его разыменовать
Собираюсь вкатываться в программирование. Для себя. Дедлайнов нет, поэтому времени на изучение будет сколько угодно. Что лучше выучить: C или C++? Опытные аноны, есть ли существенная разница?
>>1143762Нет, особой разницы нет. В macOS будет человеческий интерфейс вокруг, а в Windows человеческие отладчики.>>1143782Зачем девнулл, если можно таким же образом cc -v запустить на файле, который компилируется, и посмотреть, где оно ищет и как? Подозреваю, что анон вообще не поставил glibc, но не представляю, как он смог этого добиться.
>>1143786Вообще, по дефолту в FHS для C-хедеров числится /usr/includeЭто если проблема в этом, вообще.А так, да, если их каким-то чудом нет, то придётся как-то настроить.>>1143787Это смещение часть области кода чтоли?Или просто рядом со статиками валяется в программе под каким-то безымянными переменными?
>>1143790И ещё двадцатью способами, но я спастил с доков gcc.
>>1143792> Это смещение часть области кода чтоли?Это смещение вычисляется в рантайме (индекс умножается на размер типа). Соответственно, "хранится" оно в инструкции (или нескольких).
>>1143800Я не про то "смещение", о котором ты говоришь: > индекс умножается на размер типаЭто я вообще бредятину какую-то получу.Смещение элемента относительно начала массива? Но это свойство элемента массива.Я про непонятное свойство указателя как такового. Есть где-то инфа, что если ptr++, то на столько единица int'a увеличивается, причём ((char ) ptr)++, это не ((long ) ptr)++, потому что где-то есть неявный параметр, которую эту дельту задаёт при инкременте.Алсо,> рантайм> размер типаЭто тоже не понял. sizeof(type) не рантайм, ЕМНИП.
>>1143801> на столько единица> на столько единиц
>>1143801>Я про непонятное свойство указателя как такового. Есть где-то инфа, что если ptr++, то на столько единица int'a увеличивается, причём ((char ) ptr)++, это не ((long ) ptr)++, потому что где-то есть неявный параметр, которую эту дельту задаёт при инкременте.Да, называется размер типа на который ссылается указатель. и адресная арифметика учитывает это. поэтому указатель на чар при добавлении 1 увеличивается на 1 байт, указатель на шорт - 2, на инт - 4, на лонг - 8, на структуру, которая содержит внутри int x,y,z,w - 16.
>>1143807> учитывает этоЯ же говорю, чудеса какие-то.Это типа не лезь оно тебя сожрёт?
>>1143808Если в арифметическом выражении встречается указатель, включается арифметика указателей, в которой единица равна размеру типа. Поэтому при прибавлении или вычитании чего-то к указателю предварительно считается офсет, равный n * sizeof(type). Если n переменная, оно считается в рантайме, а sizeof(type) кодируется виде константы в инструкции. Если n константа или константное выражение, то перемножение делается на этапе компиляции и втыкается (в инструкцию опять же) уже готовый офсет.
>>1143813Вот сейчас уже полностью понятно стало.
>>1143808>Я же говорю, чудеса какие-то.Никаких чудес нет, для этого и нужены адресная арифметика и указатель на определенный тип чтобы самому не ебать мозги на сколько байт увеличить адрес чтобы получить следующий элемент. И по этой же причине компилятор бьет тебя по рукам если ты присваиваешь указатель одного типа к другому без явного приведения типа.
>>1143789Новичку лучше с Си
Есть ли замена монструозной студии для си?
>>1143821Если сделаю приведение к типу char для норм побитовошо смещения, то все ПИЗДАТО?
>>1143830gcc/clang и notepad++Лучше ещё не придумали.
>>1143830Любой блокнот с подсветкой синтаксиса, который тебе нравится. Пока ты новичок, и тебе малоинтересны всякие профайлинги и рефакторинги, никакие IDE тебе нинужны. А когда понадобится - сам подберешь нужное.
>>1143832А что не сублайм?
>>1143831Побайтового. Да, можно считать в байтах таким образом. Но не на всех платформах можно по получившемуся таким образом указателю прочитать int, например, потому что может требоваться выравнивание (т.е., адрес инта, например, должен быть кратен sizeof(int)).
>>1143839Первый раз слышу
>>1143843Толсто.>>1143839Саблайм очень неплох, пользуюсь, зависимость есть.
>>1143843Sublime text. Под пиво норм заходит.
>>1143846Зашёл на сайт их, мне написали, что для Питуна.
Если я буду размещать переменные в памяти без промежутков, то что мне будет?
>>1143848Вечные массивы, и сегфолты по праздникам.
>>1143847Хоть для чего. Подсветка для си есть по дефолта, а подсветка ошибок добавляется парой кликов установкой плагина.
>>1143840Допустим я таким образом смещаюсь по памяти. Переменная целочисленная занимает несколько байтов же? А при разыменовывании будет возвращаться один байт. Или я не вгоняю?
>>1143855> Переменная целочисленная занимает несколько байтов же?Несколько и будут читаться.Если выравнивание не требуется, то при итерации по 00 01 02 03 04 05 06 07 с инкрементом в один байт будут возвращаться 0x03020100, 0x04030201, 0x05040302 итд. Почему в обратном порядке? Гугли endianess (little endian).
>>114385>несколько и будутПрости за тупой вопрос, но как так выходит?
>>1143856>>1143860Обосрался
>>1143860Прости за тупой вопрос, но как может выйти по-другому? Ты процессору дал инструкцию - читать 32-битную переменную (допустим) по такому-то адресу. Ну он и читает. Память - набор ячеек, о хранящихся внутри данных она ничего не знает, как и процессор не знает, зачем ты читаешь свои байты - интерпретирует данные программа.
>>1143790> Подозреваю, что анон вообще не поставил glibcБез glibc система не запустится, лол. Это как не поставить ядро.
>>1143863Я не имел в виду сошки. В дистрибутивах бывает libname и libname-dev. В первом шаред-либа, во втором хедеры и статическая либа (если есть).
>>1143862Спасибо большое, умный человек.
>>1143863Есть дистр на асме целиком, так-то
>>1143869Дистр чего?
Как перестать пиндосам обманывать себя и начать работать с физической, а не виртуальной памятью.
>>1143871Ядро линукса*
>>1143744===Опа! И ты уже труп!
>>1143878Сам его на асме переписывал?
>>1143882Мой батя переписывал....
>>1143772Виртуалочка
>>1143885На флешке держу. Так удобнее
>>1143888Что удобнее? Дрочить ребут туда-сюда?
>>1143892Нет ощущения что шинда следит за тобой.
http://www.learn-c.org/Как вам такой ресурс? Вроде доходчиво объясняют. Не знаю какой стандарт, но думается, что нечто древнее, ибо встречал на просторах how to c in 2017, и там типы данных уже идут 64 разрядах уникода (фейлю скорее всего с названием ибо нуб) uint_64 как то так объявляют тип переменной вобщем.
>>1143901Судя по количеству уроков - слишком сжато объясняют. Но если нравится, то почему бы и нет?
>>1143822Спасибо за ответ.
Бумпе
Как работать с физической памятью?
>>1144130Через MMU на ассемблере.
>>1144170Можно ли так убить брата?
>>1143892Быстрее пашет.
Ребят, как на qt скачать html код с какой нибудь страницы. Использовал qnetworkaccessmanager, но он слизывает просто страницу, а не хтмл ее.
>>1144130Ну если тебе достаточно 1 мегабайта, то загружайся в дос, открывай любую борландовскую парашу и хуячь. Если недостаточно - то сорян, 2^32 и 2^64 байт памяти доступны онли в защищенном режиме с виртуальной памятью. Даже ядро OS и драйвера страдают и в нем работают, просто у них физическая память отмаплена другая, вместе с отображаемыми в память устройствами и привелегий больше. И так на большинстве процессоров годом выпуска позднее 1985 года. Ну или микроконтроллер бери, там виртуальной памяти нет.Единственное что можно сделать - отмапить в таблице страниц адреса физическая -> виртуальная чтобы были 1 к 1.
Допустим у меня объявлена структура, которая содержит типы int, float и указатель на тип char. Выделяю память для экземпляра такой структуры, затем через strndup() выделяю память для строки, присваивая указателю на char в структуре. Вопрос: если я сделаю free() для структуры, то память которая была выделена через strndup() тоже освободится?
>>1144210статику или динамику?
>>1144254да
>>1144130в современных ос общего назначения - пишешь драйвер ядра
Изучаю Си по этому ресурсу: https://metanit.com/cpp/c/
>>1144295зачем?
>>1144314Хз, там меньше воды чем в книгах обычных.
>>1144323зачем си изучаешь?
>>1144331Раньше учил плюсы, но внезапно понял, что я использую и люблю в них лишь подмножество Си.
»1144261Объяснишь в чем разница? Нужен именно html код страницы, с тегами и тд, чтобы парсить
>>1144261Объяснишь в чем разница? Нужен именно html код страницы, с тегами и тд, чтобы парсить
>>1144346я спросил: с какой целью изучаешь си?
>>1144350>»волшебник! как ты это сделал?
>>1144351>Объяснишь в чем разница?неа :) не помогаю вкатывальщикам :Pкак нибудь сам выкарабкивайся
>>1144356Хуй знает, просто делать нехуй.
>>1144363дон хуан всегда подсмеивался над кастаньедой от того что тот знал кучу ненужной для выжывания информации
>>1144365>ьбля
>>1144365То есть ты хочешь сказать, то что работы не си не найти и мне придется скоро укатиться в веб работать макакой, копипастя примеры из доков? То есть ты хочешь сказать, что сейчас я незачем трачу все свое время?То есть ты хочешь сказать, что меня ничего не ждет и если я найду работу, то точно не на ламповом си?
>>1144366Кастаньеты! Эспаньола!
>>1144367Да, все так и будет.
>>1144394А на плюсах?
>>1144394Аноны, он меня обижает!
>>1144397На плюсах ситуация чуть лучше, но в долгосрочной перспективе будет то же самое.
>>1144401Почему? Разве байтоебы не нужны? Гейдев не нужен?
>>1144404>Разве байтоебы не нужны?Особо не нужны. В регионах и мухосранях вакансия байтоеба - большая редкость, причем все ищут сениора, а джуны байтоебы уж точно никому не нужны.>Гейдев не нужен?Гейдев в России и СНГ - написание игр под андроид типа три в ряд с рекламой и донатом. Если хочешь в гейдев - учи unity и c#.
>>1144254Нет. free() структуры освободит только память, выделенную для структуры. А раз внутри strndup отдельный маллок, то на этот маллок тебе тоже нужен free().
>>1144404бля, зайди на hh, в поиске резюме набери "программист c++" и охуей от контингентапросто сделай этоты тоже хочешь таким же стать к тридцати?
>>1144417зачем ты отвечает заведомому вкатывальщику?
>>1144419Затем, что мне не сложно. Алсо, если молчать или траллить нубов, тред умрет.
>>1144419Приведи пример достойного вопроса от "невкатывальщика".
>>1144440volatile struct vs. офсеты и REG_READ/REG_WRITE для регистров микроконтроллера. Алсо, битфилды vs. дефайны и сдвиги для них же. Вроде бы и особых знаний для понимания проблемы не требуется, но и золотой середины нет, у всех решений свои недостатки.1144417
>>1144401>>1144404В цпп треде на днях читал пост чела со стажем в с++, он в веб укатил из-за отсутствия перспектив
>>1144444Пентипл?
>>1144446Это я.
>>1144420>тред умретто что мертво, умереть не может
>>1144466Чмо мелкобуквенное, ебало свое завали и сиди молча.
>>1144468
Подскажите, а есть какая-то книга рецептов и приемов для создания больших проектов на си?
Сап, аноны. Хочу немного оптимизировать компиляцию с objcopy, но objcopy -O ihex *.elf file.hex не срабатывает, и мне приходится ручками вводить objcopy -O ihex file.elf file.hexПробовал прописать objcopy --wildcard -O ihex file.elf file.hex, но это тоже не сработало.Может кто-то объяснить мне как в objcopy правильно использовать wildcard?
Кто-нибудь понимает в asm extended? Как мне вытащить значения из стека в массив?https://pastebin.com/LA6HBKYH
>>1144878Лол. Ты бы подтянул матчасть по командной строке сначала. wildcard-ы раскрываются shell-ом, если есть такие файлы.Опция --wildcard у objcopy — это про использование wildcard-ов для имён символов в файле.
>>1144674>приемов для создания больших проектов на си?Вот главный приём.
>>1144882Из какого стека? Того, в котором выполняется твоя функция?Тогда тупо объяви в ней локальный не статический массив, и выйди за его границы при чтении.мимо-школьник-кун
>>1144674> больших проектов на си?нужно побольше обмазываться макросами чтобы делать костыли для atd и кодогенерациии еще как можно больше структурок и указателей на функции чтобы делать костыли эмулирующие ооп - интерфейсы, полиморфизми прочие сладкие вещи
>>1144956Я бы еще добавил больше генераторов кода, особенно там, где надо синхронизировать бойлерплейты между собой.
>>1144674Ебля в жопу в попытке сымитировать ООП и прочие инструменты для разработки больших проектов.
>>1144916Ну и как мне тогда конвертировать любой файл с расширением .elf в .hex?
>>1144986Мэйкфайл напиши и правило для .elf.hex.
>>1144961>в попытке сымитировать ООПНе пробовал устроится стоматологом-проктологом?Что бы сымитировать на сишечке(именно сымитировать, а не реализовать) ООП надо быть тем ещё проктологом.>>1144919Это не приём, а уже объект.>>1144882>Как мне вытащить значения из стека в массив?Чьего стека? Где конкретика?
>>1145003>сымитировать на сишечке(именно сымитировать, а не реализовать) ООП надо быть тем ещё проктологомда наверное в каждом крупном проекте ваяют полиморфизм на структурках и указателях на функции, теми же способами делают интерфейсы, теми же способами делают наследование интерфейсовну ты че
>>1144986for f in *.elf ; do objcopy -O ihex "$f" "${f%.elf}.hex" ; done
>>1145023Спасибо
>>1145003А из моего банального примера это не понятно какого стека? Программного стека указатель на вершину которого лежит в регистре процессора.
>>1145068Животное, ты слышало, что у процессора может быть больше одного стека и больше одного регистра, с указателем стека?
>>1145093Забей школьник, это не для тебя, ты слишком тупой и несёшь хуйню, тем более что вопрос уже решён.
Оракловский компилятор нормальная тема?У меня стоит студия 15( но там по-моему нельзя в Си, перешёл бы на 17, но у меня не ставится из-за какого-то говна)есть ещё нетбинс
#define TEST(x) \#ifdef ERROR \(x) \#endifПример выше не компиляется. Как сделать так, чтобы компилялось? Я хочу проверку в макрос запихнуть.
>>1145143Хочешь, чтобы макрос раскрывался в макрос? А второй макрос кто будет раскрывать? Пушкин?
>>1145172Чет гугол ничего не говорит, про такую оптимизацию в компиляторе. gcc -oPushkin — гуглу неизвестно :-/
кр
>>1138954 (OP)Есть ли хорошие гайды или книги про stdatomic? Чтобы пошагово от простых примеров к сложным, а то для pthread всего навалом, а про stdatomic описание в две строчки или код на 2000 строк.
>>1145143Это так не работает. Вытащи ифдеф наружу и сделай две версии TEST внутри него. Алсо, есть вариант условно дефайнить ERROR_FLAG в 1 или 0 соответственно, и макросами матрчить TEST и ERROR_FLAG c TEST_0 и TEST_1 соответственно. Хотя это не твой случай, в твоем случае это только увеличит количество телодвижений. А вот если макросов, подобных TEST, будет сильно дохуя, можно задуматься.>>1145111В студии в Си можно, вы заебали. Сохраняй файл как .c, а не .cpp, компилируй.>>1145334Стандарта достаточно. Еще где-то с одной из последних cppcon было видео, где поясняли.
>>1145334https://herbsutter.com/2013/02/11/atomic-weapons-the-c-memory-model-and-modern-hardware/ видеоТолько аккуратно, про memory fences он врёт (см. http://preshing.com/20131125/acquire-and-release-fences-dont-work-the-way-youd-expect/)Ну и см. блог http://preshing.com/archives/http://preshing.com/20120612/an-introduction-to-lock-free-programming/http://preshing.com/20120625/memory-ordering-at-compile-time/http://preshing.com/20120710/memory-barriers-are-like-source-control-operations/http://preshing.com/20120913/acquire-and-release-semantics/http://preshing.com/20120930/weak-vs-strong-memory-models/http://preshing.com/20121019/this-is-why-they-call-it-a-weakly-ordered-cpu/http://preshing.com/20130618/atomic-vs-non-atomic-operations/http://preshing.com/20130702/the-happens-before-relation/http://preshing.com/20130823/the-synchronizes-with-relation/http://preshing.com/20130922/acquire-and-release-fences/
Бле че я рандом получаю? Задание в конце главы у Праты Фибоначчи циклом for.
>>1145939Разобрался ^_^
>>1145939printf("\n"); в конце замени на putchar('\n');
>>1145948А разницы?
>>1145959Путчар чуть быстрее, но какой-нибудь GCC способен заменить этот вызов самостоятельно.
>>1145966Ок, спасибо.
>>1145959В printf ты выводишь строку "\n\0", а putchar выводит только одну букву.
>>1145023Не, проверил, не работает. Пишет файл $f не найден.
>>1146518Долго же ты собирался. Это для баша. У тебя баш?
>>1146550Нет, виндовый шелл.
>>1146566Держи для винды, шутник:for %X in (*.elf) do objcopy -O ihex "%~fX" "%~dpnX.hex"
Какой из современных языков программирования лучше всего подходит в качестве замены си?
>>1146919> Какой из современных языков программирования лучше всего подходит в качестве замены си?На самом деле подходят любые языки, ведь практически во всех них есть биндинги к C. Пишешь оптимизации байтоебли в отдельную библиотеку на сях и вызываешь её из своего кода.
>>1146919С#, имхо. Прост и кроссплатформенен. Правда ты забыл уточнить для каких тебе задач ЯП. Может тебе и рнр за уши будет.лично я люблю на рнр дома автоматизировать, синтаксис схожий, простой яп, ооп какое никакое есть...
>>1147072>С#, имхо.Наркоман шоле? Я, конечно, понимаю, что тот хуй выше даже не указал сферу использования, но только наркоман будет сразу же советовать С# в качестве замены си.
>>1147072Слесарь, ты проебал дефис в синтаксисе.ЛОЛ>>1146919Смотря какие задачи собрался решать. Каждый ЯП создавался под конкретную задачу, если у ЯП нет задач, то это бейсик.>>1147072>С#, имхоПися от онанизма ещё не отвалилась?
Анон, как работает шина SATA3? Регистры доступа к каждому устройству мапятся куда-то в отдельную память или же есть какой-то общий участок памяти для управления всеми девайсами? Другими словами, могу ли разрешить операционной системе полноценный доступ к определенному SATA3-девайсу на уровне памяти с помощью обычных процессорных механизмов виртуализации, запретив при этом доступ к другим и не используя паравиртуализацию? Спрашиваю тут, ибо на сосаче больше нигде не найдешь железячников
>>1147168В чем наркомания?>>1147173Пидор, иди в /га
>>1147180>В чем наркомания?Какой дебил будет писать на си то, что можно написать и на сишарпе? Это как советовать писать на баше вместо фортрана.
>>1147173>Смотря какие задачи собрался решать. Основной приоритет - высокая скорость работы, приближающаяся к си, но при этом чтоб язык программирования был современный.
>>1147182вся суть, пациента спрашивают, че ему сделать надо, какие задачи практическиевместо этого он мычит: "нада высокую скорость и чтобы современный был"classic
>>1147177от ос зависит
>>1147192Причем здесь ОС? Мне разделять устройства надо на уровне железа, в драйвере нашаманить не составит труда.
>>1147180>Пидор, иди в /га Чмоха, нахуй ты оттуда вообще вылезал? Тут отцы решают судьбы мира, а не пилят объекты в юнити.>>1147182>Основной приоритет - высокая скорость работыВысокая скорость работы ЧЕГО? Если собрался матан считать, но не знаешь какой ЯП заюзать, то у меня для тебя очень плохие новости.>>1147182>был современный.Со времён реализации в аппарате фон неймана и гарварда нет таких ЯП. Они все устраевшие.Ебашь на ассемблере и будешь первый пацан на районе. Лучше юзай ассемблер MIPS, есть вероятность, что станешь востребованным программистом.
>>1147196>Мне разделять устройства надо на уровне железаRTFM!!!RTFMЕсли сразу не дошло, то читай маны к стандарту. Чего ты там собрался в драйвере шаманить, если не знаешь о стандарте?
>>1147177>как работает шина SATA3?Так же как и sata1 и sata2 - по-сути тот же последовательный ком-порт на стероидах с дифференциальными линиями и гигабитными скоростями.> Регистры доступа к каждому устройству мапятся куда-то в отдельную память или же есть какой-то общий участок памяти для управления всеми девайсами?Мапятся регистры контроллера SATA, который либо отдельный либо внутри моста, что на большинстве пользовательских мамок и есть. Контроллер SATA -это уже PCI (PCIe) устройство на шине, физической ли или вшитой в сам мост и работа с ним в плане мапинга регистров и прочей ерунды идет как и для всех устройств по правилам инициализации plug'n'play pci устройств (до pnp это все настраивалось руками в биосе и переключателями на платах как диды на 286-386). Как правило этим даже не ОС занимается, а биос/uefi и операционная система получает готовые диапазоны ввода-вывода и назначенные прерывания от биоса.
>>1147177>Другими словами, могу ли разрешить операционной системе полноценный доступ к определенному SATA3-девайсу на уровне памяти с помощью обычных процессорных механизмов виртуализации, запретив при этом доступ к другим и не используя паравиртуализацию? А это можешь даже не прибегая к кодингу ручками:https://wiki.xen.org/wiki/VTd_HowTohttps://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM
>>1147208Ты можно более подробно объяснить? Там возможны какие-то хитрожопые режимы работы, которые позволяют или не позволяют полное разделение (и настраиваются на уровне, допустим, контроллера sata) или чего? Я ебал всю спецификацию читать чтобы понять, можно ли это сделать или нет, такое буду делать только если пойму, что это возможно.>>1147211>Контроллер SATA -это уже PCI (PCIe) устройство на шинеВо, это уже более интересно. Т.е. в теории чтобы реализовать пресловутый passthrough, надо делить PCI устройство, а тут без аппаратной поддержки со стороны контроллера не обойтись если это делать втупую.>>1147224>А это можешь даже не прибегая к кодингу ручкамиЯ на это и надеюсь, что уже давно есть готовые эффективные решения.>https://wiki.xen.org/wiki/VTd_HowToВот никак и не могу понять, как тут поможет IOMMU. Как разделять разные pci-устройства - понятно, но как делить PCI SATA-контроллер - загадка. Единственное, что приходит в голову - эмуляция контроллера, но с прямым DMA, но это уже на какую-то паравиртуализацию похоже со всеми вытекающими в виде пониженной производительности %%хоть может и пони.
>>1147241хоть может и пониженной не настолько, как если бы использовался обычный virtio block device.ебучий сосач и глючный хромог не дали дописать текст до конца =(
>>1147241> Т.е. в теории чтобы реализовать пресловутый passthrough, надо делить PCI устройство, а тут без аппаратной поддержки со стороны контроллера не обойтись если это делать втупую.У контроллеров, как правило, порты для разных дырок разделены.
>>1147173>Каждый ЯП создавался под конкретную задачуТо есть Си не является языком общего назначения и говорить про такую классификацию в 2018 году некорректно?
>>1147263>общего назначенияНет таких ЯП и никогда не было. Конечно, можно ассемблер притянуть за уши, но опять же это будет софистика.Погромизд может кодить на любом языке, но начинать надо с основ.
>>1147314>>общего назначения>Нет таких ЯП и никогда не было.Ты перепутал с универсальными языками. Их нет и никогда не было.А общего назначения есть.
>>1147177>не найдешь железячников2ch.hk/hw
>>1147323>2ch.hk/hw Ты хотел сказать /ra? Потому что в hw в основном потребляди, дрочащие на новые железки.
Шиндоуз Дефендер удаляет свежескомпиленый хеллоу ворлд. Какого хуя и что с этим делать? Компилирую mingw, пишу в codeblocks
>>1147323>2ch.hk/hwСмешно
>>1146621>for %X in (*.elf) do objcopy -O ihex "%~fX" "%~dpnX.hex"
>>1147571Это тред по языку C, если что.
>>1147648Ну так у меня вопросу по тулчейну, куда их задавать?
>>1147684У тебя вопрос по шеллу, тебе дали два примера, оба работают, но нет, ты взял какое-то невнятное говно и пытаешься запустить там.
Сисяны, я совсем даун на такой херне запороться? Во float всё работает норм, но точность не устраивает. Переделываю всё на double, выдаёт рандомную хрень. На пиках всё видно, вобщем ЧЯДНТ?
>>1147684По какому в жопу тулчейну. У тебя вопрос про cmd-парашу или что-то вроде того.
>>1147754https://en.wikipedia.org/wiki/Scanf_format_string#Format_string_specifications
>>1147754Из-за особенностей variadic-функций, float, который передали в printf(), конвертится в дабл, поэтому %f печатает даблы. В scanf() же передаются указатели, они никуда не конвертятся, поэтому %f читает флоаты, а %lf - даблы.
>>1147774>>1147791Спасибо. Смотрел "справку" по scanf в k&r, а там ни слова об этом
>>1147072Удваиваю этого >>1147168Использование шарпа там где нужна сишка сводится к формочкам на шарпе и вызову из сишных либ всей мякотки. Хукать системные вызовы, пердолиться с оборудованием и т.д. ты на шарпе собрался? Точно наркоман.
Пиши тесты - останься без работы через 5 лет!Пиши тесты - сделай богатого дядю ещё богаче!Пише тесты - отбери хлеб у тестеров!Код без тестов - это плохой код? Для дяди который платит зарплату - это плохой код.1) Написал тесты2) Следал рефакторинг3) Зарплату подняли на 3%4) Код отдали индусам через год5) Нахуй такой рефакториг и такие тесты6) PROFIT вашей нелюбимой америке1) Не пиши тесты2) Копи бабки3) Развали продукт4) Утопи дядю5) Перепеши продукт, пока есть накопленые бабки6) Напиши тесты7) Стань сам дядей8) PROFIT тебе!
>>1148238> Хукать системные вызовы, пердолиться с оборудованием и т.д. ты на шарпе собрался?https://support.microsoft.com/en-us/help/318804/how-to-set-a-windows-hook-in-visual-c-net
Пишу небольшой проектик под avr-libc. В принципе все работает как было задумано, но есть один момент который меня смущает. Код работает на ATTiny13.В процессе обработки сигналов с датчика в переменную типа uint32_t битовыми сдвигами записываются данные. Есть программная эмуляция uart в виде функции TxByte() которая принимает на вход uint8_t. Мне нужно отправлять данные на пеку через этот самый программный uart. По идее должен быть цикл в котором я передаю 32 бита данных за 4 приема. То есть мне нужно обращаться к uint32_t как к массиву. Я использовал union таким образом:typedef union { uint32_t value; uint8_t bytes[4];} t_command;t_command command;Это норм или я перемудрил и есть способ проще?
>>1148340uint32_t value = ...;for (int i = 0; i < 4; ++i) {TxByte(value & 0xff);value >>= 8;}Можешь развернуть.
>>1148320С ума сошел? Перехватываемые SetWindowsHook вызовы ограничиваются тем что разрешено в ее первом параметре, т.е. сообщения между окошками ты перехватывать можешь, но сколько-нибудь замороченные вызовы вряд ли. На шарпе можно только вызывать функции из винапи, хукать нельзя, и дописывать к ним свои примочки нельзя (разве что через библиотеку на сишке, которая содержит все кроме гуя).
>>1148352> хукать нельзяМожно. Всякий unsafe, Marshal и тому подобное. Но приходится заботиться о многих вещах - в нативном коде гораздо проще.вы заебали, тут тред по Си
>>1148361Хуясе, а можно пример unsafe кода CLR, хукающего какую-нибудь хуйню изменением таблицы импорта?
>>1148451*нативную хуйнюПросто академический интерес, раньше не слышал чтобы так делали.
Всем привет я даун.Написал программу на си для которой необходимо построить график. Решил пользоваться OpenGL.Может кто-нибудь пожалуйста ПО ШАГАМ мне объяснить, как вообще подключить opengl чтобы в программе его функциями можно было пользоваться? Т.Е. Так понял для разных языков программирования какие-то разные opengl. что конкретно и откуда скачивать?1) скачать OpenGL2) установить его3) ??? ???n-1) вызвать в программе библиотекуn) написать необходимые функцииn+1) скомпилироватьn+2) радоваться
>>1148789Вкратце: говоришь гуглу glfw, качаешь, что скажут, и не выебываешься. Если тебе только график и притом быстро, говоришь не glfw, а freeglut. Скачаенное кладешь рядом с исходником и читаешь, как подключать либы в твоей IDE (если ты вдруг из командной строки компилируешь, то уже на полного дауна не тянешь). Алсо, в /gd/ есть тред по OpenGL.> Так понял для разных языков программирования какие-то разные opengl.OpenGL - это системная либа, она чаще всего одна на всю ОС. Для нее есть биндинги (способы вызова функций) и обертки (код, упрощающий взаимодействие - например, создающий окна вместо тебя). Биндинги зависят от языка (для Си не нужны), обертки - это те самые glfw и freeglut, они бывают в исходниках или собранные под твой компилятор.
>2K18>качать либы руками и вручную их добавлятьХаха, ебать вы сишники лошары)) Вот у нас в Джаве в maven вставил зависимость и всё))
Bump
Bump number
немогу найти эту книгу на русскомSamuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
>>1148798Так, а получается в командной строке же что-то еще прописать надо будет? Если GLWF будет лежать рядом с исходным кодом при компиляции.
>>1148910@открыл ридми
>>1148915> TODO: readme
Не стукайте сильно. Не понимаю что происходит и можно ли так делать (наверняка нельзя).https://pastebin.com/JqSfUxSzПервое что меня смутило мол я могу на стеке выделять неизвестное заранее место под массив.ОК, допустим если бы он не выходил за скоуп функции kek, все было бы ок и стек почистился бы. Но ведь я передаю указатель на массив arr черти куда, раз я не вызывал никакого *alloc то и free я вроде звать не должен. Что э это получается указатель станет не валидным (будет какой-то мусор на стеке показывать) сразу после выхода из скоупа kek?
>>1148993Ебать я лох, простыню настрочил, а проверить что собственно будет не проверил, после того как пытаюсь считать что либо с возвращенного указателя сразу segfault. Со статически выделенными локальными (ну там хуяк char chars[144]) я так понимаю та же байда будет?
Ебать, коллективный разум. У меня проблема почти как у него >>1148993 >>1149000, только прога сложнее. Нужно захерачить в массив значения из файла с 1500000 — 2000000 даблов, причём желательно сделать это не в main. Вот код: https://pastebin.com/683a6BcS. Я даже сам понимаю, почему оно не должно работать (первый malloc и все последующие realloc'и в функции, а после её выполнения они у проги отбираются), но нет никаких идей, как сделать так, чтобы работало. Опытные байтоёбы, подскажите, как это по-человечески сделать.
>>1149000Статика выделяется не на стеке, а в памяти
>>1149028Почитал в к&р про статические переменные, дописал статик перед дабл вальюс, заработало.
>>1148867На русский переведены только самые базовые вещи, годящиеся для написания хеллоувордов. А основной массив информации придется искать и переводить самим.
Всё байтоёбите?
>>1149028в первый проход по файлу считаешь количество чисел в немвыделяешь память, необходимую для хранения этого количествасчитываешь числа в этот массивиз функции out параметром возвращаешь этот массив, а в качестве возвращаемого значения фии - количество элементов в массиве
>>1149041А сделать статический массив хуже?
>>1149037Как что-то плохое.
>>1149043размер статического массива должен быть известен на этапе компиляцииличное: надеюсь что ты студент еще и учишься, если уже работаешь то это конечно писец
>>1149046А бегать два раза по файлу только что бы посчитать строки не песец?мимоанон
>>1149029Я неправильный термин использовал, конечно это не статически выделенный массив.
>>1149053это выйдет дешевле, чем делать реаллоки
Есть буферы в 1024 байта и 1055. При записи большого количества информации в файл с помощью вызова write время выполнения программы не меняется. Почему так происходит? Я где-то слышал, что размер буфера должен быть адекватным, иначе записываться будет медленнее.
>>1149046Выразился не правильно. Я про static double value[1]; . Да и реаллоки там не все ~1700000, а где-то тысяч 20.
>>1148910В конец команды добавляешь название либы. Если это майкрософт и сочувствующие, просто дописываешь glfw3.lib, если гцц "-L. -lglfw" (без кавычек).>>1149028У тебя там адский ад. Ты в передаваемый функции массив не пишешь, ты перезаписываешь указатель на этот массив указателем, который вернул malloc(), туда пишешь, потом эту память забываешь и выходишь из функции. В массиве из main() как был, так и остается мусор. Тебе нужно было принимать указатель на указатель на дабл, если ты хотел динамическое выделение памяти.>>1149059write - это один целый системный вызов. Куча тактов на то, чтобы переключить режим процессора, сохранить стейт, побегать по ядру, подергать дрова, вернуть стейт и переключиться обратно. С начала этого года из-за патчей против мельдониума это стало еще дороже. Соответственно, чем больше информации ты можешь передать за раз, тем меньше будут накладные расходы. Возьми крайние случаи - померяй с буферами в 1 байт и 64 килобайта на полугиговом файле.
>>1149058Почему? Я конечно не знаю как в точности сделан например std::vector, но там разве не то же самое? Наполнились - ресайзнулись раза в полтора-два и ебашим дальше, тогда и ресайзов не так много будет. Ну или жабовский ArrayList - создаем новый блок и копируем все из старого.
>>1149069>Возьми крайние случаи - померяй с буферами в 1 байт и 64 килобайта на полугиговом файле.Да, там разница очевидная по вполне понятным причинам. Но я же спрашивал про буферы странных размеров. Вроде бы где-то читал, что буфер должен быть размера страницы или хотя бы степенью двойки. Но я мог что-то не так понять и вообще вкатывающийся ньюфаг.И почему если сделать буфер слишком большим, то время выполнения увеличивается?
>>1149075для тебя в первую очередь по той причине, что с реаллоками ты написал очень грязный код, знаний и опыта тебе явно не достаточноа по алгоритму, предложеному здесь >>1149041 есть хоть какая то надежда что ты напишешь более-менее рабочий вариантвторое: в и крестах, при использовании вектора для решения этой задачи, я бы прикинул - не выгоднее ли будет оценить количество чисел и не сделать ли вектору предварительный vector::reserve
>>1149089Я не тот чувак что накидал тот код. Конечно резерв самортизирует. Но вон жеж живут с реаллоками.
>>1149082> Но я же спрашивал про буферы странных размеровТам особой разницы быть не должно. Максимум какая-нибудь мелочь типа блочного копирования памяти по 16-32-64 байта за раз и fallback к побайтовому копированию в конце буфера, не кратного размеру блока. Разницы во времени выполнения не заметишь. Ну или если мы слегка превышаем размер страницы, придется тратить время на управление второй страницей. Все это вилами на воде писано и очень сильно зависит от реализации. Какое-то конкретное поведение на конкретной ОС можно разобрать, конечно.> И почему если сделать буфер слишком большим, то время выполнения увеличивается?Пруфы?
>>1149090тогда ему следовало провести разделение кода:реализовать динамический массив и интерфейсы доступа к немудалее использовать этот массив, чтобы прочитать в него числа из файла
>>1149138ты же пишешь что только начинаешь изучениев этом случае не стоит вообще задумываться о производительности, но о реализации алгоритма без ошибок
>>1149138Спасибо за ответ.>Пруфы?Да вот только что проверил у себя на компе.>>1149141Я начинаю изучать всякие низкоуровневые штуки, но не программирование. Но я тебя понял. Просто иногда все-таки становится любопытно и хочется подробностей.
Репостну из крестового треда, вдруг кто в темеКовыряю GUI в WinAPI, хочу менять прозрачность окна по mouse enter/mouse leave ручной анимацией (не AnimateWindow). И тут внезапно для меня я понял, что такие вещи по добру бы делать асинхронно. Вот только если я запущу тред из WndProc, то мне надо либо тут же его join'ить, чтобы по выходу из скоупа поток не распидорасило. Так вот, как асинхронно выполнять манипуляции с окнами в WinAPI в общем случае?
>>1149281> Да вот только что проверил у себя на компе.Это хуевые пруфы. Что писал, сбрасывал ли кэши, что в это время работало в фоне - все это влияет. Я не вижу причин, почему скорость должна уменьшаться при росте размера буфера (если его размер - степень двойки, если в системе достаточно свободной оперативки, чтобы он был не в свопе, если повторять тесты несколько раз и т. п.).>>1149288Зачем тебе тред? Выставь таймер, по WM_TIMER меняй свою прозрачность, тебе его за глаза хватит даже на загруженной системе. А вертеться в спинлупе в отдельном треде и жрать CPU ради такой ерунды - это пиздец вообще.> то мне надо либо тут же его join'итьТы там тредами из C11 обмазался или pthread притащил? Это достаточно странный подход к Windows API, там есть свои треды, своя синхронизация на все случаи жизни. С чего ты решил, что поток должно распидорасить?> как асинхронно выполнять манипуляции с окнами в WinAPI в общем случаеПросто берешь и выполняешь, внутри оконной подсистемы все равно блокировки есть, оно все за тебя порешает. Есть очевидные крайние случаи, когда ты попытаешься что-то делать с окном, которое прибил другой поток или с каким-то содержимым окна (всякие там элементы в листвью, которые указатели хранят), которое другой поток может попортить - тогда синхронизируешься уже ты сам. Но тут есть простой и очевидный выход - все делает оконная процедура, ты просто™ посылаешь ей сообщение, и пусть GUI-поток ебется.
>>1149295>Ты там тредами из C11 обмазалсяДа, им. Думал еще про CreateThread, но там хэндл возвращается, а его нужно где то хранить или так же WaitForSingleObject вызывать, что режет асинхронность. (что вроде как тот же std::thread::join()). std::thread как я понял да, пидорасится по выходу из скоупа. Про таймер сенкс, вообще про него забыл в WinAPI. Он по умолчанию асинхронно запускается?Еще вопрос, допустим мне надо не анимацию сделать, которая хорошо через таймер зайдет, а запустить какую нибудь задачу и не ждать того, что она вернет. В таком случае я проста тупа запускаю таймер, который тригерится тут же и только один раз? И что делать, если мне нужен результат, но при этом я не хочу для этого вешать основной поток? Запускать обработчик результата также через таймер и вешать его через мьютекс, который сбросится, когда в процедуре другого таймера получится результат? Возвращаясь к анимации окна, еще у меня была идея исходя из предполагаемых задач заранее создавать потоки, которые в while (1) также ждали бы сброс мьютекса, выполняли бы какую нибудь задачу и засыпали. Насколько это целесообразно? Таймер в любом случае уделывает такое решение, или при малом количестве таких задач, которые на старте можно вынести в отдельный поток, такое решение тоже нормальное?
>>1149305> а его нужно где то хранитьНу хэндл окна же ты где-то хранишь? На худой конец, есть всякие Get/SetWindowLongPtr и соответствующие поля в WNDCLASS, есть Get/SetProp, туда можно положить указатель на объект класса (у нас в сишечке - просто на структурку), а в оконной процедуре указатель дергать и оттуда уже доставать хэндлы. Алсо, ты можешь вообще ничего не хранить. Если тебе на все похуй, ты можешь запустить поток, сразу закрыть его хэндл (не забудь только, а то памятью истечешь), и пущай оно там себе работает. Доработает - завершится. Единственная проблема - если во время его работы завершится основной поток, то система прихлопнет и worker тоже.> заранее создавать потоки, которые в while (1) также ждали бы сброс мьютекса, выполняли бы какую нибудь задачу и засыпалиНорм, так обычно и делается. Если у нас не OpenMP, а именно ручное управление потоками, то проще всего именно создать поток заранее, реализовать producer-consumer и кормить поток/потоки задачами. Вот тут уже при завершении программы можно worker-ам сказать, что их смерть близка и подождать в join/WaitForЧтоНибудьТам, пока они это осознают, приберутся за собой и убьют себя об стену. А как конкретно ты это скажешь - дело твое: есть volatile всякие, атомики, мьютексы, банальный GetMessage, WaitForSingleObject.> std::thread как я понял да, пидорасится по выходу из скоупа. Так не создавай его в скоупе. Создавай в виде поля класса, и new тоже никто не отменял, опять же.> таймер> Он по умолчанию асинхронно запускается?Через указанные промежутки времени (примерно) система постит тебе в очередь сообщений WM_TIMER. Это достаточно асинхронно?> И что делать, если мне нужен результат, но при этом я не хочу для этого вешать основной поток?Зависит от того, чего именно ты хочешь добиться. И как ты собираешься этим пользоваться. Если у тебя в основном потоке GUI, никаких мьютексов и прочей хуйни, кроме как очень ненадолго, туда пихать нельзя (пока ты ждешь или работаешь - сообщения не обрабатываются, а юзер матерится, что у него интерфейс не реагирует). Но ты можешь сделать какую-нибудь переменную, опционально защитить с помощью critical section или того же мьютекса, просто записать туда результат и просто послать сообщение окну, что у тебя теперь есть этот результат. Окно может тоже как-то просигналить в worker, что все ок.И вообще, нагугли себе Рихтера что ли. Посмотри хотя бы главы про потоки и синхронизацию, если уж целиком читать лень.
>>1149036ну хотя бы это Plauger, PJ. The Standard С Library. Englewood Cliffs, NJ: Prentice Hall, 1992.
нашелhttp://sharpened.ucoz.ru/lib/polnyj_spravochnik_po_c-gerbert_shildt-2006.pdf
>>1149346>>1148867Ты инвалид что ли? Учи английский.
>>1147255Не разделены, хочешь полноценной производительности - прокидай полностью контроллер со всеми подключенными винчестерами, либо покупай отдельный PCI-e SSD для виртуалки, либо покупай какие-то экзотические сервервные контроллеры с поддержкой SR-IOV.
>>1149307>Через указанные промежутки времени (примерно) система постит тебе в очередь сообщений WM_TIMER. Это достаточно асинхронно?Да чёт не очень. Я почитал на msdn про WM_TIMER и что можно получить в wParam id таймера, но это ж всё равно саму задачу придется выполнять в петле сообщений в основном (считай GUI) потоке или опять же выдумывать что нибудь с потоками? В SetTimer можно еще передать TimerProc, вот только я не нашел на msdn нигде упоминаний о том, что он в отдельном потоке работать будет. Хз, может это подразумевается. Сейчас проверю.
>>1149437>Да чёт не очень.А, пожжи. Я кажется понял. Если сейчас в колбэке таймера я планировал делать что то типа while (opacity < 100) {SetLayeredWindowAttributes(hWnd, 0, 100 + opacity++, LWA_ALPHA);Sleep(10);}То теперь я просто говорю таймеру 100 раз с интервалом в 10 миллисекунд в основном потоке сделай мне SetLayeredWindowAttributes()?
http://www.cyberforum.ru/c-beginners/thread2205010.html
>>1149545как вообще можно проверять подобное
>>1149346Пойми, без знания инглиша начинать бесполезно. Вот смотри, ты потратишь год на базовую переводную литературу, напишешь хеллоуворды, а при попытке написать что-то более-менее серьезное и реально нужное гарантированно обосрёшься. Потому что тебе одновременно придется не только вникать в сложную новую информацию по программированию, но и изучать иностранный язык, на котором эта информация предоставляется. Так что для начала потрать годик-другой на изучение инглиша.Ну а если у тебя нет столько времени и нужны бабки здесь и сейчас, то учи 1С — разработку отечественного производителя. Там вся необходимая документация на русском.
>>1149442Да, все именно так. Это не очень удобно, зато нативно и просто.
>>1149437>В SetTimer можно еще передать TimerProc, вот только я не нашел на msdn нигде упоминаний о том, что он в отдельном потоке работать будет. Хз, может это подразумевается. Сейчас проверю. Что ты не нашёл? Там всё человеческим языком по белому написано:An application can process WM_TIMER messages by including a WM_TIMER case statement in the window procedure or by specifying a TimerProc callback function when creating the timer. When you specify a TimerProc callback function, the default window procedure calls the callback function when it processes WM_TIMER. Therefore, you need to dispatch messages in the calling thread, even when you use TimerProc instead of processing WM_TIMER.
>>1149560хули там англопарашу изучать, 800 слов и читай любую книгу по канпутерам
Установил LLVM-5.0.1-win64.exe , MinGW-w64 for 64 bit , На один диск, g++ запускал, в Path всё прописал. Собственно как запустить компилятор? Вопрос тупой конечно, но что поделать. Выполнял всё как в этом гайде http://blog.johannesmp.com/2015/09/01/installing-clang-on-windows-pt2/
>>1151008Походу допетлил, что нужно visual studio ставить
>>1151010Какую vs скачать? Мне нужно просто установить clang и писать свои хеллоуворды
>>1151015В общем, как я понял.1.Visual C++ Redistributable for Visual Studio 2015 Update 12. Накатываю Microsoft Build Tools 20153. Накатываю LLVM-5.0.14. Дальше запускаю Vs и начинаю там пытаться хеллоувордитьВсё верно?
>>1151016Скачиваешь gcc и notepad++ с Nppexec-плагином.Хеллоувордишь-неперехеллоувордишь.
>>1151008>>1151010>>1151015>>1151016Маня, не еби мозги себе и окружающим. Все эти IDE не для вкатывальщиков, а для промышленного использования. Юзай блокнот, консоль и mingw/cygwin, а лучше лялих, но это если хочется вкатиться в сишечку по полной.
>>1151277Сам маняСпасибо
Есть красивые-модные-молодежные статьи по использованию pthreadов или только доские мануалы и книги?
В чем отличие компилирования в cmd и в msys? Компилировал свой хеллойворлд, там и там писал всё одно и тоже, так в чём разница?
>>1151370Всегда компилирую в cmd, мне норм. Но всякие configure в cmd ты не запустишь, зато в sh/bash вполне.
>>1151402Честно говоря не знаю пока о чём ты в последних строчках, сейчас пока разбираюсь с командой dbg, по идее скомпилировал простой код в exe файл, запускаю код, пишу dbg, а в ответ сообщение о не запущеном приложении
>>1151402Пидр, нахуя под сажей пишешь.
Суп. Короче, есть код:CreateProcess(...);TerminateProcess(...)Процесс создается и тут же завершается (это окошко калькулятора), на экране даже окошко не мелькает. А мне, предположим, надо чтобы мелькало. Я делаю так:CreateProcess(...);WaitForInputIdle(...);TerminateProcess(...);и TerminateProcess выдает ошибку 5. Вообще ничего не меняя, вставляем вызов WaitForInputIdle посередине - и TerminateProcess перестает работать, как будто бы вызов WaitForInputIdle где-то под капотом еще и лишал меня права на вырубить мной же созданный процесс. Что я делаю не так? inb4 пердолюсь с винапи
>>1151583Зачем ты последовательно вызываешь эти функции? Их необходимо вешать на события.
>>1151590Какая разница в контексте задачи?
Какие опенсорсные проекты лучше всего почитать, чтобы понять, как пишется код? На работе пишу на скале и джаве, хочу для общего развития поизучать байтоеблю и networking.
>>1151583Ну ты бы хоть код выложил, ОС указал, вся хуйня. Может быть, у тебя баг где-то, хуй тебя знает, мы тут не телепаты. Специально попробовал в XP/7/10. Все работает, никаких ошибок, хотя окошко не мигает - с чего бы ему мигать?
>>115178764-битная Windows 8.1, на ней 32-битное приложение. Код - вот на этом прототипном коде ошибка.
>>1151788Если тебе нужна помощь, тащи полный компилирующийся пример, потому что проблема скорее всего именно в тебе. Если нет - дампи нтстатусы, смотри всякими ProcessExplorer-ами хэндллы и права.
>>1151817>тащи полный компилирующийся примерне могу, сижу под nda, код стоит сотни тысяч долларов, на утечку башку снимутвсе серьезно
>>1151787>>1151817Я даун, проблема была в приложении (сборка ms office от васяна, terminateprocess на нее странно реагирует), всем спасибо, все свободны.Допёр когда копировал на пастбин пример для проверки и по приколу заменил путь до офиса на calc.exe.
>>1138954 (OP)есть ли смысл делать своим основным языком c++?
>>1151961Проблема была не в этом.>>1152452Нет. Да и вообще спрашивай у плюсоводов, а не сишников. Они тоже ответят тебе нет, только в более резких выражениях.
Суп, анонасы.Как правильно делать #define в хедерах и потом компилировать?Вот я хочу чтобы у меня при компиляции с одним параметром например использовался шрифт Tahoma (допустим) а при другом параметре шрифт Wingdings, при этом в таком случае шрифт Tahoma в конечной программе вообще отсутствовал.Я так понял это что-то связанное с прекопиляторной директивой #if должно быть?А сами указатели тогда куда вставлять, в C compiler - Miscellaneous?Пользуюсь эклипсом, потому что уже тулчейн практически полностью собрал под свои нужды.
>>1152707Делаешь ключик компилятору типа -Dимя, например, -DSOMETHING, оно делает дефайн. В коде:#ifdef SOMETHING// Или #if defined(SOMETHING) то же самоеstatic const char font[] = "Tahoma";#elsestatic const char font[] = "Wingdings";#endif
>>1138954 (OP)Современным компиляторам пох на recursion и tail-recursion и они все оптимизируют в луп?
>>1152715TCO обычно есть, но стандарт не гарантирует, поэтому полагаться не стоит.
>>1152713Я так понял в эклипсе это будет Compiler - symbols -Define syms? Не в препроцессорных директивах?А после #if define(SOMETHING) можно дохуя кода написать а потом #elif вставить и еще дохуя кода написать?Можно вставлять #ifdef в середине кода или вообще прямо в функциях?И его нужно в хедеры вставлять или в .c тоже можно?И если я сделаю#ifdef SOMETHING// Или #if defined(SOMETHING) то же самоеvoid foo(bar);#elif NOT_SOMETHINGvoid foo(bar2);Компилятор не станет ругаться что я пытаюсь redefin'ить функции?
>>1152722> Я так понял в эклипсе это будет Compiler - symbols -Define syms? Видимо да. Вон там -D написано.> можно дохуя кода написать а потом #elif вставить и еще дохуя кода написать?Можно так, можно даже условно инклудить другие файлы. Препроцессор еще до передачи компилятору все развернет, а лишнюю ветку просто выкинет (скомпилируй с ключом -E или -save-temps, поймешь), поэтому можешь использовать это где угодно и как угодно. Никаких проблем с redefinition или каких-то других проблем не будет.> #elif NOT_SOMETHINGНет, если хочешь #elif, делай #elif defined(SOMETHING_ELSE) или #elif !defined(SOMETHING) и т. д. И #endif не забудь.
>>1152726Охуенно, спасибо тебе анон!
>>1152726Хотя, можешь еще пояснить про макросы или что-то подобное?Хочу распарсить флаг, например я пишу -D AB или -D CDИ вместо того чтобы прописывать дефайны для каждого флага сделать что-то вроде#define CTRL CONTROL+str[0]#define DAT DATA+str[1]Чтобы получить CONTROLA и DATAA если я поставлю флаг AB или CONTROLC и DATAD если проставлю флаг CD ?
>>1152745Нет, так не получится. У тебя макросы. Замена одних токенов на другие. Зато можно так:#ifdef SOMEFLAG #define VAR1 A #define VAR2 B#else #define VAR1 C #define VAR2 D#endif// Можно вместо этого #if в командной строке: -DVAR1=A -DVAR2=B или -DVAR1=C -DVAR2=D// И потом магия препроцессора. Что-то типа:#define CONCAT_(A, B) A##B#define CONCAT(...) CONCAT_(__VA_ARGS__)#define CTRL CONCAT(CONTROL, VAR1)#define DATA CONCAT(DAT, VAR2)Больше ничего предложить не могу. И прежде чем такое использовать, тоже подумай хорошо.
>>1152753А какие еще есть варианты как делать compile-time configuration чтобы не дрочить препроцессор но при этом экономить место?Алсо, сейчас пытаюсь написать простой макрос вида #define TESTAAB(variable) variableЧтобы он резолвил variable в variable, но что-то эта хрень не работает и выдает мне кучу ошибок, а гугл выдает или простые ответы по макросам, или простые ответы по указателям.Можно в макросе как-то резолвить переменную в ее указатель?
>>1152774Бля, походу это оказалось из-за того что забыл хедер включить в код
>>1152774> А какие еще есть варианты как делать compile-time configuration чтобы не дрочить препроцессор но при этом экономить место?Так #ifdef для экономии места более чем достаточно. Линуксовому ядру норм, а тебе почему-то нет?
Получение указателя на элемент структуры через указатель, то есть: struct test{int c; char arr[MAX];};struct test str;struct test *pointer = &str;int c = &pointer -> c;char y = &pointer -> arr[2];Законно вообще или это пиздец и нужно по другому?Дело в том, что в случае с взятием адреса целого числа оно вроде как и сработало (я проверил - записалось ли значение куда надо при вызове scanf()), а у меня ниже кучка scanf() и они толи хвосты с '\n' из потока читают и наёбываются, толи такое обращение у элементам структур стек пидорасит. Если ответа на такой дибильный вопрос не будет, я конечно перепишу всё по нормальному. Но если проблема не в обращениях, буду искать почему scanf() не хочет делать то что ей полагается.
>>1153184Блядь, там звёздочки, естественно: int cchar y
>>1153185В шапке ссылка на пейстбин для кого?
>>1153184>Законно вообще или это пиздец и нужно по другому?Да, все нормально. У -> и [] приоритет выше, чем у &, так что все работает, как ты ожидаешь. Ищи проблемы в своих scanf.
пацаны, это норм, что экзешникint main(){return 0;)весит 53кб?
>>1153444Рантайм.
>>1153448спасибо
>>1153456шо токои рантайм
>>1153448алсо что токои реализация си и или стандарт, разные ли это вещи. объясните плезь никак не могу разобраться в этом, я новичок хуечок
>>1153627Обвязка для запуска на конкретной ОС.
>>1138954 (OP)Анон, что такое DDK (Driver development kit)? Чет не могу понять, кем оно пишется и кем используется: разработчиками железа для разработчикоов юзерспейс софта под определенную ОС или разработчиками ОС для разработчиков железа? Где-то вообще можно вкратце почитать об этом?
>>1154412микрософто петуханами для разработки дров
>>1154412ДДК по сути СДК под кернелспейс, для написания дров, бекдоров и прочей шняги под вынь. Пилят индусы из микрософта.
Либо я совсем ёбнулся, либо как может быть такое, что указатель переданный в функцию самопроизвольно изменил адрес хранящейся в нём переменной (long double)? У меня в функции идёт сравнение указателей (2 параметра), я передаю в качестве аргумента адрес возвращённый функцией (всё нормально, он не меняется) и адрес записанный в указателе (и вот тут он оказывается изменён.) У меня на скриншоте 1й адрес - то что возвратила функция и то что я передал как 2й аргумент, 2й адрес - адрес хранящийся в указателе который я передаю в качестве 1 аргумента. На выходе 3й адрес - это то что функция самопроизвольно поменяла, а 4й - то что осталось таким, каим и должно было быть.
>>1154762Проще было спастить код сюда, да?
>>1154762> Либо я совсем ёбнулсяthis. Может, ты указатель на указатель передаешь или портишь что-то. Тащи код, хотя бы строчку с вызовом и строчку c printf.
вот вопрос появился, допустим есть ц компилятор под, например процессор з80, в котором что-то не по стандарту, то это можно считать эмбендед с?> All the fundamental types are provided, but as noted above short is the same as int, as is long.> 16 bit> Sign extension is not performed when converting characters to integers, so characters appear as integers in the range 0...255.> The compiler generally computes expressions from the inside-out and from left to right but. as stated in the reference manual, this should not be relied upon as it may change between releases of the compiler.> Integer overflows are ignored as are attempts to divide by zero.> Floating-point numbers are not yet available so this section has no relevance.> и тонна упрощений синтаксиса языка... но в конце концов он запускался на спектруме. > The second difference is that all local variables must be declared at the head of a function body and may not be declared at the head of nested compound statements.ну вот, например, беглые вырезки. а то читал тут одну тему спуктрунистов, которые удивлялись что старый компилятор выдаёт лучше результат, чем современные...но вообще, главная проблема это постоянно перекастовывать в выражениях обратно в char (у проца кастрированный 16 бит) - наверняка он (компилятор) не кастует неявно в инт,> Sign extension is not performed when converting characters to integers, so characters appear as integers in the range 0...255.> Integer overflows are ignoredкак думаете?
>>1154848>как думаете? Хуйня без задач для вырывания гланд через жопу. Макроассемблер обоссыт этот конпелятор с 14-го этажа.
>>1154848Можно считать компилятором языка, основанного на Си.
Двач-помогач-программач, помоги. Читаю K&R, добрался до массивов указателей, но, как обычно нихуя не работает (это не книжный код, а колхоз, чтобы просто понять как оно работает).Вот код#include <stdio.h>#include <string.h>#define MAXLINES 5000 / максимальное число строк /#define MAXLEN 1000000char lineptr[MAXLINES]; // Собственно массив указателейchar file[MAXLEN]; // Это массив, в котором полностью записан ручной вводchar linetest[MAXLEN]; // Массив в который будет записываться по одной строкеchar a = file;int get_line(char to, char from);void get_file(char s);int main(){ int len; int nlines = 0; / количество прочитанных строк / get_file (a); while (a != '\0') { len = get_line (linetest, a); char p; p = linetest; lineptr[nlines++] = p; printf ("%s s nomerom %d\n", lineptr[3], nlines); a = a + len; }}// Читаем весь ввод в массивvoid get_file(char s){ int c; while ((c = getchar()) != EOF) { s = c; s++; } s = '\0';}// Получаем строку из массиваint get_line(char to, char from){ int len = 0; while (from != '\n' && from != '\0') { to++ = from++; len++; } if (from == '\0' || from == '\n') { *to = '\0'; len++; } return len;}После того, как я вбиваю в консоль стихотворениеThe shepherds went their hasty way,And found the lowly stable-shedWhere the Virgin-Mother lay:And now they checked their eager tread,For to the Babe, that at her bosom clung,A Mother's song the Virgin-Mother sung.Мне выдает результат(null) s nomerom 1(null) s nomerom 2(null) s nomerom 3And now they checked their eager tread, s nomerom 4For to the Babe, that at her bosom clung, s nomerom 5A Mother's song the Virgin-Mother sung. s nomerom 6К первым трем строкам вопросов нет. Но почему в дальнейшем начинает перезаписываться lineptr[3]? Ведь в моем случае результат должен выглядеть так(null) s nomerom 1(null) s nomerom 2(null) s nomerom 3And now they checked their eager tread, s nomerom 4And now they checked their eager tread, s nomerom 5And now they checked their eager tread, s nomerom 6
Сап, сисяч. Пилю нехитрую серверную программу под линукс, которая должна регулярно (не реже, чем раз в секунду) получать некие запросы, обрабатывать их и слать ответ (или не слать, не принципиально). Так вот, как я могу контролировать время прихода информации, т.е. чтобы при непоступлении сообщений в течение последней секунды сервер выполнял какие-то аварийные действия и закрывался?
>>1155008sleep вернёт ноль, если ты отоспал положенное время и не получил сигнал, и вернёт не ноль, если ты получил сигнал.Осталось только посылать сигнал. Если воркеры какие-нибудь pthread'ы, то pthread_kill ждуну.
>>1155008Если однопоток, то сначала назначь обработчик SIGALRM, а потом setitimer на время, довольно точно будет. Если придёт, убивай setitimer, ему там надо нулевое время передать.
>>1155008Но самым хорошим решением будет использование select и poll, ибо к сокетам можно применять, ЕМНИП.Там есть ppoll, например, которая может определённое время ждать изменения состояния сокета.Если ppoll вернёт ноль, то ничего нового не произошло, а значит можно умирать.Аналогично с RET от pselect.Вообще, pselect для тебя несёт более релевантную инфу.
>>1155020>>1155022>>1155024Спасибо.
>>1153642Стандарт - это описание того как должно быть, реализация - это файлы с кодом, написанные программистами компилятора, чтобы компилятор делал так как написано в стандарте.
>>1154766>>1154770Вот. На скрине у меня return - это адрес который возвратила функция result(). В другой функции где есть DBZdetect всё работает замечательно и передаётся туда тот же адрес, более того, я пробовал сохранять адрес в отдельный указатель и передавать его в качестве аргумента, но тщетно. Я знаю что совсем еблан и ошибка банальна и проста, но почему-то не могу её увидеть.
>>1155167А тип у pta->digits[] какой?
>>1155175long double
>>1155178Я не видеть, мб другие смогут, давай result
>>1155182Говнокод лютый, я согласен. Но здесь видно что ничего особого не происходит. Если нужно, могу поскидывать функции последнего цикла. Но опять же, ранее они ничего не делали криминального и работали как надо. А может быть такое, что функции которые я вызвал до этого, что-то сделали со стеком и отсюда такие глюки при передачи аргумента в DBZdetect()?
>>1155196Ну со стеком это уже писец какой-то.Я хз, мб result как-то неявно меняет адрес pta.И этот адрес попадает в Detect
>>1155201Так вот что бы исключить это изменение, как я ранее и писал - создавал отдельный указатель и хранил адрес там. Но при передаче в DBZdetect() адрес переданный неважно каким способом меняется, а затем программа вылетает. Видимо я таки где-то накосячил с другими функциями. Других вариантов, похоже не осталось.
>>1155204Ну и прокинь в голове кучу, если с ней работаешь
>>1155167Какой пиздец. Притащи в систему шланг или гцц и собери с -fsanitize=address. Ну или комментируй куски функции result и смотри, где ты проебываешься. Я вижу единственный вариант, при котором адреса будут различаться - это порча указателя pta каким-то образом.
>1151364я как-то хотел такую написать, но на что-то переключился и забил. хотел плотно подрочить опции разные, с шедулером разобраться. но, наверно тупой.
>>1154732>>1154497> Пилят индусы из микрософта.ддк - не запатентованная торговая марка микрософта(с)(тм)(r), есть реализации других разработчиков для других ОС для разных целей, но таки да, чаще всего пилится тупорылыми индусами дл тупорылых индусов.
>>1155196ты студентик ведь еще, да?этож не в продакш код?
>>1155426>ты студентик ведь еще, да?>администратор нет, ты что.
>>1154856>Макроассемблер обоссыт этот конпелятор с 14-го этажа. вот кстати никогда не понимал что значит макроасемблер - ассемблер от макрософт и/или тот что с макросами? или он кроссассемблер. щас сижу не могу понять, как к листингу прикрутить С макросы, чтобы просто как-нибудь инклюдить хедер да и всё.наверно это как-то делают из С компилятора? в конце концов, макропроцессору не пофиг ли? а потом чтобы ассемблер своим препроцессором обработал эти числа как ему надо.
хотя необходимость наверно надуманная. просто заделаю хедер и в нём вставлю ассерты - кому надо тот перепишет.
>>1155488Препроцессор Си называется cpp, им можно обрабатывать любые файлы, не содержащие инвалидных с точки зрения Си токенов. Но макросы в ассемблерах обычно гораздо мощнее, чем сишный препроцессор, не вижу смысла его использовать.
>>1155527это вопрос соединения си кода с ассемблером. например, как туда засунуть смещения в структурах, константы? как-то же люди это делают.
>>1155531>это вопрос соединения си кода с ассемблеромОчевидным тулчейном каким-нибудь.Только зачем тебе городить такой огород Z80? Основная няшность сишечки в ембедеде это её кроссплатформенность, т.е. при определённом скилле работы с препроцессором можно ебашить говнокод который будет компилироваться на кофемолке и на тостере. Только при этом не забываем, что там будет какая-никакая унификация, куча всяких I/O и почих I2C,а вот тебе это нахуя на Z80 надо? Там же блять адресное пространство в 16 бит, пара десятков команд на ассемблере и примитивная шина управления. Ты больше выебешься прикручивать всё это, а потом плюнешь и в конце концов всё запилишь на макроассемблере или вообще сразу в двоичном коде (:
>>1155535>Очевидным тулчейном каким-нибудь.не, я понимаю, скомпилировать константный массив с offsetof и перекодировать в синтаксис макросов нужного ассемблера.ой всё. ещё я макросы левых ассемблеров не изучал. статик ассерт и сойдёт-и-так.просто никогда не задумывался о таких вещах.
>>1155426Я даже не студентик. Я просто решил попробовать программирование ради интереса и моя специальность далеко не связана с точными науками.
>>1155701fix Не студентик вуза программ тематики.*
>>1155701тогда окейа то код больно страшненький
>>1155783Чем же?
Есть мнение одного сеньора, что самая эффективная связка языков программирования нужная для понимая работы компьютеры и созданию приложений, которая только может быть, это Assembler 64x + C + Lua. Могут ли эксперты в данном треде это опровергнуть или подтвердить зеленому студенту?
>>1155916почему не лисп тогда? причём самописный. с это про ебать байты, а когда байты не ебутся, тебе приходится опускаться ниже и узнавать, почему же они не ебутся, и ебать их там с удвоенной силой.
Так, аноны, вот есть у меня условно такая функция, в которой мне нужно разбить одно большое число на небольшие куски которые я могу скормить другой функции, и я произвожу следующие операции:void foo(uint32_t num){uint16_t num1 = num%10000;uint16_t num2 = num/10000;bar(num1);bar(num2);}Так вот, в какой битности происходят арифметические операции uint16_t num1 = num%10000 и uint16_t num2 = num/10000 ? Они происходят в 32 битах и потом кастуются в 16, или компилятор сразу ебошит их в 16 битах и типа срет на то что num у нас 32-битный?
>>1155918и как он может срать на это? у тебя бы результат неправильный был бы.
>>1155918Почитай про integer promotion rules. Компилятор должен вести себя так, как будто считает в наиболее широком типе из двух операндов (причем минимум в int), поэтому твои вычисления идут в 32 битах, а потом обрезаются до 16 при присваивании. Но фактически компилятор может считать (и считает!) в том, в чем ему удобнее, лишь бы не было расхождений с референсным поведением.
>>1155916Так для понимания работы компа нужно начинать с его железа, а перед этим — с математики и физики.
>>1156024Ты предлагаешь ему начать с ТОЭ, пройти схемотехнику, потом ещё дохрена PC-специфик вразнобой читать, шастать по форумам, ибо литературы нет?
>>1156025Железо я бы предпочел изучать по программе какого-нибудь учебного заведения, которое тесно связно с фирмами, проектирующими и производящими компы.
>>1156029Сам бы нашёл с удовольствием такую программу, чтобы потом можно было в СЦ идти работать.
>>1156030>Сам бы нашёл с удовольствием такую программу>но искать не буду>и не искал
>>1156040> и не существует в Рахе
Хей, не подскажитье. Нужно сделать так, чтобы структура ложилась ровно на начало линии кеша. Знаю, что это можно сделать, не подскажите, куда копать?
>>1156092крис касперски - техника оптимизации программ.
ПЕРЕКАТ>>1156306 (OP)>>1156306 (OP)>>1156306 (OP)>>1156306 (OP)>>1156306 (OP)
>>1156092alignas