Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.Пожалуйста, пользуйтесь https://ideone.com/ или http://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [i] или ∗.Что читать:- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)- man/Dash/zealdocsЧем конпелировать:- Очевидный GCC.- clang: оче годно, батя рекомендует.- Intel C++ Compiler: оптимизации, тысячи их.- Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.Что еще почитать:http://c-faq.com/FAQ из comp.lang.c. Древний, но все еще актуален.Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.Ben Klemens "21st Century C: C Tips from the New School" (2012)Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+StandardЕще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_CОнлайн-утилиты:- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.Прошлые треды:- №34: https://arhivach.tk/thread/398890/- №35: https://arhivach.tk/thread/398891/- №36: https://arhivach.tk/thread/407257/
Пацаны, я тут сделал сортировщик массива любого размера с ненулевым элементами. Злой дядя Хусаинов Н.Ш. из ИКТиБ ЮФУ в этой задачке прям расщедрился и разрешил использовать всё, но только в пределах stdio.h. Моё эго жаждет чужого мнения по поводу моего кода. Как он тебе? Говнокод или нет? Что можно изменить в рамках stdio.h, чтобы сделать его неговнокодом? Чем мой алгоритм хуже стандартных, если он вообще хуже?
>>1317959ктбо-?на самом деле лютый говнокод с хуевым стилем оформления, посмотри лекции по алгоритмам сортировки и ознакомся с конвенциями написания кода
>>1317961Положено писать на US English, если ты норм чел, который увОжает гайды. А не макака из Говногермашки или Китая, которые ебашут переменные на своих нахрюках.
>>1317961>И чё?То, что переменные в идеале должны быть self-documenting, т.е. чтобы из названия можно было понять, что это за херь. Иначе как ты фрилансить-то собираешься? Чё за параша твой massiv?! Какой-нибудь myArray - это будущему заказчику понятно, а massiv - это что за поебень такая?
>>1317913 (OP)Эй, ананасы, кто там в прошлом треде за 8-битную разработку на Си и за компиляторы спрашивал? Помимо классического HiSoft C гляньте современный z88dk (z88dk.org) Алсо, рекомендую 8bitworkshop.com Там жаль, что не оффлайновая IDE-шечка и толковые книжки которые автор предлагает купить, но всё давно уже спижжено и в сети валяется.
>>1317959Это полный пиздец, а не говнокод, такое только школьник или тупой студент в состоянии написать.
>>1317913 (OP)Как по-человечески установить mingw-64 и SDL на виндовс?Вроде бы всё по гайду делаю, а зависимости не хочет подключать.
>>1318484Не инициализируется большая часть переменных, неочевидные имена, скобки с переносом строки (можешь погуглить пособие от гугла что ли, где они писали про правила хорошего тона в коде), нет разбиения на функции.ну и сам код мне было впадлу читать. учил в этом семаке в вузике на не очень прогерском факе, мог спокойно проебать что-то важное
>>1318507https://google.github.io/styleguide/cppguide.html#ScopingМогу поклясться, что где-то в этом гайде видел мошну на скобки с переносом строки.
>>1318511На мой взгляд тоже, но мне оба варианта глаза не режут, поэтому перешел на скобки без переноса.
>>1318484Через пару месяцев пересмотри его код, если ничего не изменится в твоём мнении, то бросай обучение.
>>1318484>Что с его кодом не так? С виду все нормально.Все просто ужасно, абсолютно все. На ошибки я тебе указывать не буду.Смотри свод правил в конце "C: Elements of style". Попробуй найти хоть одно, которое ты соблюдаешь.>мимо только на днях дошел до функций.Ну так иди и учи дальше. Пока что ты ничего не умеешь.Другой анон
>>1318507Ну в некоторых языках чаще встречаются скобки без переноса, но в си, да, вообще-то с переносом предпочтительнее
>>1318505А разве фигурные скобки не надо переносить? Так они визуально показывают блок кода.>>1318513>>1318514Я не учусь на программиста и не работаю им. Мне просто бывает скучно и я читаю Кернигана. Иногда делаю сам для себя задачи, которые мне интересно на телефоне. Вот, например, из недавнего сделал программу которая вычисляет шанс что из 1-5 кубиков выпадет хотя бы на одном 5 или 1 (для игры в тысячу считал):https://pastebin.com/M9bE5BUGНасколько говнокод, если я к тому моменту даже до функций не дошел? Думаю учиться делать нормально лучше с начала обучения. На телефоне форматировать текст неудобно, но я старался.
Важно ли, где в объявлении указателя звёздочка?В пpимеpах вижу int p, но мне кажется, что int p как-то лучше выглядит, ничего не смущает.
>>1318618Дело вкуса, в Винде обычно ставят звезду у типа, на Линукс у названия переменной, на макоси вообще между, то есть тип пробел звезда пробел название переменной.я сейчас про ядро говорюВообще единственный аргумент есть в пользу линукса такой, что:int #p, k, если ты пишешь вот так, то у тебя p это указатель, а k int, поэтому так типо более читаемо и согласуется с тем как компилятор разбирает код на морфемы.Например:int# p, kТут неподготовленный читательчитай новичок может подумать, что и p и k указатели, что конечно же не так.Для компилятора без разницы как ты ставишь звёздочки, это нужно для человека, которые йбудет читать твой код.# это звездочка
>>1317959В том, в чём ты, блядь, пишешь - это полный отстой.Быстро переходи на emacs, и люби самого себя.emacs-goddess
>>1318696Например?Профиль на гитхабе скинешь?или корпоративный софт онли, который на внутренних гитлабах всяких крутится?
>>1318744>Насколько говнокодНа 5 балов.(c==1) || (c==5) || (d==1) || (d==5) || (e==1) || (e==5)i=e=sumx2=sumx3=sumx4=sumx5=total=0;это пиздец
>>1318765А что с ним? Я выше прочитал что перед +-= и так далее надо пробелы ставить. А больше не вижу косяков. Ну а про короткие имена переменных я в курсе, они такие потому что я на мобиле пишу, заебусь длинные имена писать раньше чем что-то рабочее сделаю.
>>1318768Ну скобки нинужны, смотри приоритет операции, паровозное обнулении тоже дико смотрится и чет дохуя у тебя переменных
>>1318605> 1-5 кубиков выпадет хотя бы на одном 5 или 1А расскажи, что делает этот страшный код? Почему это не pow(2.0 / 6, 5)?
>>1318770У меня как-то давно без скобок низуя не хотело работать и я с тех пор каждое выражение с && или || ебеню в скобки. Учту, что можно и без них.А как без обнуления то? Иначе у переменных будут же рандомные значения, нет?Так переменных дохуя потому что дохуя значений хранить надо:- 5 разных кубиков- количество нужных комбинаций и общее количество комбинаций для 2, 3, 4 и 5 кубиков.
>>1318775>Так переменных дохуя потому что дохуя значений хранить надо:И кокое значение хранит i? Крч, гугли теорвер у тебя проеб с алгоритмом, но для говнокода сойдет, можно отправлять на govnokod.ru
>>1318772>А расскажи, что делает этот страшный код?Я захотел узнать какой шанс что у тебя из 5(/4/3/2) кубиков хотя бы на одном выпадет 1 или 5. Ебаться с теорией вероятности я не хотел и поэтому написал программу.>Почему это не pow(2.0 / 6, 5)?потому что я еще не знаю что это такое.>>1318777>И кокое значение хранит i?Это счетчик, очевидно же. >гугли теорвер у тебя проеб с алгоритмомСхуяли? У меня правильно посчитаны все вероятности, но ты можешь попробовать доказать что это не так.
>>1318790>а ты смешнойА что не так я сказал?>лолЧто не так, покажи косяк? Все верно у меня посчитано.
>>1318605>Я не учусь на программиста и не работаю им. Мне просто бывает скучно и я читаю Кернигана. Иногда делаю сам для себя задачи, которые мне интересно на телефоне.Тогда тебе не стоит писать на Си. Он достаточно сложный и заточен под низкоуровневую работу, а кодить нормально ты еще не умеешь. Сейчас лучше попробуй писать на питоне. Иначе читай SICP, начинай Кернигана с самого начала и прорешивай все подаваемые задачи.>Вот, например, из недавнего сделал программу которая вычисляет шанс что из 1-5 кубиков выпадет хотя бы на одном 5 или 1 (для игры в тысячу считал):>https://pastebin.com/M9bE5BUGНу это хрень полная, ответ и без теорвера очевиден: 1 - (2/3)^5.>Насколько говнокод, если я к тому моменту даже до функций не дошел?До говнокода еще далеко (честно).
INT SYSTEM (CHAR *PARAMETER);В этом итт господарьске треде попрошу рассказать C-бояр как работает функция system() и можно ли ее организовать своими силами в языке C. И если можно, то как? Хотя бы на приблизительном уровнeОтдельно попрошу об отсылании к сорцам компиляторов не отсылать, ибо там хуй разберёшься
>>1318971Glibc source:https://code.woboq.org/userspace/glibc/sysdeps/posix/system.c.htmlСекция с sigaction n11) sigprocmask SIGCHLD -> SIG_BLOCK2) fork, restore signals, execve SHELL_PATH с новым argvСекция с siagction n2lock'и расставлены так, чтобы "подпроцессы" лишний раз не использовали sigaction на SIGIGN и SIGQUIT.В этом всем нужно разбираться если хочешь написать полноценный аналог библиотечного system.Если нет времени/лень то просто посмотри вызовы fork, execve в linux man. Там же отрывок про argv в execve.
>>1319022ПродолжениеМожешь взять strace и подглядеть строчку с execve (подглядывать нужно за ребенком-шеллом).
Объясните, почему во втоpой стpоке вывода: "strcat is helloworldworld, strlen of result: 10"почему пpибавился ещё один world?
>>1319065Удивительно, что она вообше что-то вменяемое выдает. Вроде бы у тебя тут выход за пределы массива
>>1319072Но если поменять местами world и hello, то массив наложится на другой. Короче, не делайте так, ребята
>>1319087Да я тупой, все просто:strcat() стирает '\0', а strlen() читает до первого '\0' в следущем массиве
>>1319065Порядок вычисления аргументов функции в Си неопределен. В printf аргументы часто передаются задом наперед, как в функции с неопределенным числом параметров. Сначала вычисляется первый strcat, потом strlen (10), потом еще один strcat.Можно пустые квадратные скобки оставить, размер под строчку сам подберется.strcat к тому же месту в памяти приклеивает еще одну строку (strlen + strcpy), а массивы столько не вмещают, делай их больше или используй динамическую память. Переполнениями массивов ты гарантированно испортил что-то, что лежит на стеке рядом с твоими строками. Попробуй использовать свой strcat раз 5-6 и из твоего main уже не получится сделать return :).
>>1318892> Тогда тебе не стоит писать на СиА, быть может, как раз таки стоит. Зачем ориентироваться на современные технологии, если не стоит цель заработка? Почему бы не позволить себе окунуться в ламповое технарьское хобби по труъ-шному? Для общего развития даже полезнее. Если никуда не рваться, то сишечка и асм очень даже по кайфу, ведь ты реально в чем-то прошариваешься.
>>1318892>>1319246Тут кодеры старой школы тоскуют по счастливой юности и сишечке, вынуждены перекатываться. У человека же нет никакой нужды в этом плане, а вы так вот отговариваете.
>>1319246Да, всё правильно. Вот только у тебя сейчас не очень кодить получается, даже без привязки к какому-то языку. Я советую тебе сначала почитать какую-то теорию наподобие SICP или что-нибудь подобное.
>>1319274Это писал не я собственно, но я с тем аноном согласен.>Вот только у тебя сейчас не очень кодить получаетсяЭто почему? Потому что какому-то стилю оформления не придерживаюсь?
>>1319247>У человека же нет никакой нужды в этом плане, а вы так вот отговариваете.Я не отговаривал, а предложил сначала просто в программировании немного освоиться.>Тут кодеры старой школы тоскуют по счастливой юности и сишечке, вынуждены перекатываться.Я юн перекатываться не вынужден.
>>1319278Я наверно неправильно выразился, у тебя здесь просто o(n^2) сортировка, может быть она и рабочая, но сам код перепутанный и ужасный. Книжки типа SICP учат элегантному программированию, а не таким макаронам.
>>1319280Макароны как я понимаю это когда код скажет туда-сюда всякими goto и подобным. У меня же такого нет, все по порядку идет. А вообще сперва надо хотя бы Кернигана прочитать целиком, а уже потом всякие SICP читать, не? А то я пробовал читать правила оформления и про половину вещей просто не ебу что это такое в принципе.
>>1317959Я, конечно, ни разу не претендую на хороший стиль и прочее, но вот тебе сортировка по убыванию, все в пределах stdio.h. Вроде читабельно.
>>1319276> сначала просто в программировании немного освоитьсяНе могу знать, стоит или не стоит начинать с Си, педагогом не являюсь, а на собственном опыте подобные успехи не пришлись, сам сокровище K&R для себя открыл уже не девстенником в программизме. Тем не менее, ИМХО, советовать Python таки подстава. Тогда уж лучше "Accelerated C++" от Koenig и Moo, или Страструпа "Programming Principles and Practices using C++", вроде как годнота для вкатывальщиков. Но, в принципе, если анон мозговит, и K&R с кое-каким скрипом заходит, то можно и обойтись.
>>1319294>Тогда уж лучше "Accelerated C++" от Koenig и Moo, или Страструпа "Programming Principles and Practices using C++", вроде как годнота для вкатывальщиков.Еще лекции по Си от Праты.>Но, в принципе, если анон мозговит, и K&R с кое-каким скрипом заходит, то можно и обойтись.Про вероятности и кубики был код, анону явно нужно что-то до K&R.
За всю жизнь не прочитал до конца ни одной книжки ни по одному языку программирования (это для меня слишком долго и скучно). Задачки из книжек, естественно, тоже не решал. Сколько себя помню, всегда просто садился и ебошил код сразу, стараясь сделать то, что нужно, и пользуясь только гуглом, документацией по всяким разным API и стандартом или официальным описанием языка. Иногда еще читал найденные в гугле отдельные статейки или посты, посвященные тому или иному вопросу. В общем, это я к тому, что вообще без разницы, что вы там и в каком порядке читаете. Можете вообще книг не читать, вместо этого просто иногда заглядывая в нужные их разделы. Главное же это просто программировать побольше, и всегда стремиться к написанию как можно более красивого и эффективного кода. На чем вы пишете и с чего начинаете обучаться тоже не имеет большого значения. Я вот с ассемблеров вообще начинал, и мне норм, а вы тут от такой высокоуровневой и комфортной сишки людей отговариваете. Зачем?
Сап, котаны.Может не совсем тематика, но вы уж не пинайте.Есть железяка ESP8266, кодится в Eclipse через MinGW + Espressif-ESP8266-DevKit-v2.0.9-x86.Хочу подцепить к ней SD карту памяти по SPI, СИ-шная библиотека была бы очень полезна, но она не гуглится.Хотя гугол пестрит библиотеками для ардуинки.Куда копать?
При реализации стека на односвязном списке адреса указателей на каждый узел будут отличаться на фиксированную длину, или память может быть фрагментирована и между адресами будут разные промежутки? Почему-то между первым и вторым узлом довольно большой промежуток в 428 байт, а между 2-3 3-4 14 байт. Каждый узел это структура с 3 int переменными и указателем типа структуры на следующую.Я не очень представляю эту виртуальную адресацию.
>>1319823тут вопрос сводится уже не к твоей конкретной структуре данных, а откуда маллок память берет, выделяешь память ты в разное время, поэтому врядли 2 узла обязаны рядом находиться в памяти
>>1319831Разве malloc не из кучи выделяет память? И выделение памяти идет подряд для четырех узлов одно за другим.
>>1319838ты можешь выделить 2 узла подряд, тогда да, должны быть подряд, потом например для другой дресни выделить, а потом опять со стеком хуярить, в итоге у тебя потеряется шаг тот.
>>1319841Подряд все идет. Что интересно, до выделения памяти я поместил принтф хеллоуворлд и теперь абсолютно все адреса отличаются ровно на 20 байт.У препода в примере просто между всеми узлами равное число, вот и я ищу объяснение моему результату. Когда я компилирую его код, то промежуток неравный тоже появляется и адреса ровно те же, что у меня.Это зависит от системы/процессора/среды разработки?
>>1319859#define WORD struct word_type#include<stdio.h>#include<stdlib.h>WORD{ int TAG; int SUIT; int RANK; WORD NEXT; };void main(){ int N; WORD TOP, / указатель на верхний элемент стека / NEWCARD, / указатель на новый элемент стека / X; / указатель на текущий элемент стека / TOP=NULL; NEWCARD=(WORD )malloc(sizeof(WORD)); printf("NEWCARD=%p\n",NEWCARD); /A1/ NEWCARD->NEXT=TOP; /A2/ TOP=NEWCARD; /A3/ TOP->TAG=1; TOP->SUIT=1; TOP->RANK=10; NEWCARD=(WORD )malloc(sizeof(WORD)); printf("NEWCARD=%p\n",NEWCARD); /A1/ NEWCARD->NEXT=TOP; /A2/ TOP=NEWCARD; /A3/ TOP->TAG=0; TOP->SUIT=4; TOP->RANK=3; NEWCARD=(WORD )malloc(sizeof(WORD)); printf("NEWCARD=%p\n",NEWCARD); /A1/ NEWCARD->NEXT=TOP; /A2/ TOP=NEWCARD; /A3*/ TOP->TAG=0; TOP->SUIT=2; TOP->RANK=2; printf("TAG(TOP)=%d\n",TOP->TAG); printf("SUIT(TOP)=%d\n",TOP->SUIT); printf("RANK(NEXT(TOP))=%d\n",TOP->NEXT->RANK); B1: N=0; X=TOP; B2: if(X==NULL) goto end; B3: N++; X=X->NEXT; goto B2; end: printf("N=%d\n",N); getchar();}Скомпилируй, если не трудно, и запость результат вывода. У меня после первого узла большой промежуток.
>>1319895Я скомпилил в двух средах, разница одинаковая 1AC(428 байт) после первого узла, остальные по 20.
>>1319904Нашел на вики>соседние элементы списка могут быть распределены в памяти нелокально, что снизит эффективность кэширования данных в процессореhttps://ru.wikipedia.org/wiki/Связный_списокПо-моему, это как раз мой случай.
Помню, как какой-то анон говорил сравнить качество кода стандартных утилит linux и openbsd. Говорил, что разработчики openbsd пишут более грамотный код. Книжка ещё какую-то соаетовал по безопасному программированию на C. Реквестирую, если кто знает.
>>1320165https://git.savannah.gnu.org/cgit/coreutils.git/plain/src/true.chttp://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/usr.bin/true/true.c?rev=1.1
Как создать не заполненный символьный массив, который можно заполнить текстом через консоль? С числовыми массивами работать научился, а с символьными ни в какую не получается. Там надо сначала всем ячейкам присвоить \0?
>>1321043А, ну хоть gets_s есть. Он принимает указатель на начало строки и максимальный размер этой самой строки чтобы не случился гроб гроб SIGSEGV. Так что аргументом припиши к нему 255.
>>1321047>Так что аргументом припиши к нему 255Я не совсем понял что это значит. 255 вместо 0 или вместо 256?Вот я попытался со scanf_s, открывается консоль, пишу что угодно и консоль закрывается без всякого ответа и вылезают ошибки.
>>1321362Где бы я не читал, везде противопоказывается использовать gets. Как сделать то же самое со scanf?
>>1321576Нашёл char fgets(char str, int n, FILE* stream); но так и не понял синтаксиса. У меня работает с gets_s, какие могут быть подводные?
>>1321644Почему fgets без потока stdin не работает? Как определить для себя, в каких случаях для работы команды просто нужно дописать поток в аргументы?
>>1321837Но почему в моём случае без потока fgets не работает? Есть ли случаи, когда fgets поток не нужен?
>>1321859Нет, поскольку он работает именно с потоками. Все, что ты вводишь в консольном окне попадает в поток stdin.
>>1321859fgets - функция.У этой функции 3 параметра.Тебе всегда нужно передавать ей 3 параметра.>Но почему в моём случае без потока fgets не работает? Есть ли случаи, когда fgets поток не нужен?Странный вопрос.fgets — get a string from a streamТебе нужно явно указать поток, с которого эта функция прочитает твою строчку. Ввод с терминала - stdin.
>>1321881> Ввод с терминала - stdinstdin - это стрим, под которым лежит дескриптор STDIN_FILENO, то есть 0, и терминал там совершенно не обязательно. Ввод из терминала - это fdopen (open ("/dev/tty", O_RDONLY), "r");
>>1321859забракованная gets лаконично берет один аргумент - указатель на буфер, и читает в него из stdin до первого \n, без проверки переполнения. Если лень писатьfgets (buf, sizeof (buf), stdin)можно написать макрос#define gets_(buf) fgets (buf, sizeof (buf), stdin)но если buf - не имя локального или static массива, а просто указатель, то препроцессор подставит константу 4 или 8, в зависимости от архитектуры
>>1321888Да, как угодно определяй дескрипторы и exec'ай бинарник? Я это прекрасно знаю. Ты иди объяснять это анону, который про обязательность 3его параметра fgets спрашивает.
>>1321957Ну, если забыть #include <stdio.h>, то компилятор с warning-ом проглотит вызов fgets с двумя параметрами, и что лежало в регистре RDX, то и станет индексом дескриптора)
Почему, собственно, советуют начать изучение программирования с С.Цитата из K&R:Вы обнаружите, что многие существующие программы являются просто расширенными версиями обсуждаемых здесь прототипов.Точнее и не скажешь, лол.
>>1322320>>1322420Вы долбоёб, уважаемый.Очевидно, что имеется ввиду while (#fin++ = #init++);вместоwhile (#init++ = #fin++);Поменять init и finместами и все работает.Литералы блядь, память...Известнейший пример для копирования строк.Эксперты ебать.
>>1322575На какое место в памяти указывает fin в момент первой итерации? Куда будут записаны копии символов? Почему поинтеру на чар присваивают значение поинтера на конст чар?
>>1322600Вот будете смеяться, а я осилил только Си, и очень маленько ассемблеры x86 и avr. Даже Питон не могу освоить.
Анон, помоги! Программа должна выводить 1, введённый символ включается в строку, и 0, если не включается. На вложенный цикл особо не бухти, это задел для проверки на включение строки в другую строку.
>>1322287Ты в массив констант(через неконстантный указатель)(это UB),копируешь байты из невыделенной тебе памяти(UB). Вроде так.
>>1322783>>1322785Вероятно '\0' == '\0'Тебе нужно бежать не по всему размеру массива, а по длине строки, вероятнее всего.
>>1322783Во первых после совпадения надо выйти из двух циклов.Во вторых циклы у тебя выходят за концы введённых строки случайно в мусоре попадаются одинаковы чары. Должно бытькак-то так: #define MaxLen 256 char sa[MaxLen], sb[MaxLen]; int a; gets(sa); gets(sb); for(int i=0; i<strlen(sa); i++) for(int j=0; j<strlen(sb); j++) if(sa==sb[j]) { a=1; goto BREAK; } else a=0; BREAK: printf("\n%d",a);
Почему???Число показывает, что все символы второй строки включаются во вторую беспрерывно. Иначе 0. Почему здесь вот так?
>>1322943А, всё, я понял. Но теперь всплыла другая проблема. Почему i-- в else так влияет на результат при том, что else здесь явно не должен вообще включаться? Как тогда уменьшать счётчик i при ложном ответе if?
>>1322971>>1322971А что ты там хочешь? Равенство строк проверить что ли? На развлекайся:char s1 = "abc";char s2 = "cde";int l1= strlen(s1);int l2= strlen(s2);int equal= 0;while(s1 && s2 && s1++ == s2++) equal++;s1-=l1;s2-=l2;printf( "\nequal= %d, %s", equal, ((equal==l1) && (equal==l2))? "PABHbI" : "HEPABHbI" );
>>1322991Э-э, звёзы пропали.char(ЗВЕЗД) s1="abc";char(ЗВЕЗД) s2="abc";while((ЗВЕЗД)s1 && (ЗВЕЗД)s2 && (ЗВЕЗД)s1++ == (ЗВЕЗД)s2++) equal++;
>>1322971>>1322971А, ты проверяешь вхождение второй строки в первую, тогда попробуй так: char s1 = "b abcd abcd e"; char s2 = "abc"; int l1= strlen(s1); int l2= strlen(s2); int equal= 0; int posicion= 0; for(int i=0; i<l2; i++) for(int j=0; j<l1; j++) if(s2==s1[j]) { equal++; i++; if(equal==l2) goto BREAK; } else equal=0; BREAK: printf( "\n%s", equal==l2? "BXODNT" : "HEBXODNT" );
У меня в объявлении структуры, ссылка на другую ещё не объявленную структуру.Как объявить прототип второй структуры? Ну, у функции это так -- func(int); .
>>1322991по идее, в условие задачи входит не использование строчных функций из стандартной библиотеки (#include <string.h>), в т.ч. strlen...
>>1323236Яростно плюсую. Паттернодрочерам в великих и могучих Сях не место. При желании, несамодокумментированный гавнокод можно и написать и с соблюдением всех rule-of-thumb и прочих недоконвенций.
>>1323404тогда for(int len=0; s1!='\0'; len++); //извлекаешь len после цикла в другую переменную, чтобы вторую строку прогнать
>>1323411int strequal (char #s1, char #s2) { while (#s1 && #s2 && #s1++ == #s2++); return #s1 == #s2;}зачем вообще len?
>>1323366> ссылка на другую ещё не объявленную структуруstruct foo { struct bar ∗barptr; }// и когда-то потом:struct bar { ... };Или с тайпдефами:typedef struct bar bar;typedef struct {bar ∗barptr;} foo;// и когда-то потом:struct bar { ... };Incomplete-структуры это норм, бояться их не нужно, используются очень часто.>>1323460А еще можно выкинуть еще ∗s2 из условия, его неплохо == поймает. А потом осознать, что коротко - это не всегда красиво.
>>1323464> его неплохо == поймаетТаки да. Ну, а краткость вполне оправдана, если функция используется чаще, чем переписывается, особенно когда это в разы ускоряет работу алгоритма. Однако, это меня не больше всего волнует... ТЫ КАК ЗВЕЗДОЧКУ ПОСТАВИЛ, ДЕМОН?
>>1323470> ТЫ КАК ЗВЕЗДОЧКУ ПОСТАВИЛ, ДЕМОН?Звездочка из шапки, она нестандартная, компилятор поперхнется. Иногда тут еще ★ вот такую используют.
Так, аноны. Я уже 2 час голову ломаю над задачей, так что прошу помощи.В общем, нужно сформировать двумерный массив самым простым способом.1234551234451233451223451
>>1323519for (x=0;x<25;x++)array[x]=((x+5-i/5)%5)+1или длиннее:for(x=0;x<5;x++)for(y=0;y<5;y++)array[y][x]=((x+5-y)%5)+1;
>>1323603ну так иди читать как разные буковки, как представляются в кудахтере, почитай там про тип char, про ASCII, про юникод, хоть что-нибудь.
>>1323599Ты strq не обнулил, там мусор (точнее, у тебя отладочный билд, и студия для упрощения отладки вот такой хуйни забила стек байтами CC, это -52, да еще ты 1 прибавил). Алсо, не сравнивай символы с NULL. NULL - это нулевой указатель, и только указатель, а не нулевой символ в конце строки. Пиши либо просто for (int i = 0; stra[i]; i++) ... либо сравнивай с нулем: stra[i] == 0, либо с нулевым символом, если хочешь сделать на этом акцент: stra[i] == '\0'.
Эй, мамкины эстеты! Помогите мне определиться со стилем.Как лучше, так первая картинка или так вторая картинка?
>>1323819Это настолько ужасно, что выбирать тут не из чего. Когда продвинешься чуть дальше, уже будешь думуть про стиль. Но в целом, несколько выражений на одной строке (вот эти твои if ... for ... printf, да ещё и с фигрными скобками) - это 100% говнокод. Разве что иногда можно задуматься о if (expr) do_smth(); (просто выражение, нет фигурных скобок!), но даже это лучше писать на двух строках.
Я хз, как это гуглить, хелп.Проблема в том, что char* string, которую я передаю функции words_in_string, не пустая, но происходит такое колдунство. Кстати, адрес не меняется. Что я не понимаю?
>>1324660Выкладывай полный исходник или бинарь. Или довольствуйся пояснением, что либо ты портишь стек еще до вызова функции, либо у отладчика сносит крышу по причине билда с оптимизациями или еще чего-то подобного. Пробовал до 171 строке на втором скрине доходить? Ничего не меняется?
>>1323924Всё, что относится только к ответу "истина" от if лучше писать в одной строке, и относящееся к ответу "ложь" на последующей от if строке в одной строке. Также одна операция — одна строка, например: в 11 и 12 строках у меня ищутся размер введённых пользователем строк в двух массивах, найти размер 1-ой строки — первое действие, найти размер 2-ой строки — второе действие, по своей строке на каждое действие.
>>1324735Ага, начнёшь писать что-то серьёзное или может даже на работу устроишься, тогда научишься хорошему код-стайлуили нет.
Как сделать так, чтобы после отработки цикла с printf внутри другого цикла printf делал вывод ниже предыдущего вывода, а не в одну строку?
>>1324783Надо же, сработало. Как называются такие хреновины? По каким ключевым словам искать? Как называются и для чего нужны хрени, которые можно ставить, а можно и не ставить между % и типом переменной в scanf и printf?
>>1324786>Как называются такие хреновиныescape symbols>Как называются и для чего нужны хрени, которые можно ставить, а можно и не ставить между % и типом переменной в scanf и printf? format strings> И как заставить rand() каждый раз выводить разные числа? srand(time(NULL))
>>1324795Нет. Управляющие символы не видны, в \t вполне виден, это escape symbol, который превратится в соответствующий control где-то во время компиляции.
>>1324799\t в этой статье под заголовком "Управляющие символы".https://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B8%D0%B5_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D1%8B
>>1324823Они используют escape sequence вместо escape symbol, что правильно, так как escape symbol это сам бэкслеш. Похуй.Я делал акцент на том, что \t и символ с ASCII-кодом 09 - разные вещи. Это не \t заставляет терминал печатать табуляцию, а символ с кодом 09, который сам по себе не виден.
>>1325007>У Си вообще есть документация?Описание стандарта C11, например.>Там есть про системные вызовы? Системные вызовы привязаны к самой ОС. Для linux есть manpages и утилита man, там подробно задокументированы вызовы (man 2 write, например) и сам язык.
За что я могу взяться?Недавно вызубрил синтаксис си, пару стд биболиотек.Может тут кому-то нужна помошь с проэктом?Готов гитануть ваш проэкт и покапаться в нем
>>1325673>>1325679ATOMIC_VAR_INIT отменили, и теперь можно инициализировать переменные atomic-типов нормальным способом. Вполне можно считать за новшество.
Подскажите библиотеку для работы с бинарными деревьями, желательно с примерами. Нужно делать поиск по большому количеству хешей, предварительно построив из них дерево
>>1325803а зачем тебе деревьями эту задачу решать? требуется усредненное время как на вставку так и на поиск что ли?
>>1325656>Недавно вызубрил синтаксис си, пару стд биболиотек.>За что я могу взяться?Пока только за SICP, очевидно же.
>>1326007Есть понятие concurrency, - конкурентный код. Я понимаю, что Си может юзать процессы и потоки ОС. Но кроме того на нем можно писать конкуретный код?
>>1325656Что угодно, пиши плеер/фм/игру/небо/аллаха. Да хоть построй велосипед и изобрести заново какие нибудь функции из стандартной библиотеки.
>>1326181SICP не про синтаксис>>1326132>, а про то, как правильно писать программы.Еще бы любую книжку по алгоритмам и лекции Праты.
>>1326097Тебе корутины нужны. Это реализуется на setjmp, как тебе уже сказали. В винде оно есть готовое прямо в API в виде фиберов. Алсо: https://en.wikipedia.org/wiki/Coroutine#Implementations_for_C
>>1326181>Как можно научиться правильному синтаксису на примере другого языкА? Как можно узнав синтаксис стать программистом? Как можно выучив как ходят шахматы стать шахматистом? Как можно выучив цифры стать математиком?Систаксис задает только правила написания букв. Суть программирования в смысле этих букв, а не правилах их написания. Программирование не про языки, а про вычисления, алгоритмы, логику, архитектуру. Язык только инструмент.
>>1325873Есть большое количество хешей, выгрузка из кеша (несколько гигабайт), выгрузка обновляется не чаще чем раз в сутки. Нужно в реалтайме сравнивать хеши из кеша на совпадение с вновь генерируемыми хешами, которые потоком в очереди приходят, делать это нужно максимально быстро
>>1325873>а зачем тебе деревьями эту задачу решать? самый быстрый алгоритм, который пришел ко мне в голову, для решения моей задачи
>>1326398Я имел ввиду libuv, libevent, etc. Они для чего используются? Их вообще юзают для написания программ, или только для рантаймов?
>>1326409не проще ли взять субд под эту задачу? заведешь табличку, будешь туда складывать что тебе надо и доставатьвариантов масса, от классики до неряционки
>>1326433это всего лишь библиотеки дающие более удобную работу с асинхронкой, что предоставляется целевыми осдополнительный плюс, что благодаря им обеспечивается кроссплатформенностьасинхронка же в 90% случаев, наверное, используется для одной задачи - написания серверов что пережевывают сетевые пакеты какого-нибудь протокола
>>1326456>не проще ли взять субд под эту задачу?проще, но мне надо не проще, а максимально быстро. У субд в любом случае еще будет накладные расходы, хотябы на парсинг запроса
>>1326456еслиб мне надо было проще, яб вообще бы, не на Си все это писал, а например на томже PHP+redis|mongo за пару часов накаталбы уже давно
>>1317913 (OP)Сисюны, джва вопроса.1. Всегда ли в inline __attribute__((always_inline)) нудно определять тело или можно разнести на прототип в хедер и реализацию в другой файл?2. Такое выдает варнинги, не нравится тип: static const unsigned char charmap[] = { '0x00', '0x01', '0x02', '0x03', .... а такое нет: static const unsigned char charmap[] = { '\000', '\001', '\002', '\003', .... чому, что за сорт октала и чем он лучше хекса?
Почему появляется хуита снизу от того места, где должен был сработать fputs и на это должно было быть всё?
>>1326469че, правда думаешь что твой велописед будет быстрее индексов в бд, которые как раз работают на деревьях, которые пилят чуваки с 30ти летним опытом?давай
>>1326608> че, правда думаешь что твой велописед будет быстрее индексов в бдда, потомучто я пилю только тот код который нужен для моей задачи, небудет ничего лишнего, никакого парсинга запросов, только чистое обращение по адресам в памяти, да и опыта у меня (в программировании вообще, но не в Си конкретно) не сильно меньше, уже за 20 лет будет.Щас пилю чисто на AVL деревьях, никаких субд, юзаю libavl+gmplib
>>1326456Внутри СУБД будет какое-нибудь B+ tree. Зачем городить слои и лагать на взаимодействии с БД, если можно реализовать то же самое напрямую?>>1326473Если у тебя реализация инлайна в другом файле, то при сборке модуля компилятор реализацию не увидит, а значит и инлайнить ему будет нечего. Поэтому да, реализация инлайна должна быть либо в начале .c (если используешь только в одном модуле), либо в хедере. Правда, есть такая штука, как link-time optimization, когда кодогенерация откладывается до этапа линковки, но в этом случае всякая мелочь из других модулей будет инлайниться автоматически (если линкер сочтет нужным), без этих твоих атрибутов.>>1326591Потому что ты заебал. Прочитай что-нибудь про сишные строки наконец уже. strlen() выдает длину строки, не считая '\0' на конце, и в результате ты не копируешь '\0' в strx, оставляя строку нетерминированной.
>>1326614Не заметил сообщения. Если ты проверяешь раз в сутки, подумай о том, чтобы во время проверки срать в дерево как придется, а балансировать, когда проверка закончится. Можешь на этом выиграть время при проверке (а может и нет).
Нашел вакансию для себя нюфага,звучит так:Обязанности:разработка встроенного ПО для Linux (C, C++) и Windows (Visual C++, MFC) на платформе Intel x86, Freescale, сетевое взаимодействие по Ethernet;сопровождение на объектах заказчика;оформление документации;возможны командировки.---Сопровождения на обьектах заказчика , как это понять? Яж вроде программист, нах мне ехать туда? Инет подключать?
>>1326718> сопровождения на обьектах заказчика , как это понятьПриезжать с программатором и ноутбуком, чтобы накатывать апдейты прошивок, отвечать на вопросы, почему ваш продукт такое кривое говно и отлаживать на местах то, что не получается отловить на стенде.
>>1326409>несколько гигабайтДелол подобное на бинарном дереве, но быстро закончилась память. Посчитай примерно сколько оперативы нужно иначе или хэдуп или бд.
>>1326851Иногда да, мы так ходили по администрации президента и ещё на н-ном количестве мест, которых даже на карте нет.
>>1326409>выгрузка обновляется не чаще чем раз в суткиНу так отсортируй и ищи бинарным поиском, нахуя тут дерево городить.
Возможно ли на Си вернуть из функции весь массив, а не только одну его ячейку, через только один вызов функции?
>>1326866> Посчитай примерно сколько оперативы нужноВ идеале памяти же нужно даже меньше чем сам размер выгрузки хешей, чтоб всё дерево в памяти постоянно держать, поэтому думаю что проблемы не будет, но в любом случае под это дело есть сервак с 64Гб оперативы который добивается при необходимости до 128Гб> хэдупох незнаю, помоему уж слишком тежеловесное решения для моей задачи, если юзать чтото готовое, то я бы выбрал redis>>1326937> нахуя тут дерево городить.по дереву можно просто рекурсией ходить, а значит уменьшается количество операций для поиска конкретного значения, т.е. быстрее будет работать, особенно если дерево балансированное
>>1326965>64Гб оперативы который добивается при необходимости до 128Гбчувак, возьми in-memory субд и перестань уже себе ебать мозгмы понимаем что тебе очень хочется сделать свой велосипед, но повзрослей уже
>>1325803Для работы с хэшами лучше всего подходит хэш-таблица.А вообще попробуй sqlite перед тем как писать велосипед
>>1326964>А как сделать указатель сразу на весь массив, а не только на одну его ячейку?#include <stdio.h>#include <stdint.h>int main(int argc, char const argv[]){ uint8_t a[256] = {}; uint8_t ptr; size_t n = 128; ptr = a; a[n] = 16; for (int i = 0; i < sizeof(a)/sizeof(a[0]); ++i) { if ( i == n ) printf("a[%lu] = %u", n, *ptr); ptr++; } return 0;}
>>1326968> чувак, возьми in-memory субд и перестань уже себе ебать мозгМне хочется ебать себе мозг, можно я еще чутку поебу? Если мне вдруг надоест я в курсе готовых in-memory решений, но я хочу свой велосипед, т.к. уверен что это будет быстрее.> но повзрослей ужетяночку завести?>>1326969>Для работы с хэшами лучше всего подходит хэш-таблица.ну выше над тобой уже посмеялись, ты толи задачу не понял, толи просто у тебя базворд сработал, услышал хеш, в голове щелкнуло hash table
>>1326965>чем сам размер выгрузки хешейСсылка на хэш и джва узла = 64 * 3 = 24 байта на одну запись как минимум
>>1326964чтоб прям охватывал?)ну, можешь написать#define UKAZATEL_SRAZU_NA_VES_MASSIV(ptr) ptrи потом возвращатьreturn UKAZATEL_SRAZU_NA_VES_MASSIV(arr)если тебе так будет спокойнее...
>>1327065Но тебе насамом деле нужно сначало понять, что такое указатели и как с ними работать, а потом понять что возвращать массив (или указатель на массив), в нормальной ситуации нет необходимости, и лучше все делать через структуры
>>1327085У меня на строку uint8_t a = malloc(size); жалуетсяневозможно преобразовать "void " в "uint8_t *"
>>1327093А если у меня в функции над массивами происходят некоторые манипуляции, будет ли целесообразно прокручивать функцию в цикле дохуялион раз только чтобы вывести из функции в маин массив?
>>1327095> будет ли целесообразно прокручивать функцию в цикле дохуялион раз только чтобы вывести из функции в маин массив?
>>1327095расскажи лучше о себе, сколько тебе лет, в каком классе, каким компилером компилиш, какой осью пользуешся, в каком редакторе пишеш? Нам так будет проще понять твои проблемы и навести тебя на правильный путь
>>1327109>не буду учить питоня и не настаивал, но думаю тебе лучше начать с чегото другого, например с Go, там хотябы компиляторы не перепутаеш
>>1327180А что такого? В плюсах нет указателей и массивов?Вероятно он смотрит в книгу по системе, а компилит в студии плюсовый код, можно и так, конечно, но вот некоторые фичи все таки есть.
>>1327180K&R описывает С89, который полностью совместим с С++, за исключением вот этого случая. Поэтому лучше кастить, чтобы таких недоразумений не возникало.
Проблема указателей и типов, но типы 2 глава, а указатели 5. Тот же enum в С89 и C99 и крестах. Подразумевал проблемы должны были начаться немного ранее. Ну, ладно. Я вас услышал.
>>1327192В системе кастить не нужно, покрайней в мере если ты при объявлении переменной сразу ее инициализируешь.Если ты инициализируешь ее дальше по коду, то кастить нужно только для увеличения читаемости.Чтобы человек сразу понимал по касту какой тип у переменной.
Уважаемые,А есть ли в С аналог partial?Типа функцию можно раскидать по файлам? Например часть генерируется автоматически, а часть руками дописывается, и хочется в разных файлах это хранить. Но чтобы компилилось как будто писанное в одном файле.
>>1317913 (OP)>Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.>Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C:>Understanding and Using C Pointers by Richard M. Reese: Horribly written, conflates language specification and implementation, and describes concepts confusingly and/or wrongly in many cases. ВТФ анон? Почему советуешь говно?
>>1327373(1) a function on page 87 uses pointers to memory that has already been deallocated, which is undefined behavior. The same function has redundant variables "length" and "currentPosition" -- one of the two would have been sufficient to accomplish the task.(2) Elsewhere, Reese defines a linked list header structure with pointers to the head node, the tail node, and the current node. This structure is used at several later points in the book, but the reason for including a pointer to the current node is never made clear; none of the code in the book ever uses it, and indeed, it's difficult to see why it would be useful.(3) While Reese explains the difference between the value 0 and the NUL character, in several places his code elides the difference, using the former where the latter would be more strictly appropriate (e.g., page 131 has `while (string != 0)` when `while (string != '\0')` or preferably `while (*string)` would be better style.(4) Throughout, the book provides examples of infinite loops with break statements instead of using good structured style and having the break condition be the loop conditional.(5) Surprisingly for a book that mentions the C99 and C11 standards often, there are a lot of references to using Microsoft Visual C++ as a compiler. Microsoft does not, and by all accounts never will, support C standards past C89. It is a C++ compiler, not a current C compiler. It mandates practices that are not C like in their philosophy, and Reese's code succumbs. For instance, he explicitly casts the return values from malloc and realloc to pointers of the appropriate type, which is not considered good C style. Good C code should be written in compliance to the C standard, not in conformance with the requirements imposed by a compiler geared to a different language.
Как это работает Оператор k = k | 040000000; добавляет 1, которая не хранится в числе для экономии разрядов
>>1327373Книжки в шапку предлагали все кому не лень. Анону понравилась эта. В шапке еще и хардвей есть, на который говна гораздо больше лилось.>>1327395> difference between the value 0 and the NUL characterПридирки, там в обзоре каждой книги десятки подобных мелких придирок, которые ни на что не влияют.> infinite loops with break statementsНе читал, как там конкретно, но часто такое имеет смысл и бывает более читаемо.> Microsoft does not, and by all accounts never will, support C standards past C89Хуйня, в студии давно можно писать на C11 (по большей части).>>1327406Нихуя непонятно, что тут имеется в виду. Больше контекста есть?
>>1327406040000000 - восьмиричное число (обрати внимание на ноль в начале), работает как любые манимуляции с битами
>>1327415Не очень понятно, что ты подразумеваешь под partial.>Например часть генерируется автоматически, а часть руками дописываетсяvoid yoba(int i, int j) {if (i == j) {#include "generiruetsa_avtomaticheski.inc"}}Это простейшим момент. Дальше в мейкфайле прописываешь вызов скрипта, который генерирует "generiruetsa_avtomaticheski.inc". При этом снаружи от инклуда ты можешь дефайнить что-то, например, типы данных://main.cpp#define DATATYPE float#include "yoba_file.h"#undef DATATYPE//yoba_file.htypedef struct {} yoba_ ## DATATYPE;сгенерирует тебе yoba_float
>>1327426Вот реальный код, который это используетhttps://github.com/ampl/gsl/blob/master/cblas/ccopy.c
>>1327355Но ведь partial - это всего лишь аргументы по умолчанию.#define open_binary_read(filename) fopen(filename, "rb")
>>1327426>Не очень понятно, что ты подразумеваешь под partial.Ну вот это например:http://www.tutorialsteacher.com/csharp/csharp-partial-class>>1327429Спасибо!
>>1317913 (OP)Двощик, не могу сконверить wchar_t в UTF-8. Конверчу через iconv, возвращает всегда 0 (типа, 0 байт сконвертировано).Кот: https://ideone.com/nxH64ZГде я долбоёб?
>>1327511Почитай, что именно возвращает iconv.> Где я долбоёб?iconv модифицирует указатель output таким образом, чтобы он указывал на оставшуюся часть буфера (после сконвертированного текста) таким образом, чтобы было удобно дописывать в него последующими iconv. Решение спорное, но у тебя ничего не работает именно потому, что ты возрващаешь указатель не на начало буфера.
>>1327373Решительно не понимаю и, при всем желании, не могу быть толерантен к тем, для кого существует понятие "вкат в указатели". Во что там вкатываться? Это каким надо быть ...?? Можно любую книжку по ассемблеру взять и теоретическое введение сказочкой на ночь почитать, потом в процессе K&R указатели сами собой мысленно изобретутся еще до главы про них.
>>1327538>при всем желании, не могу быть толерантенДержи нас в курсе.Как же заебали эти токсичные пидоры с даннингом-крюгером.
>>1327542Я, конечно, всегда сдержанно объясню, когда кто спросит, но внутри подгорает каждый раз. Это ж какой-то мазохизм непоследовательного изучения. Быть может, романтику находят в волшебном мире программирования из частных случаев и тупых вопросов, но это ни разу не проще, чем недельку-другую правильную теорию покурить.
>>1327779Нет, в дереве O(log N), где N - количество объектов в дереве, в хэштаблице при правильно подобранной хэш-функции почти всегда если коллизий нет O(1).
>>1327796>O(1)>O(log N)Мохнатое О для пидоров, ты же знаешь>если коллизий нет>если кэш не прогрет>если Луна в зените
>>1326965>по дереву можно просто рекурсией ходить, а значит уменьшается количество операций для поиска конкретного значениПо сравнению с бинарным поиском? Ты бредишь, число операций будет одинаковым.
>>1327986Почему не имеет?Например с теми же сортировками ты можешь сравнить какой-нибудь пузырёк с пирамидальной на одном и том же наборе данных и объяснить почему пирамидальная будет быстрее.Вполне себе вариант, как по-твоему алгоритмы вообще оцениваются, и по каким требованиям ты выбираешь один из них, если не смотришь на оценки?Заранее знаешь какой из них подойдёт лучше в твоём случаеопять же исходя из математики лол?
>>1327994Для бинарного поиска нужен отсортированный массив, вставка в дерево стоит намного меньше по времени, чем вставка в массивне в конец, даже если ты будет использовать подобие deque дерево все равно будет быстрее на вставке.и соответственно удалении
>>1328000Нахуя тебе вставлять в массив? Берешь 2 структуры данных, массив и хэш, массив размером в гигабайты, в хэш вставляешь текущую инфу. Ищешь и там и там. Раз в сутки их сливаешь, скидывая из оперативки на жесткий диск, и читая обратно.А бинарное дерево размером в несколько гигабайт из которых две трети это указатели на ноды дерева, это так себе хуитка для этой задачи.
>>1327996>и по каким требованиям ты выбираешь один из них, если не смотришь на оценкиПишу оба и замеряю скорость, реализации невозможно оценить.
>>1327996> Почему не имеет?Потому что, сравнивая пузырек или selection sort со сложной сортировкой на практике, ты обнаружишь, что на в массивах с небольшим количеством элементов (меньше 10) пузырек заметно быстрее (посмотри реализацию qsort в glibc, они там до insertion sort деградируют в конце концов как раз по этой причине). Потому что кроме количества операций, есть еще разная цена операций, spatial locality, вот это все. И все это никак не отражается в O-большом, которое оценивает сферический алгоритм в вакууме, а не поведение реального кода на реальной машине. Поэтому да, как написали выше, это всего лишь оценка роста сложности, не более.
>>1328081О большое оценивает алгоритмы при росте нагрузки, твой Кеп, да и на 10 элементах по факту вообще без разницы какой алгоритм юзать, meh
>>1327796Я не вникал глубоко в вопрос. Мне кажется ты ошибаешься. Маршрутизацию сетевых запросов реализуют исключительно на деревьях.
>>1328196> Маршрутизацию сетевых запросов реализуют исключительно на деревьях.Делается аппаратно, внутри ассоциативная память. https://en.wikipedia.org/wiki/Content-addressable_memory#Example_applications
Привет аноны. Подскажите, ищу опенсорсные драйвера для цветного принтера (пилю свой принтер). Гуглил, но как-то с ходу не нашёл. Есть что-то а примете?
Мудрецы, давайте советуйте, джва потока срут на экран перебивая друг друга, как организовать последовательный вывод? Притормозить их или мутекс, хз короч, но кроссплатформено и по феншую.
>>1328327в сферическом C11 в вакууме потоки есть, но glibc как-то не парится, ибо кому они нужны, когда есть POSIX...
>>1328333А зачем glibc париться, если в линуксе код с C11-потоками уже давно отлично собирается с -lpthread?
>>1328337То есть, таки приствуют соответствующие стандарту C11 обертки вызовов pthread_create и т.д., как это сделано в std::thread для C++? Что-то у меня получалось инклудить <thread.h>...
>>1328221Какая разница аппаратно или программно? Если поиск в хэш-таблице настолько быстрый, то зачем деревья? Роутинг в веб-фреймворках тоже реализуют с помощью деревьев. Почему так?
>>1328337>-lpthreadнужно юзать просто -pthread (без -l), так gcc принудительно собирает все зависимости с подержкой мультитредовости с тред-сайфовым подходом
>>1328410Поиск в хэш-таблице в среднем проходит за O(1), в худшем случае конечно за O(n), а в дереве за O(log n).
Уже решил сотню простых задач, но когда дело доходит до сложных, где потребуется написать как минимум пару функций, вступаю в ступор. Вопрос к шарящим, как научится писать сложные программы?
Нахуя нужный структуры? В каком случае применение структур необходимо? В каком случае без структур обойтись невозможно? Какой в них вообще смысл?
>>1328779Для упаковки данных. Например заголовки различных протоколов упаковывают в структуры. Это только первое, что в голову пришло. Ну, или чтобы образовать осмысленные связи между данными. ООП начался со структур. От классов отличаются тем, что поля структур видны отовсюду и могут быть изменены в рантайме без методов-акцессоров, а у классов по инкапсуляции недоступны и нужны методы-акцессоры для их изменения.
>>1328784подожди-подождикакой то дебил, который даже не удосужился загуглить, задает тупейший вопрос и ты сразу же бросился отвечать?если я тя в офисе попрошу за сигами сбегать, тоже метнешся?
>>1328785Эххх, ну придётся. Тебе какие? Себе ведь тоже тогда возьму.Не душни, анон. Мне просто не с кем пообщаться.
>>1328784>поля структур видны отовсюду и могут быть изменены в рантайме Это весьма хуево. Как с этим бороться?
>>1328820пиздовать к крестоблядям.А если серьёзно, то не менять их и всё. Тыж программист или кто? Вот и не трогай то, что трогать не нужно. Ну, или можешь приделать выбрасывание ошибок, как только поля структур будут меняться без твоего ведома(неявно), либо сделать эти поля константными, чтобы совсем их не менять. Это в теории всё. Я не знаю зачем вообще с этим бороться. Это как бороться со сладкими конфетами и выбрасывать их в мусорку вместо того, чтобы их есть.
>>1328827Но подожди, это получается любой хацкер сделав дамп оперативы, получает полный доступ к архитектуре?
>>1328835>>1328836Клянусь не собирался толстить но что-то мне подсказывает, что наступил на мозоль, лол, сам учусть по прате.А вот реально, как этого избежать? В MISRA не нашел с первого раза, она больше про стабильность.
>>1328742Продолжать писать простые, напиши несколько простых, объедини их в более сложную.вообще это странно, возможно ты не умеешь разделять задачу на более мелкие?
>>1328832Память это набор нулей и единиц, не знаю, что он там делать будет.все сломает, особенно лаба1.с
>>1328820> поля структур видны отовсюду> Это весьма хуево. Как с этим бороться? Есть идиоматичный код (который, кстати, невозможно повторить на крестах с этими ихними классами):foo.h:typedef struct foo foo;foo ∗foo_create(void);void foo_destroy(foo ∗);void foo_do_smth_useful(foo ∗);и другие методы...foo.c:#include "foo.h"struct foo { int private_data; };foo ∗foo_create(void) { foo ∗obj = malloc(sizeof(∗obj)); obj->private_data = 0; return obj; }void foo_do_smth_useful(foo ∗obj) { obj->private_data = 42; }и другие методы...Алсо, есть такая штука, называется документация, там можно описать, что в структуре разрешено менять напрямую и как именно. Можно написать, что ничего нельзя, это хороший подход.
>>1328843не думал, что один и тот же человек. А толстота про хакера. Каким образом инкапсуляция (политика компилятора с private модификаторами доступа) остановит хакера, способного "словить дамп оперативы"? Вот и подумал, что рофл. Уж больно умный термин присутствует в перемешку с откровенной ерундой, вроде этого >>1314292 . Впрочем, "толстота" - не вполне уместная оценка, такое даже забавно читать)
>>1328851большие слова обычно выравнены под 8-байтовую сетку, можно за что-то похожее на указатели зацепиться
>>1328875Ну это да, но это слишком нужно дрочиться.да и все равно ось тебя не пустит по чужой памяти ползать, даже если ты на уровне ядра что-то поменяешь можно просто панику словить
>>1328877> да и все равно ось тебя не пустит по чужой памяти ползатьИногда есть /dev/mem из юзермода. Из ядра есть все, что угодно. А еще ниже есть дамп через DMA.
>>1328446Так что вы мне голову морочите. Я же изначально говорил, что деревья используют для таких задач. Но какой-то анон сказал, что хэш-таблицы быстрее.
>>1328742> Уже решил сотню простых задачКакого типа задачи?>>1328742>но когда дело доходит до сложных, где потребуется написать как минимум пару функций, вступаю в ступорРазве ты в сотне задач не писал функций?
>>1328851а свет - это волны (частицы). Что шпион будет делать с биноклем? Средства интерпретации сигналов (аналоговых/дискретных) существуют. Естественно, несанкционированное пользование на порядок сложнее. Это не новость, тупых хакеров не бывает.
>>1328779У человека в кратковременной памяти помещается примерно 7 объектов, без структур ты быстро утонешь в сложности и ничего писать не сможешь
Котаны, эклипс марс кодирует строки, которые я объявляю в программе в unicode? printf("%c = %d\n", "A", "A"); //{ = 1073646356printf("%c = %d\n", "a", "a"); //$ = 1073646372Как пофиксить чтобы char кодировался в ASCII?
>>1328914Ты хотел одинарные кавычки вокруг символов. Сейчас ты выводишь адреса (или части адресов) строк, а не численные значения символов.
>>1328935Посмотреть, каким образом запушивается все в стекНу короче программирую Си с асм вставками, довольно интересно
>>1328937> Посмотреть, каким образом запушивается все в стекНу есть же отладчики. Но если очень хочется, то примерно так (тут повсюду UB, поэтому в продакшене использовать не стоит, собирать как-либо кроме -O0 не стоит тем более). Чуть правильнее было бы переписать на va_list/va_arg, но оно не перестанет быть UB.void foo(int arg, ...){uintptr_t ∗stackptr = (uintptr_t ∗) &arg;for (size_t n = 0; n < 10; n++, stackptr++) printf("%p: %lx\n", stackptr, ∗stackptr);}int main(void){foo(0); // Аргумент нужен как точка отсчета, сам по себе не используется.}
>>1328937не все в стек пушится. Например, на Linux под x86_64 сначала выбираются RDI, RSI, RDX, RCX... для float свои регистры есть тоже
>>1329146>очевидно жечто такое "O" так и не понял, ну да ладно, видимо это какието секреты математиков
>>1329147>Обозначение «„O“ большое» введено немецким математиком Паулем Бахманом во втором томе его книги «Analytische Zahlentheorie» (Аналитическая теория чисел), вышедшем в 1894 году. Обозначение «„о“ малое» впервые использовано другим немецким математиком, Эдмундом Ландау в 1909 году; с работами последнего связана и популяризация обоих обозначений, в связи с чем их также называют символами Ландау. Обозначение пошло от немецкого слова «Ordnung» (порядок).
>>1329150Я понял. Но если первый аргумент, с адреса которого начинается цикл, был добавлен в стек последним и находится на вершине стека, то его адрес как раз и будет наименьшим из всех аргументов. Поэтому в >>1328942 в цикле ++. Разве не так?
Всем привет. Пэхапэ-макака репортинг ин. Смотрел недавно трансляцию на тытрубе, где какие-то типичные битарды сычи красноглазики в количестве 2х штук писали код на си, угорали там над чем-то, тут у них утечка, ой, а тут код сишный в сиплюсплюс не конпилится, а тут двоичные числа не записать, ой, а тут из 16-ти битного в 32-х битный режим переходим, ой. И меня этот процесс настолько затянул и воодушевил, что я захотел повысить собственное ЧСВ и научиться писать велосипеды для операционок, чтобы их можно было установить на любом компе, ну и конпилировать, конпилировать и еще раз конпилировать. А еще я думаю, что это будет плюсом, когда я пойду перекатываться в офис и черкану строчку об опыте на чем-то, кроме пхп.Так вот, что мне для этого выбрать: каконичный С или же С++? Вроде как С++ мое чсв раздует до предела, но вдруг я его не осилю, а мне еще работать нужно будет.
>>1329155ну да, стек растет сверху вниз, виртуальные адреса 0x7fffffffffff-0x7fffff000000, а пушится все в обратном порядке, чтоб потом выбиралось в прямом, иначе бы не понять было, с какого адреса начинается argv, например, а так посмотрел argc, что лежит по адресу RSP, и дальше за ним уже собираешь все до NULL...
>>1329165судя по всему, тебе хочется именно того, что даст чистый Си. Начав с крестов и уснешь скоро (там инфы как воду из ведра пить), и пробелы в low-level знаниях останутся. Вообще, прелесть C++ доступна сишникам, девственные же джависты и прочие макаки, как ты себя обозвал, вряд ли извлекут пользу из кажущейся бессмысленной запутанности.
>>1329154O(1) означает, что процессору нужно сделать одно и то же количество операций для поиска по коллекции из 100, 1000 и 1000000 элементов. O(n) значит, что количество операций растет пропорционально размеру коллекции.
>>1329235Я думаю O(1) одна операция. Постоянное время имеется ввиду сколько времени нужно конкретному процессору для выполнения 1 операции.O(n) умножаем это постоянно время, допустим 0,001 секунды на n. Где n это обычно количество лупов в цикле, обычно соответствующая количеству элементов в массиве.Но возможно манятеория.
Господа сишники, вот вам вопрос из собеседования.Программа на си компилируется в байт-код. Как можно скомпилировать байт код обратно в программу на си?
БЛЯДЬ, ГДЕ МОЖНО СКАЧАТЬ НОРМАЛЬНЫЙ 32-Х БИТНЫЙ КОМПИЛЯТОР ДЛЯ СИШКИ??? ВЕЗДЕ ОДНА х64-ХУЕТА, СУКА!!!
Объясните мне, он дурачок или это я чего-то не понимаю? Как он для char присваивает целые слова, а не только один символ?https://youtu.be/guinn2k1PGE?t=340
>>1329523Нужно быть ебанутым, чтобы снимать видео по программированию и совсем ебнутой макакой, чтобы их смотреть. Пошёл нахуй отсюда, пидор грязный.
>>1329523Не char, а char*.>>1329526Насколько надо быть ебанутым, чтобы в 2018 году вместо ответа на вопрос объяснять спрашивающему, какой он мудак? Пидор грязный-то ты.
>>1329558Я не телепат, чтобы видеть то, что у тебя там. Ты не можешь присвоить одну сишную строку другой с помощью =, нужно использоваться strcpy.Прочитай Кернигана и Ричи про строки и после этого вторую главу вот здесь faqs.org.ru/progr/c_cpp/cfaqrus.htm , может начнешь понимать, что ты делаешь.
>>1329548>в 2018 2019.>Пидор грязный-то тыНет ты. Видео-дауны самые поехавшие дауны, с таким же успехом можешь Сю по шебм объяснятьб прямо сразу в фап-треде.
>>1329165Вот реально поддвачну этого >>1329226А от себя добавлю:Я начал с C#, у них в шапке очень хорошая книга. Дошел до 2/3 книги. В какой-то момент появляется ощущение, что вроде все ясно, но чего-то не догоняешь, как-будто обладаешь разнозненными фактами а не знанием.Я реально жалею о потраченном времени, надо было начинать с сишечки.
>>1329567>Нет ты. Видео-дауны самые поехавшие дауны, с таким же успехом можешь Сю по шебм объяснятьб прямо сразу в фап-треде. Самые поехавшие дауны - это вот эта ебанутая публика, которая заходит в тред чисто чтобы похамить и самоутвердиться. Гуглишь что-нибудь, и знаешь, что если гугл дал тебе лор или какую-то еще рашкопомойку, то можно не кликать, потому что ответ на вопрос будет в лучшем случае на второй странице - до этого такие уникальные мамкины специалисты будут нести хуйню, о том, какой задавший вопрос мудак. Хотя ты и есть тот самый гнойный пидор, которому лучше бы заткнуться и убить себя.Что касается видео, ничего плохого в них нет, если само видео пилит профессионал. Это, конечно, не случай того, что он принес, но ты-то не об этом сказал.
>>1329165>каконичный С или же С++? Вроде как С++ мое чсв раздует до предела, но вдруг я его не осилю, а мне еще работать нужно будет. Си, потом вдумчиво читать Дизайн и эволюцию, потом книги Мейерса и Саттера.Тогда С++ вообще не будет казаться сложным. Потому что он и не сложный особо, здесь даже не нужно знать, что такое ковариантность.
Поддерживаю. Заебали скудоумы. В програмаче последнее время они просто заполонили кучу тредов. Бля скудоумы, высирайте из своих тупых голов что нибудь кроме односложный предложений позязя
>>1329576Я захожу в тред так как мне Ся нужна для низкоуровневой логики и апать скиллы. Читаю сам и учусь, вопросов не возникает, читаю вопросы тех кто изучает и решаю их для себя, это достаточно полезно. Ни разу за свою жизнь не видел хоть одного человека научившемуся чему-либо по видео. Впрочем, мне похуй, если тебе нравится плодить этот рак здесь. Но всё-таки я не пидор, и даже на трапов ни разу не дрочил.
>>1329600>Впрочем, мне похуй, если тебе нравится плодить этот рак здесьМне тоже не нравится плодить рак, но рак - это ты. Из вопросов ньюфагов рождаются обсуждения так или иначе. Из "ололо ты мудак" не рождается нихуя, кроме вот этой уебанской атмосферы рашкофорумной дедовщины. У меня от нее бомбит, да.А видео - это старый добрый известный со средневековья формат лекций, а так же мастерклассов и прочей хуйни, но переведенный в цифру. Если чел никогда не видел как программируют, почему не посмотреть это на видео?
>>1329130Предположим, что поиск из 10 элементов занимает 1 секунду. Значит, если n = 10, значит поиск будет занимать 1 секунду, если n = 1 000, поиск будет 100 секунд.
>>1329147Это обозначение временной сложности алгоритмов. Бывает сложность: O(1), O(n), O(log n), O в степени n.
>>1329333Не в байт-код, а в ассемблерный может, и может в машинный. Байт-код это машинно-независимый код, который исполняют не процессоры, а виртуальные машины, например: JVM, CLR, BEAM, Dalvik, etc.
>>1329574>В какой-то момент появляется ощущение, что вроде все ясно, но чего-то не догоняешь, как-будто обладаешь разнозненными фактами а не знаниемВидимо ты просто читал, но не практиковал. Обычно это происходит из-за этого. Тут дело не в языке.
>>1329666Ещё LLVM, который с собой clang таскает, тоже популярная штука, JIT вроде ещё есть, если я ничего не путаю.сам пользуюсь онли gcc
>>1329663Еще раз. O-большое ничего не говорит о конкретном числе операций или секундах. Оно говорит о том, по какой функции будет увеличиваться количество операций при росте n. Это позволяет приблизительно сравнивать разные алгоритмы.>>1329666> Байт-код это машинно-независимый кодИ это как-то мешает тебе компилировать Си в байткод любой из перечисленных вм? С точки зрения компилятора разницы между байткодом и машинным кодом нет. К тому же, если вспомнить, что внутри x86 фактически RISC-based интерпретатор, то возникает вопрос, чем вообще "машинный" код x86 отличается от байткода.
>>1329675>Еще раз. O-большое ничего не говорит о конкретном числе операций или секундах.Еще как говорит. O большое говорит о времени выполнения алгоритма. Не о секундах, не о конкретном времени, а об отношении времени к длине коллекции. O(1) означает, что операция поиска в коллекции будет всегда проходить за одинаковое количество времени, то есть за константное время, независимо от длины коллекции.>>1329675>Оно говорит о том, по какой функции будет увеличиваться количество операций при росте n.Какой еще функции?>>1329675>чем вообще "машинный" код x86 отличается от байткода. Тем, что машинный исполняет конкретный процессор, а байт-код виртуальная машина.>>1329675>И это как-то мешает тебе компилировать Си в байткод любой из перечисленных вм?Не мешает, но обычно такое не делают. То кто задавал вопрос просто ошибся, назвав машинный код байт-кодом.
>>1329687> Тем, что машинный исполняет конкретный процессор, а байт-код виртуальная машина.Исполняет виртуальная машина в процессоре.> Не мешает, но обычно такое не делаютПравда? А я вот помню, как в свое время массово компилировали Си в AVM (Flash) и еще в JS с помощью Emscripten (тут немного не то, потому что вм у браузеров разные, и опкоды напрямую не доступны).> Какой еще функции?Той, которую ты пишешь в скобочках у O.> об отношении времени к длине коллекцииТолько когда n достаточно большое, причем где именно находится это "достаточно" не оговаривается. Например, обрабатывая массив данных на HDD, ты можешь написать алгоритм c O(n), который обгонит O(log n). Но с ростом количества жестких дисков, все детали реализации перестанут иметь значение, и рано или поздно O(n) обязательно станет медленнее O(log n).
>>1329700>Той, которую ты пишешь в скобочках у O.Такая терминология не используется. Это ты от себя придумал.
>>1329700>Например, обрабатывая массив данных на HDD, ты можешь написать алгоритм c O(n), который обгонит O(log n). Но с ростом количества жестких дисков, все детали реализации перестанут иметь значение, и рано или поздно O(n) обязательно станет медленнее O(log n).Ну ка расскажи как? Ты не понимаешь алгоритмическую сложность. Она не зависит от железа. O(n) всегда дольше чем O(log n), на малых величинах оно еще будет рядом, но не быстрее как ты говоришь, а на больших разница будет в тысячи раз. Увеличение коллекции в 100 раз, увеличивает время поиска по O(log n) всего в 2 раза. А в случае O(n) время увеличиться в 100 раз.
>>1329732> Ну ка расскажи как?Ну например, если у тебя почти полностью заполненный SSD, ты упираешься в стирание блоков, и алгоритм, который экономит записи, может очень много выиграть у алгоритма, который о них не беспокоится. В случае HDD алгоритм, читающий последовательно, выиграет у random seek.> а на больших разница будет в тысячи разДа. Никто и не спорит.
>>1329743Причем здесь диски? Алгоритм не зависит от железа. O(n) означает, что поиск будет проходить по всем элементам, там нет никакой экономии, экономия как раз при O(log n).
>>1329769> Программа находится в оперативной памятиА еще она может быть в кэше, а еще она может выполняться из ROM или какого-то вида EPROM напрямую. Но это не так важно, потому что данные тоже могут лежать где угодно, и время выполнения алгоритма будет зависеть от его реализации и характеристик устройства, хранящего данные. С ростом n шанс, что реализация алгоритма с O(n) обгонит реализацию c O(log n) быстро уменьшается до нуля, но и говорить, что O(n) всегда медленнее O(log n) неправильно.
>>1329667Ты понимаешь, что ты сейчас разговариваешь с образованным, взрослым человеком, который зарабатывает на жизнь своим трудом? Ты мне советы даешь, как учиться?Что значит не практиковал, уёбище?Примеры и задачи решал, какая ещё практика в учебнике, придурок?Тебе башку прострелить?
>>1329781Открой книгу "Построение и анализ вычислительных алгоритмов" авторов Альфред В. Ахо, Джон Э. Хопкрофт, Джеффри Д. Ульман. И прочти главу про сложность алгоритмов. В ней ясно дано понять, что увеличение производительности железа, почти не дает увеличения производительности программ. Потому что это мизерные цифры, по сравнению с потенциалом ускорения от использования оптимальных алгоритмов.Правильный алгоритм может давать ускорение в тысячи раз. Увеличение мощности железа в тысячи раз, может уже не произойти никогда. Так как закон Мура уже не работает.Программа не может выполняться из ROM, она должна быть загружена в RAM.Твои посты состоят из набора не связанных ключевых слов.
>>1329809> Открой книгу "Построение и анализ вычислительных алгоритмов"Я же говорю, что теоретик.> Программа не может выполняться из ROM, она должна быть загружена в RAM.А тебе никогда не рассказывали, что для того, чтобы воспользоваться DRAM после подачи питания, ее нужно инициализировать, причем относительно длинным кодом: зависит от контроллера памяти, но обычно это несколько килобайт? Памяти нет, но код нужно выполнить. Или даже хуй с ним, у нас SRAM. Но кто же скопирует код из ROM в SRAM? Как быть? Правильно! Нужно оторваться от книжек про алгоритмы и начать писать код почитать что-нибудь про архитектуру компьютера.
>>1329814>А тебе никогда не рассказывали, что для того, чтобы воспользоваться DRAM после подачи питания, ее нужно инициализировать, причем относительно длинным кодом: зависит от контроллера памяти, но обычно это несколько килобайт? Памяти нет, но код нужно выполнить. Или даже хуй с ним, у нас SRAM. Но кто же скопирует код из ROM в SRAM? Как быть? Правильно! Нужно оторваться от книжек про алгоритмы и начать писать код почитать что-нибудь про архитектуру компьютера. Это ты теоретик. Пишешь непонятно о чем вообще. Во-первых, это не имеет ничего общего с языками высокого уровня. Во-вторых, мы обсуждали задачу поиска в огромной коллекции. При чем тут инициализация памяти вообще? Вот сядь и попиши код. Реши наконец хоть одну задачу. Ты только и делаешь, что кидаешься ключевыми словами, которые вообще не имеют ничего общего с обсуждением.
>>1329814Слушай, почему вот это >>1329809 понятно даже мне, хотя я инженер а не программист?Да, процесс оптимизированнный под железо прекрасен, но в общем случае - процесс гораздо важнее.Это везде так, даже на производстве мебели.Зачем выебываешься?
Как-то я написал одному человеку юзать хэш таблицу вместо линейного поиска в таблицеОн заморочился, поэкспериментировал, оказалось что если в массиве до 1000 элементов, линейный поиск быстрее.
>>1330590Коллизии всегда будут, если у тебя не perfect hashing. Поэтому таблицу делают размером +10-30% от требуемого.