Это копия, сохраненная 25 марта 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Пожалуйста, пользуйтесь https://ideone.com/#, https://wandbox.org/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [i] или ∗.
Что читать:
- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- Черновик стандарта ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2385.pdf
- man/Dash/zealdocs
Чем компилировать:
- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
Что еще почитать:
http://c-faq.com/
FAQ из comp.lang.c. Древний, но все еще актуален.
Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.
Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).
Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.
Ben Klemens "21st Century C: C Tips from the New School" (2012)
Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)
Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)
MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard и http://web.archive.org/web/20190213011655/homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf
Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C
https://github.com/kozross/awesome-c
Онлайн-утилиты:
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
Прошлые треды:
- №49: http://arhivach.ng/thread/496205/
- №50: http://arhivach.ng/thread/502813/
- №51: http://arhivach.ng/thread/510484/ >>1540431 (OP)
Типа чтобы CGI/FPM пыхопня воспринимала хуиту типа
php_value "huipizda" "skovoroda" (ака директивы php.ini) прописанные в .htaccess и конфиги жопача.
Если нет mod_php, по умолчанию такие записи в конфигах будут просто выбивать 500 ошибку.
Всё, поставилось. Только херь какая то, командная строка а где кодить то?
Командная строка? Ну ты динозавр пиздец. Скачай себе терминал.
В блокноте. Можешь в Notepad++, он круче. гыгы, привыкай, раз в прыщавое говно залез - твой выбор
Ради бога, почему нет? Компилятору всё равно откуда берутся текстовые файлы с кодом, главное ему их подать в командной строке, чтобы скомпилил в рабочую программу.
Пфф... ну ладно
Импердолинг, для написания хелоуворлдов и прочих типичных лаб нужна студия на 20 гигов.
Удобства всегда нужны, иначе не было бы шикарных отелей, все бы ночевали в клоповниках, всё равно недолго же.
Скачай VIM, еблан, он на винду есть, и текстовый режим 720x400 поддерживает, и даже запоминает изменения с предыдущих запусков (что иногда напрягает, потому что иногда хочется смело зажать U и сделать как было, когда открыл), и результаты поиска подсвечивает (что тоже напрягает, убирается поиском ~). Но если сидишь на русской Windows 2000, то придется в панели управления менять язык неюникодовых программ на буржуйский, и тогда полетят все твои сейвы "C:\Documents and Settings\Анон\Мои документы\Игра для лоботомированных\savegame.japidoras". Делай выбор, Нео.
480x360, 4:30
Насрал тебе в рот
Вот так вот - нихуя вы не можете, а только пиздите. Вот так же моя проблема в сто тысяч тежялее вашей, а вы только пиздите - да ты просто сделай то, да ты просто сделай это, все не спят по трое суток и норм.
А мне ничего не надо, я просто хочу чтобы этот поганый участок земли снесло ядерным ветром.
1280x720
"Удобства" уровня использовать студию для написания хелоуворлда - это когда ты заказывал садового гномика, а тебе привозят во двор чугунную копию статуи свободы в полную величину, которая потом ещё и заваливается набок, как Пизданутская башня, ибо фундамент под неё нихуя не сделали.
Дебил с дебильными аналогиями их жопы. Типичная красноглазая пердоля. Как можно программировать не владея логикой? Поэтому линуксы вечно такое говно.
Объяснения для дебила: Твоя аналогия никуда не годится, потому что студия обладает всеми теми же свойствами, что и блокнот, т.е. является его абсолютной функциональной копией. Наличие дополнительных свойств и возможностей не отрицают базовые, которые все те же самые.
Да, и при этом она весит не 100кг, как гномик, а 20 гиг, которые надо откуда-то высрать.
При этом места на нищесосоде у студодауна может и не быть.
Not sure if trolling or just stupid.
Чем тебя не устроил досовский Borland TurboC, нищук из 2004 с жопарезом по трафику? Надо было обязательно лезть и качать tcc в исходниках? Ну малаца, переводи теперь их сам в машинные коды в блокноте - компилятора же у тебя нет.
Анус себе установи. Куда лезешь, ламер. Научись сначала пользоваться компьютером.
extern char _binary_start[];
и
extern char _binary_start;
При попытке доступа, во втором случае софт сегфолтит. В первом - всё ок. Сами символы определяются в отдельном .o файле, и затем прилинковываются к основному.
>OpenWatcom
В этой теме крутой нубский дебагер. Так просто и удобно показано содержимое переменных в реальном времени.
Потому что в первом случае ты копируешь объект, а во втором указатель. По объекту нельзя итерироваться (array[]++ тебя выходит).
хороший илитам как обычно хуй установишь и буду сидеть как еблан искать туториалы в инете?
Бля, качни бинари, либу, распихай все попакам, вбей нужное в PATH и юзай в консолечке, чего тебе еще?
панчлойн
>Неужели так сложно написать аккуратно? Или же отследить утечки трудно?
Тупые школьники не умеют
Если программист не совершает ошибок - необходимо проверить его пульс. Серьезней некуда.
>>74302
>Почему происходят утечки памяти в программах на Си?
Выделение памяти (чаще всего - malloc(), calloc()) без последующего освобождения. Учитывай, что в коде с большим количеством ветвлений отследить это глазами может быть сложно. К примеру:
int f() {
char* buf = malloc(255); //резервируем память
if(usebuf(buf)) {
free(buf);
return 1;
} else return 0; //утечка
}
>Неужели так сложно написать аккуратно?
Могут поджимать сроки, ты можешь плохо выспатся или банально забыть вызвать free() в одной из веток. От глупых ошибок никто не застрахован. Альтернатива - это резервировать память на стэке (через alloca() или локальные переменные), но его объем сильно ограничен, а при переполнении программа почти гарантированно свалится с SIGSEGV (когда при утечке на куче продолжит нормально работать, пока не сожрет всю память).
>Или же отследить утечки трудно?
Без использования специальных тулзов по типу memcheck - сложно. А их собственно до того момента, пока утечки не начинают быть катастрофического масштаба, тащат редко. Да и обнаружить утечки во всяких специфичных случаях даже с такими тулзами может быть проблемой, т.к. производительность во время их использования околонулевая, и прогонять полноценные тесты после каждого коммита может быть сложно. Другой вариант - статические анализаторы кода, но лицензии для энтерпрайза стоят сотни нефти, да и вообще вещь не слишком популярная.
Понятно, спасибо. Не так уж и страшно выглядит.
и нахуя, есть gcc/clang
Когда устал, когда только проснулся, когда уже вечером хочешь спать, когда не выспался и в обед начинает вырубать в сон - любую хуету можешь написать, любую утечку. И никто тебя домой поспать не отпустит. А если ещё дома проблемы и голова другим забита, а надо проект пилить? Ошибки не от того что программист тупой, а от внешних факторов.
как заебали эти охуительные истории или тут вся борда вкатывальщиков ебанатов.
ты на живую пишешь, чтобы маллоки и фри хуй знает где пихать?
архитектуру не проектировали, требования не узнавали, сразу склр и начали код хуячить, да?
Просто когда пишется тестовая версия программы, или какого-нибудь функционала, на освобождение памяти никто сильно внимания не обращает по очевидным причинам - программа в рантайме при тестировании долго не будет, а значит при завершении она освободится в любом случае. Так и забывают накачать код справедливыми free()ками
Поэтому когда речь идет про утечку, обычно имеют ввиду программы которые работают в фоновом режиме сутками. Поэтому если программа сожрет память и обратно её не отдаст, через некоторое время у тебя RAM не остается вообще.
>Я ведь сразу собираюсь всё это прописывать.
Освобождать память тоже надо аккуратно. Если освобождаешь, обратиться уже не сможешь. Так и может сегфолт выйти в какой-нибудь момент. Поэтому перед тем как пихать free(), подумай есть лии где-нибудь места в коде, которые по идее могут использовать выделенный участок памяти. Поэтому пользуйся комментариями -- оставляй заметки, что выделенная память должна быть освобождена если закончил с ней работать.
> сразу склр и начали код хуячить, да?
Ну как бы да, я просто придумываю программу которую мне надо, сажусь и пишу её.
Ниче не течет, брат жив. В коде ниче сложнее if-else нет. Проги для мультимедии.
Проебаться могу только если затуплю где-то по какой-то причине, указанной в предыдущем посте.
Если чё-то не устраивает в работе программы, можно запустить профилирование и посмотреть чё как.
Самый знаменитый баг у меня так и был. По невнимательности 1000 и 1000000 доли секунды перепутал, а так как тестов я тоже не пишу баг жил долго, но потом он мне надоел, я его нашел и исправил.
>В коде ниче сложнее if-else нет
Сложность си не в синтаксисе, а в том, что практически все надо писать вручную, и только после тысячной отладки это будет работать нормально. В основном происходит адская ебля с памятью, исправлением сегфолтов и прочей подобной хуйни.
Такое происходит когда ебланы используют вещи не по назначению. А конкретно, пишут сложные алгоритмы в низкоуровнемом си-стиле и велосипедят библиотечные фичи. Короче говоря, это любой узколобый приверженец одной тулзы, наподобие сишников, отрицающих плюсы в 2020 году.
>отрицающих плюсы в 2020 году.
Какое отношение плюсы имеют к си? Да и, на секунду, в 2020? Совсем другой язык, нестаибильный с кучей перемешанного говна. Это как сравнивать пхп с плюсами.
Блядь. Ты долбаеб? Я вообще не понимаю таких тупорылых уебанов, как ты. Сука. У тебя есть все: знания о МК, как работают схемы и тд. Язык программирования - это инструмент! Полно, блядь, инфы о том, как программировать МК, сука, но нет, я лучше напишу хуйню, которую даже не пытался вбить в поисковую строку. Иди на хуй. Просто пиздец. Ебучий инженер-схемотехник не может загуглить и освоить элементарную хуйню для своей задачи. Что ты, блядь, за инженер вообще такой? Я понимаю, если речь идет о каком-нибудь уебане, который из шахты вылез, услышав о 300к/нсек в IT и решивший вкатиться. Но, блядь! Эти вопросы задает не шахтер Василий, а человек, казалось бы, обладающий логическим мышлением и знаниями в СВОЕЙ технической специализации!
Ну чо ты наехал то, желчный. Я же говорю, жду, пока мне привезут даром отладочную плату, а без неё я даже тамошний хелоуворлд не смогу осилить (помигать светодиодом). Вот я и хотел пустоту занять ковырянием в самом языке. Я помню, что когда ковырялся в чужом коде своего изделия, то у меня возникали некоторые вопросы, вроде "зачем ставить два раза указатели", но ответы быстро гуглились. Я не чувствую себя уверенным программистом, потому и спрашиваю. Я недельку проглядел функции, которые в описаны в библиотеке HAL, в принципе понял, что оттуда можно брать, потому больше там ковыряться не хочется. А от скуки порешать всякие тупые задачки я не особо против. Но нужно ли это?
Это такая категория паразитов. Спецы ассказывать про себя слезливые истории, чтобы окружающие сочувствовали и кормили с ложечки. И так каждый раз. Лучше настрочить еще одну историю про себя бедненького в стену текста, чем вбить пару слов в гугл. Клиническое паразитическое социоблядство головного мозга.
>Но нужно ли это?
Неа, и микроконтроллеров своя специфика, деревья ты на них вертеть не будешь, хэши гонять тоже, а вот порты дергать и байты гонять это да.
Плюсы сложнее Си, как ни крути. Надо осваивать, всякое ООП осиливать. Сложна, короче. И форматированный ввод/вывод все равно подтягивать из Си, лол
Аноны вопрос по стилистике. Занимаюсь мелким фрилансом, поэтому варюсь в собственном котле и естественно стилистика "эволюционирует" отдельно от какого либо сообщества.
В последнее время начал злоупотреблять следующей хуйней.
Насколько заниматься подобным - хуево?
Заеьись, я тоже переменные все вначале объявляю. Только однотипные через запятую. Ну и переменные я слитно пишу, а нижнее подчеркивание только в имаенах подпрограмм. Ну и верхний регистр только для структур, дефайнов и констант.
*про >форматированный ввод/вывод
> Снейк кейс на сях
Ну ты и пидор. Зайди на гитхаб майкрософт и посмотри в каком стиле на сях пишут нормальные люди.
Зашел посмотрел, пишут еще функции таким же образом.
Но я никогда не понимал подобной хуйни ибо все сливается.
Я функции кемлкейзом пишу, переменные снейкейзом. Охуенно же.
В чем смысл писать функции и переменные в одном стиле, если можно разными и станет читаймее?
>>75255
>Наглядно
Вот это главное, спасибо.
Я вообще предполагал и предполагаю, что это все должно оптимизироваться до обычного IF, а все промежуточные переменные сократяться. Нахуя тогда компилятор этот ебучий нужен?
Что за макрос UNUSED? Что делает и как? Это какая-то своя реализация? Вроде, в языке такого нет.
Просто не видел такой и не могу даже представить что она делает, исходя из названия. А ты что, пишешь и не понимаешь что пишешь?
Ничего не делает, просто убирает ругань компилятора на неиспользуемые параметры. Видишь же, что онм не использованы.
Нет. Я у тебя спросил что делает этот макрос, ты ответил "хз". После чего я задал вопрос "пишешь и не понимаешь что пишешь?". В чем тут тралинг проявляется?
Значит надо. На будущее или еще зачем-то, только они знают зачем. В любом случае тебя не должно ебать пока не станешь работать в Майкрософт и писать этот код.
Мне тыкнули в майкрософтовский код, мол бери стиль оттуда.
Я прикрепил скрин, на котором показан стиль майкрософтовского кода.
Ты вломился и начал распрашивать меня, че делает некая макрофункция, которая по хорошему может вообще что угодно делать.
Удивляешь почему я не знаю.
Почему то считаешь, что это я писал.
Не тралишь.
Ты какой-то с отклонениями.
>вроде "зачем ставить два раза указатели"
Ты даже тут вопрос неправильно сформулировал. Ты все еще не знаешь что такое указатель на указатель. А знаешь, что существует еще указатель на указатель на указатель и т.д и т.п? А про разницу константных указателей и указателей на константу ты вообще и не слыхал. Короче, иди макакизм учи.
>Мне тыкнули в майкрософтовский код, мол бери стиль оттуда.
Бля, и что в нем уникального? Писать условный оператор слитно с операторами? Ебать... Эти люди, которые говорят ориентироваться на чей-либо стиль сами понимают зачем это? Или им достаточно было знать ЧЕЙ это код?
@А НУ РАЗ МУКАСОФТ ТО КРУТО)))00))
с операндами*
>порешать всякие тупые задачки
Нахуй не нужны эти задачки. Лучше выбери RTOS для своей микрухи. Вызубри доки от корки до корки. И будешь писать как белый человек с нормальным распараллеливанием и менеджментом памяти. А не как холоп с проёбаной архитектурой на прерываниях и периферийных таймерах.
Если я скину изи задачу про разделяемую память и семафоры, то ее решит мне кто нибудь?)
> Лучше выбери RTOS для своей микрухи.
смотришь на компилятор к своей микре, не умеющий в malloc
>utmp.h
Потом просто вычитаешь из текущего времени время прошлого логина, если >= 20 минут - помечаешь.
Спасибо
Боже я все пытаюсь найти и понять как использовать этот файл
Я подключаю заголовок, он дает задает тип структуру, а дальше то что?
>>linux
Настоящая система для настоящих разработчиков любого стэка. Также широко используется учеными.
Жаль, что мой ноутбук недостоин этой великой системы, и она на нем работать не желает в любом блять виде.
Мимо
насколько же я тупой
Я не могу разобраться, как с этим работать
я делаю setutent беру getutent ну и endutent
Мне ut_tv.tv_sec возвращает 50 лет
Что я делаю не так?
Мимо, Эйсер. В любом случае мобильный пень вместо процессора уже как бы намекает, что ничего путного все равно не выйдет.
Ну там все пишут кемлкейзом, в чем смысл?
Этим наверное платят за строчки кода.
Вот как раз к срачу с прошлого треда пример нормального стайла, где даже однострочное тело ифстейтмента оборачивается в скобки, благодаря чему код становится в тысячу раз читабельнее, чем без них. И напомню заодно, что люди, которые в жс/питон стайле однострочный иф стейтмент не оборачивают в скобки - это студенты и пидорасы.
Скобкодебил, катись обратно в свой лисп текстики жрать. А си это ассемблер, в гем нет пидорских скобачек дрочить на них, только необходимые серьезным людям для серьезного дела.
>пример нормального стайла,
>Имена макросов слиты в одну нечитабельную хуйню
Почему я должен доверять этому мнению?
Видимо тут специализация на коллективную разработку. Скобки везде и на отдельных строчках делают удобным и безопасным добавление и удаление нового кода внутрь. А то, без скобок, добавлять их потом - реально боль в заднице.
У меня есть BITMAP картинка. Скриншот сделаный через win32 API.
Я хочу конвертировать это в png с помощью libpng.
Я не знаю какой указать bit depth параметр, но я посмотрел, размер данных 8294400 байта для картинки размером 1080 * 1920. Т.е. на один пиксель выходит 32 бита (видимо это потому-что я на 32-битной системе?).
Но libpng кажется 32 бита не поддерживает. В мануале в поддерживаемых значениях: 1, 2, 4, 8, 16
И код выдает ошибку, что неправильное значение у параметра bit depth.
Не понимаю как это сделать мне.
Когда то пару месяцев назад, спрашивал тут насчет подключения файлов и организации правильной структуры проекта.
Вообще сейчас возникла проблема.
Некоторые файлы сильно раздулись, хотелось бы вывести их static функции в отдельный файл, что бы улучшить читаемость.
Насколько хуево инклудить сишный файл с локальными функциями, напрямую в основной сишный файл?
Я не вижу иного пути, т.к. у меня уже некоторые файлы по 3 тысячи строк.
Вроде разобрался. Там есть
>PNG files reduce possible bit depths to 1, 2, 4, 8, and 16. If your data is of another bit depth, you can write an sBIT chunk into the file so that decoders can recover the original data if desired.
Правда у меня все равно ничего не вышло. Черная картинка получилась, но тут уже вы не телепаты.
Затоновае купил в кредит по акции в говнонс за 24999.
а мог бы взять старый макбук и в хуй не свистеть, благо человеческий юникс туда завезли из коробки
>Т.е. на один пиксель выходит 32 бита (видимо это потому-что я на 32-битной системе?).
Нет, скорей всего, это потому, что на один пиксель приходится четыре канала ALPHA RED GREEN BLUE, каждый по 1 байту. Хотя BMP ебанутый формат. Нужно смотреть какие настройки были, когда делался скриншот. Там может быть без альфы или ещё какая-нибудь хуйня.
А bit_depth указывает глубину одного канала в битах. Значит у тебя нужно указывать 8.
Да, ты прав. Я менял настройки и натыкал, но все равно не правильно понял, спасибо.
Теперь мне наверное только поменять отсчет снизу наверх, вместо сверху вниз.
Атомоговно (переименованное в "типапеньтеум", потому что даже ебланы за 5+ лет кормления говноатомами, начали что-то подозревать). Неработающее в нормальных ОС видео как бонус.
Ах, да, бонусом в атомовысерах идут невероятно мутные 1366x768 TN вместо экрана, корпус толщиной с твою мамашу и, отвратительный тачпад и крайне хуёвое общее качество материалов и сборки.
Всю жизнь (разве за последние поколения не скажу) была отдельная серия мобильных процов. Ничего не знаю а младшие процы 12-14 годов вполне сносно себя вели на ССД.
>>77412
>мутные 1366x768
Необходимость FHD на 15 дюймах охуеть сомнительная.
Даже если так - это каприз, несколько лет назад выше FHD ничего и не было, а FHD было уже в ценовом сегменте за 50.
Сколько людей знаю - всем похуй всегда было на разрешение.
>отвратительный тачпад
Все тачпады отвратительные.
>качество сборки
Хуйня какая то снобская, типо если засунуть между булок и начать потирать под левой петлей скрипит? Да всем похуй на это, кроме пары тревожных ОКРшиков, на которых всем насрать.
>хуёвое качество материалов
Единственное что правда, но толку, сейчас во всем потреб сегменте так. Это и хуясусы и самсунги. И похуй.
На асус можно если разъебется корпус за 2к найти, а на сосунг или сони тебе это выйдет в десятки килорублей, если вообще найдешь.
Короче ты снобский дурной нерд, не понимающий, что кроме ТТХ есть гораздо более важные кач-ва.
В маках уже 7 лет как 3к IPS в 15".
>все
Атомовыпердыш, плиз. Уже как минимум 10-12 лет везде (кроме говна за 25к) есть нормальные тачи.
>более важные качества, чем просто не быть говном
Ясно.
Мимо. За 20 кусков налом, ультрабюджетно. Если накоплю полтинник - возьму на Али Хасси с более-менее нормальным охладом, 1050 и гиперпнем (который мощнее моего FX на станционаре) в сокете.
>Необходимость FHD на 15 дюймах охуеть сомнительная.
Да, всего лишь позволяет открыть 2 окна рядом, не превращая буквы в трехпиксельную хуету отрицательным масштабированием.
>Все тачпады отвратительные.
Мышеблядь, научись пользоваться клавиатурой. Тогда ты поймешь, насколько выигрышно не отрывать руку для манипуляции курсором, а лишь отогнуть большой палец (один за пробел отвечает, второй за тачпад).
>Хуйня какая-то снобская
Ага, год норм юзается, еще год - все хромает, а потом менять, и так по кругу. Конечно же ты не говноед.
мимо
>не превращая буквы в трехпиксельную
Превращая их в издевательство над глазами. В своем уме такой текст мелкий читать?
Точно так же будешь на лазерную коррекцию тратиться через пять лет.
>Мышеблядь
Ноги не нужны.
>год норм юзается
Б\Ушный говноасер купленный в докризисные за пятнашку, с докупным за 1000р i7, 2012 года, вот до сих пор служит.
А ты продолжай строить свой манямирок и покупать оверпрайснутую статусную хуйню, придумывая различные оправдания.
>издевательство над глазами
Мимо, я вообще ЭЛТ подключать люблю. Я просто одну из возможностей описал. Вообще, 1080p более адеватное разрешение, к которому и 720p лучше апскейлится.
>Ноги не нужны
Да я не против мыши, когда активно что-то прокликиваешь, но иногда по мелочи удобнее откинуть большой палец. Не фантазирую, а вспоминаю, как меня реально заебывало убирать руку вправо.
>покупать оверпрайснутую хуйню
Опять мимо, но мой ideapad 510-15isk меня конкретно подзаёб своим всратым корпусом, охлаждением дующим из под петли по всему экрану, кулером, который иногда ловит что-то твердотельное принимается косплеить звук ГАЗ-2410, самопроизвольно высверливающимся крепежом и тем, что после недавней замены опять весь в трещинах, блядь, выдергивает нитки из моего свитера, когда руку убираю, фиолетовым пятном на экране, потому что климат влажный, и еще кое-какими радостями. Ты скажешь, это сугубо индивидуальная хуйня, а я отвечу, что это элементарное удешевление этапа производства, где вещь по идее должна доводиться до ума. Решительно не могу терпеть такое говноедство, готов перейти хоть на ThinkPad T43 и чувствовать себя успешным человеком. Благо, на замену 10-й винде и 18-й убунте есть божественная XP и какой-нибудь легкий линукс - тысячи их. Это всяко лучше, чем жрать говно.
VSCode няшечка
>>1578132
Антоны. Короче вопрос.
Знаю, что на Си можно написать много чего, однако не знаю, где намутить реальные вакансии с зп?
Вкатываюсь по учебнику Кочан Вуд. Ранее читал книгу head First C Не дочитал кстати прошел курс на сололерне и читал старую книгу стивена Праты.
Вот прочту я Кочана, куда двигаться дальше? Читать Седжвика алгоритмы на Си? А дальше?
кем устроиться по Сишке?
Пока работаю в техподдержке банка ,но знаю Python, shell и немного жабу.
двачую линуксо коллегу.
Ставь любую коляску типа минта, убунты, манжары и юзай. Искаропки все работает.
все просто :
набрал код в любом редакторе vi, emacs, gedit, pluma, sublime...
далее выполняешь нехитрую команду:
gcc my_hello_world.c - o my_hello_world && ./my_hello_world
Сия команда просит компилятор скомпилировать данные из файла в исполняемый файл
в случае успешного выполнения этой команды инструкция ./ запустит этот файл в текущем каталоге.
Да не, меня просто позабавила эта инструкция по сборке, которая годится только для программы из одного файла.
В принципе любая программа на си может быть из одного файла
Ага, а потом думать как поменять шрифт, как сделать чтобы сеть коннектилась, как флешки открывались, как убрать ебучий пароль и тд
А несколько файлов сразу и не бывает. Как проект, так и сборка для каждого файла своя.
Читаю k&r
>/ getbits: get n bits from position p /
>unsigned getbits(unsigned x, int p, int n)
>{
> return (x >> (p+1-n)) & ~(~0 << n);
>}
Допустим, есть некое число, из которого я хочу получить 8 битов со 2ой позиции. Получается: x >> (2 + 1 - 8), то есть x >> -6. Но ведь сдвиг на отрицательное число - это undefined behaviour. Как так?
А все, дошло, позиция считается справа налево, но количество битов, что мы берем, идет слева направо. Таким образом со второй позиции нельзя взять 8 битов.
Бамп вопросу
Хуёгика. У тебя что, основной алгоритм, ядро решаемой задачи, раскидан ифами на 50 функций, или божественная монолитная процедура с сотнями goto? По-любому есть какие подпрограммы низшего порядка, и их подзадачу можно как-то по-человечески назвать.
У меня в файле куча Set\Get функций описана, конструктор и прочая хуита. Логики там поменьше, но таки да, там пара не маленьких таких свичкейзов. Но большую часть как раз Set\Get занимают ибо они имеют необходимость влиять на логику.
> По-любому есть какие подпрограммы низшего порядка,
Все что можно - раскидано. Большая часть вызывается 1-2 раза, но все равно обернута в локальную функцию во имя читаемости.
size += -size % sizeof(long);
Могу рассчитывать на премию Кернигана, или two's complement и идентичный остаток для знакового и беззнакового деления - сугубо x86, и я - UB-кладбище-пидор?
https://pastebin.com/rzzeaADh
Хедер додумайте сами. На форматирование первого if жалуйтесь pastebin пидорам, у которых, в отличие от здоровых людей, tab=4, pi=3.18, iq=70.
куда?
Попробуй qtCreator.
Оно тебе не нужно
Чтобы на нём делать всё что угодно. В первую очередь драйвера.
Петухи могут сколько угодно кукарекать, но драйвера основна основ по прежнему пишутся онли на си.
Какой набор инструментов нужен для написания драйверов? Желательно минималистичный.
Помогите!
Дали задание в вузе, найти неопределенный интеграл методом Ньютона.
Я пытался нагуглить что это такое и охуел от сложности, там какие-то трехэтажные формулы и ничего вообще не понятно. Где есть объяснение простым языком как решать интегралы этим ебучим методом?
не знаю.
придётся разбираться как это решается. халявы здесь нет, сиди и вкуривай все эти статьи и прочее пока не поймёшь. увы, но моя практика говорит что других путей нет.
Не волнуйся, в армии всему научат, от забора и до обеда будешь программистом.
>Дали задание в вузе, найти неопределенный интеграл методом Ньютона.
Определенный может? Как ты неопределенный численно найдешь
Вот только драйверы писать не нужно, они уже написаны, не тобой, а свои не напишешь, никто тебе спецификации железа не даст.
Ну ты прямоугольниками интеграл найти можешь?
Спроси в /б/
Интегрирование - это наиболее простые численные методы, они просто в лоб одной функцией пишутся чаще всего, буквально 3 строчки.
Метод ньютона, это как метод прямоугольников/трапеций/парабол, только по 4 точкам и с полиномом 3 степени или что-то другое? Какой порядок точности должен быть? Может быть тебе просто вот эта таблица нужна?
Скинул бы всю формулировку. N - число сегментов (или точек) разбиения, скорее. Численный метод 18 порядка точности много побочек будет иметь, мне кажется, и это уже не учебная задача, а довольно узкоспециализированная, а вся сложность в выводе соответствующей коэффициентов.
Найди в общем как методом парабол/симпсона/гаусса считается интеграл, и подставь вместо 3 точек 4 точки с весами 1/8 3/8 3/8 1/8 из таблицы, почти точно уверен, что это то что тебе нужно. Простых популярный объяснений с картинками тысячи для метода парабол.
даташиты можно найти ко многим микросхемам в на той же схеме от материнки ноутба или я ошибаюсь?
Я эту разницу понимаю так: инт минимум 2 байта, лонг 4 байта. То есть в лонг влезет большее число. Но в зависимости от платформы разницы может и не быть.
Вот тебе с вики про инт:
Как правило, в современных компиляторах для 32- и более -разрядных платформ имеет размер 4 байта и диапазон [−2 147 483 648, +2 147 483 647], однако на 16- и 8-битных платформах имеет размер, как правило, 2 байта в диапазоне значений [−32768, +32767], что часто вызывает путаницу и приводит к несовместимости неаккуратно написанного кода
Ну смотри у меня 64-х битная система.
лонг это 64 разрядное число
инт это 32 разрядное число
шорт это 16 рарядное число так чтоли?
а какой смысл в том какой разрядности число? что в си реально чтоли диапазон у числа ограничивается его разрядностью? почему так?
а пробел. извините, я дегенерат.
Ну а как иначе, лоляндрий? В проце есть 64-разрядная схема, которая с одного импульса от счетчика тактов выстреливает результат арифметической операции. Сделай больше, если хочешь. Или длиннку напиши, но без перегрузки операторов не закосплеишь, будто это нативная возможность.
спасибо большое, понял. ну я просто ньюфаня которая с питона перекатывается на си. поэтому вопросы такие, там то этого нет, там всё гораздо проще.
Скинь код, я и на линуксе запущу.
Так это не на виндоус, а в твоём компиляторе, если что. К виндоусу это не имеет никакого отношения и скомпилированный разными компиляторами значения будут разные.
В mingw long double - это десятибайтовый флоат (выравнивается до 16), double - восьмибайтовый, а float - четырёхбайтовый.
Очень странно что у тебя в студии long double имеет такое же максимальное значение как и double, ведь в действительности почти все пк-процессоры поддерживают именно десятибайтовые флоаты на аппаратном уровне.
>>81110
Снова зависит от компилятора. В mingw 32 32 16, 64 - это только (unsigned) long long. Сlanq такой же результат выдаёт.
Давай я тоже вспомню. Есть такой геймпад, дуалшок3, так вот, мучились жопой лет пять написать ему драйвер xinput под винду, в результате так и осталось глючное говно как и твои потуги на ввидеодрайвер, вдобавок написан на C#. Так что, куда ты вообще лезешь со своим ССЫ я вообще не пойму, если драйвера даже на шарпах пишут. Как и всегда, плюсы являются единственным адекватным вариантом, грамотно сочетающим и возможности и нативную низкоуровневость. А ты со своими ссами такогй же дебил как и те шарпомакаки, только с другой стороны шизо-максимума говноедского.
То что система в SDK наборе предлагает
спасибо большое за ответы всем, немного понял. сегодня вот про битность процессоров читал чтобы понять хоть на что она влияет. но я всё равно не особо понимаю зачем в языке эти short которые уерзают до 2 бит и long которые расширяют int 4 бита до 8-ми бит
Зачем нужно биты изменять?
Ты имел ввиду байты, да?
Если ты имеешь почему один и тот же тип может иметь разные размеры, то этого никто не знает - так получилось, наверное. Для int в требованиях только поддержка [−32767, +32767], например на ардуине int - 16 битный. На 32-битных процессорах память быстрее работает при обращениях с выравниванием в 4 байта, и потому int стали делать 32-битным в реализациях, потому что программа от этого только быстрее начинала работать, я думаю.
https://ru.wikipedia.org/wiki/Система_типов_Си
И есть всякие int64_t и uint8_t, если тебе нужен определённый размер.
Если в общем для чего нужны 2 и 8 байта, то 2 для экономии памяти, и ещё есть всякие simd-инструкции с пика, который за одну инструкцию могут переварить в два раза больше 2-байтовых чисел, чем 4-байтовых. Это штука может очень заметно ускорить обработку изображений, где все цвета 8-битные и в редких случаях 16-битные. Ещё они места само собой меньше занимают, что позволяет на микроконтроллерах сохранять больше, а на пк (где проблем с памятью уже считай нет) умещать в кеш в два раза больше данных. Кеш - очень полезная штука, массив которые влез в кеш обработается в некоторых случаях в несколько раз быстрее, чем тот, который не влез.
8 байт нужны, потому что это естественный размер 64-битных систем, все указатели там 64 битные и программа может работать с 64-битными считай с той же скоростью, что и с 32-битными. Нужно для размеров файлов, времени в миллисекундах. Длинная арифметика на 8-байтовых будет в два раза быстрее и так далее. Двух миллиардов 4-байтового числа хватает не всегда.
Но да, 4-байтовый int покрывает 80% применений, и остальные 19% покрываются 1 и 2-байтовыми целочисленными типами, если не считать указатели.
спасибо тебе большое, анон за такой развёрнутый ответ. мне много стало понятно, не всё конечно, но многое. спасибо большое теперь уже хоть представление есть зачем это нужно.
да перепутал биты с байтами. байты имел ввиду, спасибо ещё раз.
Анон, а если я здесь заменю 32 на 64(система 64 битная) изменится ли от этого память которую занимают типы данных (поведение компилятора) или нет?
Размер size_t измениться. И всех указателей, int* и любых других. По идее, никогда не пользовался студией.
Ты можешь проверить это сам за одну минуту.
Да, ещё если интересуют различия - в 64-битных системах 16 регистров, а в 32-битных 8 регистров. Регистры, это, грубо говоря, сверхбыстрый (быстрее кеша) кусочек памяти на процессоре. Вот все эти переменные в циклах for, или возврат функций - в действительности они находятся в регистрах и в память они могут даже не попадать. Соответственно 64-битная программа содержащая инструкции с использованием всех 16 регистров будет немного быстрее, потому что ей нужно меньше переменных помещать в память. Вряд ли 64-битный процессор сам сможет подменить в 32-битной программе операции обращения к памяти на работу с дополнительными регистрами - не знаю как там устроена совместимость с 32-битными программами или отвечает за это вовсе операционка на ходу переписывающая коды. Но и памяти 64-битная чуть-чуть больше скушает, за счёт 8-байтовых указателей.
>в 64-битных системах 16 регистров,
Что за бред? Посмотри сколько регистров у итаниумов например.
Он скорее всего имел в виду x86-64 архитектуру, там у 16 логических регистров.
Я про обычные распространённые компьютеры с х86-64, который умеет и в 32-битные, и в 64-битные программы. Он же для обычного пк на студии пишет и судя по вопросам только-только вкатывается, верно?
Очевидно какой-нибудь arm может иметь какое-то другое количество регистров.
>>81750
да, анчоус я ньюфаня. а можешль какую-нибудь книгу дать по которой ты освоил это всё, а то я всё равно много не понимаю мне нужен материал где с азов начинается для ньюани, а то я работу железа знаю только как радиоэлектрик, что есть процессор, у него есть пины, есть питание, есть там многосигнальные каналы(шины), но про какие-то регистры, кэши я вообще ничего не знаю.
>и любых других. По идее, никогда не пользовался студией.
>Ты можешь проверить это сам за одну минуту.
как?
Написать printf("%d %d %d\n",(int)sizeof(size_t),(int)sizeof(void*),(int)sizeof(long)) и запустить в x86 и x64, посмотреть что и для каких типов поменяется. Можешь ещё на _Alignof(<название типа>) посмотреть, вдруг там выравнивание структур изменяется при переключении между 32/64 битами - я не знаю.
Книгу не могу посоветовать, я ассемблерные вставки дрочил пару месяцев и когда находил какой-то странный эффект искал чем он объясняется, и всё. Знания очень поверхностные, просто чтобы более-менее понимать как оно работает и писать немного более эффективный код.
Точно не обещаю, но тебе и не нужно ничего знать про регистры и кеши в 95% случаев. Это нужно в каких-то ускоспециализированных прикладных вещах - если ты только учишься, просто поставь x64, изучай алгоритмы и внимательность, а про регистры, выравнивания и кеши забудь на год или два - оно только мешать будет. За исключением кеша, наверное - но достаточно просто иметь в виду что он есть и вдвойне это иметь ввиду, если будешь писать многопоточную программу.
спасибо большое понял ещё раз, ты очень мне сильно помогаешь, анчоус. оставайся в треде и в будущем, молю.
>просто поставь x64
Глупость, и вредная. 64 бит не нужно если твоя программа не использует 4+ гигов оперативы. Получится бесполезно раздутый размер и жор той же оперативы ради... ничего. Мне понадобилочь 64 бит только пару раз, для вмешательства в чужие программы (запись в память и инжект длл), корые были 64 бит, т.к. битность должна совпадать, иначе никак.
А вот что нужно ставить, так это юникод. За char надо сразу бить в ебало с вертушки и ломать руки.
А юникод это получается не раздутие? С таким подходом и юникод не надо юзать если кроме англ. символов ничего не используется.
>С таким подходом и юникод не надо юзать если кроме англ. символов ничего не используется.
Vvedite razmer massiva:
>"Юникод не нужен" ко-ко-ко
Ладно, а если серьезно. Ты, тупой выблядок имбецильной спидозной шлюхи, вообще в курсе, что Windows уже 20 лет (ДВАДЦАТЬ ЛЕТ, ТУПОРЫЛАЯ СВИНЬЯ!) является юникодной. Это значит, в системе все функции - юникодные, работают только с юникодными строками и никак иначе. Неюникодных функций НЕ СУЩЕСТВУЕТ.
И тут ты спросишь: "А как же мои (и таких же имбецилов) выдресты char★ тогда работают?". А вот как, при каждом вызове системной функции происходит конверсия каждой строки в юникод. Для каждой строки создается буфер в два раза больше (юникод двухбайтовый) и вызывается функция преобразования строки, заполняющая его юникодом, который и подается потом в функцию. Ты понимаешь, что это кошмар ёбаный? Вон, выше кто-то мямлил про оптимизацию кешем и регистрами, но о какой оптимизации речь, если ты своими руками творишь такой пиздос? Это всё равно что разбить кому-нибудь лицо кувалдой, а потом подстричь ногти, мол нехорошо когда ногти неаккуратные. Да какая разница какие ногти, если ты ебальник размочаалил в смятку? Оптимизаторы обоссаные, придурь неизлечимая.
И дело не только в лютом говнокоде получающемся из за char и не только в долбаных кракозяблах у всех кто не в твоей обоссаной деревне живет. Это говно еще создает скрытые ловушки в коде и поощряет грубые ошибки.
Смотри сюда. Ты в курсе, что память имеет атрибуты как файлы, что может быть защищена только для чтения например? И что строковый литерал является такой запрещенной на запись памятью? Так вот, есть функции принимающие строки, но при этом и меняющие их тоже, пишущие в них. Таким образом, если ты подашь константную строку не читая описание функции как обычно дебилы делают, ты получишь падение программы. И это хорошо, так ты поймешь где проебался, но ТОЛЬКО В ЮНИКОДЕ. Если же ты будешь срать чарами, из за преобразования строки в новый буфер под капотом системы, который не является защищенным, твоя программа будет работать как ни в чём не бывало, из за чего, во-первых, ты привыкнешь писать неправильно, и во-вторых, если потом решишь перекомпилировать в юникод, твоя программа посыпется как ёбаное говно.
И вообще, просто спроси себя. Почему в 2020 году нет например веб-страниц в KOI-8 и подобных кодировках, а ведь раньше все такие были, постоянно приходилось видеть кракозяблы и переключать кодировки на сайтах. но даже веб-макаки поняли что юникод это НЕОБХОДИМОСТЬ в эпоху интернета - МЕЖДУНАРОДНОЙ сети, что кракозяблы это тупо, но только не долбоёбы погромисты, корчащие из себя таких умных, ко-ко-ко, а на деле тупее последних свиней. Почему-то даже в 2020 каждая вторая (и даже первая) программа обязательно чаровысер с кракозяблами. Как вы вообще живете такие тупорылые?
>С таким подходом и юникод не надо юзать если кроме англ. символов ничего не используется.
Vvedite razmer massiva:
>"Юникод не нужен" ко-ко-ко
Ладно, а если серьезно. Ты, тупой выблядок имбецильной спидозной шлюхи, вообще в курсе, что Windows уже 20 лет (ДВАДЦАТЬ ЛЕТ, ТУПОРЫЛАЯ СВИНЬЯ!) является юникодной. Это значит, в системе все функции - юникодные, работают только с юникодными строками и никак иначе. Неюникодных функций НЕ СУЩЕСТВУЕТ.
И тут ты спросишь: "А как же мои (и таких же имбецилов) выдресты char★ тогда работают?". А вот как, при каждом вызове системной функции происходит конверсия каждой строки в юникод. Для каждой строки создается буфер в два раза больше (юникод двухбайтовый) и вызывается функция преобразования строки, заполняющая его юникодом, который и подается потом в функцию. Ты понимаешь, что это кошмар ёбаный? Вон, выше кто-то мямлил про оптимизацию кешем и регистрами, но о какой оптимизации речь, если ты своими руками творишь такой пиздос? Это всё равно что разбить кому-нибудь лицо кувалдой, а потом подстричь ногти, мол нехорошо когда ногти неаккуратные. Да какая разница какие ногти, если ты ебальник размочаалил в смятку? Оптимизаторы обоссаные, придурь неизлечимая.
И дело не только в лютом говнокоде получающемся из за char и не только в долбаных кракозяблах у всех кто не в твоей обоссаной деревне живет. Это говно еще создает скрытые ловушки в коде и поощряет грубые ошибки.
Смотри сюда. Ты в курсе, что память имеет атрибуты как файлы, что может быть защищена только для чтения например? И что строковый литерал является такой запрещенной на запись памятью? Так вот, есть функции принимающие строки, но при этом и меняющие их тоже, пишущие в них. Таким образом, если ты подашь константную строку не читая описание функции как обычно дебилы делают, ты получишь падение программы. И это хорошо, так ты поймешь где проебался, но ТОЛЬКО В ЮНИКОДЕ. Если же ты будешь срать чарами, из за преобразования строки в новый буфер под капотом системы, который не является защищенным, твоя программа будет работать как ни в чём не бывало, из за чего, во-первых, ты привыкнешь писать неправильно, и во-вторых, если потом решишь перекомпилировать в юникод, твоя программа посыпется как ёбаное говно.
И вообще, просто спроси себя. Почему в 2020 году нет например веб-страниц в KOI-8 и подобных кодировках, а ведь раньше все такие были, постоянно приходилось видеть кракозяблы и переключать кодировки на сайтах. но даже веб-макаки поняли что юникод это НЕОБХОДИМОСТЬ в эпоху интернета - МЕЖДУНАРОДНОЙ сети, что кракозяблы это тупо, но только не долбоёбы погромисты, корчащие из себя таких умных, ко-ко-ко, а на деле тупее последних свиней. Почему-то даже в 2020 каждая вторая (и даже первая) программа обязательно чаровысер с кракозяблами. Как вы вообще живете такие тупорылые?
>Windows уже 20 лет (ДВАДЦАТЬ ЛЕТ, ТУПОРЫЛАЯ СВИНЬЯ!) является юникодной
Забавный ты выбрал аргумент, конечно. А 64 битной она является 15. Пять лет назад не стоило на юникоде писать, получается? Или всё же пора программы 64-битные писать?
>>82143
Попробуй еще раз прочитать, и главное понять.
Какой аргумент за 64 бит в твоей программе? Назови его, дебилоид? Ты программист? Ты думать вообще можешь? Зачем тебе 64 бит, дебил, кроме как РАЗОСРАТЬ ПРОГРАММУ В РАЗМЕРЕ, ПРОСИРАЯ ВПУСТУЮ РЕСУРСЫ КОМПЬЮТЕРОВ ПОЛЬЗОВАТЕЛЕЙ, КОТОРЫЕ НЕ БЕСКОНЕЧНЫ, И ВООБЩЕ ЗА НИХ ДЕНЬГИ УПЛАЧЕНЫ. Ты крадешь у людей, понимаешь, свинья тупая?
А твой юникод тоже юзает в 2 раза больше памяти, и что теперь? На пару КБ больше стало, ну охуеть теперь.
>Какой аргумент за 64 бит в твоей программе?
Ладно, а если серьезно. Ты, тупой выблядок имбецильной спидозной шлюхи, вообще в курсе, что Windows уже 15 лет (ПЯТНАДЦАТЬ ЛЕТ, ТУПОРЫЛАЯ СВИНЬЯ!) является 64-битной. Это значит, в системе все функции - 64-битные, работают только с 64-битными опкодами и никак иначе. Не 64-ьитных функций НЕ СУЩЕСТВУЕТ.
И тут ты спросишь: "А как же мои (и таких же имбецилов) выдресты x86-32 тогда работают?". А вот как, при каждом вызове системной функции происходит конверсия каждой команды в 64бит. Для каждой команды создается буфер в два раза больше ( 64 в два раза больше 32) и вызывается функция преобразования, заполняющая его до 64бит, которая и подается потом процессору. Ты понимаешь, что это кошмар ёбаный? Вон, выше кто-то мямлил про оптимизацию кешем и регистрами, но о какой оптимизации речь, если ты своими руками творишь такой пиздос? Это всё равно что разбить кому-нибудь лицо кувалдой, а потом подстричь ногти, мол нехорошо когда ногти неаккуратные. Да какая разница какие ногти, если ты ебальник размочаалил в смятку? Оптимизаторы обоссаные, придурь неизлечимая.
И дело не только в лютом говнокоде получающемся из за 32бит и не только в долбаных кракозяблах у всех кто не в твоей обоссаной деревне живет. Это говно еще создает скрытые ловушки в коде и поощряет грубые ошибки.
Смотри сюда. Ты в курсе, что память имеет атрибуты как файлы, что может быть защищена только для чтения например? И что строковый литерал является такой запрещенной на запись памятью? Так вот, есть функции принимающие строки, но при этом и меняющие их тоже, пишущие в них. Таким образом, если ты подашь константную строку не читая описание функции как обычно дебилы делают, ты получишь падение программы. И это хорошо, так ты поймешь где проебался. Если же ты будешь срать чарами, из за преобразования строки в новый буфер под капотом системы, который не является защищенным, твоя программа будет работать как ни в чём не бывало, из за чего, во-первых, ты привыкнешь писать неправильно, и во-вторых, если потом решишь перекомпилировать, твоя программа посыпется как ёбаное говно.
И вообще, просто спроси себя. Почему в 2020 году нет например веб-страниц на 32-битных и подобных процессорах, а ведь раньше все такие были, постоянно приходилось видеть. но даже веб-макаки поняли что 64бита это НЕОБХОДИМОСТЬ в эпоху интернета - МЕЖДУНАРОДНОЙ сети, но только не долбоёбы погромисты, корчащие из себя таких умных, ко-ко-ко, а на деле тупее последних свиней. Почему-то даже в 2020 каждая вторая (и даже первая) программа обязательно 32-битный высер. Как вы вообще живете такие тупорылые?
>Какой аргумент за 64 бит в твоей программе?
Ладно, а если серьезно. Ты, тупой выблядок имбецильной спидозной шлюхи, вообще в курсе, что Windows уже 15 лет (ПЯТНАДЦАТЬ ЛЕТ, ТУПОРЫЛАЯ СВИНЬЯ!) является 64-битной. Это значит, в системе все функции - 64-битные, работают только с 64-битными опкодами и никак иначе. Не 64-ьитных функций НЕ СУЩЕСТВУЕТ.
И тут ты спросишь: "А как же мои (и таких же имбецилов) выдресты x86-32 тогда работают?". А вот как, при каждом вызове системной функции происходит конверсия каждой команды в 64бит. Для каждой команды создается буфер в два раза больше ( 64 в два раза больше 32) и вызывается функция преобразования, заполняющая его до 64бит, которая и подается потом процессору. Ты понимаешь, что это кошмар ёбаный? Вон, выше кто-то мямлил про оптимизацию кешем и регистрами, но о какой оптимизации речь, если ты своими руками творишь такой пиздос? Это всё равно что разбить кому-нибудь лицо кувалдой, а потом подстричь ногти, мол нехорошо когда ногти неаккуратные. Да какая разница какие ногти, если ты ебальник размочаалил в смятку? Оптимизаторы обоссаные, придурь неизлечимая.
И дело не только в лютом говнокоде получающемся из за 32бит и не только в долбаных кракозяблах у всех кто не в твоей обоссаной деревне живет. Это говно еще создает скрытые ловушки в коде и поощряет грубые ошибки.
Смотри сюда. Ты в курсе, что память имеет атрибуты как файлы, что может быть защищена только для чтения например? И что строковый литерал является такой запрещенной на запись памятью? Так вот, есть функции принимающие строки, но при этом и меняющие их тоже, пишущие в них. Таким образом, если ты подашь константную строку не читая описание функции как обычно дебилы делают, ты получишь падение программы. И это хорошо, так ты поймешь где проебался. Если же ты будешь срать чарами, из за преобразования строки в новый буфер под капотом системы, который не является защищенным, твоя программа будет работать как ни в чём не бывало, из за чего, во-первых, ты привыкнешь писать неправильно, и во-вторых, если потом решишь перекомпилировать, твоя программа посыпется как ёбаное говно.
И вообще, просто спроси себя. Почему в 2020 году нет например веб-страниц на 32-битных и подобных процессорах, а ведь раньше все такие были, постоянно приходилось видеть. но даже веб-макаки поняли что 64бита это НЕОБХОДИМОСТЬ в эпоху интернета - МЕЖДУНАРОДНОЙ сети, но только не долбоёбы погромисты, корчащие из себя таких умных, ко-ко-ко, а на деле тупее последних свиней. Почему-то даже в 2020 каждая вторая (и даже первая) программа обязательно 32-битный высер. Как вы вообще живете такие тупорылые?
Ну что, обычный современный "программист". На свой код насрать, на проблемы пользователей с кракозяблами и тратой их ресурсов насрать, на всё насрать кроме себя любимого "мне лень ебаться", хотя и ебли-то нет, только страх менять свои вредные привычки. И всё бы хорошо для обычных тредов ждаваскрипта или питона, но тут-то тред Си ради всего свято. Но нет, та же шваль и тут всё заполонила и засрала.
Так я не понял, зачем мне юзать юникод если он в 2 раза больше весит? А как же лишний килобайт памяти? Тебе что, насрать на память пользователя?
Вот хохма, выполняю себе упражнение из k&r на тему макросов: антивирь винды удалил экзешник, сославшись, что там троян О,О. Интереса ради закинул экзешник на вирустотал - 10/68 обнаружили вирус. А ведь там было абсолютно безобидное :
#include <stdio.h>
#define swap(t, x, y) {t tmp = x; x = y; y = tmp;}
int main() {
int x = 1;
int y = 2;
swap(int, x, y);
printf("x: %d, y: %d", x, y);
return 0;
}
Как так?
Удобство пользователю и чистый быстрый код стоят каждого лишнего байта им занимаемого. Это очень низкая плата за столько хорошего, а точнее за избежание лютого говнища устаревших еще 20 лет назад недострлк. Тем более что потерей-то и гет по сути, строк в программах мало.
А вот кода в программах дохуя, у меня лично 64 битный экзешник в два раза больше 32 битного. Но главное, что это ровно ничего не дает, просто просёр в унитаз. Зачем делать хуже если это делает только хуже? Только дебилы так делают, это не программисты, а животный скот, который лепит вредное 64 битное говно ради понтов, тупорылые быдлосы думают, что 64 бита больше и новее, значит круче. Показывают какие они модные современные петушки, компилящие по последним стандартам. Петушня которой место в бутиках, а не в программировании.
Анон, ты не прав. Расширения архитектур (SSE, AVX) могут ускорить вычисления в разы, их узкое место - загрузка чисел в регистры, и здесь 64-битная архитектура позволяет уменьшить обращения к памяти в 2 раза (а это часто узкое горлышко (bottleneck) программ), что в итоге выльется в заметное ускорение. В x86-64 есть 12 64-битных регистров общего назначения (RAX-RDX, R8-R15, это позволяет хранить некоторые локальные переменные прямо в них, минимизируя обращения к памяти), а в x86 только 4 (EAX-EDX), и то 32 битных, что уже маловато для всяких трюков компилятора. Алсо простое добавление 64 битного числа (long), которое в x86-64 занимает 3 инструкции (загрузка, добавление, выгрузка), в x86 выльется в более чем десяток инструкций с ветвлением (branch). 64-битный бинарник на C, по моим наблюдениям, занимает всего на 20% больше такого же, но 32-битного, а увеличенная скорость работы оправдывает занимаемое место.
Ты слишком добрый для этого чучмека.
я конечно ньюфаня. но вот я играю в euro truck simulator. и эта игра имеет 2 exeшника 32 битный и 64 битный. у меня почему-то при запуске 64 битного игра подлагивает иногда и загружается дольше. на 32 битном всё чудесно.
ноутбук с 64-х битной виндой, 8гб оперативы, процессор 2 ядра по 2.4 ггц, видеокарта с 512мб памяти не думаю что это просто ноут 64 битные приложения не тянет.
Файл подкачки у тебя включен, конечно же. 64 битная версия кушает больше оперативы, но при её достаточном наличии (и правильном использовании системой, а не выгрузкой на диск и обратно) игра работала бы быстрее (за счет уменьшения затрат времени процессора для выполнения одних и тех же действий). На ограниченных ресурсах 32-битная может быть быстрее, т.к. в твоем примере из-за маленького количества видеопамяти может тратится больше времени на загрузку и выгрузку данных с оперативы в видеопамять и обратно, что дороже, чем увеличенная нагрузка на процессор от более медленных (по сравнению с 64-битными) 32-битных инструкций (короче, видеокарта может не справлятся). Алсо попробуй сбрасывать RAM cache (кэш оперативной памяти) перед запуском игры (это помогает избавится от микрофризов). Можешь ещё попробовать отключить файл подкачки, но делай это только если понимаешь его назначение.
у меня видеокарта интегрированная. и её видеопамять находится на озу.
спасибо, понял. да думаю что дело в видеокарте слабой, интегра ещё и память из озу берёт.
>за счет уменьшения затрат времени процессора для выполнения одних и тех же действий
Что за бред. В любом случае, чем меньше код в размере, чем меньше оперируемые числа, тем быстрее. Больше не может быть быстрее, ты же ебанутый.
>Ты понимаешь, что это кошмар ёбаный? Вон, выше кто-то мямлил про оптимизацию кешем и регистрами
Ты же понимаешь, что ты выглядишь как религиозный фанатик? Это какая-то дико угребищная по назначению программа, если её производительность упирается в преобразования строк в юников при вызове функций ос, лол. Где ты такое количество вызовов функций ос со строками откопал.
>>82147
>Ты крадешь у людей, понимаешь, свинья тупая?
А вот это обращайся в си-шарп и джава-треды, пожалуйста. И ещё в особенности в треды с современном вебом, самый пиздец там. У меня игра с открытом миром, который можно неделями исследовать занимает 2 гб оперативки, а браузер, где открыта четыре треда из текста и картинок тоже занимает 2 гигабайта (да, и он 32-битный, кстати), и получается совсем жутко если открыть тяжёлый сайт по типу ютуба с открывающимися менюшками и видео. А сортировка тысячи файлов по размеру в проводнике виндоуса занимает 2-3 секунды, хотя тысяча элементов с уже известным размером сортируется за милисекунду.
Могут наверное, но они не используются. Я буквально на днях в очередной раз наблюдал игру, между прочим серьезную от серьезной компании, требующую SSE 4.2, и эту зависимость пофиксили буквально патчем пары байт. До сих пор бинарники компилят чуть ли не под 486.
Ох лол.
>чем меньше код в размере, чем меньше оперируемые числа, тем быстрее
Сказочный долбоеб. Одно обращение к памяти (за нужной переменной) будет в сотню раз дороже какой-то инструкции по типу add или and. 32-битная архитектура требует в 2 раза больше обращений к памяти для загрузки/выгрузки такого же объема данных. Простые операции над 64-битными числами (которые используются повсеместно, т.к. даже файловая система у тебя 64-битная) на 32-битной архитектуре кроме огромной кучи инструкций привносит ветвление, которое (в случае ошибки предсказателя ветвлений) предполагает сброс кэша спекулятивного исполнения, что выльется в время, раз в 1000 большее, чем исполнение той же операции на x64.
>Больше не может быть быстрее, ты же ебанутый.
Иди напиши это мэйнтейнерам gcc, они ведь зачем-то вместо одной операции деления для оптимизации раскладывают её на тридцаточку битовых, вот ведь ебанутые, да?
wchar_t, а функции просто гуглишь "<оригинальное название> unicode", сразу же выдает аналог. Да, обычно с w.
>>82303
Любое программирование под DOS, и будет низкий уровень. Я бы запретил учить не на DOS, винда многое прощает из за раздутых возможностей, позволяющих говнокодить, не понимая этого.
Твой пост мне зачем? Речь была о возможности/не возможности, а не предпочтениях и кто на чём их кодит.
Больше похоже на маркетинг. То-то та же винда 64 бит явно тормознее 32-битной. Давай расскажи как первая в сотню раз быстрее, трепло.
Сходи сначала ознакомься с тем, как работает процессор, т.к. ты даже не можешь возразить ни на один из моих вышенаписанных аргументов, ибо CPU для тебя - магическая чёрная коробочка.
спасибо и что там в погромировании под dos будет прям всё-всё и про кэши и про регистры и про разрядности? мне многое станет понятно.
сперва я си выучу на окнах, потом уже на дос перейду это слишком сложно для меня пока что
С процессором знакомы разработчики компилятора. Я на си пишу, а не в машинных кодах. И ты про винду так и не ответил. Где зваленая производительность, трепло? Иди для тебя даже флагманский продукт мировой корпорации не аргумент? Дураки не умеют программировать, да? Только ты треплешь фантазии на сосаче правильно?
Рано в такое лезть. Для начала научишься стеку, отлично помогает от безмозглого говнокода. Название знаменитого сайта не даст соврать "стековерфлоу".
Заебал. Поехавший адепт 32 битной компиляции.
Предлагаю тебе запустить вот это скомпилированное в 32 и 64 бита: https://ideone.com/qqDFjV
У меня получаются вот такие числа (слева количество - справа время выполнения) с "-fno-tree-vectorize -O3". В сортировке при 64 битах где-то на 10% быстрее, а на значениях в 1000 даже почти на 20%. При какой-то O(n2) хуйне просто 10% на всех числах.
С крестиками это первый прогон - на него можно не смотреть. На всех значения кроме самых маленьких (где счётчик тактов не может корректно оценить время) побеждает 64-битная программа.
Но да, на аж целых 10кб больше занимает скомпилированная программа - ужас то какой. Сейчас компьютеры вроде бы в производительность упираются намного больше, чем в память - память можно всегда ещё плашку докупить, а повысить частоту процессора в два раза так просто нельзя - потому я вижу верным оптимизировать именно быстродействие.
>С процессором знакомы разработчики компилятора. Я на си пишу, а не в машинных кодах.
Так зачем ты полез что-то доказывать в тему, в которой ты ни черта не смыслишь, макака? Хороший Сишник должен знать устройство процессора и ассемблер хотя бы на базовом уровне, что бы написать код, работающий с оптимальной скоростью.
>флагманский продукт мировой корпорации
>винда
Ох лол. Для тебя высер мелкомягких, написанный индусами за миску риса, и скомпилированный их же говном, которое mov eax, 0 генерирует - это эталон?
давайте только не будем на токсичность пердолей провоцировать, хуже срачей с пердолями нет ничего в этой жизни.
>Хороший Сишник должен знать устройство процессора и ассемблер хотя бы на базовом уровне, что бы написать код, работающий с оптимальной скоростью.
Нахуя асм-то знать?
Хорошо, ты прощён!
>Нахуя асм-то знать?
Что бы интринсики вставить в тяжелые операции, если компилятор сам не смог. Что бы иметь доступ к продвинутым битовым операциям (popcnt, lzcnt и т.д.) в виде инлайнового ассемблера или тех же интринсиков, и для всяких других asm-only инструкций (тот же CPUID). Что бы найти тяжелые инструкции в лупах и на что-то заменить для оптимизации. Что бы не пиздеть хуйню про то, что скорость исполнения инструкции зависит от её размера и т.д.
а ты чем на работе занимаешься?
> >Нахуя асм-то знать?
> Чтобы найти тяжелые инструкции в лупах и на что-то заменить для оптимизации. Чтобы не пиздеть хуйню про то, что скорость исполнения инструкции зависит от её размера и т.д.
Дополню - в мире реальной разработки, а не каких-то нуфань, нормальный сишник умеет читать целевой ассемблер и пользоваться листингами из gdb/perf/..., часто разбирается в архитектуре ос и железки, различных интерфейсах и протоколах. Я вам вообще советую посмотреть чем люди в отрасли занимаются и что им нужно знать.
О, работает, классно. Только локаль все равно надо переключать, и везде L дописывать. Спасибо.
>привел пример игры -- не аргумент
>привел пример винды -- не аргумент
>>вот моя сортировка ёлочкой. -- неотразимый аргумент
Повторяю в последний раз. Своими маняфонтазиями можешь подтереться. Я живу в реальном мире реальных программ, чужих и своих собственных. Маняпарашные олимпиадные высеры ни на что не годные можешь засунуть себе куда следует.
Си более сделан под написание драйверов и написания всяких прошивок для микрух. На крестах лучше софт прикладной пилить.
Речь шла про возможность/не возможность написания. Nouveau есть? Есть. Вот и заткнись и попытайся это осмыслить, тупица. Мне плевать на производительность этого драйвера или популярность. Речь шла про возможность, ало. А ты уходишь от обсуждения куда-то в сторону.
Ну и что дальше то? Юзай юникод и не парься. Ничего плохого в юникоде не вижу.
> И вообще, просто спроси себя. Почему в 2020 году нет например веб-страниц в KOI-8
Есть. Вот тебе актуальное руководство: https://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/
> Драйвер работает в пространстве пользователя
> Не винда
> Унылые врапперы натив кода на js/lua
Не позорился бы...
И что? Это исследование всё-таки.
> Не винда
Винда распространена лишь на десктопах. Все остальные ниши занял линукс. На андроид смартфонах, роутерах, серверах, тонких клиентах и суперкомпьютерах стоит он. Даже в Microsoft Azure самой популярной ОС стал линукс.
Винда распространена на компьютерах, а остальные устройства могут хоть на манной каше работать , это никого не ебет, кроме рабочих их обслуживающих.
Лучшее, что может происходить тут. Не про ноуты же.
вголос
>Или чтоб в условиях войны, когда нет времени прожать Win+^ после Ctrl+Alt+T, весь код красиво печатался в окне псевдотерминала стандартного размера? Или доля членов сообщества сидит на WinNT/2000/XP и любит AltEnter-иться в 720x400?
Про формат бумаги а4 что нибудь слышал?
Спрашиваю, потому что загрузили функционалОЧКОй головного мозга с 8-ширинными табами вместо 4 пробелов для отступов, и мне понравилось. Охуенный бескомпромиссный таб, который уверенно уносит вложенный блок в стратосферу, и не надо ничего мудрить, чтоб с содержимое фигурных скобок визуально отделить от содержимого круглых. Хоть и униформный стиль унылое говно в сравнении с моим божественным авторским. Хотя, если не косплеить функциАНАЛку в плане вложенных выражений, а объявлять локальные имена здорового человека, то должно хватить, но все же... Есть соблазн оформить поразмашистей. Как-то плосковато выглядит код, размотанный в высоту.
Ух бля, а ведь точно) Я даже сам по рофлу распечатывал свои велосипеды на стену и думал "хорошо, что 79 соблюдаю". Я так понял, отступы между токенами тоже от ориентации на черно-белый печатный вариант, типа, чтоб и без подсветки читалось. Этим я сам вдохновился :syntax off сделать и писать krasivo.
Запускаешь poide.exe, нажимает build (это нужно сделать один раз при первом запуске), нажимаешь в том же окне close.
У тебя открывается первая картинка. Нажимаешь создать новый проект, выбираешь win32 или win64 console program, снизу выбираешь название и папку для сохранения. У тебя справа появляется картинка 2. Нажимаешь file-new-source code, пишешь туда "int main(){printf("Allo\n"); return 12;}", нажимаешь ctrl+s, указываешь имя и когда оно спрашивает, говоришь да, добавить к текущему проекту. Потом нажимаешь кнопку с третьего пика. Всё, программа пошла (по идее).
Будто нельзя на Си писать ботов.
constexpr в c++ чтобы быть точно уверенным. Хотя если f_cpu тоже макрос то по идее со включенной оптимизацией должно при компиляции посчитать.
Нужно чтобы после d шла . точка и пробел и далее уже шли звёздочки.
У меня почему-то пробел есть, а точки нету. Ну я предполагаю видимо что программа эту точку сжирает как относящаюся к %d смотрел какие там обозначения у точки нигде не сказано как её отделять, что посоветуете?
блин, вот я сказочный долбаёб. я даже не заметил что у меня вместо числа d печатается. устал просто. спасибо, анон. извини за глупый вопрос.
> если f_cpu тоже макрос
Да. Ладно, спасибо. Если само не оптимизируется, то в более сложных проектах я об этом узнаю наверное.
Либо я долбоеб, либо ты хуйню спрашиваешь, все что может посчитаться заранее - посчитается.
>Код для атмеги, не хочу, чтобы она сама константы всякие считала.
Так хочешь или не хочешь?
Умножив в атмеге что либо на тысячу, можно случайно охуеть.
Само собой не оптимизируется, если высокий уровень рекурсии. Чтобы этого избежать, надо явно указывать компилятору, что константа должна быть вычислена на стадии компиляции.
Это старая студия или в си всё еще переменные объявляют в начале функции как в паскале?
Ого, я удивлен. До этого меня только посылали нахер с такими вопросами и желали смерти, а ты реально подсказал. Спасибо, Анон
А я не удивлен, что куколдов полон тред. Анон, ты так всю жизнь будешь осваивать инструменты "где зеленая кнопочка, чтоб заработало"? Почитай, что такое компилятор, что такое линкер, что такой аргументы параметры запуска, чтоб входные и выходные файлы задать, и все сразу встанет на свои места.
Бесполезно, это образ мысли (тупой бабы), к сожалению и у мужчин присутствует. Тут ничего не поделаешь, родился уродом - не виноват. Плохо когда их кормят как тот уёбок выше, из за чего они смелеют и засирают всё вокруг своей тупостью.
Аноны, помогите, пожалуйста. Решите эту задачу. Я не понимаю как написать эту программу. Допустил "aabb" вот зачислит на счётчик одну а, потом как проверить что вторая а уже есть и её нужно зачислить к первой?
Скиньте, код готовый, молю.
Мое корявое решение с горизонтальной и вертикальной гистограммой сразу - https://ideone.com/Mckxuk
Ну а вообще ты ж мог просто погуглить k&r 1-14 solution.
Символы не числа - не вижу смысла делать графическую гистограмму, потому что символы e и d ничуть не ближе, чем e и Z - они все в равной степени ортогональны и смысл гистограммы теряется. Если бы это было распределение слов по длинам, тогда можно, но для разных символов это просто шиза, где столбцы можно перемешать случайным образом.
Да и графическая гистограмма в текстовом интерфейсе - сомнительная штука.
я тоже не понял этой задачи короче, странная она, анон.
не вижу смысла в гистграме по символам abcd только по введёным.
ну и символы это числа, любой char можно печатать как цисло.
>>Задача: Сделать гистограмму
>Не вижу смысла
Не вижу смысла в существовании таких "погромистов". Иди на печку спи, Ванька-Дурак.
Зачем проверять наличие? Память не лопнет, если сделаешь массив на 256 интов и заполнишь нулями. А потом распечатываешь
>AAAAAAAAAAAAAAAAAAAAAAAAA
>BBBB
>DDDDDDDDDD
(просто пропускаешь те, где 0)
Делов-то
Что угодно только не несите деньги этому жиду.
Бля не в тот тред отправил, извините.
Про разное побитовое говно и прочие неприятные вещи, про которые часто не знаешь как ответить?
в переменной А при любом раскладе будет число лежать. вот что бы я ответил.
Для начала, нахуй пошел. Учись читать русский язык и находить правильные треды для своих тупых вопросов.
Что жирного? Объясни, что мешает выделить на стеке произвольное( в пределах размера стека) число? Rsp такой же регистр как и остальные, и он поддерживает операции вычитания с другими регистрами.
Нет ты
>Объясни, что мешает выделить на стеке произвольное( в пределах размера стека) число? Rsp такой же регистр как и остальные, и он поддерживает операции вычитания с другими регистрами.
https://ru.wikipedia.org/wiki/Защищённый_режим
Ну так его действительно нет.
Ты же сам ответил на часть своего вопроса:
> Rsp такой же регистр как и остальные, и он поддерживает операции вычитания с другими регистрами.
И как это конфликтует с защищённым режимом? В нем запрещены операции вычитания или что?
Охуеть, а кто сказать что я собираюсь обращаться к несуществующей странице? Если ты напишеш char arr[100000000] и обратился к 9999999 элементу, то тоже скорее всего обратился к несуществующей странице, но это же не запрещено самим языком.
>почему нельзя определить char arr[N], где N неизвестно при компиляции
Попробовать пробовал?
https://ideone.com/hy1FMJ
Даже предупреждений нет.
Это
1) сторонняя функция, пусть и стандартной библиотеки
2) Выделяет в куче
а нужно чтобы
1) прямо вот кейворд встроен в синтаксис языка.
2) выделял на стеке.
В c99 VLA по стандарту вроде как поддерживается. Если студия умеет в c99, то довольно странно, если они искусственно вырезают эту возможность в c11 - ведь внутри компилятора уже есть нужная возможность. Не знал, это довольно странно.
И даже если написать:
void test(int a){
int arr[a];
}
То тоже не компилируется?
Нельзя. Эту хрень ввели в последнем стандарте только.
Наверное из за sizeof(). Эта функция вроде бы меряет статический размер, а не динамический.
>K&R
>The book is not an introductory programming manual; it assumes some familliarity with basic programming concepts like variables, assignment statements, loops, and functions
Есть у кого-нибудь готовый глоссарий по этим самым basic programming concepts? Или там из контекста будет понятно примерно? Гуглить умею, просто мало ли.
>нахуй пошел
Как некультурно
>учись находить правильные треды для своих тупых вопросов
В данном случае я ищу материалы по скользким вопросам в си. Вроде бы тема подходит под этот тред.
Алсо, есть несколько вопросов.
1) Стоит ли сразу выставлять march=native и O2 нашёл в гентоо хендбуке, я так пынемаю это для оптимизациии сразу изучать какие есть флаги гцц?
2) Стоит ли выбрать лишь один из стандартов Си и писать только в этом стандарте чтобы в коде не случилась каша из стандартов, или С11 это тот же самый C99 но с дополнительными плюшками и можно на этот счёт не париться?
3) Как компилятор поймёт, на каком стандарте я пишу? Есть ли отдельный флаг для выставления этого вручную, чтобы не полагаться на автоматику? Если есть, то какой?
И ещё вопросы: где лежит конфиг ГЦЦ чтобы я мог написать туда понравившиеся мне флаги раз и навсегда чтобы каждый раз их не писать, или мне придётся тупо прописать в баше alias cc="option1 option2..."
А если я буду чужие проекты компилять и там будет make, будет ли вероятность, что кто-то вместо gcc будет использовать cc в мейкфайле, и в итоге вместо обычного гцц будет использоваться гцц с моими напердолеными флагами? С другой стороны, возможно не у всех цц это алиас на гцц, поэтому в мейкфайле просто обязаны писать гцц вместо цц, да и если я напишу в конфиг гцц свои флаги то и на компиляции через мейк это отразиться тоже должно. Компиляция чужих проектов с моими флагами будет чем-то чревата?
Как относитесь к параллельному обучению другим вещам, например емаксом и соответственно елиспу?
Вопросов скорее всего будет много, извиняйте, если ответ уже есть в гугле.
Пушто что сишные инструменты о Майкрософта - это тупейшего говна говно, анон, вот зачем меня расстраиваешь лишний раз, когда я наконец в хорошем настроении с работы пришел? А?? Зачем, блядь?!?!?!
сук реально, они там таки поддерживают уже стандарт 99-го года или до сих пор ANSI с "cамыми важными дополнениями"?
В си, в отличие от C++ могут быть динаические массивы, а могут и не быть, но тогда должна быть определена
__STDC_NO_VLA__ The integer constant, intended to indicate that the implementation does not support variable length arrays or variably modified types.
это стандарт С18, 6.10.8.3
Для вариабельных массивом sizeof работает в рантаёме а не во время компиляции, читай стандарт.
я охуел, когда обнаружил, что в 21-м веке в комплекте студии все еще была однопроходщина, не умеющая заглянуть наперед, чтоб посчитать sub rbp, 0x40 по декларациям
А для чего же, если VLA - ровно возможность создавать массивы на стеке?
Ты с flexible array members не путаешь?
> Алсо, есть несколько вопросов.
> 1) Стоит ли сразу выставлять march=native и O2 нашёл в гентоо хендбуке, я так пынемаю это для оптимизациии сразу изучать какие есть флаги гцц?
> 2) Стоит ли выбрать лишь один из стандартов Си и писать только в этом стандарте чтобы в коде не случилась каша из стандартов, или С11 это тот же самый C99 но с дополнительными плюшками и можно на этот счёт не париться?
> 3) Как компилятор поймёт, на каком стандарте я пишу? Есть ли отдельный флаг для выставления этого вручную, чтобы не полагаться на автоматику? Если есть, то какой?
Почему ты такое не можешь загуглить?
1)Зачем? Хеллоуворд долго отрабатывает?
2)C11 не сильно отличается
3)-std=
>>85041
Ты ебобо точно
В makefile'а компелятор задаётся через переменную CC
>возможность создавать массивы на стеке
Это побочный эффект, а не назначение. Назначение в том, чтобы можно было создавать модифицируемые типы (typedef ARRAY[n], такого )
Или понятно писать функции для обработки многомерных массивов любого размера (совершенно не обязательно созданных в стеке).
>Ты с flexible array members не путаешь?
Нет.
Офигеть, я просто в ахуе. Всегда считал массивы бесполезным барахлом, которым только в школках пичкают. А тут не только массивы, а еще такие мега-выебоны для них наделали. Кому это вообще нужно? Ради кого городят эти навороты?
>1)Зачем? Хеллоуворд долго отрабатывает?
А почему бы и не ставить? Разницы по времени компиляции почти нет, на большом проекте и так уже будет понятно что и как ставить. И там он не будет прописывать их в баше каждый раз.
Анансы, я уже 3 дня пытаюсь запилить код для работы с протоколом с частотой импульсов 8мгц STM8 SWIM на другом микроконтроллере с частотой 80мгц не используя счетчики, DMA и т.п, т.е. чисто читая-записывая в gpio регистры. Я сильно ебанутый?
>Как? Если не ошибаюсь, массивы бывают только на стеке, в куче создать нельзя.
Выделяешь память, вот тебе и массив.
int (arr)[j][k] = malloc(sizeof arr)
Про звёздочки забыл. Ну, по форматированию разберёшься.
> Как? Если не ошибаюсь, массивы бывают только на стеке, в куче создать нельзя.
Чел.. Ты первый курс прогуливал?
Стек — это просто кусок кучи. А куча — просто глобальный стек для всей машины.
Бля, недавно баловался с ручной аллокацией в расте, это пиздец страшно; UB со всех сторон и только ждёт, чтобы ты что-то неправильно написал.
Указатель на массив, и правда. Прохлопал, привык что память выделяется для данных, которые и без массива работают почти как массив.
Лол. А что не так? Стек — непрерывный кусок памяти с неким количеством байтов. Куча — непрерывный кусок памяти с неким количеством байтов, который делится аллокатором на другие непрерывные куски памяти. Самая главная программа просто выделяет себе всю память с 2 до максимального физического адреса (обычно самый большой, если его можно достигнуть, форбидится, чтобы массивы не оверфловились). Обычно оно всё равботает немного посложнее, но примерно так же. Где я неправ?
Как бы тебе объяснить, чтобы сразу понятно было... Ты сравниваешь ракету с подводной лодкой, и говоришь, что они одинаковые, потому что круглые.
Так, подожди, у вас какя-то хуйня тогда.
Если со стека можно брать только по одному элементу, то почему я в могу объявить несколько локальных переменных (это же вроде как на стеке, или уже нет), массивы, экземпляры структур и использовать их явно больше чем по одной.
Какой-то ваш стек не стек.
Бля, считай, что всё, что относится к выполняемой функции - это один элемент стека. Всё равно структуры бесконечно можно загонять в структуры.
И тогда по твоей же логике, если я положу структуру на стек, то смогу обратиться только к её последнему элементу, и то если компилятор гарантирует порядок.
Ну то есть понятно ,стек не стек, раз с него можно по несколько элементов брать.
То есть стек от кучи отличается тем что в стеке запретили совсем свободно ко всем элементам обращаться, только по несколько штук с конца?
кастомный лоадер придется на заводе прошивать что не особо важно, но все же, да и займет он как минимум 500байт флешки, а на самой стмке всего лишь 8кб.
2. Ну не выебывайся, хочешь сказать у тебя ПЗУ 1 в 1 нынче? Пиздишь же. А если не пиздишь, мб постарше возьмешь? Десять центов, зато потом не будешь волосы на жопе рвать, если че дописать придется.
type bar(...) {
...
return val;
}
type foo(...) {
...
return bar(...); // вот здесь
}
ведь return уже есть внутри bar? Ну, в смысле, rax никуда не убежит? Ясен хуй, что в свич-кейсах более функционально будет смотреться return f1(); чем f1(); break;, но все же...
Что бы вставить вызов функции и проверить правомерность этой операции, компилятор, должен о ней знать (что возвращает, что принимает). А читает он файл сверху вниз.
Соответственно в объявлении он узнает, что есть некая хуйня, с такими то параметрами и может подставить ее вызов.
Вместо ссылки(адреса начала) функции, там пока находится просто символ(некая уникальная хуйня, явно указывающая на эту функцию).
Позже, некая хуйня (линкер наверное) заменяет эти символы на непосредственно адреса тел.
Как то так, могу пиздеть.
Вообще, применительно к одному файлу, как я понимаю это такой пережиток, смысл этой хуйни раскрывается в многофайловых программах.
а я щас убрал эту функцию и программа ввсё равно запустилась. ну спасибо, я прочитаю об этом в книжке официальной тогда. мне просот лень читать и я тупо смотрю на синтаксис года и делаю оттуда упражнения.
Может от стандарта зависит. Мне вот мой переменные только в начале функций разрешает объявлять вообще.
понятно, спасибо. я уже начал читать, ту что самая первая в шапке.
Не совсем, есть пользовательский девайс с конфигурацией стм8+более мощный мк, и более мощный мк должен иметь возможность периодически обновлять прошивку стм8 (короче говоря ОТА-апдейт). На мощном мк памяти достаточно много, а вот на стм8 только 8кбайт, при этом здесь должно крутиться довольно много функционала. По-этому я и пытаюсь родить swim прошивальщик дабы сэкономить на памяти и заодно на цене, ибо существуют стм8 со встроенным загрузчиком, но они дороже.
был на сайте какого-то университета thinking in C брюса Эккеля. Он его рекомендует перед вкатом в жаббу.Поищи короч. А так если совсем бревно возьми либа зеда шоу либо стефана кочана либо Стивена Прату.
На случай, если Керниган-Ритчи для тебя слишком заборист.
Пиздец, даже не верится что такой дебил растоблядок тупорылый сидит итт. А потом вот такие чудилы и кукарекают про уб и баги. Поколение изкоробочников мудаков.
Там экономия будет смешная. Больше шишок набьешь ради ничего.
STM8 вообще хитровыебанная порода, я вот так поэкономил и уебался на то, что оно не умеет в асинхронную запись еепрома и у меня устройство на 3мс встает нахуй все.
Не делай глупостей, не фаршируй память МК под завязку без веских причин. Оно отличается на 20 центов (только что проверил).
А я думаю что у тебя счет на устройства - единицы тысяч, иначе на 4ch бы писал.
Вот и стоит полмесяца ебли с SWIM, нескольких сотен баксов? Он еще в добавок окажется каким кривым и не дай бог придется отзыв делать.
PS а че свим мастера не дали STMы? В поддержку им писал? По моему опыту, доебом саппорта можно много чего выбить.
>C function prototypes"
загуглил, спасибо. ну я это знал, что нужно объявление но почему-то в си не догадался. хотя на питоне точно также функции вначале объявляются. чтобы я без вас делал, анчоусы.
>что оно не умеет в асинхронную запись еепрома и у меня устройство на 3мс встает нахуй все.
версии с поддержкой RWW умеют. Да и вроде даже без RWW, но с помощью block programming оно не должно блочиться.
>Не делай глупостей, не фаршируй память МК под завязку без веских причин.
причины есть куча легаси говна как на софтварном, так а на железном уровне, которое не так просто порешать.
>Оно отличается на 20 центов (только что проверил). А я думаю что у тебя счет на устройства - единицы тысяч, иначе на 4ch бы писал.
В том и дело, что устройств - миллионы, каждая копейка на счету но я всего лишь нанятый прогромист если что :3
>Он еще в добавок окажется каким кривым и не дай бог придется отзыв делать.
Вот это скорее всего будет главным аргументом отказаться от идеи со SWIM и таки использовать простенький юарт бутлоадер и таки вместить все говно на флешке.
Но попробовать стоило, и как минимум некоторые результаты есть.
Умеют,
>с помощью block programming
Блочится, увы. Может конечно и нет, но легче написать ультракостыль, чем разобраться в STмовской документации.
>устройств - миллионы
>@
>спрашивает советы на 2ch
Уверен, что все правильно делаешь?
>куча легаси говна
Всегда казалось, что в одной серии совместимость сохраняется (снизу вверх). А 8кб это что то младшее 103, а есть 105 с большим флешом в тех же корпусах.
Контекст: Код микрухи для проверки работоспособности внешней SRAM. Коллега на работе, сделал плату с микросхемами памяти и написал приблизительно то, что на пике для её проверки. Этот кусок кода крутится в цикле и проходит по всем адресам этой SRAM. Говорит, что память рабочая. Так вот у меня подозрение , что компилятор просто оптимизировал до temp = data и забил хуй на всё остальное. Я написал две функции для чтения и записи, чтобы компилятор не наебал меня с оптимизацией, и это показало, что память работает хуёво. Хотя я и сам мог наебаться когда писал их.
Плата, кстати, выглядит очень плохо. Вся грязная и с подтёками припоя. Я не удивлюсь, если там, что-то замкнуло
Почему это условие вообще существует? Там всегда будет temp == data. Ты что ебанутый?
В коде. Фикс.
. язык Си
. без GUI
. жестко под Linux
Наверняка затянется, но обязательно отчитаюсь в треде, если осилю. Договорились?
systemd, не ссущий пользователю на лицо
фикс для X Window system, чтобы экран на этапе загрузки ОС не мерцал, как будто он ща помрёт.
Ну вот при загрузке винды он так стремно не моргает.
конфигуратор ядра Linux для его пересборки под имеющееся железо.
То есть смотрит, какое железо есть, делает конфиг и далееделает бекап старого ядра, make cleardepend, make install для нового
ролл
ролл
Если память битая, то по address не запишется data, значит будут отличаться.
Рогалик
На стеке выделяются фреймы функций в порядке FIFO, а не переменные.
в глаза не видел. из IDE видел студию 2008 (годная), QT, Netbeans, MonoDevelop
А где найти треды с первого по сороквосьмой?
всяким занимаюсь
конкретно на Си - мультимедией и сетью
на Си пишу в Netbeans 8.2
а вообще в vs code на дефолтной теме
так-то хотел бы перекатиться на jetbrains но дорохо
Будешь смеяться, но книжку с твоего пика.
А до этого к-н-р.
Как вкатился - просто взял и вкатился и по работе внезапно понадобился Си. И я такой: ну ок.
Патч для иксов, чтобы setxkbmap при -option grp:rctrl_toggle переключал раскладку не на нажатие, а когда клавишу отпустили. Т.е. я нажал на правый контрол и не отпуская нажимаю на T - срабатывает Ctrl+T и в браузере открывается вкладка, а если нажал и отпустил, то переключил раскладку.
https://habr.com/ru/post/87408/ правда этот патч уже написали, пиздец, ну тогда даже не знаю...
Сомнительно. Сейчас всё через libinput, а он скорее про wayland, чем про иксы.
Зачем инклудить? Почему не линковать?
>перебирая в цикле по буковке
Не понял, какой буковке. Имена файлов известны и можно их сгенерировать одним циклом, или ты получаешь список файлов, извлекаешь из него номер и подменяешь их на имена с нулями?
Тебе нужен %05d вместо %5d или что?
Спасибо. Я сначала тоже подумал про регексы, но потом вроде нагуглил, что они не умеют проверять длину результата. В общем, не нашел как ими сделать дополнение нулями до нужной длины.
Но теперь снова вдохновился и за несколько часов ковыряния в пастах со stack overflow нашел как выцепить набор найденных подстрок и их позиции. С библиотечной replace() получилось компактно и дуракобезопасно, даже новая фича далась нахаляву - сокращение лишних имеющихся нулей, а не только дополнение имеющегося. Между прочим, видел только одну программу с функцией дополнения номеров - ReNamer неудобная для меня, и она сокращать не умеет, только добавлять.
>>89998
Имена неизвестны, могут быть любые. Суть в том, чтобы пофиксить номера в именах файлов для нормальной сортировки. Имена могут быть любыми и номера где угодно и сколько угодно. Нужно просто в каждом имени найти номера и дополнить до заданного размера нулями. Для этого в обратном цикле (с конца) печатается каждый символ как есть, но когда наступает конец (начало) числа (последовательности цифр), при необходимости допечатывалось нужное количество нулей.
Татьяну.
Не, скрипты это рак, они где-то есть, где-то нет, где-то заблокированы политиками, всякие питоны нужно дополнительно устанавливать. Нормальной программе, которая просто работает, альтернатив нет.
Еще, хотя программа для запуска командной строкой, это вовсе не значит что для консоли. Если отрабатывает нормально, ничего не должно происходить, а консоль выскакивает в любом случае, моргая перед глазами, это тупо. Консоль не может в юникод, а файлы юникодные, ну и гуй с удобным списком сообщений если необходимо, и может еще чем, всяко лучше текстовых костылей из прошлого века. Это же полноценное приложение с ясной и полезной функцией, а не одноразовое действие над файлами.
Шиндовс что-ли? А на что тебе Total Commander? FAR тоже умеет, да и на никсах есть mc.
Алсо, я его решил затроллить и посоветовал ему писать код в EMACS, потом посоветовал Vim, теперь он пишет код в виме, и компилирует в цугвине, пиздец в общем. Троллинг в итоге пошёл в обратную сторону, потому что в итоге я нихуя не начал ничего делать.
Пойду скачаю K&R.
C++Builder шлангом компилит.
Дейтелы Си для программистов.
Проблема сей в том что это не ООП, это процедурный язык со структурками и макропетушнёй во все поля и там разные задачи пишутся по специфике - ядро линуха и его драйвера пишется одним стилем, софт под гнум - другим, у микроконтроллеров вообще свой диалект с хакнутым языком и вшитыми макросами для прерываний.
велком ту погроммирование на винде
>Поставил на винду clang через chocolate, при попытке скомпилить простой код, пишет, что не может найти stdio.h. Я так понял что стд либа не идет в комплекте с clang? Где ее взять? Мне vs ставить?
MSYS2
S
Y
S
2
>пик
Ахахах! Это пердоговно по дефолту ищет вижуал студию вместо собственных либ. Уже видел подобную хуйню когда ковырялся с их компиляторами и мейками. То ли баг, то ли тупые и баг. Проигрыш с подливой.
У них там какой-то договорнячок был, типа мс помогает писать ллвм, ллвм со шлангом в благодарность в версии на винду поставляется только в кастрированном виде и без вижуалстудии не работает.
Но я вроде с обычным gcc делал. Уже подзабыл, но был готовый проект с билд-скриптом, который проверяет наличие либ, вываливает кучу тестов компилячтора на фичи, ну всё это, обычное дело, и вот там оно лезло в студию и писало про зафейленные фичи, что разумеется, ведь студия не gcc.
Если ты делал с gcc, а потом пытался компилировать clangом, то, наверное, не очень удивительно, что он не мог библиотеки найти.
void main(void){
""
}
или просто
main(){
""
}
у мен компилятор без void пропускает, но написано что если функция не берёт аргументов или не возвращает ничего нужно указывать void.
а я пишу main без return'а, но она всё равно возвращает 0. void тоже не ставлю, видимо комплиятор сам что-то там допилиивает. пишу на визуалке если что.
Да, компиляторы умеют подтирать слюнки за совсем уж хлебушками, но ты хочешь быть таким хлебушком?
зачем вот ты просто так снихуя пишешь non-compliant code?
дали им
#include <stdlib.h>
int main(void){
return EXIT_SUCCESS;
}
нет, блядь, говно жрут
Классы это продвинутые структуры. Сам понимаешь, си без структур как хирург без рук. А классы еще круче структур, что делает язык в разы лучше, а шаблоны классов еще лучше.
ООП же это когда код программы оборачивают в иерархию классов. Вместо кода получается дрисня из оберток для оберток, интерфейсов к интерфейсам и фабрик фабрик.
вообще мне кажется, си с шаблонами, неймспейсами (но без классов!) был бы просто идеальным языком
ну как, там нужно целую экосистему городить,
в c++ всё время есть соблазн воспользоваться стандартными контейнерами, и они охуенны, пока тебе не нужно сварганить что-то чуть-чуть сложное. тогда тебе уж нужно блядь, писать классы, с конструкторами копирования, оверлоадить std::move, и, блядь, понеслась пизда по кочкам
>ужно блядь, писать классы, с конструкторами копирования, оверлоадить std::move, и, блядь, понеслась пизда по кочкам
Нет, не нужно. Можешь смело использовать сишные структуры в контейнерах без каких-либо дополнительных действий.
Это называется безвольный дрон плывущий по течению. Если язык без классов, значит нельзя ими злоупотребить, это хорошо. А если с классами, значит нужно их пихать куда надо и не надо, а это плохо. Сам думать как лучше и применять или не применять по обстоятельствам, дрон не может, только подчиняться. Если дядя сделал в языке классы значит нужно на классах, если не сделал, значит не нужно. Таким лучше всего подойдет анальный язык вроде паскаля, в си же свобода, таким не место.
а обязательно делать инициализацию всех переменных\массивов вначале программы? можно в середине программы внезапно инициализировать один массивчик?
да заебал, шиз ёбаный. нахуй ваш тред нихуя не объясняете. смысл от этого программача ёбаного. пойду гуглить всё
я спросил разницу между объявлением переменной и назначением что в компьютере технически происходит
Я по книге k&r занимаюсь, там такое допустимо. или я что-то не понимаю...
Ну и на двойное двойное присваивание люди жалуются, это такой себе стиль. Тем более, что ты c = 0 нигде не используешь после.
Функция getline, судя по названию, делает именно строку. А ты строку не делаешь. Ещё раз: в чём отличие строки от массива букв?
я не знаю. в чём?
Да. Строка заканчивается нулём, имененно так C определяет, где остановиться, например, в printf("%s", l) и других функциях, работающих со строками.
Да, я уже проверил спасибо. Только у меня проблема частично ушла. Как сделать так чтобы он не печатал этот символ?
я так понимаю эта херня забивает в массив перед '\0' забивает '\n' когда я нажимаю ентер. но я не понимаю почему. я же сделал так чтобы цикл не забивал туда '\n'
не надо, скажи как проблему решить. решение уровня переустанови винду, купи новую машину.ещё и окажется что на юниксе точно такой же вывод будет.
бля я не хочу на эту хуюнту переходить, у меня ноутбук и драйверов под эту порашу нету просто. а вшитое дерьмо убивает кучу функций тачпада, клавы и производительность видеокарты. а сам я их писать не умею (надеюсь что пока что)
Нужно чтобы программа продолжала считать буквы, даже когда line[MAX] закончился. То есть делаешь, например
line [5]
Потом даёшь ему инпут: sunflower
И программа тебе отвечает
Input length: 9 symbols
Saved: "sunf"
спасибо большое. тяжело довольно сформулировано, не мог перевести никак. спасибо за все советы, аноны, продолжай оставаться в треде в будущем. я ещё неоднократно буду тебя заёбывать
Ну, я не очень умный, конечно, но без контекста и я не понял, чего хотят. Мог бы и объяснить ему вчера, если ты сразу разобрался.
Это копия, сохраненная 25 марта 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.