Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.
- Очевидный GCC. - clang: оче годно, батя рекомендует. - Intel C++ Compiler: оптимизации, тысячи их. - Visual Studio Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте. - Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное. - TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
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)
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов). - http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
>>1680452 → >Именно Кнута необязательно, но что-нибудь по алгоритмам все равно почитай, Седжевика того же. Двачую. Его Algorithms in C годная книга (ну или была ~10 лет назад, когда я её прочитал).
>>1680452 → Я бы сказал так: сначала любая книга по алгоритмам, а потом, по мере необходимости, с интересующими темами точечно в Кнута, как в справочник.
Анон, в стандарте твердо и четко где-то прописан минимальный размер типов данных? Я не о соотношенях типа sizeof(char) <= sizeof(int) <= sizeof(long int), а именно о абсоютном размере типа (8бит или 16 и т.п.). Диванные кукаретики в интернете и википедия пишут, например, что int - это как минимум 16 бит. Википедия ссылается на стандарт, но пруфов я там не нашел. Может в стандарте прописаны только минимальные и максимальные численные значения, которые должны вместиться в int, а собственно реальное количество бит для этого зависит строго от реализации может на каких-то числовых представлениях 65535 каким-то хуем может вместиться и не в 16-бит, хуй его знает, и википедия банально вводит в заблуждение?
>>1680757 > минимальный размер типов данных Да, прописан. 5.2.4.2.1 "Sizes of integer types". > Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign. И дальше листинг.
> о абсоютном размере типа (8бит или 16 и т.п.). Зачем это тебе? У тебя есть sizeof, есть CHAR_BIT (если ты достаточно поехавший), считай сам, скомпилируется в константу.
> может на каких-то числовых представлениях 65535 каким-то хуем может вместиться и не в 16-бит Ну вот когда изобретешь такое, тогда и приходи с претензиями к комитету. А пока у нас в 6.2.6.2 описаны все разрешенные представления интов.
>>1680801 Мне это интересно сугубо в любознательных целях. Читал, что поехавшие на собеседованиях иногда доебываются до терминологии, что мол в стандарте описаны только минимальные численные значения, который должны поместиться в тип данных, но не минимальный размер типа в битах. Но действительно, учитывая 6.2.6.2, один хуй это ничего не меняет.
>>1680461 (OP) Стыдно признаться, но Прата более доходчево объясняет для ньюфага. КиР, конечно, заебись как прородители языка. Но непонятно для начинающих.
>>1680904 Да то, что я пока КиР читал, пришлось шкрябать по всему интернету в поисках понимания тех или иных вещей. Зато стал понимать многие вещи, которых не знал.
Посоны, выручайте Нужно решить олимпиадную задачу, используя перебор с возвратом. https://pastebin.com/CsqvPBKQ Как я понял нужно найти количество элементов в доминирующем множестве заданного графа. Но как реализовать вообще хз. Есть какие-то идеи?
>>1680929 Си отлично заходит первым языком. Первый язык совершенно не обязательно досконально изучать ведь.
А так он как раз то, что нужно новичку, на мой взгляд: во-первых, выглядит очень солидно — по-програмистски; во-вторых, скобочки понимать куда проще, чем пробелы считать; в-третьих, все базовые вещи можно реализовать, на большинство вопросов "как это работает в компьютере?" ответить.
Какие у тебя претензии к нему, как к первому языку? Какой ты предпочитаешь?
>>1680941 Я бы посоветовал классический бейсик с номерами строк. Он самый простой и вдобавок близкий к ассемблеру, к тому как компьютер работает на самом деле. Когда освоится со структурой кода - переходами goto, gosub, return, научится писать программы, тогда уже можно си, там с одной стороны уже чужеродные говно-абстракции в виде функций, но зато работа с памятью как положено.
>>1681007 Паскаль это то же самое что си, только деревянное. Можно учить и то и другое, разницы нет. Паскаль даже лучше, будет меньше тупых вопросов по синтаксису, а то в си можно одно и то же написать десятью способами. Для обучения программированию только мешает.
>>1681016 Разбираться можно где есть документация - на винде, там всё стандартизировано и документация божественная. А в линуксах куча рандомного говна и документации нет.
>>1680941 >Какие у тебя претензии к нему, как к первому языку? Какой ты предпочитаешь? Первый язык должен давать максимальный фан и быстрые практические результаты. В свое время это был бейсик, сейчас питон какой-нибудь.
>>1681054 Файл - это отмеченные магнитной головкой байты на поверхности магнитного носителя. Как ты представляешь себе добавление символа или середину? Типа, ты вставляешь свой пробел, а остальные символы в ужасе двигаются в бок?
>>1681102 Не забывай, тут тред си, а не общий тред раздела. Питоны и прочие скрипты можешь в анус засунуть, или выкатывайся. Программирование в контексте си совсем не то что под этим словом подразумевают обычно.
>>1681102 Так си и даёт. Написал, скомпилировал, и вот у тебя уже исполняемый файл. Где лучше рузультаты? в скриптовых языках? Ну что такое скрипт? Это тебе нужен какой-то другой исполняемый файл, чтобы этот скрипт читать и выполнять, а что там в нём происходит? Непонятно. На каком языке он написан? Не на питоне. Ну и в чём интерес? Так можно и html себе первым языком выбрать, вот уже где самый быстрые практические результаты!
>>1681119 >Какие головки, 50 лет уже всё через три абстракции. Вот именно, абстракции "файл" уже больше 50 лет и она устроена даже не как дисковые накопители, а как пикрелейтед.
>>1681161 Ну твой вопрос нерешаемый. Файлы хранятся как набор кластеров, смещения которых лежат в таблице ФС, поэтому в теории ты можешь дописать кластер (на пару килобайт) и переписать все записи в ФС, но добавить 1 символ нереально. Точно так же как в книгу ты можешь вклеить страницу, можешь вырвать страницу и вклеить новую, но добавить 1 символ - нет. Если тебе такое нужно, нужно делать внутри файла свою собственную ФС, как сделано в формате ворда doc. Но это технологии 80-х, сейчас любой файл проще переписать
>>1681799 > Использование переменных с типами где указано количество бит Они опциональные, обязательны только least/fast/max, и это имеет смысл, потому что если у тебя 9-битовые char, ты никак не можешь сделать typedef unsigned char uint8_t, стандарт требует ровно 8 бит для uint8_t.
>>1680832 Там описаны отношения размеров типов между собой, причем не в виде коэфициента, а в виде сравнения >= <=, если мне память не изменяет. В зависимости от архитектуры абсолютные значения могут менятся, но отношения должны оставаться неизменными
Анончики, есть проект со своим CMakeLists.txt В нем несколько подпроектов тоже со своими CMakeLists.txt И там и там есть options Можно ли сделать так, чтобы опции подпроектов не отображались, когда пользователь запускает gui-шный вариант, но не меняя файлов зависимых подроектов? Могу менять только основной у проекта.
Пытаюсь компелировать в gcc, пишет cannot find Scrt1.o cannot find crti.o Таких файлов у меня нет. Пишут что это потому что у меня установлен gcc только для 64, а скомпелировать он пытается в 32. Как скомпелировать? target: x86_64-linux-gnu gcc version 7.4.0
>>1682312 Нет, дело не в битности. Эти файлы - часть глибц (у некоторых glibc-devel). Как ты поставил умудрился поставить компилятор без глибц, демон? Попробуй поставить glibc-devel или сказать gcc -L/usr/lib. Не поможет - неси gcc -v filename.c, или сам смотри, где оно их ищет и не находит.
Закоренелый виндузятник на линии. Заебался я пролистывать прату между главами, захотел разделить PDF по главам. Ищу в Гугле split PDF windows 10. Во первых, почти все они онлайн, во-вторых ставят вотермарки, в третьих те которые можно установить - бесят антивирус. По совету Анона в предыдущих тредах, учу прату через wsl Debian. Заебавшись найти простую сука прогу для PDF разделения, решил попробовать через wsl. Скорее по приколу, ведь всем известно что в Линекс нужен пердолинг даже чтобы посмотреть число. Установил pdftk. В командной строке набрал что нужно. Хуяк. Готово. 3 минуты. Включая поиск в Гугле. Ещё раз: 3 минуты. Просто. Без Троянов. Без ебли. Без зондов. Без говна. ОНО ПРОСТО РАБОТАЕТ, АНОН. Сказать что я ПРИХУЕЛ, это ничего не сказать. Естественно, что на Линукс я не готов перейти, я его ещё не понимаю. Но это просто пиздец, я в шоке. Ты наверное будешь смеяться, но я реально заебался искать решение такой простой проблемы.
>>1682272 >>1682239 Честно говоря, я пишу в нано, пока не вижу надобности использовать инструмент, который на 99% мне не понятен. Когда будет что-то сложнее хеллоуворда, тогда и перейду.
>>1682422 >Естественно, что на Линукс я не готов перейти, я его ещё не понимаю. Но это просто пиздец, я в шоке. Детский лепет. Ты перейди на линукс, вот тогда узнаешь что такое настоящий пиздец и шок.
>>1682835 Показательно как ничтожная чмошка без личности за себя говорить не может, а воображает толпу за которую прячется. Говну всегда нужна чужая опора.
Анончики. Поясните за использование size_t и ptrdiff_t, а то в разным местах какие-то противоречивые описания. Понятно, что они - это беззнаковый и знаковый типы, размер которых определяется платформой. А вот где и что использовать, а то пишут, что все взаимозаменяемо. Как я понимаю: size_t - это счетчики циклов, размерности массивов ptrdiff_t - это адресная арифметика
>>1683714 ptrdiff_t практически никогда не нужен, это технический тип, использующийся при сравнении указателей. size_t - да, все так. Если вдруг понадобится size_t со знаком, то у некоторых платформ есть ssize_t, а где нет - можешь самостоятельно определить.
>>1680461 (OP) Котаны, посоветуйте учебник по C/C++, где объясняется как устроена память, вызовы и так далее по списку. Внутреннее устройство таких простых вещей как определение переменной, функции, вызов функции и др. Заранее благодарю.
>>1684269 >Только программирование в среде WINDOWS даст вам возможность почувствовать все преимущества использования защищённого режима работы процессоров.
Коллеги, вот серьезно. Есть кто-то кто работает используя С? Пишете драйвера для Линукса? Расскажите о себе. Как учились. Сколько лет. Область трудоустройства. Почему выбрали программирование.
В самых ранних тредах, то-ли здесь, то-ли в крестотреде, анон рекомендовал как годно после С вкатиться в кресты. Если ты еще здесь, напиши еще раз пожалуйста. Спасибо.
>>1684335 пишу вполне себе прикладной софт, не дрова: мультиплатформа/гуй/любой каприз.. Учился хорошо, 30+ Выбрал не именно программирование, это скорее одно из, что интересно в смежных областях.
>>1684361 После Си наоборот мозги стали лучше все понимать и другие языки легче даваться, те же плюсы. Качество кода заметно возросло. Поэтому и плаваю туда обратно в зависимости от проектов. На мой взгляд, лучший язык для обучения студентов профильных специальностей.
>>1684364 Ты даже не представляешь насколько прав. Си - не первый язык куда я хотел вкатиться. Сначала меня убедили с++ сектанты а на деле - хеллоувордщики и макаки что можно ПРОСТО ПИСАТЬ НА КРЕСТАХ И ООП-КОД И НЕ ПАРИТЬСЯ. При этом макака не способна объяснить что такое int argc, char *argv[] в main. Потом с# пробовал, хорошо продвинулся в изучении, пока не поймал себя на том, что просто заучиваю фичи языка синтаксиса. На крестах та же херня, кстати. Потом пытался в модный хачкель пиздец и стыд нахуй это нужно было. Джаваскрипт + джава не зашли, потому что я досконально не понимал каким образом они выполняются на моем компьютере.
В конце концов вернулся к изучению сишечки вспомнить молодость, я счастлив.
Хочешь байтоебства с МК? Ныряй без проблем, всё концептуально уже знаешь. Хочешь сложных абстракций? Ныряй в С++, база есть, все поймешь.
Сколько времени я убил, вместо того чтобы вникать в сишечку! А ведь мне уже почти 40, ебать..
>После Си наоборот мозги стали лучше все понимать Нечего добавить.
> я досконально не понимал каким образом они выполняются на моем компьютере Который даже сишку не осилил, потому что не может прочитать и понять исходники движков.
>>1684381 А ты можешь умник бля? Ты же сам нихуя не знаешь, ты обычный любитель-вкатоид, но сидишь и рассказываешь что-то про кресты и сисю с умным видом >ДОСКОНАЛЬНО Да ты и щас не понимаешь, спросить у тебя — и напукаешь что-то невнятное про ЭЭЭ НУ ТАМ БИЗОН КОНПЕЛЯЦИЯ ОПТИМИЗАЦИЯ МАШИННЫЙ КОД >концептуально уже знаешь нихуя ты не знаешь >сложных абстракций Блядь какой же кринж нахуй
>>1684258 Глянул в оглавление там всё же есть глава про РАСШИРИТЕЛЬ для твоего бати. >>1684381 Нахуй тебе это всё, чел, в твои года пора уже кабанчиком быть и попиливать бюджет рососиюшки, а не байты перекладывать. >>1684520 >кринж Флексишь/чилишь, небось?
Сисяч, выручач. Я постоянно испытываю дикую попаболь при сборке библиотек/бинариесов из исходников. Постоянные ошибки, постоянные гуглёжки, как меня уже это достало. Подскажите куда копать что бы овладеть мастерством компилирования исходников? Желательно бы ещё статейки накидать.
Не уверен, что правильно всё написал и пока не проверял. Но допустим, помимо файлика и вывода, я хотел бы ещё писать и в буфер. Ну разве файловый указатель не идентичен адресу в памяти и его нельзя заменить? Алсо была мысль сделать нечто такое через сисколлы, но я боюсь, что мне придётся через инлайны регистры править, да и асму я почти не знаю
>>1685462 >В смысле? >size_t write (int fd, void* buf, size_t cnt); Как получить fd для куска памяти, а не для файла/потока? я уже понял, что никак write() же пишет исключительно в последние.
>>1685482 >Например pipe() Спасибки. >>1685582 >Ты понимаешь как они работают эти дескрипторы, дескрипторы для идентификации файла в процессе, очевидно же. >трубки Вот сейчас курю. Из того что выкурил, понял что пайп имеет два дескриптора - для записи и чтения для других процессов. Читается/записывается по фифо. Вот только я безнадежно туп и всё равно не знаю, как из указателя на получить это ФД. >и процессор вообще? А что тут надо понимать?
>>1685773 OpenSSL Я пытался три часа её скомпилировать. make слал меня нахуй, говоря что FILES NOT INCLUDED! cmake высрал что мне что угодно, но не статические либы.
В итоге спустя пару часов нашёл в интернете уже скомпилированную статику и с ней начал работать.
>>1685839 Ну с шиндоузом не могу помочь, а что если a) тебе и не нужно собирать, под шиндоузом разве нет либархивов b) ещё как вариант во всяких докерах крутиться?
>>1684889 >Я постоянно испытываю дикую попаболь при сборке библиотек/бинариесов из исходников. Просто расслабься и прими дилду в свой анус. С годами он будет разработан настолько, что ты будешь лениво собирать все это говно часами, посматривая правым глазом сериальчик. А деньги при этом платятся как за полноценное программирование
>>1686129 Какую дилду, этот клоун не знает различия make и cmake, не читал ридми по сборке, зато уже умудрился насобирать 1000 ошибок где-то и насторочить на дваче. Настоящий программист, задатки гения.
>>1684520 Недавно смотрел видос, где опытным разработчикам!, на серьезных щах, объясняют, почему скорость обработки массива различна, в зависимости от порядка обработки строк и столбцов. Я тогда охуел, это же базовые понятия. Твой коммент поставил все на свои места.
>>1686917 Да что ты нахуй вообще несёшь, ты обычный любитель-долбоеб, а самомнение у тебя как у системной макаки с 10 летним стажем минимум. При том что я сомневаюсь что ты вообще понимаешь о чем ты пишешь, что-то о том что не мог понять что-то про аргументы, что-то про скорость обработки массивов. Сядь книжку по крестам почитай какую а не обсирай свои штаны тут
>>1686811 У нормальных людей - не тупой, у тупых - задрот. У нормальных - критика, у тупых - комплексы. Типичный дебил, настоящий, необучаемый, навсегда, ибо вместо исправления своих недостатков занимается их защитой и оправданиями, разворачиваним стрелок.
>>1686917 >Я тогда охуел, это же базовые понятия. Это low context и high context культуры. Цивилизованные люди используют low context, потому что проще сказать, чем выяснять, что собеседник знает, а что нет. У пидоршек high context - скажешь человеку то, что он знает, он ОБИДЕТСЯ и подумает, что ты считаешь его ТУПЫМ, а если это делает лектор - это вообще пизда. Потом довольный прибежит на двач, рассказывать, какие все тупые, а он, задротик, умный.
>>1687308 >У нормальных - критика, у тупых - комплексы. Мань, ты типчная токсичная форумная крыса, которая занимается не "критикой", а форумным самоутверждением. Ты думаешь это не видно?
>>1687342 >Как что-то плохое Примерно как ссать в подъезде >и это вообще не отменяет того факта, что он всё правильно говорит. Этот пердеж не является разговором
>>1686917 Ну давай объясняй в чем отличие скорости обработки таких массивов, строк и столбцов. Объясни мне как меняется скорость, если я сначала буду вычислять столбцы->строки или же строки->столбцы.
>>1687700 На сайте гну. Вообще make - очень универсальный инструмент, для многих задач сгодиться, неплохо бы иметь такой под рукой и уметь им пользоваться. У тебя на скрине скорее не про make, а про автотулзы это другое
typedef struct { int length; pizda p_pizda; } hui;
pizda eot; pizda p_eot = &eot; eot.depth = 22;
hui op = {5, p_eot};
Почему запуская этот кусок в gdb я могу обратиться к члену структуры pizda структуры op типа hui как (op.p_pizda), так и (op->p_pizda)? Однако если обратиться вторым способом к op в исходном коде, то, понятное дело, возникает ошибка на этапе компиляции. В чём здесь заключается магия дебагера?
>>1687369 > пердолинг из интел мануала на 10к страниц > это же ентри лвл, каждый нюфаня должен знать Ох лол. Я практически уверен, что итт лишь 1.5 человека осилило черную магию мануалов.
>>1688355 Нет, есть сигналы для низкоуровневых (всякий неверный доступ к памяти и деление на ноль) и setjmp/longjmp для эмуляции программных. В винде есть __try/__except, но это расширение компилятора.
ваще с указателями проблема, что их часто объясняют на примере указателя на локальную переменную, и ты такой: "нахуя это говно нужно, если можно с самой переменной работать". Когда начинаешь фигачить структуры, становится понятнее. Ну и если хоть чуток разобрать (по сути) любой ассемблер, оказывается, что указатель - просто адрес, разыменовывание - получение данных по адресу(ну, с добавлением оффсета, если доступ к полю структуры).
>>1690160 У МК мало ресурсов. Код целиком я ещё не дописал и он на стадии отладки, так что опции оптимизации могут ещё говна подкинуть. Писал как есть, т.к. почти не знаю ничего.
Вообще, посмотрел бы как это НАДО сделать, а не так, как получилось у меня.
>>1690173 Хочешь оптимизации — используешь опции оптимизации компилятора. Так оно работает. Ты ещё скажи, что ты взялся это на С писать, потому что он "оптимизированный", а на своём языке даже оптимизации не пробовал включать?
чо ты такой токсичный? челик разобрался с темочкой, сделал маленький шажок, хули бы не поддержать? нет, блядь, придёт пердоля, козыряя своим сомнительным багажом знаний. ссал тебе в рот.
>>1690070 > В идеале, чтобы меньше циклов У тебя всего один цикл. Из твоего примера вообще непонятно, зачем он нужен. И switch case можно выкинуть. Но я не знаю, может предполагается, что в var_tosend данные могут идти непредсказуемо и его размер не определён.
>>1690301 В смысле, почему всё пишется в разные массивы? Потому что не знаю, как разом преобразовать переменную и записать в конец одного строкового массива. Так бы я преобразовывал переменные и писал сразу в один массив.
snprintf преобразует разношёрстные переменные по заданному формату, а strcat склеивает строки.
>>1689556 Вот именно! Есть один момент, на который убил много времени. В книгах объясняют, что если, например есть массив arr[2][3]; то arr это адрес первого элемента массива, то есть - &arr[0][0]. Фактически, это действительно так, но это пиздецки сбивает с толку, так как при разименовывании надо всегда учитывать тип! На самом деле arr это &arr[0], a вот arr[0] это уже адрес arr[0][0].
>>1690392 > Потому что не знаю, как разом преобразовать переменную и записать в конец одного строкового массива. Может, увеличить значение указателя на строковый массив?
>>1690646 Ты же в тред не приходишь: >двач, как быстрее билдить 17 файлов? руки кстают стрелку вверх нажимать >используй мейк >мейкоблядь закукарекала!
>>1680757 >твердо и четко где-то прописан минимальный размер типов данных? Не, нихуя, везде по разному. В одном канпиляторе у тебя будет long int 24 бита, в другом 32 бита, к примеру. По этой причине в misra c не рекомендуется использовать оригинальные типы, а вмето них нужно использовать типы указанием размера uint16_t, uint32_t и так далее. Можно подкулючить библиотеку typedef для этого.
Массив длиной 10. Записываю в него строку через gets(s). Суть в чём? Если ввод в консоле больше 10-ти знаков идёт ошибка, как поставить какую-нибудь защиту от этого? Чтобы он инорировал остальной ввод или что-нибудь такое?
при использовании функции gets работает, но при переполнении крашится. при функции fgets, не боится переполнения, но почему-то функция там неопределяет строки как равные. я заебался уже нахуй
>>1692324 Нет. Я уже разoбрался, анoны. printf'ом сделал посимвольный вывод двухмассивов, у первого массива нулевой элемент единице равен нахуй. Не знаю почему, но короче ваши функции гавно ебаное
>>1692336 >>1692324 Короче, да разобрался. Анон был прав. Нет конца строки, причём не функция гавно, а я еблан. У меня нету конца строки в той строке с которой я сверяю поэтому и получается неравенство. Каюсь, анчоусы.
>>1692339 Нет уж, я заебался книги читать, 2 года я читал книги, хочу кодить, заебало.
>>1692346 >Нет уж, я заебался книги читать, 2 года я читал книги, хочу кодить, заебало.
Когда тебе нужно использовать неизвестную тебе функцию из стандартной библиотеки, прочитай один, сука абзац в стандарте про эту функцию, ну или в man. Дали им мануалы - читай, нет блядь, говно жрут. Наберутся "знаний" их своего эгрегора, лол.
>>1692346 >причём не функция гавно, а я еблан Аксиома программирования. Нужно преподавать на первом уроке в школе, так чтобы всю жизнь помнили. Есть еще важное следствие-тест. Если ты пробуешь использовать функцию, но она "не работает" и ты ищещшь другую на замену, значит ты необучаемый дебил, залетышь чуждый программированию. Просто съеби в таком случае, ты дефективен на генетическом уровне.
>>1692202 >stdint.h Да, точно, она, забыл как называется. >Такой метод является кроссплатформенным. Вот поэтому и рекомендуют использовать такие типы, чтобы не ломать башку, сколько битов в переменной.
Все было бы проще, не будь snprintf в сишке сломана нолик в конец не всегда пишет, возвращает не число записанных символов, а требуемый размер буфера, чтобы влезло все. Поэтому лучше всего для такого сделать обертку вокруг snprintf, которая заодно и на ошибки проверит (snprintf и отрицательное значение вернуть может), и нолик в конце не забудет, и флажок примет, считать ли недостаточный размер буфера ошибкой - для имени файла или каких-то критичных данных очевидно да, а для отладочных логов очевидно нет.
>>1693763 Хоть я и не шарю в авр, но тут такая лютейшая хуйня в плане алгоритма, что я даже не знаю с чего начать.
Во-первых, после отпускания кнопки, ты больше никогда не зайдёшь в условие if ((PIND & 0b00000001) == 0b00000001), потому, что оно будет false. Во-вторых, даже если ты будешь держать кнопку нажатой, то по истечение таймера, у тебя всё равно будет светить (ну или дохуя часто моргать), так как после сброса порта в 0 он опять поставится в 1.
В использование таймера я даже не вникал, ну его нахуй.
>>1693857 То, что не содержит сайдэффектов. Если хочешь затестить оптимизацию, компилируй отдельные функции или пиши результаты в volatile-переменные.
>>1694088 Можешь явно стейтмашину забабахать. Заводишь comma_index = 0, встретив запятую - инкрементируешь, пишешь символы в columns[comma_index], для comma_index == 2 дополнительно проверяешь каждый символ isdigit. Зачем для такой ерунды тащить регэкспы - непонятно.
>>1694096 Очередной дебил, который перепутал сосач с форумом для девочек. Какая принципиальная разница, писать foo/bar или hui/pizda?
>>1680461 (OP) Анон, посоветуй какую-нибудь обертку-фронтенд (хз как правильно) над gdb, чтобы было удобно юзать, можно консольную, можно гуи. Стандартный из под консоли все-таки сильно неудобный. Можно наверное иде какую-то легкую, но я вимовый линуксодибил, так что не оч хочу. Еще было бы неплохо если оно как-то для асма неплохо работало, но это опционально. Ну или что-то такое спецом под асм.
>>1696443 >>1696461 Съеби отсюда, дебил. И свою лабу забери нахуй. За тебя её делать никто не будет. Чтобы не осилить open() и read() это надо постараться. Если бы ты наработки принёс, то тогда можно было бы поговорить, помочь и поправить, а так иди нахуй просто.
>>1696454 >>1696432 >>1696523 Ладно, чел, извиняй. Думаю, оба были не правы. Пригорел ты конкретно, конечно, но вот развешивать ярлыки не стоит.
Хрен с ним с кодом, возможно бы справился и со словесным описанием алгоритма.
Можно прочитать содержимое файла посимвольно, через fgetc, пока не встретишь \n но это будет долго.
Функция fgets читает символы, пока не встретит \n или конец файла. "В случае успешного чтения строки, возвращается указатель на массив, в который помещены считанные данные (возвращается аргумент s)." Можно прикрутить счётчик и на каждый инкремент копировать указатель на массив, возвращаемый функцией, через strcpy в нужные массивы?
>>1696539 fgets() бери. Только это говно должно записать ещё и ньюлайн, так что на место ньюлайна просто ставь '\0'. Вместо ЕОФа оно тебе сам нуль захуярит.
Ребят, хелп. Вот, допустим, у меня есть массив структур: struct information { char name[LEN_NAME + 1]; char manufacturer[LEN_MANUFACTURER + 1]; unsigned cost; unsigned amount } good[LEN_STRUCT];
Как этот массив передать в функцию по указателю? Если написать func(good); (обычный массив, по идее) то компилятор ругается: "использование имени типа не допускается"
>>1680461 (OP) Кому в 2к20 может понадобится Си? Только байтаёбам разве что, которые пишут прошивки для мк за еду, и то, даже оттудова его скоро вытеснят плюсы. Зачем его учить нормальным людям сейчас?
>>1696835 Узнать, в чём космический смысл учить Си. Программирование ведь учат ради того, чтобы зарабатывать бабки, а не джаст фор лулз. Вот мне и интересно узнать у людей, зачем они выучили Си.
>>1696856 Я про то что ты тайпдеф проебал. Как тебе помогать вообще, если ты изтрёх постов с кодом в двух ошибся? Переспрашивать тебя каждый раз, точно ли ты то скопировал?
>>1696841 >Узнать, в чём космический смысл учить Си. Си охуенный лаконичный язык в котором нет ничего лишнего и который можно полностью объять разумом.
>Программирование ведь учат ради того, чтобы зарабатывать бабки, а не джаст фор лулз. Тебе ничего не мешает знать несколько языков. Как для того чтобы зарабатывать бабки, так и для души.
Чем больше погружаюсь в эту волосатую кроличью нору, тем больше я понимаю, что зря мы всем миром хоронили Дельфы. Кроме более компактного синтаксиса, всё остальное в Си, кажется, сосёт. Как будто весь язык создан, чтобы в каждой функции было удобно писать в регистры или показывать фокусы с двоичной арифметикой на флоатах. Простой код для Си слишком плебейский.
>>1696945 Делфи конкурент скорее С++, там не просто ООП, а две несовместимых объектных системы (class и object), есть исключения. Идеи делфей развились в C# с уходом главного разработчика в микрософт.
>>1696945 > ~200 прекрасно документированных способов прострелить себе ногу Пролистал список, автор не отличает unspecified от undefined. При этом большая часть списка либо очевидна сразу, либо становится очевидна после прочтения пятой главы стандарта (там рассказывают про абстрактную машину, для которой ты на сишке пишешь). Остаются только всякие мелочи со стандартной библиотекой, которые действительно нужно исправлять.
>>1696954 Ну, не Дельфы так Паскаль. Просто ощущается, что между Си и Крестами не хватает среднего звена: компилируемого языка без UB и дремучего синтаксиса, но с ассоциированными методами типов, дженериками и, наверное, управлением памяти через счетчик ссылок. Переход с Си на Кресты выглядит для новичка, как проститутка с плёткой и страпоном в подарок на совершеннолетие.
>>1696975 Я понимаю, что автор привирает для разведения паники и там три четверти выглядит очевидно, но! Это все равно две сотни мин, на которые можно напороться в конце рабочего дня, когда в голове уже шум, а все мысли только о жрачке и сне. Это как заводы сто лет назад: везде капало горючее масло и крутились открытые шестерни, но в то время покалеченных рабочих можно было выкинуть на улицу. Сейчас за уязвимый и нерабочий код можно огрести штраф на сумму контракта.
>>1696979 Такой язык просто не нужен. В 90-е на том некрожелезе (страшно подумать, у меня видюха быстрее самого быстрого суперкомпьютера из 90-х), был смысл экономить биты и не писать на Java либо C# тот софт, который писали на делфях. Сейчас же смысла вообще ноль. А сейчас, где смысл есть, нужны профессионалы, а не новички.
>>1697035 Лично мне нужна замена Си - простой язык, заточенный под системный софт и interop с языками более высокого уровня, но без ебли с совместимостью с 70-ми годами прошлого века. Есть куча штук типа zlib, libjpeg, libuv и прочего, в написании которых Си неудобен, а Кресты - оверкилл. Опять же, возвращаясь к Дельфам - сборка проекта в миллион строк без ебли с зависимостями - это, блядь, непередаваемо охуенно. Писать всякий FIND_HUI в CMakeLists я люто ненавижу, не говоря уже о том, что лечить сломанные зависимости на дркгом языке - пытка.
>>1697035 С одной стороны ты прав. Я читал в бложике одного чувака, он как-то решил одну свою консольную тулзеньку питоновскую переписать на расте. Потом сравнил производительность, ну и короче выяснилось, что только через 35-40 лет использования эта разница в производительности отобьет время, которое он потратил на переписывание. Но с другой стороны, когда менюха в варкрафт рефордже тормозит сильнее, чем сама игра, а все потому что близарды решили сэкономить и наняли вебмакаку, которая написала меню на электроне, я начинаю думать, что индустрия заходит куда-то не туда. Железо становится все мощнее, а плохо написанный софт весь этот рост мощностей нивелирует.
>>1697035 На шарпе можно писать приложения, которые будут менее производительнее аналогов на С/С++ только в случае если на сях/плюсах программу писал хороший специалист, что в случае этих языков большая редкость. Поэтому зря ты его рядом с жабапарашей ставишь.
>>1697319 С утилитами на питоне-ноде проблема в том, что их неудобно разворачивать. Тебе помимо самой утилиты надо разворачивать среду для её запуска, вот это главная проблема, сложность.
Производительность... В подавляющем большинстве задач не актуально, у тебя просто в одном случае ресурсы железа используются на 10%, в другом случае на 1%. Есть ли реальный смысл экономить, вкладывая много труда?
Тебе нужно решить проблему, ты её решаешь. На ноде можно быстро разработать и запустить довольно сложное приложение, которых просто 20 лет назад не делали, точнее делали, но это были ОЧЕНЬ дорогие в разработке приложения. И всё равно с меньшими возможностями.
>>1697333 Сорта говна. Да, шарп быстрее жабы, но все равно тормозное дерьмо. С нормальными прграммами сравнивать нелепо. Эта хрень годится только для одноразовых утилиток вроде скриптов, чтобы запустил раз, закрыл и забыл.
>>1697417 Так в том числе про это он и говорит. Шарп не дает никаких преимуществ перед плюсами от слова совсем. Кодил много лет на С/С++/С# У шарпа единственное преимущество, что его хорошо отрекламировали. Поэтому теперь, когда крупная фирма хочется взять прогеров на такой проект, где их нужно много, но предполагается сильная текучка кадров - вот там он заходит. Т.е. очевидный интерпрайз, для которого собственно он и был разработан как альтернатива яве.
>>1697494 >не дает никаких преимуществ В том то и дело, что даёт. Он не навязывает тебе необходимость ебаться с задачами, которые можно сделать за пару минут. Речь про задачи которые не требуют максимальной производительности. При этом если у тебя возникают задачи, которые требуют максимальной производительности, то в таких случаях можешь и поломать голову, покрутить указателями, поманипулировать структурами и байтами. И самое главное - он не даёт тебе обосраться, при этом в плюсах даже в пустяковом месте можно закопать говно, которое испортит всё приложение. И всё это в обмен на ничтожный процент от скорости выполнения и увеличения потребляемой памяти. >У шарпа единственное преимущество, что его хорошо отрекламировали Сразу видно "много лет" кодящего и не следящего за обновлениями. Премущество шарпа в том, что его быстро и постоянно развивают, открой dev блог майков и посмотри на количество изменений которое внесли в C# с момента когда ты перестал на нём кодить.
>>1697557 Зачем это говно в качестве "клея", когда есть какой-нибудь питон/лисп/ваш любимый язык нейм? >Премущество шарпа в том, что его быстро и постоянно развивают Твой до диез существовал хуй знает сколько лет до появления кора, если я не ошибаюсь лет 15, в итоге на сервере его попросту не было, по факту была штука для десктопа. Зачем теперь коре на сервере, когда есть джава, я даже не знаю. Короче активно развивали, но не туда.
>>1697557 > В том то и дело, что даёт. Он не навязывает тебе необходимость ебаться с задачами, которые можно сделать за пару минут. В том то и дело, что плюсы точно также. Да, если брать Си, то там уже есть проблемы, что новички в сложных проектах будут себе остреливать что-то. В плюсах этого нет. > Премущество шарпа в том, что его быстро и постоянно развивают, открой dev блог майков и посмотри на количество изменений которое внесли в C# с момента когда ты перестал на нём кодить. Я не переставал на нем кодит, писал же, что на всех трех работаю. Ну есть там частые обновления, что нормально для молодого языка. В других двух все устаканилось и выпускают раз в пару лет. Это вот вообще не показатель.
>>1697557 > Премущество шарпа в том, что его быстро и постоянно развивают А недостаток в ограниченной применимости - за пределами корпоративщины он нахуй не нужон, в том числе микрософту - даже Скайп они новый сделали на Электроне. У Шарпа просто нет киллер-фич, ради которых стоило бы терпеть прожорливый рантайм и заточенность под экосистему шындовса. Даже у пет-проектов типа Зиги или Ви есть вау-эффект, а о Шарпе можно только унылую презентацию в паверпоинте сделать, на тему "чуть более лучше, но это не точно".
>>1697608 > В плюсах этого нет. Ой, не пизди, пожалуйста. Новичок может получить контузию, попытавшись осмыслить какую-нибудь хуету на Бусте.
>>1697608 >молодого языка >язык появился в 2000, на 5 лет позже жавы В голос. >>1697630 >даже Скайп они новый сделали на Электроне.
Скайп на электроне появился еще до .NET Core, и другой возможности сделать кроссплатформенное приложение тогда не было. И появится она только через пару месяцев, сейчас инструмент (.NET MAUI) для создания таких приложений находится на стадии превью. Вот именно это называется "не стоит на месте и развивается", они повернулись лицом к опенсорсу, они делают упор на нужные вещи. Да 2 года назад шарп был всего лишь альтернативой Java, но сейчас эта жаба даже и рядом не стоит.
>>1697697 Ты треплешь как маркетолох рекламный, который программ не писал. Кому нужен язык, на котором сегодня пишешь, а завтра он уже устарел, наклепали нового. Это параша рака самая настоящая, типичное скриптовое вебговно. Зачем это дерьмо в ситреде? Иди толсти в другом месте, свинья.
>>1697333 >если на сях/плюсах программу писал хороший специалист, что в случае этих языков большая редкость Насколько же петушиная манипуляция, не могу предоставить аргументы - выдумаю статистику.
>>1697719 Тебе аргументы нужны для осознания того, что более сложный инструмент требует больших навыков от того кто им пользуется, и чем больше этих требований, тем меньше будет хороших специалистов для конкретного инструмента? Это очевидно для всех кроме тебя. >>1697830 И тут ты называешь замену электрону, которую можно также скомпилировать один раз и запускать в любой системе.
>>1697866 > И тут ты называешь замену электрону, которую можно также скомпилировать один раз и запускать в любой системе. Слово из семи букв. Угадаешь, или будешь крутить барабан?
Но какая разница? Javafx уже 12 лет, Swing-у уже больше 20 лет. Кроссплатформенными они были с самого начала, но за всё время я так и не видел сколько-нибудь популярного софта на их основе.
Кмк, тут ещё играет роль самомнение программистов: качество софта на манагед языках ограничено сверху, сделать супер-быстро и супер-круто на них не получится. Вряд ли кто на досуге хочет писать сразу говно. Наверное, исключение в виде Электрона держится потому, что писать под него - это типа паралимпиады и проходит по статье расходов на дайверсити.
>>1697866 >Тебе аргументы нужны для осознания того, что более сложный инструмент требует больших навыков от того кто им пользуется, и чем больше этих требований, тем меньше будет хороших специалистов для конкретного инструмента Опять петушиная хуйня. Если убрать все петушение, у тебя написано: "по-моему, С++ более сложный для написания более быстрого софта". Что, конечно же, неправда. С++ более сложный язык, но ровно потому, что в нем zero overhead абстракции везде, и писать более быстрый код на нем проще.
Возвращаясь к сабжу. Аноны, сволочи вы - я спрашивал про simd в сишечке, и никто мне не сказал про gcc/clang vector extensions, никто. А ведь оно почти что решение всех моих проблем :(
>>1697954 > zero overhead абстракции везде > писать более быстрый код на нем проще Так может говорить только человек, никогда не видевший, как в дизасме сишная строка конвертируется в std::string, которая конвертируется в QString, которая передается в функцию, которая делает из строки QByteArray, у которого просят data() с изначальной, блять, сишной строкой. Три ебаных страницы преобразований, чтобы сделать НИХУЯ. И это в крестах повсюду.
>>1698182 А ещё эта самая нулевая стоимость абстракций выглядит насмешкой, когда у тебя ассемблерный код короче, чем определение хитровыебанного итератора.
Где почитать про смысл троеточия в дефайне? Я нашёл про # и про ##, но про ... ничего нет почти, mingw выдаёт "operand of fold expression has no unexpanded parameter packs" когда я пытаюсь что-то с многоточием сделать - но эта ошибка со скопированным текстом почти даже не гуглится, а все ссылки которые есть ниже про темплейты плюсовые.
В идеале мне нужно ker(1,2,asd) превратить в <1] <2] <asd], то есть обернуть каждый из параметров в говно и убрать запятые, количество параметров заранее неизвестно и это должно быть кодом, а на текстом. Это возможно как-то хотя бы?
>>1698182 >QString >в крестах Кутэ - не кресты, а левый парашный DSL для тормозной говнопараши. Считай это аналогом джаваскрипта, не ошибешься в главном.
>>1698610 > В идеале мне нужно ker(1,2,asd) превратить в <1] <2] <asd], то есть обернуть каждый из параметров в говно Нееш... Не делай так, возьми внешний кодогенератор, если собираешься собирать выражения по кускам. Но ты можешь, конечно, сделать так: https://ideone.com/F5ANke
> Где почитать про смысл троеточия в дефайне? В троеточие попадают все "лишние" параметры макроса (которым не нашлось имени перед троеточием). В теле макроса ты можешь получить эти параметры одним куском, вместе со всеми ихними запятыми, сказав __VA_ARGS__. Чтобы получить один конкретный, нужна магия.
> #, ## # преобразует аргумент макроса в строку. ## склеивает два токена в один (иногда).
>>1697942 >Наверное, исключение в виде Электрона держится потому, что писать под него - это типа паралимпиады >му-хрю нинужна Мелкомягкие написали на элекиютроне иде vscode, которая охуенна.
Есть инфа, почему в единственном божественном и незаменимом Си нет такой нативной реализации работы с бинарными файлами, чтоб не доебаться было? implementation independent типы не зашиты, а в определены в stdint.h, packed-структуры вообще нестандартная, а endianness, того хуже, или руками конвертируй, или сетевую библиотеку тащи (htons/ntohs/htonl/ntohl)? Не дай Боже мне вас троллить. Си люблю и обожаю, обязан ему формированием своей кодерской личности. Просто я действительно не вполне понимаю. Одни догадки. Дискасс.
>>1698987 А как можно получить нативность в языке программирования без всяких там байтовых машин, если разные аппараты использовали разные порядки? мимо-нюфак
>>1699011 Я не об этом. Я прекрасно понимаю, что типы первого порядка таковы, чтоб их реализация на ассемблере под архитектуру была самой прямолинейной. Но почему в стандарт не завезут возможность не класть 14-байтовые структуры по 16-байтовой сетке? Как опцию? Чтоб можно было писать typedef NiCeStAnDaRdDeFiNeDpAcKeDaTtRiB struct { uint8_t sych_size_in_nm; uint32_t erokha_size_in_nm; } huetred_t; huetred_t ∗borda = calloc(n, sizeof(huetred_t)); fread(huetred, sizeof(huetred_t), n, borda); printf("%u\n", borda[7].eroha_size_in_nm); а не #define SZ_HUETRED 5 #define SYCH_SIZE_IN_NM(p) (∗(uint8_t∗)p) #define EROHA_SIZE_IN_NM(p) (∗(uint32_t∗)((char∗)p+1)) #define HUETRED_BY_IDX(borda,idx) ((char∗)borda+idx∗SZ_HUETRED) huetred_t ∗borda = calloc(n, SZ_HUETRED); fread(huetred, SZHUETRED, n, borda); printf("%u\n", EROHA_SIZE_IN_NM(HUETRED_BY_IDX(borda, 7))); Если где-то опечатался, не обессудь.
>>1698987 Так исторически сложилось - Си изначально разрабатывали под машину PDP-7 с 18-битным словом, на байты индустрия окончательно перешла только в 80-е. То, что в C99 для типов отдельный хидер - дань совместимости со всяким архаичным говном.
>>1699050 В то время у всех уже были свои кейворды под типы фиксированной ширины, чаще всего - разные по названию, всегда - зависиящие от компилятора. Вынесение стандартных кейвордов в хидер позволяло не ломать старый код. Насколько Си обратно совместим, я как-то увидел сам, скомпилировав древний Дристон 30-летней давности под современный микроконтроллер.
>>1699044 По сетке всё кладется, потому что теоретически есть платформы, которые могут читать-писать только выровненные по слову данные. Если паковать всё по байтам, ты получишь штраф на доступ к полям - их придется выделять из слова сдвигами и and-ами - и нарушение атомарности доступа к словам. Короче, если знаешь, что делаешь - используй битовые поля или расширения компилятора.
Лучше бы сделали параллельную ветку С, без необходимости в совместимости с абаками из 70х. Да есть куча либ, которые сразу так просто не заведутся, но это поправимо. Просто современный С, куча бы народу перешло. Rust вообще не то
>>1699154 По-моему, Си не улучшают, т.к. сами стандартизаторы языка считают, что лучше б он сдох. Иначе трудно объяснить, почему в ни в C18, ни C20 нихуя нового нет. Тут уже впору говорить не об удобном Си, а о легковесном Расте.
>>1699183 Потому что в С уже есть все, что нужно. Добавлять всякий синтаксический сахар никому не нужно. Также у них есть перед глазами пример С++, когда в язык пихают фичи и он превращается в кошмар.
>>1699198 Беда C++ не в обилии фич, а в совместимости с C и вывертах шаблонов. Если бы Кресты использовали дженерики вместо шаблонов и будь у них более удачный синтаксис - была бы у народа к ним вечная любовь. А так, оба языка будто специально хотят выставить программиста дураком.
>>1699064 > теоретически есть платформы, которые могут читать-писать только выровненные по слову данные Почему теоретически? Есть ARM 32-битный, есть PowerPC, есть SSE в том же x86 со всеми его movaps.
Есть два вектора каких-то ресурсов. Второй vecB хранит указатель на ресурс из vecA. Когда происходит изменение vecA, то, логично, происходит смещение всех указателей в vecB. Как такое обыгрывают гуру? Вижу два подхода: 1) для A использовать другой конетйнер - ассоциированный динамический массив, но это чуть ударит по скорости обхода всех элементов и времени обращения к конкретному элементу. Т.е. по сути вместо ссылки на элемент A будем хранить некий хеш-id, по которому будем обращаться. 2) Умные указатели: хранить в каждом элементе A такой же динамический вектор на те элементы B, которые его используют, чтобы при каком-то изменении структуры A, элемент мог бы обратиться к нужным элементам B и перезаписать им указатели уже на новые элементы или просто занулить.
>>1699709 Может, это просто ресурс. Банальный пример - это загруженная картинка. Нет, можно заменить и другим контейнером, для этого в пункте 1 и описал, что замена на ассоциированный динамический массив. Но не хотелось бы сильно замедлять обход по ссылкам на следующие элементы и хранить единым блоком в памяти как в векторах.
>>1699661 3) Глупые указатели: в каждый элемент А добавляем номер первого элемента B, который на него ссылается. В каждый элемент В добавляем номер следующего элемента B, который ссылается на тот же элемент А.
>>1698632 Мм, спасибо, то что нужно. >Я хуй знаю, что еще с этим сделать. Питоновский with краду.
Просто балуюсь, но вроде удобно получилось, почти как родные for или if - буду в своих проектах использовать. Осталось только порядок развернуть. Там внутри if(...;true) где в первой секции создаются временные объекты, аналог __leave__ вызывается в их деструкторах. Ещё думал как сделать аналог as через дефайн или синтаксис типа with(c=a,b), но так и не придумал - впрочем, он не очень и нужен. А ещё сейчас пришло в голову глядя на std::tuple, что возможно это можно чисто через шаблон сделать - я просто не очень по шаблонам, мягко говоря - и твой подход мне понятнее.
>>1701157 Ну тут место не экономится, а скорость изменения. За счет такого подхода при изменении вектора А, нужно только изменить его самого и в одном элементе вектора B изменить указатель. Но если все хранить в А, тогда надо менять всех владельцев, ссылавшихся на А.
>>1702632 Вангую примерно об этом был спор двух старых пездюков линуса и таненбаума. Если ты пилишь микроядро, архитектурно дрова будут общатся с ядром и юзерспейсом сообщениями, а такая абстракция почти наверняка предполагает расшаренные буфера.
>>1702450 В чем проблема моего вопроса, лолват? Ядро Линукса написано на Си, я думаю, здесь есть аноны, которые шарят в системном программировании в среде Линукса.
>>1680461 (OP) Аноны, какой тулзой собирать проект из нескольких .so? Раньше вполне устраивал make, но вот решил замахнуться на что-то по-больше и этот самый make уже порядком заёбывает, так как каждая либа собирается со своим собственным набором флагов в собственных директориях. Если все за Cmake, то где можно почитать про написание своих сценариев, где всё по-нормальному разъжёвывается?
Или ты черпаешь структурой заранее известные бинарные данные из файла не проебав при этом оконечность или ты оптимизируешь под килобайты оперативы (мк/8 бит компы), в остальных случаях ты получишь невыровненный доступ.
>>1703211 А ты не знал, что процессы в пространстве ядра могут обмениваться данными с процессами, которые исполняются в пространстве пользователя? Это троллинг такой или что?
>>1702749 > Как засунуть .dll внутрь Portable EXE? Никак. Т.е., теоретически было в интернетах несколько проектов, которые рипают код из длл и делают obj, но там куча нюансов, из-за которых на практике скорее всего будут проблемы.
> где dll-файл можно в виде resource как-то привинтить Вот так можно, но это тоже не беспроблемный костыль. Пишешь name RCDATA "mydll.dll" в .rc, компилируешь rc/windres filename.rc, с полученным filename.res/.o линкуешься. При старте делаешь FindResource/LoadResource/CreateFile куда-нибудь во временную директорию/WriteFile данных из ресурса, грузишь LoadLibrary, получаешь указатели на функции GetProcAddress. Никакого связывания через таблицу импортов, конечно же, иначе твоя программа просто не запустится.
Где прочитать про стандартные вещи, типа оборачивания кода в хедерах во что-то наподобие #ifndef %HEADERNAME%_H #define %HEADERNAME%_H ... #endif / %HEADERNAME%_H / ? Про всякие распространенные в использовании вещи, типа make, и паттернов, наподобие вышепредставленного, и зачем они вообще нужны?
>>1704575 >>1704560 Код не мой, это qemu https://www.qemu.org/ . Просто обычно он у меня без проблем компилировался, это на дебиан пересел сейчас, после чего появилась эта ошибка. Видимо от компилятора тоже зависит, может здесь gcc староват 8.3.
А #define RAZMERCHIQUE_H sizeof(H) тоже мамкино оптимизаторство? Ведь компилятор же просто sizeof() на препроцессировании хуйнёт заместо макроса. И по поводу дейта элайнмент, я сделал правильный вывод, что все примитивы желательно подстраивать под машинное слово, ну или в х64 использовать хотя бы 4 байта? алсо такая хуйня возникает из-за того, что ЦПУ быстрее высчитывает адреса посредством битового сдвига, верно же?
>>1705243 >тоже мамкино оптимизаторство Да. Иногда улучает читаемость. >дейта элайнмент Значения указателей должны быть выравнены: char buf[100]; int p = (int )buf <--------- ГРОБ ГРОБ КЛАДБИЩЕ >все примитивы желательно подстраивать под машинное слово Желательно использовать int, в среднем по больнице он быстрее других типов или требует меньше кода. >ЦПУ быстрее высчитывает адреса посредством битового сдвига Нет. Не путай с выражениями a, там компилятор всунет умножение, если sizeof(*a) не степень двойки.
Нет, чувак, массив char - выходной буфер, в него пишутся данные: в моём случае я по логическому анализатору вижу, что говно на другом конце проводов отправляет верные данные в виде ASCII символов в HEX формате (байты).
Т.е. отправляется, например, 00031 = 30 30 30 33 31. А на принимающей стороне вместо этого выводится мусор, типа левых символов.
>>1705586 Не одинаковая верхнее проверяет только первый бит, при чем он может быть равен единице только если i = 0, при всех остальных i верхнее условие гарантировано не выполняется. Чтобы они были равноценны нужно как минимум ==1 заменить на > 0 и !=1 на ==0. Может еще что поправить, лень вглядываться.
>>1705522 Просто на всякий случай спрошу. Ты понимаешь как работает SPI и то, что приёмник и передатчик выталкивают друг у друга данные из буферов и по кругу их гоняют?
Походу у тебя проблема не с типами. Замени char recvbuf[129]; на uint8_t recvbuf[129]; и всё делов-то, а потом обрабатывай и кастуй этот массив как хочешь после приёма. Скорей всего у тебя проблемы с настройкой модуля SPI или с алгоритмом работы. Ты можешь с уверенностью сказать, что настройки модуля и алгоритм работы реализованы корректно?
>>1706012 >Ты понимаешь как работает SPI Честно - не очень. Не беспокоит до тех пор, пока работает.
>Ты можешь с уверенностью сказать, что настройки модуля и алгоритм работы реализованы корректно? У меня две SPI шины - одна на 10 МГц, другая на 30 МГц. Обе имеют одинаковые настройки, за исключением скорости, и используют те же функции для отправки и приёма, разделённые spicarrier. так вот, на низкоскоростной висит несколько микросхем - с ними всё нормально.
У слейва на скоростной шине я отключил приём и оставил только передачу. Скрин с анализатора, слейв шлёт корректно.
Да алгоритм, вроде, немудрёный: 1) Мастер шлёт данные каждые 100мс, проверяя флаг от прерывания на чтение; 2) получил мастер прерывание, сперва чтение, потом передача; 3) го ту п1.
>>1706436 (там звездочки после инт были, двач их съел) Потому что адрес char buf[] может быть невыравненным для инта. На x86 работать будет, но медленнее.
>>1705308 >Нет. Не путай с выражениями a, там компилятор всунет умножение, если sizeof(*a) не степень двойки. Так и вы вроде также говорите. Если размер - степень двойки, то вычисление адреса происходит через логический сдвиг влево shr, иначе через слоупочную mul.
>>1706507 > через слоупочную mul Не такая уж она и слоупочная, latency три такта, и ту можно скрыть, считая в это время что-то другое. Алсо, вычисления адреса часто делается через цепочку add и lea, это тоже относительно быстро.
>>1705243 > алсо такая хуйня возникает из-за того, что ЦПУ быстрее высчитывает адреса посредством битового сдвига Нет. Одна из причин заключается в том, что процессор не читает каждый байт напрямую из памяти, он читаем блоками, и читает обычно в кэш. А у кэшей есть границы. И если твой дворд пересекает границу кэшлайна, то процессору фактически нужно делать две выборки из кэша (заодно и вероятность того, что данных в кэше не окажется возрастает вдвое), потом выкидывать лишнее и объединять результаты. На все это требуется время. А ведь кроме кэшей есть еще и механизм трансляции виртуальных адресов, где тоже есть границы и все перечисленные проблемы. Пересек границу страницы - пиздец, тормоза.
Выравненные данные от этих проблем избавлены, потому что и границы блоков кэша, и границы страниц - все это выравнено сильнее, чем может быть необходимо процессору. Например, кэшлайн 64 байта, а максимум, что хочет процессор с AVX - это 32 байта для всяких там vmovaps.
>>1708358 Там скорее надо не куки чистить, а localStorage. В консоле браузера скажи localStorage.clear() или, если жалко закладки и отметки постов, десериализуй localStorage.store из жсона, удали оттуда кэши всякие, сериализуй и запиши обратно.
idiv на asm медленней чем div() функция? Мне нужно разделить int и получить ответ с остатком. Делал через % и / операторы и через div() функцию. Потом прочитал, что idiv инструкция делает тоже самое. Написал asm код, но в итоге он получился медленней чем div() функция и почти в 3 раза медленней чем % и /. Так и должно быть?
>>1709521 >Так и должно быть? В теории - нет, на практике - да. Суть в том, что компилятор не знает, что происходит в asm-коде, так что сохраняет переменные из регистров в память, а после - обратно.
Здравствуйте уважаемые. Не знаю куда обратиться, думаю что здесь самое то. В midnight commander, mcedit, некорректно отображает подсветку синтаксиса. Именно что некорректно, а не выключена. Например: В самом конфигурационном файле Syntax, есть include c.syntax, в котором, например, int обозначен как yellow, но все что должно быть жёлтым или коричневым - белое.
>>1709521 Если у тебя было x=c/10,y=c%10, то кунпелятор это заменит на одно умножение. div() не эквивалентна паре x/y, x%y, если x<0 || y<0 Ассемблер сразу нахуй, пиши портабельный код.
Насколько сложно делать формальную верификацию кода на Си? К примеру, недавно появился F* язык fstar, ориентированный на написание формально верифицированных программ. Неужели на голом Си это сложнее? Я в этом не разбираюсь, поэтому спросил.
>>1709527 >так что сохраняет переменные из регистров в память, а после - обратно Вот кстати получил БИНАРНОЕ ДЕРЕВО с этой хуйни. Им(конпеляторам) Родина дала более оптимальный апи64, юзай регистры сразу - не хочу, хочу из пустого в порожнее переливать.
>>1709807 А, кстати, забыл сказать ещё одну возможную причину. Учитывай, что компилятор может оптимизировать деление и остаток в более дешёвые битовые операции.
>Родина дала более оптимальный апи64 Ты про registercall?
На сайте АО «МЦСТ» появилась новость о доступности руководства по эффективному программированию на платформе Эльбрус; в нём также содержится глава с описанием системы команд «Эльбрус», ранее не публиковавшейся. Книга выпущена под лицензией Creative Commons (CC-BY 4.0) в форматах HTML (архив) и PDF;
>>1710224 > глава с описанием системы команд «Эльбрус» Значит, можно написать свой компилятор? GCC или Clang сможет портироваться на эльбрус взамен их проприетарного поделия?
>>1709924 >Ты про registercall? угу. не понимаю, почему нельзя сразу с регистрами работать. даже если аргументов дохуя, то и "свободных" регистров в х64 тоже предостаточно.
>>1710379 >даже если аргументов дохуя Потому что их очень редко бывает дохуя. В конвенции вызовов x64 на винде передаются в регистрах до 4 целочисленных и 4 с плавающей запятой, в юнихах до 6 int и 8 fp. Этого более чем достаточно для большинства задач, т.к. при большем количестве параметров их обычно упаковывают в struct или объект, который в обычный регистр не влезет.
>то и "свободных" регистров в х64 тоже предостаточно Если использовать больше регистров для аргументов, не останется места для того, что бы разложить по регистрам локальные переменные. При этом эти аргументы могут активно не использоватся (а если будут, то компилятор может их в регистр переместить уже сам).
Вообще, одна из самых важных причин, почему нет - представь оверхед от сохранения всех этих переменных из регистров, если тебе из той функции нужно будет вызвать другую, да ещё и не с теми аргументами. А такое сплошь и рядом. Так что оставь это для узконаправленных компиляторов вроде icc, которые в это таки могут; а для компиляторов общего назначения общепринятая конвенция будет лучше в большистве случаев, и нет смысла их плодить, как былые 32-битные.
>>1710410 > который в обычный регистр не влезет Поэтому структуры компилятор отлично раскладывает по нескольким регистрам. Алсо вы тут обсуждаете ABI, но забываете о том, что ABI - это внешний интерфейс. Если функция не торчит наружу, или если торчит, но код собирается с LTO, тогда компиляторы на эту ABI не смотрят и могут творить лютую дичь.
>>1711025 Ну это ты зря. Главная вувузела предыдущих итераций Эльбруса - Бабаян - в своё время сгребла своих толковых студентов в охапку и свалила в Интел. Эльбрус делает тебя успешным!
>>1711032 Байкал - это и есть буржуйская поделка, готовые ядра MIPS и ARM со своим обвесом. Рашка в 90-е что-то там лицензировала для полного цикла производства - DEC Alpha, по-моему - но как обычно бабло освоила и нихуя не сделала.
>>1711071 Нет, я агент США под прикрытием. Меня твоей мамаше внедрил лично Обама, от него у меня большой чорный хуй чтобы большой чорной струёй ссать в мытищинских подъездах. Но я его прячу в звёздно-полосатых трусах, так что не понимаю, как ты меня вычислил??
>>1711071 https://ru.wikipedia.org/wiki/Baikal-T1 >Baikal-T1 — процессор семейства Baikal, созданный российской фаблесс компанией Baikal Electronics с использованием двух 32-битных процессорных ядер P5600 архитектуры MIPS32 Release 5 от компании Imagination Technologies[1]. https://en.wikipedia.org/wiki/Imagination_Technologies >Imagination Technologies Group plc is a global semiconductor and software design company, owned by the Chinese Canyon Bridge Capital Partners. With its global headquarters in Hertfordshire, in the United Kingdom its primary business is in the design of PowerVR mobile graphics processors (GPUs), networking routers (based on MIPS CPUs),[3] and its Pure consumer electronics division. Это, блядь, очевидно НЕ БУРЖУЙСКАЯ ПОДЕЛКА.
Кстати поясните нахуя МЦСТ свой ёбаный путь, когда, например, VIA делает процы на x86-x64? В чём суть?
>>1710975 Пять стадий: 1) Физлицам не продаем. 2) Нет компилятора. 3) Компилятор есть, но забагованный. 4) А документацию мы вам все равно не дадим. 5) Ебись оно конем.
>>1711119 >Кстати поясните нахуя МЦСТ свой ёбаный путь Потому что делать что-то толковое задача не стояла с самого начала - у МЦСТ уже были свои наработки, и кого волнует, что они говно. Они в этом не одиноки, между прочим - IBM уже ГОДЫ не может найти лохов, которые возьмутся оптимизировать всякую ебанину типа NumPy и FFMpeg под SIMD их POWER8.
>>1711119 >Кстати поясните нахуя МЦСТ свой ёбаный путь, когда, например, VIA делает процы на x86-x64? В чём суть? Вроде как в качестве отмазки говорили что-то про сертифицирование процессоров для нужд гос. структур. Для иностранных процов это дорого. Своё вроде-как дешевле.
>>1711126 >>1711128 >>1711130 Ну так подождите, пусть они хоть нормально развернутся. Я считаю это успех, после либирашьего пануванья Ельцина и Горбачева.
>>1711136 Весь IBM POWER держался на вывертах политики лицензирования Oracle с оплатой по числу процессорных сокетов. Пока можно было напихать больше всех ядер в один проц - всё у них было збс, сейчас x86 их по этому показателю обгоняет и малина накрылась. Такшта ничего толкового сейчас в этой архитектуре нет.
>>1711119 >Кстати поясните нахуя МЦСТ свой ёбаный путь, когда, например, VIA делает процы на x86-x64? В чём суть? Потому что хуй86 это легаси говно на легаси говне, и все ради того, чтобы запускать шиндошс. Выпускать RISC процессор на купленной архитектуре нормальное решение
>>1711177 А блядь, про МЦСТ вопрос, я думал про байкал. У МЦСТ свой путь из-за Бабаяна, он обещал дать всем посасать и перегнать всех со своим эльбрусом, а дальше как обычно это превратилось в эпический долгострой. При этом МЦСТ это московский центр спарк технологий, то есть еще одна лиценизуемая хуитка, SPARC
>>1711177 Большая часть этого легаси - заморочки с кодированием инструкций и полей в специальных регистрах. Никого за пределами разработчиков ОС и компиляторов это не касается. В Интел сидят толковые разработчики - в 90-х было полно ебаной дичи типа load delay slot-ов и нерабочего register scoreboarding-а, но они такого не допускали.
>>1711183 Я вот сейчас листаю патенты Babaian-а 20-летней давности, и оказывается, что современный Эльбрус на них и основан. Вот только дать посасать он может только Малинке предыдущих поколений, вот незадача. И да, я Спарк перепутал с Альфой, извините.
>>1711189 >Никого за пределами разработчиков ОС и компиляторов это не касается. А это ты зря. Выкрутасы с декодерами касались всех, кто хотел холодный и экономичный компутер. Говенный x87 касался всех, кому нужна была производительность с ПТ. Ну и т.д.
>>1711207 Если посмотришь на другие архитектуры, почти у всех инструкции фиксированной ширины 4 байта, в то время как у x86 75% инструкций в 2-3 байта (данные от 2011 года). Когда 4КБ кэш инструкций считался большим, это был крутой выигрыш. С декодированием инструкций в середине 90х всё было збс, были процы Cyrix, которые делали это без микрокода, иногда быстрее самих Интелов. Вот x87 был неудачным решением - его, походу, с калькулятора срисовали.
>>1711220 Да, у x86 компактный код, и это хорошо для кэша. Да, декодеры ели большинство команд x86 без выборки микрокода. Но, чтобы декодировать x86 в темпе 1-3 команды на такт, декодеры приходилось делать очень сложными, отсюда расход энергии.
>>1711231 Знаешь, ты, наверное, прав - на фото выделен декодер на 4insn/cycle, чтобы выполнять 20, как сейчас, он, наверное, должен разожраться, как свинья. Ещё я бы отметил миллипиздрическое число регистров: если в 80-х это было оправдано - у ARM2 весь АЛУ выглядел, как насадка на блок регистров, то сейчас это явная лажа. А вот было ли это причиной фэйла Атомов для мобил я даже гадать не буду, знаний не хватает :(
>>1711140 Вот зачем соль на рану сыпешь? Я всеми силами пытаюсь отвлечься от токсичных мыслей про эту клоунскую систему. Мне, блядь, повестке в этой ебучей Украине пришла. А я ебал терять работу.