Это копия, сохраненная 16 ноября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Пожалуйста, пользуйтесь https://ideone.com/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [i] или ∗.
Что читать:
- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- Черновик стандарта 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://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
Прошлые треды:
- №46: http://arhivach.ng/thread/461169/
- №47: http://arhivach.ng/thread/475391/
- №48: http://arhivach.ng/thread/495505/ >>1480534 (OP)
в чём?
> GUI в терминале консоли, TUI.
ncurses
Не забудь обычную консольную с параметрами написать, а то я потом в пайплайн не смогу вывод отправить.
da ;-)
>В винде хэндлы принципиально ничем не отличаются
Хэндлы не отличаются, файлы отличаются. Файлы - дисковые, потоки - не файлы. Мир живет на винде, использует терминологию винды. Терминология с мейнфоеймов 70-х годов неуместна, устарела и только мешает, сбивая с толку.
Как пример, повторю: Там написано "при запуске любой программы на Си создаются хэндлы консоли", это прямая ложь. Нет, не создаются, ибо последняя ОС общего назначения с форсированной консолью была DOS, которая уже давно неактуальна.
>Виндой мир не ограничивается
Да, мир ограничен юниксами, в которых консоль всегда как в DOS. А в виндовс таких ограничений нет, поэтому учить людей нужно соответственно.
> при запуске любой программы на Си создаются хэндлы консоли
> это прямая ложь
Смотрите, неосилятор не осилил даже винду! Сишные stdin/stdout/stderr CRT открывает при инициализации ввода-вывода вне зависимости от того, WinMain там у тебя или еще что-то. Если ты соберешь GUI-программу, сделаешь в ней puts("Hello, world!"); и запустишь ее как hello.exe > output.txt (можешь из консоли, можешь в STARTUPINFO хэндл передать - похуй), как ты думаешь, что будет в output.txt?
Запускал из консоли, printf ничего не выводит пока не переделаешь проект под консоль с main. Кто не осилил? Ты неосилил. Кто пиздит? Ты пиздишь.
Хотя, попробовал перенаправить в файл и действительно туда выводит, но не на экран. Так что был неправ, всё создается и даже работает, наполовину. Только нахуй оно такое нужно в реальном мире, блокнотиком в файлы подглядывать. Ручками-то понятно можно всё напердолить, но речь шла по-умолчанию.
>Да, мир ограничен юниксами, в которых консоль всегда как в DOS.
Няшки, на хуй вы этого ребенка-олигофрена кормите? Пусть в ЖС или Питухон пиздует
- Очень удобно для логгирования
- Внезапно, даже в гуишном приложении можно создать окно консоли вручную, тоже отличная штука для отладки
Я тебе в рот ссал няшка блять
>нахуй оно такое нужно в реальном мире, блокнотиком в файлы подглядывать
Именно так в реальном мире и надо, а не смотреть простыни текста на экране.
windows.h ?
> Только нахуй оно такое нужно в реальном мире
Я же тебе сразу сказал, что это вендопроблемы. Компилятору Си абсолютно похуй, что ты там себе налинковал, и создает ли тебе винда консоль или нет. Он все инициализирует, потому что у него в стандарте так написано. Если GetStdHandle() выдаст правильный хэндл - все заработает, не выдаст - не заработает. При редиректе шелл в STARTUPINFO.hStdOutput кладет хэндл файла или пайпа, поэтому все выводится, а без редиректа в hStdOutput NULL, и консоли тоже нет, поэтому ты ничего не видишь.
>>01351
В msvcrt (т.е., и в Visual Studio, и в MinGW) кое-что реализовано (#include <io.h>), в рантайме Pelles C реализовано почти все, что реально используется. Но вызывать такие функции нужно с подчеркиванием (_open) или линковаться с oldnames.lib (в Pelles C можно /Go). Но лучше всем этим не пользоваться и писать слой с абстракцией от ОС самостоятельно (поверх вот этих POSIX вызовов в nix, поверх Windows API в винде).
> системным вызовам
Именно системные вызовы (а не функции, в которые они обернуты) у каждой ОС свои, а в винде у них еще и номера от билда к билду меняются.
> windows.h
Да, если тебе эквиваленты, то в Windows API есть CreateFile/ReadFile/WriteFile/CloseHandle/DeleteFile, и для них нужно инклудить именно windows.h.
Gets депрекейтед потому что небезопасен и позволяет хацкеру переполнить буфер и залить шеллкод. Getchar получает не строку а символ, другая функция просто. Для скорости используй безопасную версию gets
>Gets депрекейтед потому что небезопасен и позволяет хацкеру переполнить буфер и залить шеллкод.
Объясните пожалуйста, где тут небезопасность? Программа локальная, запускается на компьютере. Откуда тут возьмутся хакеры и зачем им что-то переполнять в случае если есть?
Не хочешь - не надо, но когда с помощью твоего кода случайно взломают твой анус - не жалуйся
>с помощью твоего кода случайно взломают
Повторяю вопрос. Объясни, каким образом кто-то взломает через твою программу?
Тётя Срака приведёт Ванечку, начитавшегося Касперски, посадит за твою пеку. И в следующий раз как тебе захочется увидеть "Privet, <username>!", тебе в ебало прилетит "<username> - pidr ebuchi".
Ты забудешь что код дырявый и установишь его на твой анус. А потом кто-то попробует ввести 100 килобайт текста вместа имени пользователя и твой анус упадет. Хммм, подумает хакер, и напишет шеллкод.
Скажи, дебил, как ты живешь такой тупой? Если в твой компьютер влезли посторонние, это УЖЕ взлом. Зачем им твоя ссаная программа со ссаной "небезопасной" функцией, если они УЖЕ имеют твой компьютер в момент получения доступа.
>анус
Спасибо, я понял что та дебил, можешь не продолжать. Подожду адекватных ответов. Надеюсь меня удивят и произойдет чудо взлома через ничто.
Ну например ты используешь gets в суидном бинарнике и получаешь локальное повышение привилегий. Или ты часть пайпа, который обрабатывает недоверенные данные (мы ведь все любим линукс?). Или сокеты, да.
Чего? Эсли очевидно, почему так скромно и мутно выражаешься? Что за это программа такая? Для чего предназначена? Кто и как взломает? ГДЕ ОЧЕВИДНЫЕ ОТВЕТЫ ПРО ОПАСНОСТЬ ВЗЛОМА? Почему я слышу только вялое блеяние в ответ на вопрос об этих ко-ко опасных фенкциях, про которые все уши прожужжали, даже компилятор радостно сообщает, но ответа где эта мифическая опасность нет?
>>02507
Какие привелегии, что ты несешь? Еще раз: Программа на компьютере, ты знаешь значение этого слова - ПЕРСОНАЛЬНЫЙ КОМПЬЮТЕР, он твой блять, какие привелегии, ты сам себя взламываешь? Остановись поехавший, компьютер и так твой!
Так, еще раз. Внятно четко и по делу: ЧТО ОПАСНОГО В ЭТИХ ТАК НАЗЫВАЕМЫХ "ОПАСНЫХ" ФУНКЦИЯХ? КТО ТЕБЯ ВЗЛОМАЕТ У ТЕБЯ ДОМА ГДЕ. ТЫ И ТАК ХОЗЯИН, ИДИОТИНЫ?
Этот господин прав. Никто из нас так и не дал действительно адекватного ответа. Но ничего, есть идея, ща подожди...
Иди нахуй.
Так иди, школопетух.
Значит чуда не будет, а жаль. Не весело убеждаться лишний раз, что люди - безмозглые дроны, лишь как попугаи повторяющие залитую в пустую башку бессмыслицу.
А как насчет этого?
>>01604
>Но лучше всем этим не пользоваться и писать слой с абстракцией от ОС
Еще один мифический единорог, про который все пиздят, но никто не видел - "мультиплатформенность".
Объясните, пожалуйста, это слово означает наличие нескольких платформ. ТАК ЧТО ЭТО ЗА ТАКИЕ ПЛАТФОРМЫ? Линукс, линукс, и еще макос (очередная сборочка линукса)? Вот ты, тупая сука, пиздишь про мультиплатформенность, но существует всего две реальные платформы - ЛИНУКС и ВИНДОВС. Но ты же, тупая линуксоидная скотина, не будешь делать под винду, ты винду не любишь или вообще ненавидишь? тебя хуй заставишь собрать под винду. ТАК КАКОГО ХУЯ ТЫ ПРОПАГАНДИРУЕШЬ МУЛЬТАПЛАТФОРМУ, ТО ЕСТЬ ПОДДЕРЖКУ ВИНДОВС ТОЖЕ, А ЗНАЧИТ ЗАБОТУ О ВИНДОВС И ЛЮБОВЬ К ВИНДОВС, КОГДА НА САМОМ ДЕЛЕ ТЫ ВИНДОВС НЕ ЛЮБИШЬ. ТЫ СУКА ГОВОРИШЬ ПИСАТЬ КОД С ПОДДЕРЖКОЙ ВИНДОВС, ХОТЯ НЕ СОБИРАЕШЬСЯ ЕЁ ДЕЛАТЬ. КАКОГО ХУЯ, ЛИЦЕМЕРТАЯ СКОТИНА? ТЫ ТУПОЕ ГОВНО САМ СЕБЕ ПРОТИВОРЕЧИШЬ В ОДНОЙ В/ФРАЗЕ, ДЕБИЛ.
Ща, падажи, убоги подтянуться и начнут ему объяснять, лол
Хочу хэллоуворлдами поразвлекаться, но один за одним наборы для девелопмента вставать не хотят из-за проёбанных пакетов. Из вариантов - бубунта и арч.
Я так понял, чуда снова не будет и всё сказано правильно?
"Тупые хомяки тупо хомячат, не мешай нам быть тупыми, зануда", так? Ну окей, не буду. Я же не навязываюсь, просто хотел спросить, ведь это было всего лишь личное впечатление, мог и ошибаться. Неприятно не ошибаться в таких вещах.
На хуй иди, лол
>безмозглые дроны
>пустую башку
>тупая сука
>тупая линуксоидная скотина
>сука
>лицемерная скотина
>тупое говно
>дебил
Пофиксил. Много воды было.
А на сегодня всё. До новых встреч!
надо полностью с инклудами и прочим говном и вообще задач дохуя для шараги надо а нихуя не гуглится
А потом ты придешь через 5 лет с тредом типа "пацаны как вкатиться". Учись, студент, сам, подобные задачи это самое важное в твоей жизни.
А при чем тут Си? Я понимаю, что ты другой анон и рофлишь, но подозреваю, что тот анон хочет разбирать готовые решения примерно таких задачек конкретно на Си. Так вот...
>>02806
Задачи - это одна книга книга, а определение языка - другая. Если ты не умеешь в абстрактное мышление, дедуктивный подход, псевдокод и т.д. и т.п., то ты просто проебываешь время. Лучше плотно займись какой-нибудь гуманитарной деятельностью и поспеши обеспечить себе адекватное будущее, чтоб не словить кризис среднего возраста. Я желаю тебя счастья, анончик. Алсо, попробуй в искусство, может зайдет.
Ааа, как-то не подумал об этом..
да хороший совет итак так делаю пытаюсь в рахе нихуя нет всё самому через ебаное превозмогание
сама
>Если ты не умеешь в абстрактное мышление, дедуктивный подход, псевдокод и т.д. и т.п
Докладываю - именно такой, но уж универские задания по программированию решаются легко если не надо математики во всем ее ужасе.
pthread_create(..., &func, (void*)NULL);
...
}
g() {
for (...) f();
}
Как сделать, чтобы функция func вызввалась каждый раз в треде, не создавая отдельный? Если я вызову f() в цикле N раз, то создастся N тредов. Нужно вводить счетчик и хуярить pthread_exit?
Откуда такая идея? pthread_create - это тебе не fork + exec, где заем ядра и замена кода - 2 разных вызова, и можно делать фокусы.
Спасибо за классический образчик поведения тупого скота.
Показываю на пальцах.
Вопрос:
>Привет, подскажите сколько будет дважды два?
Ответ 1:
>Будет пять, няша, заверено экспертами математиками. Обращайся еще, всегда рады помочь!
Дебил:
>Спасибо, друг!
Ответ 2:
>Ты чего такая тупая скотина? Разве не очевидно, что будет четыре, выкидышь мартышки?
Дебил:
>гринтекст пофиксил Нахуй иди.
Свойство скота - преобладание чувств над разумом. Как видно в посте по ссылке и приведенном выше объяснении, пациент выбрал из ответа только эмоциональную составляющую и реагирует только на неё. Разум подчинен эмоциям. Вежливый пост с ложной информацией принят, а правильный пост, но неприятный - отвергнут. Вот почему скот тупой, таким образом живут животные, они не умеют рассуждать в принципе и подчинены эмоциями, прямо как этот дебил, не поднявшийся выше собаки, только рычит и тявкает выражая недовольство, а на человеческий диалог анализом информации не способен.
У них 1 мозг на колонию
>очередная сборочка линукса
Ебать у шкилы манямирок. У тебя всё, что написано с оглядкой на POSIX = линукс, зумер?
>тебя хуй заставишь собрать под винду
Вообще-то это винда посылает всех нахуй и не поддерживает общепринятые стандарты, лол.
>>03161
Его вообще много кто любит, причин куча: легко написать компилятор под что угодно, легко (хоть и весьма вербозно зачастую) заинтерфейсить с чем угодно, достаточно просто и его знают все. Такой питон от мира байтойобства.
В посте написана хуйня, но возражать тебе - примерно как возражать куску говна. При чем тупому куску говна, который возражений не поймет.
>Вообще-то это винда посылает всех нахуй и не поддерживает общепринятые стандарты, лол.
>Винда: 99%
>общепринятые стандарты: 1%
> винда не поддерживает общепринятые стандарты
Бля, смеялся
http://zonakoda.ru/
Интересно пишет, разжевывает понятия, с примерами. Строковые литералы я только у него и понял вообще.
Во-первых, понятно, что ты школьник, и у тебя существует только десктоп, но в мире-то почти вся разработка крутится вокруг серверсайда, исключение только геймдев (да и тот стремительно переезжает в облака, ещё через несколько лет у производителей видях драйвера под никсы станут приоритетными над десктопными). И тут сплошной линукс да бсд, я вообще хз кто использует шиндовс сервера кроме додиков из наших госструктур и какого нибудь совсем дремучего ынтерпрайза с кучей легаси из времён, когда джава ещё не выебала и не высушила дотнет так, что мс как побитые шлюхи сделали его кроссплатформенным, лол. Но кто-то и макос на серверах юзает, притом платит достаточно, чтобы ахуевшая эпл поддерживали эту хуйню, кек.
Во-вторых, 10% занимает тот же мак. Если писать, например, пользовательскую гуёвую софтину для заработка денег — я бы поставил на эти 10%, лол.
В-третьих, в мобилках и планшетах винда отсосала и мс от неё отказалась уже официально, весь этот рынок за линуксом и бзд.
В-четвёртых, Windows Subsystem for Linux как бы намекает, что мс чувствует жепой, что обычные юзеры забивают на пека и скоро это будет исключительно рабочий инструмент, у котороо от былой славы не останется и 10%.
Так что учи линукс, сынок.
Классическая книга, с которой нужно начинать изучение линуксов и си: https://web.mit.edu/~simsong/www/ugh.pdf
>в шинде баги старых версий симулируют в новых версиях )0
>а в линюксах ниграв убивают)0
Классная книжка, почитаю на досуге.
У тебя /s/ протек
когда я искал очередную работку, у меня было требование - никакого ебучего линукса, наелся им, только винда + вижуал студия. И как же я счастлив, что я ее нашел, и работаю третий год с кайфом.
Мимо из соседнего треда с плюсами
я тот хуй, у которого кресты отличный язык
А там где норм зарплаты - везде линукс, беда-беда. Кроме разве что самого Майкрософта.
Он тебе про серверсайд, а ты ему статистику про десктоп кидаешь, ну что ты за еблан
Все и так знают, что большинство людей домохозяек и игродаунов, держу в курсе в мире юзают шинду, но это не имеет никакого отношения к работе в айти
Все твои однокурсники так делают?
А вот и любитель пообсуждать бинарники. Что, педролишь срачельник? Не забывай наносить смазку, бггг
Когда завезут человеческую поддержку все сортов железа, тогда и приходите. А то или кулер не вращается, или иксы падают на старте, распидорашивая каким-то образом даже текстовый режим. И вино допилите, да.
Пердоль, у меня все работало на шести разных ноутах, мне кажется ты что-то сделал не так.
Пусть сначала завезут концепцию "драйвера". Чтобы можно было отдельно ставить, удалять, выбирать нужную версию, и всё это для каждой железки в отдельности. Иначе это ссаный андроид, только не от производителя телефона под его железо, а совсем конченый, не понять для какого железа, поэтому всего напихано, и остается только молиться что твоё заработает, ведь повлиять никак. А если не заработает, читать сайтики где перечислено "нинужное" железо, "сам лох, нито имеешь, бгг", кек.
Хуй знает что ты за хуйню несешь, все уже давно на мс серваках сидят, любой линукс говно дырявого говна. Пока сруникс комьюнити закапывает себя в си-легаси говне, майкрософт пилят реальную ось.
Какая-то толстота с отрицательным выхлопом. Высрать на короткий рофл длинную псевдосерьезную хуету... Я даже хз, кто тут кого забайтил.
В посте нет оскорблений. Там есть выдвинутый тезис, его обоснование и предложение прокомментировать. А между строк приправлено эмоциями, выражающими личное отношение. Ведь пишет человек, а не бездушная жестянка, нет ничего странного выразить себя заодно. Это называется свобода слова, за которую, хвала богам, на данного типа анонимных бордах не наказывают.
Как видишь, повторюсь, оскорблений нет, т.к. в посте нет других людей, только сам говорящий и его отношение к им же высказанному тезису. Если же каких-то третьих лиц высказанная позиция оскорбляет, это проблемы уже их личные, не надо валить с больной головы на здоровую.
Ну, допустим, я перечитал и убедился, что из смысла там только
>этой ТВОЙ комп, ТВОЙ сука, ты его из розетки можешь вытащить, когда услышишь звук обращения к запрещенным байтам, это ведь так заметно, хуй взломаешь
>у вас тут пара убунтошизиков затесалась, стало быть тред зашкварен, и говорить о кроссплатформености никто итт не имеет права
Дальше что? Развлеки меня, анон.
>Ведь пишет человек, а не бездушная жестянка
Пишет истеричка, к которой нет уважения в обществе байтоебов. 95% поста эмоции.
Ко мне как к яблочному анальному рабу это ебать как относится, дружок.
>>03558
Нет, друг, это я тот чел работающий с крестами, у которого кресты говно. Даже по сравнению с уёбищной динамикопарашей обжс, они сосут что по синтаксису (а ведь это код на с++17, которого в проде днём с огнём не сыщещь, и ирл всё куда хуже), что по фичам (ведь даже в обжс уже хуй знает сколько лет уже есть модули, блядь).
>>03581
Я тебе про серверсайд, ты мне про иксы. Ну не еблан ли?
>>03729
Кто все-то? Ты один здесь нахуй.
>только винда
Классно наверно, когда весь мир на цмейке сидит, а на твоей ос он никогда ничего не резолвит, да?
>вижуал студия
Дотнетовская лагающая параша.
>Нет, друг, это я тот чел работающий с крестами, у которого кресты говно
Так ты бы сразу писал, что ты эплопидорас. ДАЖЕ, лол.
Ебать школьника порвало. Ничего, дружок, поебёшься пару лет с шиндовсом, потом так же с линуксом на десктопе, а там уже и на барский макбук накопишь.
>Objc-обезьяна
Нипапал.
Ничего, шкильник, я же говорю — накопишь и на человеческую технику когда нибудь. Не плачь.
>сам занимается вебмакакингом
>считает всех пидорасами и даунами
>и срётся за плюсы в ц треде
Кстати, не подскажешь, где там шиндовс? Его же все поголовно на серверсайде юзают.
спасибо
Тупой дегенерат-дебил, не знает, что визуалстудио полностью поддерживает и интегрируется с cmake. А еще она написана на плюсах. Про какие ты там иде вообще говоришь? Говноподелия от жидбрейнс, которые виснут по несколько минут?
Пиздец, как же я лолирую с этого яблодебила, он еще и боевые картиночки использует, ну дегенерат же очевидный.
Столько же. Правда одна из них нативная и не лагает.
>>03864
>поддерживает и интегрируется с cmake.
Тупой школьник даже не понимает, о чём я говорю. Какая нахуй интеграция с вс? Я об этом хоть что-то говорил, долбоёб?
>А еще она написана на плюсах.
Была, году так в 2010, сейчас там львиная часть — говноподелие на дотнете уровня жидбраинс, причём плюсы по сравнению с шарпом там в состоянии какого-то рудимента из ануса.
>Говноподелия от жидбрейнс, которые виснут по несколько минут?
Не запускай ПО для серверной разработки на калькуляторе 8 гб оперативки и 4 ядра
Для какой нахуй серверной разработки? ИДЕ от жидбраинс уже умеют работать как тонкие клиенты к серверу с запущенной там иде или что?
Покупать ебаный ядерный реактор для редактора текста = быть дауном.
>>03896
Иде как иде, нечего сказать.
>>03908
Да нет, не боль. Нюфаги устраивают набеги потому что не в курсе, что его необходимо устанавливать с сайта эпла, и через аппстор его не обновить на следующую мажорную версию, он ломался и ломается при такой установке всегда, лол. Но маркетологам похуй, и такая возможность почему-то есть.
Если хочешь модным быть, купи айфончик в Apple Store
Но можешь на эти деньги купить то, чего нет ни у кого в школе
Красные носки-носочки, целые четыре пары, а не три
Для кошерных ступней оболочки цвета догорающей зари
А теперь подумай, сколько дров мог бы купить на эту сумму
Для несчастных стариков, с которых он одежду снимает безумно
> а рандомный проект что на цмейке, что хоть на мейке собрать без 5 часов ебли всё равно не сможешь.
> Я об этом хоть что-то говорил, долбоёб?
Не говорил говоришь? У меня любой смейк проект в 2 клика собирается, дебил.
> >Классно наверно, когда весь мир на цмейке сидит, а на твоей ос он никогда ничего не резолвит, да?
Ты сам это придумал?
А оно разве ресолвит? Я не пользуюсь, но собирал чужой код и без нужных пакетов компиляция просто падала. Что зо ресолвинг у вас?
Как после C вкатываться в другие языки? Они какими-то ущербными все кажутся.
>Как после C вкатываться в другие языки? Они какими-то ущербными все кажутся.
Через боль и страдания
$ sort -i unsorted.txt
$ cat unsorted.txt | sort
$ echo 7 6 3 1 2 5 | sort -o sorted.txt
Сказочник, как у тебя могла падать компиляция, если цмейк не найдя нужных либ в системе не генерирует нихуя, ммм?
Проверяешь argv[1] на наличие ключей "-i", "-o". Если есть, то достаешь из argv[2] значения и работаешь с ними. Если нет, то читаешь весь argv и пишешь в массив, который надо сортировать.
В последних двух командах идет перенаправление потока ввода, читать надо не из argv, а из stdin
> #include <stdafx.h>
> E1696не удается открыть источник файл "stdafx.h"
Не могу нагуглить решение. В настройках пробовал включить предварительно скомпилированные заголовки, все равно шлет нахуй. Работаю в VS 2019
создавай чистый проект всегда в студии. И ничего более, никаких консольных приложений
https://stackoverflow.com/questions/9642732/parsing-command-line-arguments-in-c
Если -i и -o отстуствуют, устанавливаешь как -i файл stdin, а как -o файл stdout. Эти файлы уже открыты и объявлены в недрах стандартной библиотеки
В настройках проекта выбираешь платформу All, тип сборки All, выключаешь Precompiled headers, профит.
Не видишь чтоле — бинарник цмейком уменьшать собрался и с иде сруливать.
Групо выразился. Там билдскрипт который всё делает, и он падал пока руками не установил в менеджере пакетов нужное. Так вопрос, что там у вас этот симейк ресолвит если у меня ничего не ресолвит?
Симейк говно, мейк нормасик
Если в проекте включены предварительно скомпилированные заголовки, тогда создаешь этот файл в папке с твоим проектом и меняешь код на
> #include "stdafx.h"
в кавычках. Угловые скобки ищут файл в библиотечных каталога, такое нужно для системных инклудов, но не твоих собственных.
Или же просто убери в настройках проекта эти пред-компилированые заголовки и удали строчку
> #include <stdafx.h>
В таком случае этот файл не нужен и естественно пытаться его инклудить тоже не надо. Тем более его в системных библиотечных инклудах всё равно нет и не будет, лол.
Ресолвить - штука сложная. Ты ему тыкаешь где у тебя какой-нибудь libxyz установлен, а он находит там cmake модули, импортирует таргеты, ты делаешь target_link_library и вуаля, у тебя и инклюдлые пути прописаны, и правильные библиотеки подлинкованы для каждой конфигурации.
Странный ты. Когда видишь другие языки, в которых миллион возможностей, в которых не надо писать велосипеды, ущербным кажется именно си.
cmake && make лол, симейко дебилы
А их хрен освоишь, потому что привыкаешь к простоте Сишки, и везде пытаешься писать как на ней.
Хотя скорее просто я тупой.
Когда много пишешь на Си, кое-какие паттерны нарабатываются, которые первое время пердолишь вручную "смотрите, белоручки, как я умею", потом макросами, а потом понимаешь, что кресты - это охуенно. Отчасти потому, что совсем не лишают тебе возможностей Сишки, с оговоркой на дополнительные касты.
Почему в аддитивном выражении правая часть не может быть аддитивным выражением, как левая?
Зачем выражения сравнения определяют через выражение со сдвигом? Причем тут сдвиг вообще?
По каким ключевым словам вообще гуглить все это колдунство?
Русский перевод K&R
Подскажите какие-нибудь учебники и курсы (можно платные) по STM32!
Как освоить эти ебаные контроллеры? Мне советовали курить даташиты, но как блять по даташитам ботать с нуля? Непонятно нихуя же. Это все равно что студенту-юристу не дать учебник, а дать сразу УК РФ, там же всё написано.
Повторяю вопрос: где взять УЧЕБНИК по STM? Чтоб с нуля, для нуба, было последовательно разжевано, по темам, от простого к сложному, с примерами кода.
И второй вопрос: а где вообще этому системно обучают? В колледжах, на каких-то курсах или где? Или какие-то особые люди-программисты сразу рождаются с этим знанием? Именно такое ощущение сложилось. Помоги, двач, погибаю! По работе очень надо
>STM32
Купи за 200р Пердуно и начни вкатываться с него, светодиодом поморгаешь, дальше все поймешь.
Это не определение сравнения, это приоритет операций. Что считается первым, что вторым. Не забивай голову, это никто не помнит и ставит скобки
>Ты, блять, меня троллишь?
Ну я с Ардуино пердолюсь, материалов много, читай не хочу. STM32 те же яйца, только в профиль.
>Повторяю вопрос: где взять УЧЕБНИК по STM
Тут спросить https://2ch.hk/ra/res/314976.html (М)
А вообще с такими навыками гугления у тебя ничего не получится
>И второй вопрос: а где вообще этому системно обучают
В вузах, например
>А вообще с такими навыками гугления у тебя ничего не получится
Спросить на дваче - один из эффективнейших способов гугления, не?
>Тут спросить https://2ch.hk/ra/res/314976.html (М)
Благодарю.
>Спросить на дваче - один из эффективнейших способов гугления, не?
А макдоналдс один из эффективнейших способов пожрать
>когда есть подобные хуйни на ARMах, включая STM32
Ну может и есть, просто про Пердунью материалов много да и на рукожопов рассчитана.
> Почему в аддитивном выражении правая часть не может быть аддитивным выражением, как левая?
Может. Но приоритет у умножения выше.
> По каким ключевым словам вообще гуглить все это колдунство?
Если вообще пиздец как интересно, то любая книжка или статья по компиляторам. Даже https://compilers.iecc.com/crenshaw/ сойдет. А вообще, тебе это читать не нужно, это на случай, если ты парсер захочешь написать.
Не знаю, предпочитаю писать на железе, а не восьмибитном кале.
Хотя кого я обманываю. В кладовке валяется все
На самом деле сложность армов сильно преувеличена (их только паять неудобно - ног много), а сложность авров сильно преуменьшена (восьмитиный кал vs нормальное железо)
Это смотря какие армы. ARMv8 с bare metal и до чего-то вменяемого инициализировать очень и очень непросто.
Я про те что на stm32. По сравнению с взрослыми компами там только мало оперативки
Эта залупа (аддитивные и мультипликативные выражения) введена чтобы избавиться от неоднозначности при парсинге. Пример: без приоритетов операций a+bc парсер может интерпретировать как (a+b)c или a+(b*c). Т.к. Ты скорее всего нюфак, и не собираешься писать парсер с, то вместо "аддитивные/мультипликативные выражения" читай просто "выражения" и не забывай о приоритете операций!
Макаба зажевала звёзды a+bxc, (a+b)xc, a+(bxc)
просто тестовый код. Компилирую 'gcc -g test.c'
запускаю и такой вывод, когда дохожу до сканфа.
12 scanf("%s", foo);
(gdb)
wabalubadaba
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7a50fdd in _IO_vfscanf_internal (s=<optimized out>,
format=<optimized out>, argptr=argptr@entry=0x7fffffffde40,
errp=errp@entry=0x0) at vfscanf.c:1103
1103vfscanf.c: Нет такого файла или каталога.
int main(/blabla/)
{
char *foo="there is an awesome text\n";
printf("%s", foo);
fflush(stdout);//do not works with stdin
scanf("%s", foo);
return 0;
}
В смысле? То есть, типо лучше писать foo[32], если с указателями на "вы"?
Зачем дебилу отладчик, если он не понимает ни что такое память, ни что такое указатели?
>но вот писать туда нельзя
Даже если можно, всё равно нельзя, ведь можно записать больше той строки и получить испорченную память.
Спасибо, знаю, что платина доводит, но ньюфажиков необходимо тыкать в маны и наставлять на путь истинный. Да и мне самому не найс дёргать мудрого анона.
мне KFC нравится .
Есть библиотека - в .h файле заголовки функций, структуры, переменные и массивы и стоят guard-ы, в .c файле тела функций и подключен .h файл.
1) Как правильно сделать некотоыре функции библиотеки inline-овыми?
2) Как правильно сделать некоторые переменные библиотеки статическими глобальными?
>1) Как правильно сделать некотоыре функции библиотеки inline-овыми?
Никак. Можешь тыкать везде inline (который нихуя не гарантирует) или платформозависимую хуиту вроде inline __attribute__((always_inline)), которая гарантирует инлайн, но скорее всего ты обосрёшься. Поэтому просто забей хуй и оставь это компилятору (если не пишешь под мк с компилятором от дяди васи). А можешь просто ебануть все на препроцессоре, как диды делоли.
>2) Как правильно сделать некоторые переменные библиотеки статическими глобальными?
Никак, правильно только по ебальнику за такое можно получить. Даже если делаешь глобал стейт, то меняй его используя функции (туда хотя бы ассерты можно вставить), компилятор энивэй это всё заинлайнит, а вот ты и все кому этот код достанется ахуеют его дебажить.
>то меняй его
Точнее не только меняй, но и получай (стандартный оопный подход с геттером-сеттером с ассертами на вход-выход), сэкономишь кучу лет жизни.
> платформозависимую хуиту вроде inline __attribute__((always_inline))
Поддерживается чуть менее чем всеми в каком-то виде, поэтому пара #ifdef, и все ок, моя программа уже посчитала, а твоя все еще моет посуду.
> компилятор энивэй это всё заинлайнит,
Только с линк-тайм оптимизациями, которые далеко не все включают.
> Никак, правильно только по ебальнику за такое можно получить
Некоторые переменные можно делать глобальными, надо только заранее подумать о thread safety. Писать геттеры-сеттеры для какого-нибудь void ( ∗debug_writer)(const char ∗format, ...) - признак отсутствия мозга. Глобальный стейт тоже не всегда плохо. Если задача не предполагает наличия нескольких стейтов одновременно, то нехуй и таскать указатель на стейт из функции в функцию, это не дает ничего, кроме проблем и тормозов.
Я суммарно недели три своей жизни потратил, рефакторя код таких глобализаторов
>нюфак на полном серьёзе считает что вызов функции приведёт к тормозам, и глобал стейт через всю программу приведёт к чему-то кроме неуловимых багов
В твоём манямирке наверно ещё всегда тормозит процессор а не память?
>моя программа уже посчитала, а твоя все еще моет посуду.
Ага, а если твой код, раздутый инлайнами без поводов, не полностью влезет в кэш лайн, как думаешь, что произойдёт? Отсос хуя мамкиным оптимизатором.
>Только с линк-тайм оптимизациями, которые далеко не все включают.
Эээ... В релизе включают примерно все. И компиляторы это делали ещё до того, как начали форсить LTO. А если кто-то и не включает — значит, есть на то причина.
>Глобальный стейт тоже не всегда плохо.
Хоть один его плюс приведи (кроме отсутствия необходимости нажимать лишний раз на клавиатуру), лол. Эту хуйню даже протестировать невозможно, не говоря уж о каком-то там тредсэйфети, охлол.
> Писать геттеры-сеттеры для какого-нибудь void ( ∗debug_writer)(const char ∗format, ...)
Ну мы про переменные говорили.
>признак отсутствия мозга
Да нет, признак отсутствия мозга — это перед каждым юзом глобальной переменной тыкать ассерты до и после, чтобы отловить ошибку, когда можно написать этот код 1 раз.
>В твоём манямирке наверно ещё всегда тормозит процессор а не память?
В моем манямирке тормозит и то, и другое. Сброс конвейера и I-cache при вызовах приводит к тормозам. Не всегда, но приводит.
>>07671
> Инлайны компиляторы игнорируют из-за таких как ты
Наверное именно поэтому каждый компилятор умеет force inline.
>>07681
> И компиляторы это делали ещё до того, как начали форсить LTO
И через какой астрал они это делали, если функции в разных translation unit-ах? Анон спрашивал именно про этот случай.
> Хоть один его плюс приведи
Меньше аргументов у функции, отсутствие лишних дереференсов.
> тредсэйфети
_Thread_local, при необходимости атомики для синхронизации. Все то же самое тебе понадобится, если ты стейт за собой таскаешь, но хочешь использовать его из разных тредов (например, один менеджит ввод-вывод, а второй обрабатывает данные).
> Ну мы про переменные говорили.
Указатель на функцию - это переменная.
> чтобы отловить ошибку
> протестировать невозможно
Документацию и/или комментарии писать пробовал? Попробуй - понравится. Если в переменную попадает не то, то кто-то это туда положил. Ты можешь отловить статическим анализом некоторые ошибки, ты можешь отловить тестами еще некоторые, ты можешь даже что-то отловить в рантайме ассертами, но если не использовать мозг, в релизе все равно возникнет ситуация, когда оно свалится.
> если функции в разных translation unit-ах?
Функции на пару строк можно и в хедере написать, чем в тех же плюсах всегда и занимались.
>Меньше аргументов у функции, отсутствие лишних дереференсов.
Т.е. ты согласен, что из плюсов — меньше нажатий по клавиатуре?
>Документацию и/или комментарии писать пробовал?
Во всём мире программисты умудряются срать себе в штаны используя подобное уже пол столетия, один ты борщехлёб д'Артаньян, я понял.
>Ты можешь отловить статическим анализом некоторые ошибки
Какие? Неинициализированные переменные? Хотя в лапше с глобалстейтом, гото и прочей чернухой тебе даже в этом никто не поможет.
>ты можешь отловить тестами еще некоторые
Пидоран, как ты будешь писать тесты для либы с глобал стейтом? Тестировать всю либу снаружи? Если либа на 200 строк — то ок, но когда там будет пару десятков мб кода — что такие тесты вообще могут показать? Что у тебя всё ебнулось нахуй от сегфлолта?
Для того и пишут функции с кучей аргументов, чтобы они, блядь, были стэйтлесс, и их можно было покрыть тестами и сразу знать, ломает ли что нибудь какое-то изменение.
>но если не использовать мозг
Ну я же говорю — весь мир считает себя дохуя умным, говнокодит и обсирается, один ты не пидорас.
> Функции на пару строк можно и в хедере написать
Да, именно так правильные инлайн-функции и делают.
> программисты умудряются срать себе в штаны используя подобное уже пол столетия
Современные программисты срут еще больше, используя тесты. То время, которое они могли бы тратить на написание качественного кода, они тратят на написание множества некачественных тестов. Результат очевиден.
>Результат очевиден.
Результат очевиден именно потому что никто их и не пишет, блядь. Даже доки в гнутом софте найти легче, чем нормальное покрытие тестами хоть где нибудь. Итого — у нас нет недырявого софта, который с каждым апдейтом не разъёбывался бы по новой, от слова совсем.
>То время, которое они могли бы тратить на написание качественного кода
Ещё раз, борщехлёб, код может быть качественным пока его 100 строк и ты пишешь его один. Когда в проекте хотя бы около несколько тысяч строк и несколько голов скота погроммистов — результат очевиден.
Код будет качественным, если его пишут качественно. Если об архитектуре подумали заранее, если программисты знают язык, на котором пишут (особенно актуально для сишки), если предметную область тоже знают. А если не знают, получается хипстерское "ну я не уверен, ошибся ли я в условии for на единицу, напишу-ка я тест". Итого —
> у нас нет недырявого софта
Т.е. если у нас нет недырявого софта, и недырявым он получается только если его пишут не хипстеры, то вообще все современные (в смысле, компутерные) технологии написаны хипсторами?
Либо всем похуй на безопасность и/или корректность, либо код говно, либо код коммерческий, и нет времени/денег, чтобы писать хорошо. Про сложившуюся практику программирования очень хорошо и с кучей примеров написано тут >>03464. За прошедшие годы кроме названий технологий ничего особенно не поменялось, а местами стало только хуже.
А писать хорошо — это вообще как? Не релизить ПО совсем? Что-то сдаётся мне, что лучше говнокод, чем такие маняпотехи.
Это сидеть в кожаном командирском кресле и указывать черни как надо писать код. А если у них получается плохо, значит дураки, нужно было заранее соломку подстелить. Типичный я начальник-орхертехтар, а вы дураки.
Благодарю за ответы, не пинайте сильно. Обнял Си!
>Boeing, Airbus, NASA, SpaceX
Только в виде прошивок для embedded.
На ПК у них совсем другие языки используются, высокоуровневые.
Подожди Антоша, только не убегай. Прошивки это я так понимаю небольшие проги для конкретного железа так? А как же такие сложные штуки как автопилот, бортовой компьютер и тд? Неужели там используется онли Ada?
С другой стороны читал статьи про стильный, модный, молодёжный F-35, который кодят на C++. А также про разные спутники и марсоходы, которые ебашут по хардкору только на Си.
Но вот что значит на ПК они используют совсем другие языки? Итоговая компиляция всех девайсов? Написание интерфейса или что ещё?
Сори если совсем хуйню несу, но так любопытно это всё. И какое то благоговение ощущаю от тех, кто занимается железным прогингом. Наверное самые благородные погромизды из всех.
https://pastebin.com/5g3F9rvs
Как то нужно реализовать след ход действий над матрицами
C=(B+E)*(A-E)
Умножение уже сделал,не знаю что делать с Единичными матрицами(E)
Хэлп гайз
>Как то нужно реализовать след ход действий над матрицами
След ход действий? Чего блять? Ты обгашенный нахуй или что? Или просто русский не твой родной? Что за хуйню ты написал?
Серьезно?
Только один из нас,и это точно не я,додик.Следующий ход действий ,т.е. ,для обделенных разумом , сложение,вычитание,умножение матриц
А как работает stdio.h? Как он выводит и вводит инфу, если сам язык этого по дефолту не может? Или его написали на каком-то другом языке? Гуглить пробовал, пишут только о том, что этот stdio.h даёт возможность ввода-вывода, но нигде не пишут о том, как он именно работает, то есть что там такого происходит.
Наркоман иди проспись.
printf -> __printf -> puts -> _IO_puts -> _IO_sputn -> __xsputn -> _IO_new_file_xsputn -> new_do_write -> __write
Это из gcc
Считается ли правилом хорошего тона (и по MISRA C) использовать возвращаемые функции в условиях?
Например, здесь происходит выбор какого-либо действия в зависимости от того, что возвращает функция:
switch ( Function() )
{
case '1':
{
/ действие /
break;
};
...
default:
{
/ действие /
break;
};
};
А здесь происходит проверка условия: если функция возвращает 0, действие не выполняется, если 1 - выполняется.
if ( Function() )
{
/ действие /
}
Иметь другой доступ к стейту, очевидно. Интерфейс, например.
Аноны, такой вопрос. По MISRA C после оператора if, else if обязательно должно быть else, а в теле switch должна стоять заключительная метка default.
А если мне нечего там писать, оставлять пустые скобки под ними? Или обязательно нужно что то написать там, даже если оно не будет иметь смысла?
Для легаси говна, а так сейчас даже эмбдед пишут на крестах, всё таки без классов программировать хуево.
Ради справедливости, в эмбед-приложениях необходимость в классах не особо велика. Pure С охуенен в своей лаконичности. Для задач типа "считай АЦП - выкинь на дисплей - помигай светодиодом" классы не нужны, хватает структур.
>Для задач типа "считай АЦП - выкинь на дисплей - помигай светодиодом" классы не нужны, хватает структур.
Где такие задачи есть?
> long double как-то хранится отлично от double
80 или 128 бит в отличие от 64 бит в обычном double. Поэтому для вывода тебе нужно указать правильный тип для printf: %Lf и %Le соответственно.
> почему третье так отображается
Интерпретирует кусок мантиссы long double как double. Получается очень маленькое число (e-185!), поэтому %f округляет его до нуля, а вот %e показывает.
В каждом втором диагностическом медприборе, например. ЭЭГ, ЭКГ, миография, стабилометрия, всякие там биоимпедансы и биопотенциалы.
Забыл еще ключевую фишку, послать данные по UART/USB, это святое, везде нужно. Но это всё содержится в готовых библиотеках, ООП тут не пришей пизде рукав.
Главное чтоб прога была максимально простой и без потенциальных выстрелов в ногу. В контроллере неотслеженный баг может стать бомбой замедленного действия. Пляшем от этого.
Он меня унижает. Lf показывает -0.000000. А ещё я не понимаю, почему он вообще позволяет себе такую дерзость, как -0, ведь там 2's complement в любом случае реализован, скорее всего...
>А здесь происходит проверка условия: если функция возвращает 0, действие не выполняется, если 1 - выполняется.
А что в этом плохого?
Каждому своё. Но перескочить еще не поздно, если ты не сорокалетний старпёр. Если интересно - задавай свои ответы.
Да ты охуел. Сравни, что у тебя в предыдущем скриншоте, и что в этом! Там у тебя было 0.3L (long double), а тут 0.3 (просто double). Для обычного дабла (и флоата, который до дабла промоутится в функциях с неизвестными типами аргументов) тебе нужно %f, для long double %Lf, неужели так сложно?
> ведь там 2's complement в любом случае реализован
Там всего понемногу. Знак там отдельно и явно, мантисса совсем беззнаковая, а экспонента хранится хоть и без знака, но со смещением формат принципиально ничем от 2's complement не отличается, просто диапазон на положительные и отрицательные разбит не по 0 ("слева" от нуля отрицательные (0000...0001 = 1, 0000...0000 = 0, 1111...1111=-1), а посередине ("слева" от "середины" беззнакового числа отрицательные: 1000...0000 = 1, 0111...1111 = 0, 0111...1110 = -1).
У тебя шрифт говно, я думал, что там 0.31. Если там L маленькая, то она для спецификаторов плавающей точки игнорируется нахуй, нужно именно большую.
блядь это говно полностью загружает ядро процессора если двигать окно за курсором, причем если обычное окно двигать руками, то загрузка в 3 раза меньше. как это делается блядь?
>Если интересно - задавай свои ответы.
Мимо начинающий embedder, задам пару вопросов по теме, мне интересно.
1) На ассемблере уже больше ничего не пишут, только на си и с++?
2) Используете ли "программистские штучки" в своей работе, вроде гита, гитхаба (системы контроля версий), код ревью и т.д.?
3) Есть ли разделение на джуниоров, миддлов и сеньоров, как в айти?
4) Как делаете тестировку программного обеспечения?
5) Как проходит проверка программного обеспечения на правила MISRA С?
Не он но отвечу:
1) ????
2) Да, естественно используем, только это не программистские штучки, и немного не так как коммерческие лохи
3) в некоторых местах уже есть, в телекомах например щас уже почти везде так, в остальных местах Нотация и служебные звания как у заводских работяг ну типа старший инженер пидорасович
4) методами тестирования
5) никак
_s-версии - они стандартные или только микрософт?
Раз тут тред про CLang, анон, поясни как скомпилировать эти файлы https://github.com/Wind4/vlmcsd с "языка шланг" в exe - gcc-компилятором.
Пффф, этот кинкгвин хуй поставишь на XP. Не уже-ли без кигвина нельзя сбилдить шланг в win32 exe?
Понял, благодарочка от души спасибо браток
В том то и дело, что работает, но только на XP.
На win8.1 не хочет пахать.
Вот я и хочу поколупаться в коде, может чё дописат надо чтоб робило. Но для начала надо сбилдить. Где этот gmake в mingw?
Вижу только make, только он чуток другой там - mingw32-make.
http://stolyarov.info/books/programming_intro
Вкатываюсь в C со второй попытки, сначала курил K&R, потом поступил на бассейн школы 21, в итоге слил большую часть заданий, потому что начал баловаться хаками типа while(*p++) не догнал про отличие между массивами и указателями на массив, и вообще передачу значений функциям обращался к Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management", но времени на спокойное ботанье было мало, не взяли по итогам. Интерес немного поугас, поботал C#, и стало тоскливо.
Наткнулся на Столярова и снова начал ботать пошло очень бодро, действительно чётко объясняется про работу с указателями, понял как работают заголовки, линке. В целом аргументированно поясняет за плохой, хороший стиль, за Unix. Как по мне книжки лёгкие с юмором, только часть с командами на i386 занудная.
Кто ещё интересовался проектом?
>2) Как правильно сделать некоторые переменные библиотеки статическими глобальными?
Разобрался. Их нужно перенести из хеадера в начало с-файла перед функциями, в которых они используются, и добавить перед каждой из них static.
Тоже самое делается с функциями - из .h файла убираются декларации функций, которые мы хотим сделать статическими, а в .с файле перед функциями нужно поставить static, и ещё inline можно поставить до кучи, если надо(static inline).
Таким образом в .h файле у нас "интерфейс" библиотеки - внешние функции(заголовки) и глобальные переменные, а в .c файле "начинка" - внутренние функции и переменные, видимые только в этом файле(и тела функций, объявленных в .h файле).
>while(*p++)
Для ньюфага это нормально. Не понятно только почему ты думаешь, что такая фигня могла тебе что-то завалить.
Чё за бассейн школы? К и Р кстати не читай это залупа, Оно в шапке только из-за эстетики. Читай две другие книги из оппоста. А ваще читай Страуструпа как нормальный человек, а к этому треду вернёшься позже
Ну ты лох
Я уже сам написал с моим хуёвым знанием си. Непонятно только почему мы в функцию передаём не указатели на переменные, а сами переменные
То есть указатель на float это всегда массив? И поэтому компилятор не ругается и даёт взять индекс у этого указателя?
yoba и &yoba[0] это одно и тоже, потому что yoba[a] это по определению *(yoba+a), если подставить получишь &•(yoba+0) или yoba.
Но массивы это не указатели. У них как минимум sizeof разный.
Спасибо
Опять ньюфажеская платина.
int i = 1;
int y[] = {2,3};
Что хранится в первой переменной? Что хранится во второй переменной? Адрес первого элемента? А вот и нихуя.
> _s-версии - они стандартные или только микрософт
Да, они типа стандартные (C11, Annex K), но это приложение необязательное и смысла в нем мало, поэтому кроме MS его никто не хочет реализовывать. Но вот фыркает она совершенно зря, поэтому затни ее нахуй -D_CRT_SECURE_NO_WARNINGS и не обращай внимания.
Ни в чем, в первом случае циферка в [] посчитается автоматически, в зависимости от количества инициализаторов. Сравни с: int x[] = {2, 3}; int y[1000] = {2, 3} и int x[] = {1, 2, 3}; int y[2] = {2, 3}.
А вот на стекоферфлоф попалась такая еботня
А
void bubble(int array[], int size) {}
это тоже самое что
void bubble(float *array, int size) {}
?
фикс там инт во второй декларации
Когда параметры - да, то же самое
Скоро у всех будет пригорать, потому что для упрощения статического анализа в C21 обдумывают возможность притащить VLA в стандартную библиотеку и для новых функций делать сигнатуры вида int foo(int num, int array[num]). Это квинтэссенция языка: тут и массивы переменной длины, и преобразование массива в указатель в аргументах, и порядок аргументов изменен с логичного на обратный в угоду кривому синтаксису.
Ты читать умеешь? Оно есть, но в стандартной библиотеке функций типа memset(size_t length, char mem[length], int c) пока нету.
Атвичаю.
1) Пишем на Си. В ассемблер изредка лезем в ознакомительных целях и в процессе отладки, тупо посмотреть, где какой регистр перещелкивается.
2) Используем гит и гитхаб. Код ревью есть в виде "эй, Уася, пусти меня за комп, я твой код погляжу" со стороны старшего программиста.
3) Чёткого разделения нет. Но есть градация по уровню ответственности, как бы сказать, по твоей значимости для проекта. Кто-то пишет ядро, кто-то дописывает мелкую периферию. Со временем ты прокачиваешь квалификацию, берешь на себя всё больше и становишься главнее.
4) Тестировку делаем путем прошивки в макетный образец и проверки жизнеспособности прибора. Отдельных виртуальных тестов нет.
5) Никак, даже не знаю что это.
>Используем гит и гитхаб
>"эй, Уася, пусти меня за комп, я твой код погляжу" со стороны старшего программиста.
Старшего программиста еще не обучили смотреть коммиты в гитхабе?
https://pastebin.com/dnq12VpU
тут возможны не относящиеся к вопросу проебы - просьба не обращать внимания
Согласно документации, pthread_cond_signal отличается от pthread_cond_broadcast тем, что разблокирует at least один поток, висящий на pthread_cond_wait. Моя же логика предполагает, чтоб ровно отцеплялся exactly один поток. Как это сделать, суканахуйблджад?!?!!
Хм, у меня в glibc-doc написано:
> pthread_cond_signal restarts one of the threads that are waiting on the condition variable cond. If no threads are waiting on cond, nothing happens. If several threads are waiting on cond, exactly one is restarted, but it is not specified which.
А вообще, если не просто glibc, а какой-то POSIX-дроч, то я, честно говоря, нихуя не понял в твоём коде, хотя я немного нетрезв.
_add and _remove()...
Оба берут мьютекс. Я так понял, мьютексв структуре это типа объект для защиты структуры от конкурентного изменения, самый такой общий мьютех.
Ты в обеих функциях его берёшь, а внутри кидаешь сигналы по поводу признаков пустоты, полноты. В области, заблокированной этим мьютексом?
У тебя и ждёт, и кидает в этой области, но в ней может быть один, или че? Не поня...
pthread_mutex_lock(this->mutex); // Чтобы никто не вошёл...
if QUEUE_EMPTY(this) pthread_cond_wait(&this->empty, &this->mutex); // Жаль, что никто не кинет, потому что не войдёт?!
pthread_cond_wait сама разблокирует мютекс и блокирует обратно. Если бы это делалось руками, не исключен случай, что как раз между pthread_mutex_unlock и pthread_cond_wait другой поток сделал бы pthread_mutex_lock и pthread_cond_signal.
Ну охуеть теперь. Короче, суммарно количество возвратов pthread_cond_wait равно количеству вызовов pthread_cond_signal, но в отдельный момент времени может перекосить. По ходу, надо оставлять такой запас до переполнения, сколько ядер процессора, и все будет ок. Главное, что эти фейлы не аккумулируются.
Я просто к зеленому привык, потому что обычно на ЭЛТ сижу, а там желательно, чтоб только один канал горел из RGB при отображении высокодетализированной монохромной графики (несведение).
Pycharm
Работа линукс систем кернел анус девелопером имеется вообще или это только для бородатой илиты?
Сейчас продвигается импортозамещение, в ближайшие 1.5-2 года появится пара контор(одна, кстати, уже собирается внутри Я), занимающихся православным линуксом для государства, присасывайся и получай лидерские должности пока не поздно.
Всмысле считать с консоли. Стандатрный ввод
Спасибо. Завтра попробую
Олимпиаду пишу))) Она какая то нереальная. Там одно из заданий узнать какой текст в картинке зашифрован. Мне даже в асм треде не смогли помочь
Очень похожа просто формулировка на тестовое в одну из контор в моем городе.
Там просто "найдите текст" и никаких подсказок?
Мусорные биты паддинга смотрел?
Найти текст это просто подготовка. Основное задание дальше. Второй вопрос не понял
float array[10] = {};
И потом заполняю его
array[0]=5;
array[1]=34;
array[2]=79;
Он заполняет оставшиеся пустые элементы последним записанным значением,то есть вот так
{5, 34, 79, 79, 79, 79, 79, 79, 79, 79}
Юзай memset и почитай ещё про указатели
Доброго всем дня, есть вопрос - нужно будет учить Ардуино и учить на нем писать малолетних дебичей. Ранее освоил такое недоразумение, как RobotC для Ev3. Какие гайды посоветуете курить?
> почему когда я инициализирую массив
> float array[10] = {};
Он заполняется нулями.
> Он заполняет оставшиеся пустые элементы последним записанным значением
Это не он, это ты. Ищи у себя баг при выводе, например.
Только не говори, что ты пробовал подбирать литературу
Конпеляция завершена, подожди гноме поставлю отпишу
У тупых всегда всё просто, потому что ничего не делают.
Так чё, как сконпелировать шланг на XP без пердолинга? Хуле cygwin 40 гигов на диске сожрал? Мне ж под прон уже не осталось.
int z = 10;
while ((c = getchar()) != EOF ) {};
В связи с этим два вопроса
Почему считатеся что у C доисторический ситнаксис? И когда уберут семиколонс вконце строки?
Хуй знает что за смузихлебный язык был до, если ты в С видишь современный синтаксис, лол.
Нужна библиотека MPI, что-то не могу найти её в MinGW, кто-нибудь знает где её можно взять?
use mpicc instead of gcc
Не знаю что там в го и свифте, но в конпеляторах сишки по семиколонам шаги лексического анализатора завязаны
Ахуеть ну вон в питухоне лексический анализ по эскейпам и табуляции, тебе в любом случае придется чем-то эти семиколоны заменить
Зачем их заменять, если просто можно добавить вариант с \n, оставив семиколон для однострочных высреров и обратной совместимости, поехавший? При чём тут табуляции? Про фигурные скобри речи не шло.
Да зачем я вообще учил этот питон? Думал что пригодится для нейронок, лучше бы заместо учил бы Си и сейчас бы не сидел над ним.
int a = foo()
+ bar()
+ baz();
Давай, добавь сюда \n, оставив ; для обратной совместимости. Школьник не знает, сколько крови ASI (automatic semicolon insertion) выпило людям в жс.
>Школьник не знает, сколько крови ASI (automatic semicolon insertion) выпило людям в жс.
А нешкольник, видимо, ни разу в жизни не писал конпеляторы. Блядь, эту хуйню любой парсер, имеющий представление о приоритетах операторов распарсит тебе это говно, жс макаки либо не осилили алгоритм Пратта (лол), либо там как обычно какая-то неисправимая прослойка легаси говна (скорее всего).
https://ideone.com/sdmom6 — сложна
>И когда уберут семиколонс вконце строки?
В твоем примере он не нужен, ну или {} не нужны если оставишь ; Не уберут никогда, это разделитель, поскольку стилистику как в питухоне никто не навязываешь, можешь все одной строкой перемогать.
>о приоритетах операторов
Кокие на хуй приоритеты, препроцесор заменяет новую строку, табы и прочую залупу на пробел и все. Че там ЖС макакам не нравится, не понимаю.
>Кокие на хуй приоритеты
https://en.wikipedia.org/wiki/Pratt_parser
>ебучий додик даже не в курсе как парсятся выражения
>препроцесор заменяет новую строку, табы и прочую залупу на пробел и все
Ну так даже лучше, меньше еботы лексеру, лол. Перейди по ссылочке, потыкай алгоритм, ахуеешь, до чего технологии дошли.
Твой пример по ссылке наглядно показывает почему точки с запятой нужны - глазам проще отделять стейтменты от форматирования
Их отсутствие это понты ради понтов
>глазам проще отделять стейтменты от форматирования
В ванлайнерах — да.
В нормальном коде — нет, это рудимент, примерно как хвост у людей, лол.
> распарсит тебе это говно
Ты рано начал о компиляторах думать, сам сначала распарси. Это одно выражение или три отдельных?
>Мамку твою потыкал,
Деда твоего потыкал.
>Твой лексер здесь нахуй нинужон
В функции main() все пиши, как gnuтые диды зовещале.
>>14081
>Ты рано начал о компиляторах думать
Ну ты о них вообще не думаешь, просто хуйню срёшь, не понимая о чём срёшь.
> Это одно выражение или три отдельных?
Это одно бинарное выражение с ещё одним вложенным бинарным выражением.
> Это одно бинарное выражение с ещё одним вложенным бинарным выражением
Так вот это три отдельных выражения: перед вызовами bar() и baz() стоит унарный плюс, мне так захотелось. Только наличие или отсутствие точки с запятой отличает
a() + b() + c() от a(); +b(); +c(); Если в Си притащить \n как разделитель, подобные неоднозначности полезут отовсюду. Или это будет уже другой язык с другим синтаксисом, не совместимый с существующим кодом, такой Си никому не нужен. А теперь иди нахуй. Если нравится питон - пиши на питоне, в обратную сторону совместимость с ; как раз отлично работает.
>это три отдельных выражения
>мне так захотелось
>подобные неоднозначности полезут отовсюду
Дружочек, ты хоть сам-то понимаешь, как ты только что жидко сиранул себе в штаны?
Мы разговариваем не о том, как сейчас, а о том, что было бы, если бы выражения разделялись еще и \n. Ты правда настолько тупой?
Мне кажется тут у нас школохрюн завелся, который постоянно всплывает с ахуительными предложениями
Да нет, ты просто тупой долбоёб который даже не представляет как работает парсер, и воюет с мельницами.
2ч
На чём? На том, что в твоёи манямирке парсеры не могут посмотреть следующий символ? У тебя вся аргументация уровня "мни так зохотилось", не понимаю, почему ты продолжаешь срать.
Парсер может. Но текущая грамматика Си позволяет мне использовать унарные операторы, и это означает, что твой парсер сломает существующий код в любом случае, потому что в существующем коде могут встретиться оба варианта: и строки с унарными операторами, и выражения с бинарными операторами, разбитые на несколько строк. Не нравится пример с унарным плюсом? Он слишком надуманный, хотя и может быть сгенерирован каким-нибудь макросом? Вот тебе другой код:
void foo(int x) {
if (x)
return
bar(x);
}
Ты притащил \n в дополнение к точке с запятой, твой компилятор видит этот код. Дальше что? Когда вызывать bar(): при ненулевом x или наоборот при нулевом? Опять-таки, ты можешь как угодно определить новую грамматику, новый парсер, но в одном из двух вариантов ты сломаешь существующий код, а
> не совместимый с существующим кодом, такой Си никому не нужен
Подожди, сейчас этот необучаемый кукарекнет, что нехуй так писать. После всего вышенасранного ты все еще надеешься, что это шизло поймет абстракцию и предположит на месте bar какой-то длинное выражение? Анончики, давайте дружно не будем кормить залетного гормона стресса.
Поделись лучше лайфхаком, как в VIM одним чихом делать красивые колоночки бэкслешей справа (многострочные дефайны).
выстрел на удачу - вдруг сталкивался
О, наконец-то ты нормальный пример притащил! Через 2 часа срачей.
> Опять-таки, ты можешь как угодно определить новую грамматику, новый парсер, но в одном из двух вариантов ты сломаешь существующий код
Есть ещё третий вариант, который ты пропустил: добавить ещё один этап компиляции (читай — промежуточное представление), в котором уже будут выведены все типы и можно будет резолвить подобные конфликты. Так, собственно, работают все языки с полноценным выводом типов (где они выводятся даже на уровне аргументов функций) и кучей синтаксического сахара (окамл, скала, хаскелл итд). Для избавления от ; это дохуя оверкилл, но если думать о другом сахаре — заебись идея, имхо. Как плюсы, но без кучи говна.
Найс додик загорелся и горит.
Думаю, он имел в виду под реальными число физ. ядер, а под виртуальными SMT или что-нибудь ещё...
Круто, я ток с F1XX работал!
1. Генерируешь проект в КУБЕ.
2. Берешь и мигаешь.
GPIOA->BSRR |= GPIO_BSRR_BS1;
GPIOA->BSRR |= GPIO_BSRR_BR1;
хорошо, удачи
Гиперпоточность Intel всего лишь позволяют делать вдвое меньше медленных переключений контекста между сотнями процессов ОС - каждое ядро без задержек крутит барабан между двумя потоками, отдавая им по полмощности. Я же распараллеливаю не ради логики, а ради производительности, и при кол-ве потоков равном числу физ.ядер уже выжимаю всю мощь, а дальше только проигрываю из-за мютексов-хуютексов. В теории возможны неточности, но я затестил, и все подтвердилось.
>>14632
процессОРЫ
Ядра же не делятся на труъ и не-труъ. Просто каждое труъ-ядро может косплеить два не-труъ-ядра.
Ой, я не сразу толком воспринял твой ответ. Пересмотрел ссылку и увидел про libcpuid. Спасибо, анон.
Так это библиотека си-подобная, потому и завернул уточнить.
Но за подсказку где искать больше инфы спасибо, пополыл в тред по пердуино в ра.
Есть функция
void copy(char to[], char from[]) {
int i;
i = 0;
while ((to = from) != '\0') {
i = i + 1;
}
}
IDE говорит
Pointer parameter 'from' can be pointer to const. Щито это такое то, я думал это только в С++ есть
А, это абу скобки съел.
Вощем переименуй файл из .cpp в .c чтобы иде знал что это си, или сделай != 0
Тестируется окончание строки нулем.
Если ты сделаешь copy("yoba", "peka") твоя программа упадёт потому что йоба это константа даже если язык считает что это char*
>даже если язык считает что это char*
Что значит "даже если считает", константа и есть char★, только эта память рид-оунли, писать нельзя. Просто компилятор не отлавливает этот момент, поэтому программа падает не на этапе компиляции, а во время работы в момент неправильного обращения к памяти.
Не вкатил
Для безопасости
Как таковые отдельные - да, но если одно не-труъ загружено, то некоторые >>14956 не хотят использовать ещё одно не-труъ.
>>14956
Ты точно туда ответил?
> В теории возможны неточности
Это точно.
>>14961
Есть либкпуид, а зачем тебе он?
Там есть ответ с inline assembly, инструкцией CPUID, угу... В теории, самый быстрый способ
#define debug_enabled 0
void debug(char line[]) {
if (debug_enabled) {
std::cout << line << std::endl;
}
}
gcc -Ddebug_enabled=1 main.cpp
Ну я лично делаю так:
В коде #ifdef _DEBUG
/ Debugging code*
#endif
gcc -D_DEBUG
А если и нет дебага, то не дефайню.
Зачем тебе значения типа true, false?
Да и у тебя какая-то лишняя проверка происходит.
поставил cygwin для XP, и даже получилось вроде сбилдить что-то 64-битное. Запускал компиляцию так: "make CC=gcc"
Не подскажешь как x86 версию exe-шника получить? Ну, чтобы win32 exe это было.
Насколько я помню, gcc компилирует одиночный .c файл в win32.exe так:
>gcc -m32 source.c -o destination.exe
> Подчеркивания перед именами зарезервированы для компилятора
Точно только для него?
Сам видел, вроде, либы, где подчёркивания юзались, не двойные, канеш, но одинарные точно.
А здесь вообще незачем, агась, заглючил.
> Точно только для него?
Ну для стандарта и его реализации: имена __name (два подчеркивания) или _Name (подчеркивание и символ в верхнем регистре) зарезервированы для любых применений, _name (одно подчеркивание) - для глобальных переменных и функций. У тебя макрос, поэтому он подпадает под первый вариант.
> Сам видел, вроде, либы, где подчёркивания юзались
Да, многие пишут. Особенно если это #ifndef _XXX_H_ #define _XXX_H_. И это даже скорее всего никогда не приведет к каким-либо проблемам, но делать так все равно не стоит.
аргумент z - это типа указатель на только что добавленный узел, есичо
Ой блядь, я тупой, там же z.p.p.p может тоже красным оказаться, и тогда хуй ты z.p.p перекрасишь. Но что ИМЕННО делает это присваивание?????????? Сука, как же я ору с псевдокода, призванного быть читаемым, а на деле еще более всратым, чем университетские лабы на асме.
Ну я примерно то же и сказал. Защита памяти вообще к типам не относится, то есть к языку программирования генерирующему код. const это лишь декоратор, пометка компилятору вывалить ошибку для удобства программиста. То есть, указатель это просто указатель, ему всё равно на какую память указывать.
Просто я тем самым трахнул себя в жопу, когда вернулся к CLRS после недавней мысли "больше не прикоснусь". Лучше таки читать Кнута и немножко страдать от неактуальности среды, чем читать CLRS и множко страдать от общей всратости.
Да я понимаю, что если чаще и больше читать, то мозг придрочится читать разные несовершенные тексты и без переедания кала извлекать норм инфу, но я ебал. Книги пишутся для всех, а не для неравномерно преуспевшего меня, но что-то к Кнуту у меня не возникает жалоб "тут пережевано, тут недожевано", по-честному все. Рассказывает, как умному человеку, и действительно врубается режим умного и все схватывающего человека. + задачки интересные.
Я считаю, что когда что-то непонятно, для мыслящего человека естественнее остановиться и подумать, а не ускоряться в поисках подробных объяснений дальше по тексту, и хороша книга должна способствовать поощрять именно первый вариант, а то какое-то макаковоспитательство выходит...
>мешанину из циклов и условий
Да нехуй делать. Никто не запрещает ставить локальные метки (с точкой) и отхреначивать логические блоки табами. В конце концов, можно попросить сишный конпелятор выплюнуть .asm и оптимизировать на свое усмотрение. Говорят, человек в теории до сих пор может вдвое лучше, чем -O3. Я понимаю, что тебе вес скинуть, а не ускорить, но с потанцевалом доминирования живых мозгов над алгоритмом все аналогично.
Выкинуть библиотеки, написать нужное вручную.
Откатить компилятор на старую версию.
https://pastebin.com/ndz3tH5m
а как на clang сделать .o файл?
Из-за тебя дурака потратил час времени на выяснения кто такой Бабушкин и чем прославлен
Сети, мультимедиа, виртуализация, ядро Торвальдса. С чего ты взял, что работы нет?
Закон Мура. Могли бы - еще в 1970-м бы 128 разрядов сделали бы. Я в этом не шарю, но скорее всего это просто какой-то стандартный процесс на заводе, где все эти транзисторы уменьшают: столько-то месяцев на прототип, столько-то на испытания, столько-то на налаживание серии и т.д. и т.п. А каждый x2-шаг физически осуществим только с применением достижений предыдущего, то есть не могут они взять и в за один прекрасный полуторагодичный период x4 уменьшение ебануть. Брайан Керниган что-то подобное говорил про формирование конпелятора Сишечки, вроде "using sharp tool to make a sharper tool".
libc активно используешь? Перепиши нужный функционал из либ, остальное выбрасывай.
Вот например обертка над сисколлом write:
static int write(int fd, const void* buf, unsigned int size) {
long result;
__asm__ __volatile__(
"syscall"
: "=a"(result)
: "0"(__NR_write), "D"(fd), "S"(buf), "d"(size)
: "cc", "rcx", "r11", "memory");
return result;
}
-Oz пробовал?
Да какой закон Мура, разрядность выбирается в зависимости от размера типичных данных, которые должна дробить машина.
Разрядность МК в мире встраиваемых так и выбирают.
64-бита хватит всем, ето точно. Больших объёмов памяти нет, большего кол-ва пикселей на дисплеях нет, для цветовых палитр больше не нужно.
Ну и всякие ОС-ядерные переменные влезают.
У них регистры 32 разрядные, не умеют оперировать 64 разрядными числами. Адрес это как бы число.
то есть единственное что делает увеличение этого числа, это возможно засовывать больший объём памяти в комплютер?
Памяти можно насовать, но останется ограничение на один процесс.
хех
а это как раз псевдопрогресс как есть
еще создатель тоталкоммандер, к примеру, много лет назад расстраивался по тому поводу, что его сначала заставили переписать прогу на юникод (а до этого она спокойно использовала расширенные кодовые страницы для азиатских языков для обеспечения локализации), а потом заставили и сделать 64разрядную версию программы
он говорил, что это потребовало большого объема работы, но, по при это не добавив ни одной функциональной возможности
Пожалуй. Просто анон подразумевал, зачем шли 16--32--64, почему сразу норм не сделали.
>а это как раз псевдопрогресс как есть
Сегодня по твоему компутеры на том же уровне что и 20 лет назад?
>что его сначала заставили переписать прогу на юникод
Кто заставил-то? Он сам придумал велосипед и решил потом его переписать, кекус.
> а потом заставили и сделать 64разрядную версию программы
Заставили переписать говнокод с интами вместо size_t? Научили не говнокодить, всё правильно, лол.
>при это не добавив ни одной функциональной возможности
Ну так не будь там говнокода с велосипедами, и не надо было бы и переписывать. Он сам себе работу лишнюю создал.
У тебя мб васянокомпилятор какой-то, который ищет _main и потом все что сверху читает
В препроцессоре также в самом конце написано, Местами не меняется.
Просто выводит символ новой строки в консоль. Можно и printf("\n"); написать.
расширенные кодовые наборы были как в ядре майрософт, так и в различных реализациях линукса
они справлялись со своей задачей
юникод был следующим шагом, унификацией
но, повторюсь, с точки зрения конечного функционала без разницы как оно внутри работает
а программистам, тем не менее, приходится тратить уйму времени на переделку того что и так работает
> память для всех блоков выделяется снизу вверх по коду?
Память для автоматических переменных компилятор выделяет на стеке. Обычно сразу все твои переменные одним куском. Какой именно порядок будет внутри этого куска - зависит от компилятора, ключей компиляции и фазы луны. Не нужно на этом гадать.
>>17954
> они справлялись со своей задачей
Нахуй пошел. У тебя в имени файла русские и французские символы - ты сосешь. У двух приложений разная ACP - ты сосешь при копировании данных. Вот это "не кладите компиляторы в директории с русскими буквами" пошло именно с тех времен, когда приложения сидели на всевозможных cp12151 вместо юникода. В своем тотал коммандере ты бы не смог на русской винде посмотреть аниму. Да даже выбрать аниму не смог бы - у тебя все тайтлы назывались бы "????? ???? ???" и "????-??? ?? ?????!". И удалить ее ты, кстати, тоже не смог бы. Ну нету у тебя на компьютере директории D:\Anime\????? ???? ???, нету!
> с точки зрения конечного функционала без разницы как оно внутри работает
Ну короч ты такой берешь сейчас приложение, написанное, ну например, на Visual Basic 6 (тот еще зверь: Unicode внутри, ACP снаружи), запускаешь в своей десяточке и копируешь из этого приложения русский текст. Что такое? Копируются вопросики? Как же так? Так это все потому, что ты у мамы программист, и у тебя по умолчанию английская раскладка клавиатуры. И ты меняшь раскладку на русскую, снова копируешь, и... все копируется! И других вариантов решения проблемы не было. Так вот и жили.
То, что это было в ядре швиндовса явно не указывает на то, что это хорошая практика. Там ещё баги прошлых версий ради обратной совместимости эмулируют, это по твоему хорошая практика?
Но мне больше понравилась предъява за 64 бита. Таких макак до си допускать нельзя, пусть раст сидит дрочит, если даже не знает какими типами индексироваться нужно, лол.
>он говорил, что это потребовало большого объема работы, но, по при это не добавив ни одной функциональной возможности
Какая же там была говноархитектура
>Там ещё баги прошлых версий ради обратной совместимости эмулируют, это по твоему хорошая практика?
Это та самая причина, почему винда всегда будет на всех десктопах.
В 10 очень много всего сломали. Вангую, что через несколько лет нативную поддержку 32-битных систем дропнут (как во многих линуксах и маках), и винду можно будет окончательно закапывать.
Когда 32 дропнули даже на хипсторских маках — весь интернет засрали так, что воняет пол года спустя. Ты хоть представляешь, что будет, если сделать так с этой залупой, живущей ынтерпрайзом...
ты хорошо написал, я все это вспомнил, все эти проблемы были и у меня в начале нулевых
но нехорошо посылать незнакомого человека
вот
не знаю, исходники закрыты
но он долгое время писал tc используя delphi 3й версии и не хотел переходить на старшие версии
говорил что только лишняя работа по переносу кодовой базы, опять же которая никак не скажется на функциональности приложения, но потребует много трудовых человеко-часов
setbuf(stdout, memory);
Но она вроде как не работает, что делать?
Лаунчер разве что, это же дотнет параша.
Он и сейчас нужен: физикам диффуры и урматы считать всякие, прогерам нахуй не нужен
Вряд ли современные ученые учат языки программирования, максимум питон, а в основном сидят в матлабе наверное или в кастомных прожках написанных программистами.
><libxxx.h>
Это когда внутренняя (стандартная) библиотека компилятора, например iostrem или stdint.
> "libxxx.h"
Это уже подключаемая пользовательская библиотека(с гитхаба), находящаяся в одной папке с файлом main.c.
А можно же положить в папку с main.c libxxx.o и в файл main.c сделать include 'libxxx.h' ?
Мне нужно обязательно mmap() использовать, это можно как-то совместить?
Для mmap() я использую smh_open, который возвращает дескриптор. Я пробовал dup2 с ним, но не сработало
https://pastebin.com/DnSaquUk
Как создать массив внутри отдельной функции и отдать его?
>дед 60 лет
>лисп
Я говорил про современных ученых. А старики понятно учили языки, ведь тогда компьютеры были такими, по другому ими и не могли воспользоваться, но сейчас ситуация обратная, скрипты решают даже в программировании, а ученые, напоминаю, даже не программисты.
Это копия, сохраненная 16 ноября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.