Двач.hk не отвечает.
Вы видите копию треда, сохраненную 2 марта 2019 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
C Programming Language.png78 Кб, 792x1023
C Programming Language #37 /clang/ # OP 1317913 В конец треда | Веб
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь 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/
изображение.png18 Кб, 626x635
2 1317959
Пацаны, я тут сделал сортировщик массива любого размера с ненулевым элементами. Злой дядя Хусаинов Н.Ш. из ИКТиБ ЮФУ в этой задачке прям расщедрился и разрешил использовать всё, но только в пределах stdio.h. Моё эго жаждет чужого мнения по поводу моего кода. Как он тебе? Говнокод или нет? Что можно изменить в рамках stdio.h, чтобы сделать его неговнокодом? Чем мой алгоритм хуже стандартных, если он вообще хуже?
4 1317961
>>17960
И чё?
5 1317963
>>17959
ктбо-?
на самом деле лютый говнокод с хуевым стилем оформления, посмотри лекции по алгоритмам сортировки и ознакомся с конвенциями написания кода
6 1317977
>>17961
Положено писать на US English, если ты норм чел, который увОжает гайды. А не макака из Говногермашки или Китая, которые ебашут переменные на своих нахрюках.
7 1318017
>>17961

>И чё?


То, что переменные в идеале должны быть self-documenting, т.е. чтобы из названия можно было понять, что это за херь. Иначе как ты фрилансить-то собираешься? Чё за параша твой massiv?! Какой-нибудь myArray - это будущему заказчику понятно, а massiv - это что за поебень такая?
8 1318023
>>17913 (OP)
Эй, ананасы, кто там в прошлом треде за 8-битную разработку на Си и за компиляторы спрашивал? Помимо классического HiSoft C гляньте современный z88dk (z88dk.org) Алсо, рекомендую 8bitworkshop.com Там жаль, что не оффлайновая IDE-шечка и толковые книжки которые автор предлагает купить, но всё давно уже спижжено и в сети валяется.
КР580.jpg2 Мб, 3072x2304
9 1318223
>>18023
А как же SDCC?
10 1318272
>>17959
Это полный пиздец, а не говнокод, такое только школьник или тупой студент в состоянии написать.
11 1318363
Что можно почитать на тему параллельного программирования? Оно меня сожрет?
12 1318463
>>17913 (OP)
Как по-человечески установить mingw-64 и SDL на виндовс?
Вроде бы всё по гайду делаю, а зависимости не хочет подключать.
13 1318470
>>18463
Через MSYS2.
14 1318478
>>18363
Начни с Effective Concurrency (цикл статей)
15 1318479
>>18470
Спасибо, посмотрю.
16 1318484
>>17963
>>18272
Что с его кодом не так? С виду все нормально.

мимо только на днях дошел до функций.
17 1318491
>>17959
for у вас там тоже запретили?
18 1318498
>>18223
А, да, кстати! Спасибо, что напомнил!
19 1318505
>>18484
Не инициализируется большая часть переменных, неочевидные имена, скобки с переносом строки (можешь погуглить пособие от гугла что ли, где они писали про правила хорошего тона в коде), нет разбиения на функции.
ну и сам код мне было впадлу читать. учил в этом семаке в вузике на не очень прогерском факе, мог спокойно проебать что-то важное
VlBKtqLZfQ.jpg21 Кб, 468x520
20 1318507
>>18505

>скобки с переносом строки

21 1318509
>>18507
https://google.github.io/styleguide/cppguide.html#Scoping
Могу поклясться, что где-то в этом гайде видел мошну на скобки с переносом строки.
22 1318510
>>18509
>>18507
Мб не в разделе, который я скинул, но там тоже скобки всегда без переноса.
23 1318511
>>18510
>>18509
Вкусовщина так-то уровня: "табы vs пробелы".
24 1318512
>>18511
На мой взгляд тоже, но мне оба варианта глаза не режут, поэтому перешел на скобки без переноса.
25 1318513
>>18484
Через пару месяцев пересмотри его код, если ничего не изменится в твоём мнении, то бросай обучение.
26 1318514
>>18484

>Что с его кодом не так? С виду все нормально.



Все просто ужасно, абсолютно все. На ошибки я тебе указывать не буду.

Смотри свод правил в конце "C: Elements of style". Попробуй найти хоть одно, которое ты соблюдаешь.

>мимо только на днях дошел до функций.


Ну так иди и учи дальше. Пока что ты ничего не умеешь.

Другой анон
27 1318515
>>18478
Спасибо
28 1318516
>>18484
>>17959
http://all-ht.ru/inf/prog/c/style.html
Сам изредка поглядываю.
29 1318517
>>18507
Ну в некоторых языках чаще встречаются скобки без переноса, но в си, да, вообще-то с переносом предпочтительнее
30 1318519
>>17959
Так написать постараться надо, даже мне, ламеру, это видно. Ты троллишь?
31 1318605
>>18505
А разве фигурные скобки не надо переносить? Так они визуально показывают блок кода.

>>18513
>>18514
Я не учусь на программиста и не работаю им. Мне просто бывает скучно и я читаю Кернигана. Иногда делаю сам для себя задачи, которые мне интересно на телефоне. Вот, например, из недавнего сделал программу которая вычисляет шанс что из 1-5 кубиков выпадет хотя бы на одном 5 или 1 (для игры в тысячу считал):

https://pastebin.com/M9bE5BUG

Насколько говнокод, если я к тому моменту даже до функций не дошел? Думаю учиться делать нормально лучше с начала обучения. На телефоне форматировать текст неудобно, но я старался.
32 1318618
Важно ли, где в объявлении указателя звёздочка?
В пpимеpах вижу int p, но мне кажется, что int p как-то лучше выглядит, ничего не смущает.
33 1318623
>>18618
Дело вкуса, в Винде обычно ставят звезду у типа, на Линукс у названия переменной, на макоси вообще между, то есть тип пробел звезда пробел название переменной.
я сейчас про ядро говорю
Вообще единственный аргумент есть в пользу линукса такой, что:
int #p, k, если ты пишешь вот так, то у тебя p это указатель, а k int, поэтому так типо более читаемо и согласуется с тем как компилятор разбирает код на морфемы.
Например:
int# p, k
Тут неподготовленный читательчитай новичок может подумать, что и p и k указатели, что конечно же не так.
Для компилятора без разницы как ты ставишь звёздочки, это нужно для человека, которые йбудет читать твой код.
# это звездочка
628734208760234.png37 Кб, 1280x1024
34 1318639
>>17959
В том, в чём ты, блядь, пишешь - это полный отстой.
Быстро переходи на emacs, и люби самого себя.
emacs-goddess
35 1318644
>>18639
Ну сейчас бы пианино вместо ИДЕ советовать.
36 1318650
>>18644
Какой же ты тупой, когда ты сдохнешь пидар
37 1318660
>>18639
В vs code пробелы и табы лучше отображаются, у тебя они так в глаза бросаются, шо пиздец.
38 1318665
>>18660
Очевидно же, что мной так было сделано для себя любимого.
emacs-goddess
39 1318666
>>18639
>>18665

> Goddess


Это местный пидор?
40 1318669
>>18666
Если ты пределаешь мне хуй, то да.
emacs-goddess
41 1318676
>>18665
А ты пишешь что-то более менее серьёзное или только лаба.цпп?
42 1318693
>>18639
Аж глаза заболели от твоего скрина
43 1318696
>>18676
Конечно пишу что-то серьезнее лаба.ц, иначе какой в этом смысл.
emacs-goddess
44 1318700
>>18696
Например?
Профиль на гитхабе скинешь?
или корпоративный софт онли, который на внутренних гитлабах всяких крутится?
45 1318722
>>18639

> signed


> int


> main


МАЯКОВСКИЙ В ТРЕДЕ!
46 1318730
Ктонить пробовал прикручивать мокрописечную си либу в ведроиде?
47 1318744
>>18605
Бамп вопросу
48 1318755
>>18744

>Насколько говнокод


На 5 балов.
(c==1) || (c==5) || (d==1) || (d==5) || (e==1) || (e==5)
i=e=sumx2=sumx3=sumx4=sumx5=total=0;


это пиздец
49 1318760
>>18755

> это пиздец


А каким бы ты способом решил эту задачу используя только if, for и while?
50 1318765
>>18760

>А каким бы ты способом решил


не знаю, я про твой стили ващет
51 1318768
>>18765
А что с ним? Я выше прочитал что перед +-= и так далее надо пробелы ставить. А больше не вижу косяков. Ну а про короткие имена переменных я в курсе, они такие потому что я на мобиле пишу, заебусь длинные имена писать раньше чем что-то рабочее сделаю.
52 1318770
>>18768
Ну скобки нинужны, смотри приоритет операции, паровозное обнулении тоже дико смотрится и чет дохуя у тебя переменных
53 1318772
>>18605

> 1-5 кубиков выпадет хотя бы на одном 5 или 1


А расскажи, что делает этот страшный код? Почему это не pow(2.0 / 6, 5)?
54 1318775
>>18770
У меня как-то давно без скобок низуя не хотело работать и я с тех пор каждое выражение с && или || ебеню в скобки. Учту, что можно и без них.

А как без обнуления то? Иначе у переменных будут же рандомные значения, нет?

Так переменных дохуя потому что дохуя значений хранить надо:
- 5 разных кубиков
- количество нужных комбинаций и общее количество комбинаций для 2, 3, 4 и 5 кубиков.
55 1318777
>>18775

>Так переменных дохуя потому что дохуя значений хранить надо:


И кокое значение хранит i? Крч, гугли теорвер у тебя проеб с алгоритмом, но для говнокода сойдет, можно отправлять на govnokod.ru
56 1318787
>>18772

>А расскажи, что делает этот страшный код?


Я захотел узнать какой шанс что у тебя из 5(/4/3/2) кубиков хотя бы на одном выпадет 1 или 5. Ебаться с теорией вероятности я не хотел и поэтому написал программу.

>Почему это не pow(2.0 / 6, 5)?


потому что я еще не знаю что это такое.

>>18777

>И кокое значение хранит i?


Это счетчик, очевидно же.

>гугли теорвер у тебя проеб с алгоритмом


Схуяли? У меня правильно посчитаны все вероятности, но ты можешь попробовать доказать что это не так.
57 1318790
>>18787

>Это счетчик


а ты смешной

>можешь попробовать доказать


лол
58 1318791
>>18700
>или корпоративный софт онли
emacs-goddess
59 1318792
>>18790

>а ты смешной


А что не так я сказал?

>лол


Что не так, покажи косяк? Все верно у меня посчитано.
60 1318892
>>18605

>Я не учусь на программиста и не работаю им. Мне просто бывает скучно и я читаю Кернигана. Иногда делаю сам для себя задачи, которые мне интересно на телефоне.



Тогда тебе не стоит писать на Си. Он достаточно сложный и заточен под низкоуровневую работу, а кодить нормально ты еще не умеешь. Сейчас лучше попробуй писать на питоне. Иначе читай SICP, начинай Кернигана с самого начала и прорешивай все подаваемые задачи.

>Вот, например, из недавнего сделал программу которая вычисляет шанс что из 1-5 кубиков выпадет хотя бы на одном 5 или 1 (для игры в тысячу считал):


>https://pastebin.com/M9bE5BUG



Ну это хрень полная, ответ и без теорвера очевиден: 1 - (2/3)^5.

>Насколько говнокод, если я к тому моменту даже до функций не дошел?



До говнокода еще далеко (честно).
15434802846470.jpg479 Кб, 960x960
61 1318971
INT SYSTEM (CHAR *PARAMETER);

В этом итт господарьске треде попрошу рассказать C-бояр как работает функция system() и можно ли ее организовать своими силами в языке C. И если можно, то как? Хотя бы на приблизительном уровнe

Отдельно попрошу об отсылании к сорцам компиляторов не отсылать, ибо там хуй разберёшься
62 1319022
>>18971
Glibc source:
https://code.woboq.org/userspace/glibc/sysdeps/posix/system.c.html

Секция с sigaction n1
1) sigprocmask SIGCHLD -> SIG_BLOCK
2) fork, restore signals, execve SHELL_PATH с новым argv
Секция с siagction n2

lock'и расставлены так, чтобы "подпроцессы" лишний раз не использовали sigaction на SIGIGN и SIGQUIT.

В этом всем нужно разбираться если хочешь написать полноценный аналог библиотечного system.
Если нет времени/лень то просто посмотри вызовы fork, execve в linux man. Там же отрывок про argv в execve.
63 1319023
>>19022
Продолжение
Можешь взять strace и подглядеть строчку с execve (подглядывать нужно за ребенком-шеллом).
image.png22 Кб, 1042x249
64 1319065
Объясните, почему во втоpой стpоке вывода: "strcat is helloworldworld, strlen of result: 10"
почему пpибавился ещё один world?
65 1319068
>>19065
Удивительно, что она вообше что-то вменяемое выдает. Вроде бы у тебя тут выход за пределы массива
66 1319072
>>19065
>>19068
А хотя нет, strcat() удлинняет массив при каждом вызове
67 1319075
>>19072
навеpное пpосто пpибавляет str1 пpи каждом вызове. понятно, я просто дурачок.
68 1319087
>>19072
Но если поменять местами world и hello, то массив наложится на другой. Короче, не делайте так, ребята
69 1319091
>>19087
Да я тупой, все просто:
strcat() стирает '\0', а strlen() читает до первого '\0' в следущем массиве
70 1319099
>>19065
Порядок вычисления аргументов функции в Си неопределен. В printf аргументы часто передаются задом наперед, как в функции с неопределенным числом параметров. Сначала вычисляется первый strcat, потом strlen (10), потом еще один strcat.

Можно пустые квадратные скобки оставить, размер под строчку сам подберется.

strcat к тому же месту в памяти приклеивает еще одну строку (strlen + strcpy), а массивы столько не вмещают, делай их больше или используй динамическую память. Переполнениями массивов ты гарантированно испортил что-то, что лежит на стеке рядом с твоими строками. Попробуй использовать свой strcat раз 5-6 и из твоего main уже не получится сделать return :).
71 1319100
>>19099
Под первым strcat я имел в виду strcat внутри strlen.
72 1319242
>>17959
скомпилировать и в gdb disassemble посмотреть - понятнее будет код
73 1319244
>>18639
с высоты пользователя vim воспринимаю подобные споры как петушиные бои
74 1319246
>>18892

> Тогда тебе не стоит писать на Си


А, быть может, как раз таки стоит. Зачем ориентироваться на современные технологии, если не стоит цель заработка? Почему бы не позволить себе окунуться в ламповое технарьское хобби по труъ-шному? Для общего развития даже полезнее. Если никуда не рваться, то сишечка и асм очень даже по кайфу, ведь ты реально в чем-то прошариваешься.
75 1319247
>>18892
>>19246
Тут кодеры старой школы тоскуют по счастливой юности и сишечке, вынуждены перекатываться. У человека же нет никакой нужды в этом плане, а вы так вот отговариваете.
76 1319274
>>19246
Да, всё правильно. Вот только у тебя сейчас не очень кодить получается, даже без привязки к какому-то языку. Я советую тебе сначала почитать какую-то теорию наподобие SICP или что-нибудь подобное.
77 1319275
>>19274
Это писал не я собственно, но я с тем аноном согласен.

>Вот только у тебя сейчас не очень кодить получается


Это почему? Потому что какому-то стилю оформления не придерживаюсь?
78 1319276
>>19247

>У человека же нет никакой нужды в этом плане, а вы так вот отговариваете.



Я не отговаривал, а предложил сначала просто в программировании немного освоиться.

>Тут кодеры старой школы тоскуют по счастливой юности и сишечке, вынуждены перекатываться.



Я юн перекатываться не вынужден.
79 1319277
>>19275
Нет, просто алгоритмы плохие.
80 1319278
>>19277
Чем плох конкретно этот алгоритм?
81 1319280
>>19278
Я наверно неправильно выразился, у тебя здесь просто o(n^2) сортировка, может быть она и рабочая, но сам код перепутанный и ужасный. Книжки типа SICP учат элегантному программированию, а не таким макаронам.
82 1319282
>>19280
Макароны как я понимаю это когда код скажет туда-сюда всякими goto и подобным. У меня же такого нет, все по порядку идет. А вообще сперва надо хотя бы Кернигана прочитать целиком, а уже потом всякие SICP читать, не? А то я пробовал читать правила оформления и про половину вещей просто не ебу что это такое в принципе.
83 1319283
>>19282
В SICP пишут на lisp scheme.
84 1319285
>>19282

>просто не ебу что это такое в принципе.


покажи лучше писечку
85 1319288
>>19283
Нахуя мне LISP?
изображение.png10 Кб, 367x434
86 1319293
>>17959
Я, конечно, ни разу не претендую на хороший стиль и прочее, но вот тебе сортировка по убыванию, все в пределах stdio.h. Вроде читабельно.
87 1319294
>>19276

> сначала просто в программировании немного освоиться


Не могу знать, стоит или не стоит начинать с Си, педагогом не являюсь, а на собственном опыте подобные успехи не пришлись, сам сокровище K&R для себя открыл уже не девстенником в программизме. Тем не менее, ИМХО, советовать Python таки подстава. Тогда уж лучше "Accelerated C++" от Koenig и Moo, или Страструпа "Programming Principles and Practices using C++", вроде как годнота для вкатывальщиков. Но, в принципе, если анон мозговит, и K&R с кое-каким скрипом заходит, то можно и обойтись.
88 1319296
>>19294

>Тогда уж лучше "Accelerated C++" от Koenig и Moo, или Страструпа "Programming Principles and Practices using C++", вроде как годнота для вкатывальщиков.



Еще лекции по Си от Праты.

>Но, в принципе, если анон мозговит, и K&R с кое-каким скрипом заходит, то можно и обойтись.



Про вероятности и кубики был код, анону явно нужно что-то до K&R.
89 1319297
>>19296

>анону явно нужно что-то до K&R.


Это почему?
90 1319298
>>19297
>>18605 (ссылка на pastebin)
91 1319299
>>19298
Ты мой пост и процитировал. Почему мне стоит читать что-то до K&R?
92 1319303
За всю жизнь не прочитал до конца ни одной книжки ни по одному языку программирования (это для меня слишком долго и скучно). Задачки из книжек, естественно, тоже не решал. Сколько себя помню, всегда просто садился и ебошил код сразу, стараясь сделать то, что нужно, и пользуясь только гуглом, документацией по всяким разным API и стандартом или официальным описанием языка. Иногда еще читал найденные в гугле отдельные статейки или посты, посвященные тому или иному вопросу. В общем, это я к тому, что вообще без разницы, что вы там и в каком порядке читаете. Можете вообще книг не читать, вместо этого просто иногда заглядывая в нужные их разделы. Главное же это просто программировать побольше, и всегда стремиться к написанию как можно более красивого и эффективного кода. На чем вы пишете и с чего начинаете обучаться тоже не имеет большого значения. Я вот с ассемблеров вообще начинал, и мне норм, а вы тут от такой высокоуровневой и комфортной сишки людей отговариваете. Зачем?
93 1319464
>>19023
>>19022

Спасибо, анон
7a6e7d2518b732c5faf1aa7e56f501d55079af1a.jpg110 Кб, 551x600
94 1319752
Сап, котаны.
Может не совсем тематика, но вы уж не пинайте.
Есть железяка ESP8266, кодится в Eclipse через MinGW + Espressif-ESP8266-DevKit-v2.0.9-x86.
Хочу подцепить к ней SD карту памяти по SPI, СИ-шная библиотека была бы очень полезна, но она не гуглится.
Хотя гугол пестрит библиотеками для ардуинки.
Куда копать?
95 1319823
При реализации стека на односвязном списке адреса указателей на каждый узел будут отличаться на фиксированную длину, или память может быть фрагментирована и между адресами будут разные промежутки?
Почему-то между первым и вторым узлом довольно большой промежуток в 428 байт, а между 2-3 3-4 14 байт. Каждый узел это структура с 3 int переменными и указателем типа структуры на следующую.
Я не очень представляю эту виртуальную адресацию.
96 1319831
>>19823
тут вопрос сводится уже не к твоей конкретной структуре данных, а откуда маллок память берет, выделяешь память ты в разное время, поэтому врядли 2 узла обязаны рядом находиться в памяти
97 1319838
>>19831
Разве malloc не из кучи выделяет память? И выделение памяти идет подряд для четырех узлов одно за другим.
98 1319841
>>19838
ты можешь выделить 2 узла подряд, тогда да, должны быть подряд, потом например для другой дресни выделить, а потом опять со стеком хуярить, в итоге у тебя потеряется шаг тот.
99 1319853
>>19841
Подряд все идет. Что интересно, до выделения памяти я поместил принтф хеллоуворлд и теперь абсолютно все адреса отличаются ровно на 20 байт.
У препода в примере просто между всеми узлами равное число, вот и я ищу объяснение моему результату. Когда я компилирую его код, то промежуток неравный тоже появляется и адреса ровно те же, что у меня.
Это зависит от системы/процессора/среды разработки?
100 1319859
>>19853
не зависит, скинул бы код где шаг не одинаковый
101 1319865
>>19859
#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();
}
Скомпилируй, если не трудно, и запость результат вывода. У меня после первого узла большой промежуток.
101 1319865
>>19859
#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();
}
Скомпилируй, если не трудно, и запость результат вывода. У меня после первого узла большой промежуток.
102 1319869
Блин, указатели NEXT, TOP, X, NEWCARD в курсив превратились. Ну и перед malloc'ами.
104 1319886
>>19883
Ну хрен знает в чем дело, код-то идентичный.
105 1319895
>>19886
со средой чо-то, через gcc все норм
106 1319904
>>19895
Я скомпилил в двух средах, разница одинаковая 1AC(428 байт) после первого узла, остальные по 20.
107 1319912
>>19904
Нашел на вики

>соседние элементы списка могут быть распределены в памяти нелокально, что снизит эффективность кэширования данных в процессоре


https://ru.wikipedia.org/wiki/Связный_список
По-моему, это как раз мой случай.
108 1320165
Помню, как какой-то анон говорил сравнить качество кода стандартных утилит linux и openbsd. Говорил, что разработчики openbsd пишут более грамотный код. Книжка ещё какую-то соаетовал по безопасному программированию на C. Реквестирую, если кто знает.
109 1320178
>>19244

>с высоты пользователя vim


То есть это как с низины пользователя emacs
111 1320903
Как создать не заполненный символьный массив, который можно заполнить текстом через консоль? С числовыми массивами работать научился, а с символьными ни в какую не получается. Там надо сначала всем ячейкам присвоить \0?
112 1320954
>>20903
Как и обычный массив. Функции терминатор ставят сами.
113 1321018
>>20954
Можешь пример программы ввода и вывода символьного массива показать?
изображение.png14 Кб, 972x345
114 1321029
>>21018
А в чем собственно проблема? gets конечно лучше не использовать, но для примера сойдет.
115 1321038
>>21029
Использую VS, gets у меня нету в stdio.
116 1321039
>>21038
fgets, fgets_s, gets_s, getline?
118 1321047
>>21043
А, ну хоть gets_s есть. Он принимает указатель на начало строки и максимальный размер этой самой строки чтобы не случился гроб гроб SIGSEGV. Так что аргументом припиши к нему 255.
изображение.png41 Кб, 991x556
119 1321052
>>21047

>Так что аргументом припиши к нему 255


Я не совсем понял что это значит. 255 вместо 0 или вместо 256?
Вот я попытался со scanf_s, открывается консоль, пишу что угодно и консоль закрывается без всякого ответа и вылезают ошибки.
120 1321053
>>21052
scanf_s перед return чтобы консоль не закрывалась, если что.
изображение.png42 Кб, 999x591
121 1321058
>>21052
Забыл размер массива в выводе указать, но все равно не работает.
изображение.png13 Кб, 989x323
122 1321063
>>21052
Вот так сделай. (Самой студии у меня нет, только компилятор).
123 1321072
>>21063
Работает. Как такое же со scanf_s сделать?
124 1321084
>>21072
scanf_s("%s", str, 256);
125 1321087
>>21084
Тот же результат, что и тут >>21058
Наверное, дело всё же в выебонах мелкомягких в VS.
126 1321093
>>21087
Перевод строки добавь в printf, типа printf("%s\n", str);
127 1321094
>>21084
Не сожрет оно так, на первом пробеле прервется.
128 1321099
>>21094
Ты прав. Тогда так
scanf_s("%[^\n]s", str, 256);
130 1321114
>>21100
Добавь fflush(stdin); перед вторым scanf.
изображение.png16 Кб, 1004x381
131 1321122
Сделал без кастылей и заработало нормально. Спасибо все за помощь, кто помогал.
132 1321129
>>21122
А теперь строку с пробелами попробуй.
изображение.png16 Кб, 1004x381
133 1321131
>>21129
Работает до первого пробела. Как исправить?
изображение.png6 Кб, 396x252
134 1321132
>>21131
Не та картинка.
135 1321362
>>21131
Вместо scanf используй fgets.
136 1321557
>>21362
Где бы я не читал, везде противопоказывается использовать gets. Как сделать то же самое со scanf?
137 1321565
>>21557
fgets != gets. С fgets'ом всё абсолютно нормально.
изображение.png18 Кб, 953x381
138 1321566
>>21565
Меняю gets_s (gets в VS в stdio.h нету) на fgets и функция не принимает 2 аргумента.
139 1321576
>>21566
Так тебе пишут же
"см. объявление"
Зайди куда-нибудь и посмотри
140 1321586
>>21576
Нашёл char fgets(char str, int n, FILE* stream); но так и не понял синтаксиса. У меня работает с gets_s, какие могут быть подводные?
141 1321591
>>21586
Погодите, так fgets это же gets для файлового ввода. Вы меня тут троллите, что ли?
142 1321644
>>21591
fgets(str, 255, stdin);
143 1321706
>>21644
Почему fgets без потока stdin не работает? Как определить для себя, в каких случаях для работы команды просто нужно дописать поток в аргументы?
144 1321837
>>21706
fgets работает с любым потоком. stdin вполне является таковым.
145 1321859
>>21837
Но почему в моём случае без потока fgets не работает? Есть ли случаи, когда fgets поток не нужен?
146 1321880
>>21859
Нет, поскольку он работает именно с потоками. Все, что ты вводишь в консольном окне попадает в поток stdin.
147 1321881
>>21859
fgets - функция.
У этой функции 3 параметра.
Тебе всегда нужно передавать ей 3 параметра.

>Но почему в моём случае без потока fgets не работает? Есть ли случаи, когда fgets поток не нужен?


Странный вопрос.
fgets — get a string from a stream
Тебе нужно явно указать поток, с которого эта функция прочитает твою строчку. Ввод с терминала - stdin.
148 1321888
>>21881

> Ввод с терминала - stdin


stdin - это стрим, под которым лежит дескриптор STDIN_FILENO, то есть 0, и терминал там совершенно не обязательно. Ввод из терминала - это fdopen (open ("/dev/tty", O_RDONLY), "r");
149 1321896
>>21859
забракованная gets лаконично берет один аргумент - указатель на буфер, и читает в него из stdin до первого \n, без проверки переполнения. Если лень писать
fgets (buf, sizeof (buf), stdin)
можно написать макрос
#define gets_(buf) fgets (buf, sizeof (buf), stdin)
но если buf - не имя локального или static массива, а просто указатель, то препроцессор подставит константу 4 или 8, в зависимости от архитектуры
Безымянный.png36 Кб, 866x785
150 1321955
Первый раз стиль пикрил увидел, что скажете?
151 1321957
>>21888
Да, как угодно определяй дескрипторы и exec'ай бинарник? Я это прекрасно знаю. Ты иди объяснять это анону, который про обязательность 3его параметра fgets спрашивает.
152 1321959
>>21955
Красивая змейка ужасно
153 1321965
>>21959
Тоже вначале подумал что это Питухон
154 1322095
>>21957
Ну, если забыть #include <stdio.h>, то компилятор с warning-ом проглотит вызов fgets с двумя параметрами, и что лежало в регистре RDX, то и станет индексом дескриптора)
155 1322097
>>21957
>>22095
ой, хуйню сказал. Это ж указатель на FILE...
14655207958700.jpg43 Кб, 258x260
156 1322263
>>18623

>int# p, k


Бля, реально засада,
GMT.jpg17 Кб, 271x186
157 1322266
Почему, собственно, советуют начать изучение программирования с С.
Цитата из K&R:
Вы обнаружите, что многие существующие программы являются просто расширенными версиями обсуждаемых здесь прототипов.

Точнее и не скажешь, лол.
010719.JPG26 Кб, 825x254
158 1322287
ЧОМУ???
159 1322320
>>22287
Попробуй выделить память.
160 1322420
>>22287
>>22320
...и не писать в строку, заданную литералом.
161 1322421
>>22320
Дай пример пожалуйста, я запутался.
162 1322575
>>22320
>>22420
Вы долбоёб, уважаемый.
Очевидно, что имеется ввиду
while (#fin++ = #init++);
вместо
while (#init++ = #fin++);

Поменять init и finместами и все работает.
Литералы блядь, память...
Известнейший пример для копирования строк.
Эксперты ебать.
163 1322585
>>22575
На какое место в памяти указывает fin в момент первой итерации? Куда будут записаны копии символов? Почему поинтеру на чар присваивают значение поинтера на конст чар?
164 1322598
Почему Си не популярный?
165 1322600
>>22598
slozhna
166 1322658
>>22575
А то, что указателю присваивается хуй пойми какое значение - это норма?
167 1322662
>>22600
Вот будете смеяться, а я осилил только Си, и очень маленько ассемблеры x86 и avr. Даже Питон не могу освоить.
168 1322671
>>22662

> я осилил только Си


Тащи свой петпроект, посмотрим что ты там "osilil"
169 1322754
>>22575
Нет, уважаемый, Вы.
изображение.png79 Кб, 1920x1080
170 1322783
Анон, помоги! Программа должна выводить 1, введённый символ включается в строку, и 0, если не включается. На вложенный цикл особо не бухти, это задел для проверки на включение строки в другую строку.
171 1322785
>>22783
Забыл добавить, что в этом случае я ожидал получить 0.
172 1322907
>>22287
Ты в массив констант(через неконстантный указатель)(это UB),
копируешь байты из невыделенной тебе памяти(UB). Вроде так.
173 1322913
>>22783
>>22785
Вероятно '\0' == '\0'
Тебе нужно бежать не по всему размеру массива, а по длине строки, вероятнее всего.
174 1322931
>>22783
Во первых после совпадения надо выйти из двух циклов.
Во вторых циклы у тебя выходят за концы введённых строк
и случайно в мусоре попадаются одинаковы чары. Должно быть
как-то так:
#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);
175 1322937
>>22931
И ещё бы хорошо сразу int a= нулём проинициализировать.
176 1322943
Почему???
Число показывает, что все символы второй строки включаются во вторую беспрерывно. Иначе 0. Почему здесь вот так?
изображение.png14 Кб, 517x487
177 1322952
>>22943
А, всё, я понял. Но теперь всплыла другая проблема. Почему i-- в else так влияет на результат при том, что else здесь явно не должен вообще включаться? Как тогда уменьшать счётчик i при ложном ответе if?
178 1322965
>>22952
У тебя ж там в третьем цикле можно в бесконечность угодить .
179 1322968
>>22965
Идет сравнение первых букв строк, они неравны, i--, потом в
for i++, и бесконечный цикл.
180 1322971
>>22965
>>22968
Я это уже исправил, но появилась другая проблема. Почему вот так получается?
181 1322991
>>22971
>>22971
А что ты там хочешь? Равенство строк проверить что ли? На развлекайся:

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" );
182 1322993
>>22991
Э-э, звёзы пропали.
char(ЗВЕЗД) s1="abc";
char(ЗВЕЗД) s2="abc";
while((ЗВЕЗД)s1 && (ЗВЕЗД)s2 && (ЗВЕЗД)s1++ == (ЗВЕЗД)s2++) equal++;
183 1323001
>>22991
О не ошибка, должно быть s1-=equal ; s2-=equal; (но это не точно :)))
184 1323006
>>23001
Очередной фикс while(s1 && s2 && s1 == s2) equal++, s1++, s2++;
185 1323027
Можно ли было сделать лучше?
186 1323028
>>22971
>>22971
А, ты проверяешь вхождение второй строки в первую, тогда попробуй так:
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" );
187 1323030
>>23028
А я уже всё >>23027
189 1323043
>>23037
Владимир Владимирович, а вы как выходите из вложенных циклов?
856421.jpg119 Кб, 675x899
190 1323101
>>23043
Многоходовочкой
191 1323131
>>23101
const bool Putin= TRUE;
while(Putin)
happiness++;
192 1323236
А чем плоха гоутю? Вполне себе лоулеуел фича в духе сей
193 1323366
У меня в объявлении структуры, ссылка на другую ещё не объявленную структуру.Как объявить прототип второй структуры? Ну, у функции это так -- func(int); .
194 1323404
>>22991
по идее, в условие задачи входит не использование строчных функций из стандартной библиотеки (#include <string.h>), в т.ч. strlen...
195 1323410
>>23236
Яростно плюсую. Паттернодрочерам в великих и могучих Сях не место. При желании, несамодокумментированный гавнокод можно и написать и с соблюдением всех rule-of-thumb и прочих недоконвенций.
196 1323411
>>23404
тогда
for(int len=0; s1!='\0'; len++); //извлекаешь len после цикла в другую переменную, чтобы вторую строку прогнать
197 1323460
>>23411
int strequal (char #s1, char #s2) {
while (#s1 && #s2 && #s1++ == #s2++);
return #s1 == #s2;
}
зачем вообще len?
198 1323464
>>23366

> ссылка на другую ещё не объявленную структуру


struct foo { struct bar ∗barptr; }
// и когда-то потом:
struct bar { ... };

Или с тайпдефами:
typedef struct bar bar;
typedef struct {
bar ∗barptr;
} foo;
// и когда-то потом:
struct bar { ... };

Incomplete-структуры это норм, бояться их не нужно, используются очень часто.

>>23460
А еще можно выкинуть еще ∗s2 из условия, его неплохо == поймает. А потом осознать, что коротко - это не всегда красиво.
199 1323470
>>23464

> его неплохо == поймает


Таки да. Ну, а краткость вполне оправдана, если функция используется чаще, чем переписывается, особенно когда это в разы ускоряет работу алгоритма. Однако, это меня не больше всего волнует... ТЫ КАК ЗВЕЗДОЧКУ ПОСТАВИЛ, ДЕМОН?
200 1323474
>>23470

> ТЫ КАК ЗВЕЗДОЧКУ ПОСТАВИЛ, ДЕМОН?


Звездочка из шапки, она нестандартная, компилятор поперхнется. Иногда тут еще ★ вот такую используют.
201 1323519
Так, аноны. Я уже 2 час голову ломаю над задачей, так что прошу помощи.
В общем, нужно сформировать двумерный массив самым простым способом.
12345
51234
45123
34512
23451
202 1323524
>>23519
for (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;
203 1323530
>>23524
Ахуеть, спасибо. Я бы сам до этого точно не додумался.
204 1323549
>>23131
Проиграл.
изображение.png24 Кб, 985x505
205 1323599
Откуда берётся -51?
206 1323602
>>23599
char со знаком, коды русских букв >128
207 1323603
>>23602
Ничего не понял.
208 1323628
>>23603
ну так иди читать как разные буковки, как представляются в кудахтере, почитай там про тип char, про ASCII, про юникод, хоть что-нибудь.
209 1323726
>>23599
Ты strq не обнулил, там мусор (точнее, у тебя отладочный билд, и студия для упрощения отладки вот такой хуйни забила стек байтами CC, это -52, да еще ты 1 прибавил). Алсо, не сравнивай символы с NULL. NULL - это нулевой указатель, и только указатель, а не нулевой символ в конце строки. Пиши либо просто for (int i = 0; stra[​i​]; i++) ... либо сравнивай с нулем: stra[​i​] == 0, либо с нулевым символом, если хочешь сделать на этом акцент: stra[​i​] == '\0'.
210 1323727
>>23726
В спойлере должно было != быть, ну ты понял.
211 1323819
Эй, мамкины эстеты! Помогите мне определиться со стилем.
Как лучше, так первая картинка или так вторая картинка?
212 1323855
>>23819
Чем они отличаются?
213 1323915
>>23855
Стилем отступов.
214 1323923
>>23819
И то и то пиздец.
215 1323924
>>23819
Это настолько ужасно, что выбирать тут не из чего. Когда продвинешься чуть дальше, уже будешь думуть про стиль. Но в целом, несколько выражений на одной строке (вот эти твои if ... for ... printf, да ещё и с фигрными скобками) - это 100% говнокод. Разве что иногда можно задуматься о if (expr) do_smth(); (просто выражение, нет фигурных скобок!), но даже это лучше писать на двух строках.
216 1324422
Аноны,
А что после праты и вкатывания в указатели?
Подрочить алгоритмы?
217 1324429
>>24422
Подрочи, и поймёшь какой си кхм говновый язык
218 1324660
Я хз, как это гуглить, хелп.
Проблема в том, что char* string, которую я передаю функции words_in_string, не пустая, но происходит такое колдунство. Кстати, адрес не меняется. Что я не понимаю?
219 1324714
>>24660
Выкладывай полный исходник или бинарь. Или довольствуйся пояснением, что либо ты портишь стек еще до вызова функции, либо у отладчика сносит крышу по причине билда с оптимизациями или еще чего-то подобного. Пробовал до 171 строке на втором скрине доходить? Ничего не меняется?
220 1324735
>>23924
Всё, что относится только к ответу "истина" от if лучше писать в одной строке, и относящееся к ответу "ложь" на последующей от if строке в одной строке. Также одна операция — одна строка, например: в 11 и 12 строках у меня ищутся размер введённых пользователем строк в двух массивах, найти размер 1-ой строки — первое действие, найти размер 2-ой строки — второе действие, по своей строке на каждое действие.
221 1324763
>>24735
Ага, начнёшь писать что-то серьёзное или может даже на работу устроишься, тогда научишься хорошему код-стайлуили нет.
222 1324772
Как сделать так, чтобы после отработки цикла с printf внутри другого цикла printf делал вывод ниже предыдущего вывода, а не в одну строку?
изображение.png21 Кб, 493x508
223 1324782
>>24772
Всё, уже придумал. Но как теперь сделать вывод ровной матрицы?
224 1324783
>>24782
\t вместо пробела
225 1324784
226 1324786
>>24783
Надо же, сработало. Как называются такие хреновины? По каким ключевым словам искать? Как называются и для чего нужны хрени, которые можно ставить, а можно и не ставить между % и типом переменной в scanf и printf?
227 1324789
И как заставить rand() каждый раз выводить разные числа?
228 1324791
>>24786

>Как называются такие хреновины


escape symbols

>Как называются и для чего нужны хрени, которые можно ставить, а можно и не ставить между % и типом переменной в scanf и printf?


format strings

> И как заставить rand() каждый раз выводить разные числа?


srand(time(NULL))
229 1324792
>>24791

>srand(time(NULL))


time идентификатор не найден
230 1324795
>>24791

>escape symbols


Это управляющие символы (Control character).
231 1324799
>>24795
Нет. Управляющие символы не видны, в \t вполне виден, это escape symbol, который превратится в соответствующий control где-то во время компиляции.
232 1324823
>>24799
\t в этой статье под заголовком "Управляющие символы".
https://ru.wikipedia.org/wiki/Управляющие_символы
Screenshot2019-01-1110-37-04.png102 Кб, 683x838
233 1324825
>>24823
Они используют escape sequence вместо escape symbol, что правильно, так как escape symbol это сам бэкслеш. Похуй.
Я делал акцент на том, что \t и символ с ASCII-кодом 09 - разные вещи. Это не \t заставляет терминал печатать табуляцию, а символ с кодом 09, который сам по себе не виден.
234 1324990
>>17913 (OP)
Есть у Си спека или что то такое, где можно узнать все возможности?
235 1324993
>>24990
Вторая часть K&R.
Не самый последний стандарт.
236 1325007
>>24993
Там есть про системные вызовы? У Си вообще есть документация?
237 1325013
>>25007

>У Си вообще есть документация?


Описание стандарта C11, например.

>Там есть про системные вызовы?


Системные вызовы привязаны к самой ОС. Для linux есть manpages и утилита man, там подробно задокументированы вызовы (man 2 write, например) и сам язык.
238 1325021
>>25013
Спасибо тебе большое.
239 1325056
>>25021
Позязюсьта
240 1325578
>>25013

>Описание стандарта C11, например.


C18 же.
241 1325656
За что я могу взяться?
Недавно вызубрил синтаксис си, пару стд биболиотек.
Может тут кому-то нужна помошь с проэктом?
Готов гитануть ваш проэкт и покапаться в нем
242 1325673
>>25578

>C18 же.


И что нового в нем?
243 1325679
>>25673
Новых фич нет, только уточнения формулировок стандарта.
244 1325682
>>25673
>>25679
ATOMIC_VAR_INIT отменили, и теперь можно инициализировать переменные atomic-типов нормальным способом. Вполне можно считать за новшество.
245 1325688
>>25682
И это-то за 7 лет?
246 1325689
>>25688
Потому что мы ждем C20/21, а это просто багфикс-релиз.
247 1325702
>>25689
Есть почитать про будущие измениния в C20/21? Интересуюсь.
248 1325713
249 1325803
Подскажите библиотеку для работы с бинарными деревьями, желательно с примерами. Нужно делать поиск по большому количеству хешей, предварительно построив из них дерево
250 1325831
>>25578

>>>например.

251 1325861
Не могу нагуглить как у Си с асинхронностью и легковесными потоками.
252 1325873
>>25803
а зачем тебе деревьями эту задачу решать? требуется усредненное время как на вставку так и на поиск что ли?
253 1325875
>>25861
уточни что тебе конкретней надо
254 1325894
>>25875
Что есть в Си чтобы писать конкурентный код? Не используя потоки ОС.
255 1325896
>>25656
Бамп реквесту
256 1325900
>>25894
setjmp/longjmp
257 1325912
>>25900

>setjmp/longjmp


Похоже это не то.
258 1326002
>>25656

>Недавно вызубрил синтаксис си, пару стд биболиотек.


>За что я могу взяться?


Пока только за SICP, очевидно же.
260 1326055
>>26002
Он же на языке lisp
261 1326097
>>26007
Есть понятие concurrency, - конкурентный код. Я понимаю, что Си может юзать процессы и потоки ОС. Но кроме того на нем можно писать конкуретный код?
262 1326132
>>26055
SICP не про lisp, а про то, как правильно писать программы.
263 1326181
>>26132
Как можно научиться правильному синтаксису на примере другого языкА?
264 1326198
>>25656
Что угодно, пиши плеер/фм/игру/небо/аллаха. Да хоть построй велосипед и изобрести заново какие нибудь функции из стандартной библиотеки.
265 1326200
>>26181
SICP не про синтаксис
>>26132

>, а про то, как правильно писать программы.


Еще бы любую книжку по алгоритмам и лекции Праты.
266 1326224
>>26097
Тебе корутины нужны. Это реализуется на setjmp, как тебе уже сказали. В винде оно есть готовое прямо в API в виде фиберов. Алсо: https://en.wikipedia.org/wiki/Coroutine#Implementations_for_C
267 1326389
Уважаемые, что посоветуете почитать после C Primer Plus?
Только начал вкатываться.
268 1326393
>>26181

>Как можно научиться правильному синтаксису на примере другого языкА?


Как можно узнав синтаксис стать программистом? Как можно выучив как ходят шахматы стать шахматистом? Как можно выучив цифры стать математиком?

Систаксис задает только правила написания букв. Суть программирования в смысле этих букв, а не правилах их написания. Программирование не про языки, а про вычисления, алгоритмы, логику, архитектуру. Язык только инструмент.
269 1326394
>>26224
Благодарю. А как насчет эвент библиотек, чтобы асинхронно было?
270 1326398
>>26394
GTK, например. Есть там сигналы и коллбэки.
271 1326409
>>25873
Есть большое количество хешей, выгрузка из кеша (несколько гигабайт), выгрузка обновляется не чаще чем раз в сутки. Нужно в реалтайме сравнивать хеши из кеша на совпадение с вновь генерируемыми хешами, которые потоком в очереди приходят, делать это нужно максимально быстро
272 1326410
>>25873

>а зачем тебе деревьями эту задачу решать?


самый быстрый алгоритм, который пришел ко мне в голову, для решения моей задачи
273 1326433
>>26398
Я имел ввиду libuv, libevent, etc. Они для чего используются? Их вообще юзают для написания программ, или только для рантаймов?
274 1326456
>>26409
не проще ли взять субд под эту задачу? заведешь табличку, будешь туда складывать что тебе надо и доставать
вариантов масса, от классики до неряционки
275 1326461
>>26433
это всего лишь библиотеки дающие более удобную работу с асинхронкой, что предоставляется целевыми ос
дополнительный плюс, что благодаря им обеспечивается кроссплатформенность
асинхронка же в 90% случаев, наверное, используется для одной задачи - написания серверов что пережевывают сетевые пакеты какого-нибудь протокола
276 1326469
>>26456

>не проще ли взять субд под эту задачу?



проще, но мне надо не проще, а максимально быстро.
У субд в любом случае еще будет накладные расходы, хотябы на парсинг запроса
277 1326471
>>26456
еслиб мне надо было проще, яб вообще бы, не на Си все это писал, а например на томже PHP+redis|mongo за пару часов накаталбы уже давно
278 1326473
>>17913 (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', ....

чому, что за сорт октала и чем он лучше хекса?
1547357453115554404.jpg82 Кб, 700x841
279 1326484
>>26473

>'0x00', '0x01', '0x02', '0x03'


Ой бля, скобки нужно убрать
280 1326486
>>26484
Молодец.
изображение.png10 Кб, 530x370
281 1326591
Почему появляется хуита снизу от того места, где должен был сработать fputs и на это должно было быть всё?
282 1326606
в этом itt треде си-нищуки работают на студентов
283 1326608
>>26469
че, правда думаешь что твой велописед будет быстрее индексов в бд, которые как раз работают на деревьях, которые пилят чуваки с 30ти летним опытом?
давай
284 1326614
>>26608

> че, правда думаешь что твой велописед будет быстрее индексов в бд


да, потомучто я пилю только тот код который нужен для моей задачи, небудет ничего лишнего, никакого парсинга запросов, только чистое обращение по адресам в памяти, да и опыта у меня (в программировании вообще, но не в Си конкретно) не сильно меньше, уже за 20 лет будет.
Щас пилю чисто на AVL деревьях, никаких субд, юзаю libavl+gmplib
285 1326679
>>26456
Внутри СУБД будет какое-нибудь B+ tree. Зачем городить слои и лагать на взаимодействии с БД, если можно реализовать то же самое напрямую?

>>26473
Если у тебя реализация инлайна в другом файле, то при сборке модуля компилятор реализацию не увидит, а значит и инлайнить ему будет нечего. Поэтому да, реализация инлайна должна быть либо в начале .c (если используешь только в одном модуле), либо в хедере. Правда, есть такая штука, как link-time optimization, когда кодогенерация откладывается до этапа линковки, но в этом случае всякая мелочь из других модулей будет инлайниться автоматически (если линкер сочтет нужным), без этих твоих атрибутов.

>>26591
Потому что ты заебал. Прочитай что-нибудь про сишные строки наконец уже. strlen() выдает длину строки, не считая '\0' на конце, и в результате ты не копируешь '\0' в strx, оставляя строку нетерминированной.
286 1326681
>>26614
Не заметил сообщения. Если ты проверяешь раз в сутки, подумай о том, чтобы во время проверки срать в дерево как придется, а балансировать, когда проверка закончится. Можешь на этом выиграть время при проверке (а может и нет).
287 1326691
>>25803
Тоже хочешь макбук в хайлоад-капе выиграть? А вот хуй тебе
288 1326692
>>26393
этот Господин прав как никогда
289 1326706
>>26691

>Тоже хочешь макбук в хайлоад-капе выиграть


понятия не имел, но спасибо за инфу
290 1326718
Нашел вакансию для себя нюфага,звучит так:

Обязанности:
разработка встроенного ПО для Linux (C, C++) и Windows (Visual C++, MFC) на платформе Intel x86, Freescale, сетевое взаимодействие по Ethernet;
сопровождение на объектах заказчика;
оформление документации;
возможны командировки.
---
Сопровождения на обьектах заказчика , как это понять? Яж вроде программист, нах мне ехать туда? Инет подключать?
291 1326796
>>26718

> сопровождения на обьектах заказчика , как это понять


Приезжать с программатором и ноутбуком, чтобы накатывать апдейты прошивок, отвечать на вопросы, почему ваш продукт такое кривое говно и отлаживать на местах то, что не получается отловить на стенде.
292 1326811
>>26692
Благодарю за поддержку. Надеюсь до кого-нибудь дойдет сея мысль.
293 1326833
>>17913 (OP)

>TCC:


Спасяба.
294 1326851
>>26796
Разве кодер должен такой хуйней заниматся? Первый раз слышу
baskak.jpg182 Кб, 1280x915
295 1326866
>>26409

>несколько гигабайт


Делол подобное на бинарном дереве, но быстро закончилась память. Посчитай примерно сколько оперативы нужно иначе или хэдуп или бд.
296 1326929
>>26851
Иногда да, мы так ходили по администрации президента и ещё на н-ном количестве мест, которых даже на карте нет.
297 1326937
>>26409

>выгрузка обновляется не чаще чем раз в сутки


Ну так отсортируй и ищи бинарным поиском, нахуя тут дерево городить.
298 1326938
Еще вот сюда можно посмотреть https://en.wikipedia.org/wiki/Bloom_filter
299 1326949
Возможно ли на Си вернуть из функции весь массив, а не только одну его ячейку, через только один вызов функции?
300 1326954
>>26949
Указатель на массив тебе чем не понравился?
301 1326964
>>26954
А как сделать указатель сразу на весь массив, а не только на одну его ячейку?
302 1326965
>>26866

> Посчитай примерно сколько оперативы нужно


В идеале памяти же нужно даже меньше чем сам размер выгрузки хешей, чтоб всё дерево в памяти постоянно держать, поэтому думаю что проблемы не будет, но в любом случае под это дело есть сервак с 64Гб оперативы который добивается при необходимости до 128Гб

> хэдуп


ох незнаю, помоему уж слишком тежеловесное решения для моей задачи, если юзать чтото готовое, то я бы выбрал redis

>>26937

> нахуя тут дерево городить.


по дереву можно просто рекурсией ходить, а значит уменьшается количество операций для поиска конкретного значения, т.е. быстрее будет работать, особенно если дерево балансированное
303 1326966
>>26949
по этому "вопросу", я думаю, становится понятен уровень треда
304 1326967
>>26938
спасибо за ссылкую, надо подумать над этим алгоритмом
305 1326968
>>26965

>64Гб оперативы который добивается при необходимости до 128Гб


чувак, возьми in-memory субд и перестань уже себе ебать мозг
мы понимаем что тебе очень хочется сделать свой велосипед, но повзрослей уже
306 1326969
>>25803
Для работы с хэшами лучше всего подходит хэш-таблица.

А вообще попробуй sqlite перед тем как писать велосипед
307 1326972
>>26969

>sqlite


пфф
чувак, на дворе 21 век
ты че
308 1326973
>>26969

>хэшами лучше всего подходит хэш-таблица


а ха ха
в данном случае хэши - это данные, епт
309 1326978
>>26964

>А как сделать указатель сразу на весь массив, а не только на одну его ячейку?



#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;
}
310 1326979
>>26978
парсер звездочки съел
https://pastebin.com/NKG54i6m
311 1326981
>>26968

> чувак, возьми in-memory субд и перестань уже себе ебать мозг


Мне хочется ебать себе мозг, можно я еще чутку поебу? Если мне вдруг надоест я в курсе готовых in-memory решений, но я хочу свой велосипед, т.к. уверен что это будет быстрее.

> но повзрослей уже


тяночку завести?

>>26969

>Для работы с хэшами лучше всего подходит хэш-таблица.


ну выше над тобой уже посмеялись, ты толи задачу не понял, толи просто у тебя базворд сработал, услышал хеш, в голове щелкнуло hash table
312 1326982
>>26966
ладно тебе, почти все такимы были, особенно те кто с PHP на Си переходил
313 1326989
>>26965

>чем сам размер выгрузки хешей


Ссылка на хэш и джва узла = 64 * 3 = 24 байта на одну запись как минимум
314 1327012
>>26964
чтоб прям охватывал?)
ну, можешь написать
#define UKAZATEL_SRAZU_NA_VES_MASSIV(ptr) ptr
и потом возвращать
return UKAZATEL_SRAZU_NA_VES_MASSIV(arr)
если тебе так будет спокойнее...
315 1327032
>>27012
Очень смешно, лучше бы объяснил ему, что такое указатель и массив в принципе.
316 1327065
Короче, ребят, дайте свой код с примером вывода массива из функции.
318 1327072
>>27065
Но тебе насамом деле нужно сначало понять, что такое указатели и как с ними работать, а потом понять что возвращать массив (или указатель на массив), в нормальной ситуации нет необходимости, и лучше все делать через структуры
319 1327083
>>27071
Ты хоть проверял работает твой код или нет?
320 1327085
>>27083
накатал за 3 минуты, скомпилил, работает, что не так?
321 1327087
>>27085

> %s/3 минуты/полминуты/


fix
322 1327088
>>27085
У меня на строку uint8_t a = malloc(size); жалуется
невозможно преобразовать "void
" в "uint8_t *"
323 1327091
>>27088
чем компилиш?
324 1327093
>>27088

>невозможно преобразовать "void " в "uint8_t *"


а так? https://pastebin.com/uBe66DRY
325 1327094
>>27088
цэпэпэшным компилером компилиш чтоли?
326 1327095
>>27093
А если у меня в функции над массивами происходят некоторые манипуляции, будет ли целесообразно прокручивать функцию в цикле дохуялион раз только чтобы вывести из функции в маин массив?
15475474002494.jpg43 Кб, 786x438
327 1327102
>>27095

> будет ли целесообразно прокручивать функцию в цикле дохуялион раз только чтобы вывести из функции в маин массив?

328 1327104
>>27095
расскажи лучше о себе, сколько тебе лет, в каком классе, каким компилером компилиш, какой осью пользуешся, в каком редакторе пишеш? Нам так будет проще понять твои проблемы и навести тебя на правильный путь
329 1327109
>>27104
Я не буду учить питон, нахуй это говно не нужно.
330 1327112
>>27109

>не буду учить питон


я и не настаивал, но думаю тебе лучше начать с чегото другого, например с Go, там хотябы компиляторы не перепутаеш
331 1327176
>>27088
Юзай сишный компилятор, а не крестовый.
студийный ребенок очередной
332 1327180
>>27176
Но как он на нём дошёл до указателей и массивов, или это версия K&R для особенных?
333 1327182
>>27180
А что такого? В плюсах нет указателей и массивов?
Вероятно он смотрит в книгу по системе, а компилит в студии плюсовый код, можно и так, конечно, но вот некоторые фичи все таки есть.
334 1327192
>>27180
K&R описывает С89, который полностью совместим с С++, за исключением вот этого случая. Поэтому лучше кастить, чтобы таких недоразумений не возникало.
335 1327217
Проблема указателей и типов, но типы 2 глава, а указатели 5. Тот же enum в С89 и C99 и крестах. Подразумевал проблемы должны были начаться немного ранее. Ну, ладно. Я вас услышал.
336 1327268
>>27192
В системе кастить не нужно, покрайней в мере если ты при объявлении переменной сразу ее инициализируешь.
Если ты инициализируешь ее дальше по коду, то кастить нужно только для увеличения читаемости.
Чтобы человек сразу понимал по касту какой тип у переменной.
337 1327355
Уважаемые,
А есть ли в С аналог partial?
Типа функцию можно раскидать по файлам? Например часть генерируется автоматически, а часть руками дописывается, и хочется в разных файлах это хранить. Но чтобы компилилось как будто писанное в одном файле.
338 1327373
>>17913 (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.



ВТФ анон? Почему советуешь говно?
339 1327384
>>27355
На препроцессоре можного такого напердолить, охуеешь
340 1327395
>>27373
(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.
image.png8 Кб, 1105x57
341 1327406
Как это работает
Оператор k = k | 040000000; добавляет 1, которая не хранится в числе для экономии разрядов
342 1327407
>>27406
Ебать, пикча откуда то взялась
343 1327410
>>27373
Книжки в шапку предлагали все кому не лень. Анону понравилась эта. В шапке еще и хардвей есть, на который говна гораздо больше лилось.

>>27395

> 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 (по большей части).

>>27406
Нихуя непонятно, что тут имеется в виду. Больше контекста есть?
344 1327415
>>27384
А как сделать это? >>27355

Просто интересно, напиши если не лень.
345 1327421
>>27406
040000000 - восьмиричное число (обрати внимание на ноль в начале), работает как любые манимуляции с битами
346 1327426
>>27415
Не очень понятно, что ты подразумеваешь под 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.h
typedef struct {

} yoba_ ## DATATYPE;

сгенерирует тебе yoba_float
347 1327429
>>27426
Вот реальный код, который это использует
https://github.com/ampl/gsl/blob/master/cblas/ccopy.c
348 1327430
>>27355
Но ведь partial - это всего лишь аргументы по умолчанию.
#define open_binary_read(filename) fopen(filename, "rb")
349 1327499
>>27426

>Не очень понятно, что ты подразумеваешь под partial.


Ну вот это например:
http://www.tutorialsteacher.com/csharp/csharp-partial-class

>>27429
Спасибо!
350 1327511
>>17913 (OP)
Двощик, не могу сконверить wchar_t в UTF-8. Конверчу через iconv, возвращает всегда 0 (типа, 0 байт сконвертировано).
Кот: https://ideone.com/nxH64Z
Где я долбоёб?
351 1327537
>>27511
Почитай, что именно возвращает iconv.

> Где я долбоёб?


iconv модифицирует указатель output таким образом, чтобы он указывал на оставшуюся часть буфера (после сконвертированного текста) таким образом, чтобы было удобно дописывать в него последующими iconv. Решение спорное, но у тебя ничего не работает именно потому, что ты возрващаешь указатель не на начало буфера.
352 1327538
>>27373
Решительно не понимаю и, при всем желании, не могу быть толерантен к тем, для кого существует понятие "вкат в указатели". Во что там вкатываться? Это каким надо быть ...?? Можно любую книжку по ассемблеру взять и теоретическое введение сказочкой на ночь почитать, потом в процессе K&R указатели сами собой мысленно изобретутся еще до главы про них.
353 1327542
>>27538

>при всем желании, не могу быть толерантен


Держи нас в курсе.
Как же заебали эти токсичные пидоры с даннингом-крюгером.
354 1327550
>>27542
Я, конечно, всегда сдержанно объясню, когда кто спросит, но внутри подгорает каждый раз. Это ж какой-то мазохизм непоследовательного изучения. Быть может, романтику находят в волшебном мире программирования из частных случаев и тупых вопросов, но это ни разу не проще, чем недельку-другую правильную теорию покурить.
!thank.jpg110 Кб, 750x354
355 1327633
>>27537
Ух бля
Писать кот, не читая манов? Никогда такого не было, и вот опять
356 1327640
>>27550

>всегда сдержанно объясню


зря
357 1327779
>>26969

>Для работы с хэшами лучше всего подходит хэш-таблица.


Деревья вроде быстрее.
358 1327796
>>27779
Нет, в дереве O(log N), где N - количество объектов в дереве, в хэштаблице при правильно подобранной хэш-функции почти всегда если коллизий нет O(1).
359 1327824
>>27796

>O(1)


>O(log N)


Мохнатое О для пидоров, ты же знаешь

>если коллизий нет


>если кэш не прогрет


>если Луна в зените

360 1327932
>>27824
Толсто
361 1327943
>>27932

>Толсто


Поясняй за О
362 1327962
>>27824
Это математическое понятие же, что ты доебался до него.
363 1327981
>>27943
Порядок роста
364 1327986
>>27962

>математическое


Так и говори, мол пузомерка, к реальности не имеющая нихуя общего
365 1327988
>>27981

>Порядок роста


Глупости
366 1327994
>>26965

>по дереву можно просто рекурсией ходить, а значит уменьшается количество операций для поиска конкретного значени


По сравнению с бинарным поиском? Ты бредишь, число операций будет одинаковым.
367 1327996
>>27986
Почему не имеет?
Например с теми же сортировками ты можешь сравнить какой-нибудь пузырёк с пирамидальной на одном и том же наборе данных и объяснить почему пирамидальная будет быстрее.
Вполне себе вариант, как по-твоему алгоритмы вообще оцениваются, и по каким требованиям ты выбираешь один из них, если не смотришь на оценки?
Заранее знаешь какой из них подойдёт лучше в твоём случаеопять же исходя из математики лол?
368 1328000
>>27994
Для бинарного поиска нужен отсортированный массив, вставка в дерево стоит намного меньше по времени, чем вставка в массивне в конец, даже если ты будет использовать подобие deque дерево все равно будет быстрее на вставке.и соответственно удалении
369 1328007
>>28000
Нахуя тебе вставлять в массив? Берешь 2 структуры данных, массив и хэш, массив размером в гигабайты, в хэш вставляешь текущую инфу. Ищешь и там и там. Раз в сутки их сливаешь, скидывая из оперативки на жесткий диск, и читая обратно.

А бинарное дерево размером в несколько гигабайт из которых две трети это указатели на ноды дерева, это так себе хуитка для этой задачи.
370 1328027
>>27996

>и по каким требованиям ты выбираешь один из них, если не смотришь на оценки


Пишу оба и замеряю скорость, реализации невозможно оценить.
371 1328028
>>28007

>Берешь 2 структуры данных, массив и хэш


В каком классе учишься?
372 1328033
>>28028
Мне 30 лет, а вот ты скорее всего учишься со своим "маам ну че он так говорит".
images.jpg6 Кб, 225x225
373 1328040
>>28033

>Мне 30 лет


А мне 40
374 1328081
>>27996

> Почему не имеет?


Потому что, сравнивая пузырек или selection sort со сложной сортировкой на практике, ты обнаружишь, что на в массивах с небольшим количеством элементов (меньше 10) пузырек заметно быстрее (посмотри реализацию qsort в glibc, они там до insertion sort деградируют в конце концов как раз по этой причине). Потому что кроме количества операций, есть еще разная цена операций, spatial locality, вот это все. И все это никак не отражается в O-большом, которое оценивает сферический алгоритм в вакууме, а не поведение реального кода на реальной машине. Поэтому да, как написали выше, это всего лишь оценка роста сложности, не более.
375 1328147
>>28033
>>28040
Два дебила - это сила.
376 1328148
>>28081
О большое оценивает алгоритмы при росте нагрузки, твой Кеп, да и на 10 элементах по факту вообще без разницы какой алгоритм юзать, meh
377 1328151
>>28081
Тем не менее согласен с тобой.
>>28148-кун.
378 1328196
>>27796
Я не вникал глубоко в вопрос. Мне кажется ты ошибаешься. Маршрутизацию сетевых запросов реализуют исключительно на деревьях.
379 1328221
>>28196

> Маршрутизацию сетевых запросов реализуют исключительно на деревьях.


Делается аппаратно, внутри ассоциативная память. https://en.wikipedia.org/wiki/Content-addressable_memory#Example_applications
изображение.png57 Кб, 236x314
380 1328223
Привет аноны. Подскажите, ищу опенсорсные драйвера для цветного принтера (пилю свой принтер). Гуглил, но как-то с ходу не нашёл.
Есть что-то а примете?
381 1328302
>>28223
Попробуй открыть ядро линукса, лол.
или ты виниловый попенсорс ищешь?
1501421565-4903.png686 Кб, 674x888
382 1328318
Мудрецы, давайте советуйте, джва потока срут на экран перебивая друг друга, как организовать последовательный вывод? Притормозить их или мутекс, хз короч, но кроссплатформено и по феншую.
383 1328327
>>28318
По феншую мютекс. В C11 есть потоки, они кроссплатформенные, и мютексы там есть.
384 1328333
>>28327
в сферическом C11 в вакууме потоки есть, но glibc как-то не парится, ибо кому они нужны, когда есть POSIX...
385 1328337
>>28333
А зачем glibc париться, если в линуксе код с C11-потоками уже давно отлично собирается с -lpthread?
386 1328348
>>28337
То есть, таки приствуют соответствующие стандарту C11 обертки вызовов pthread_create и т.д., как это сделано в std::thread для C++? Что-то у меня получалось инклудить <thread.h>...
387 1328358
>>28221
Какая разница аппаратно или программно? Если поиск в хэш-таблице настолько быстрый, то зачем деревья? Роутинг в веб-фреймворках тоже реализуют с помощью деревьев. Почему так?
388 1328370
>>28358

>поиск в хэш-таблице настолько быстрый


по сравнению с чем?
389 1328384
>>28370
С поиском в префиксном дереве.
1545288004179959977.png819 Кб, 700x875
390 1328410
>>28384
Ээээ, а с чего ты взял, что хэш быстрей? Хэш вычисляет и находит боженька за тебя?
391 1328430
>>28337

>-lpthread



нужно юзать просто -pthread (без -l), так gcc принудительно собирает все зависимости с подержкой мультитредовости с тред-сайфовым подходом
392 1328436
>>28410
Поиск в хэш-таблице в среднем проходит за O(1), в худшем случае конечно за O(n), а в дереве за O(log n).
393 1328446
>>28436
Подсчет хэша - алгоритм, который тоже имеет длительность работы, вот о чем тебе говорят.
394 1328503
Анон, подскажи плес, как в пинусе эмулировать нажатия клавиш клавиатуры и мышки. С меня как обычно.
395 1328742
Уже решил сотню простых задач, но когда дело доходит до сложных, где потребуется написать как минимум пару функций, вступаю в ступор. Вопрос к шарящим, как научится писать сложные программы?
396 1328779
Нахуя нужный структуры? В каком случае применение структур необходимо? В каком случае без структур обойтись невозможно? Какой в них вообще смысл?
397 1328784
>>28779
Для упаковки данных. Например заголовки различных протоколов упаковывают в структуры. Это только первое, что в голову пришло. Ну, или чтобы образовать осмысленные связи между данными. ООП начался со структур. От классов отличаются тем, что поля структур видны отовсюду и могут быть изменены в рантайме без методов-акцессоров, а у классов по инкапсуляции недоступны и нужны методы-акцессоры для их изменения.
398 1328785
>>28784
подожди-подожди
какой то дебил, который даже не удосужился загуглить, задает тупейший вопрос и ты сразу же бросился отвечать?

если я тя в офисе попрошу за сигами сбегать, тоже метнешся?
399 1328787
>>28785
Эххх, ну придётся. Тебе какие? Себе ведь тоже тогда возьму.
Не душни, анон. Мне просто не с кем пообщаться.
400 1328790
>>28787
Мне тоже пожалуйста. LD красные, не ебет если в ближайшем не будет
401 1328798
>>28785
Не агрись. Тред для тех кто учится, а не для гуру.
402 1328799
>>28784
От дебила слышу.
403 1328802
>>28785
Это >>28799 было тебе.
404 1328820
>>28784

>поля структур видны отовсюду и могут быть изменены в рантайме


Это весьма хуево. Как с этим бороться?
405 1328825
>>28820
ДВАЧУЮ
406 1328827
>>28820
пиздовать к крестоблядям.
А если серьёзно, то не менять их и всё. Тыж программист или кто? Вот и не трогай то, что трогать не нужно. Ну, или можешь приделать выбрасывание ошибок, как только поля структур будут меняться без твоего ведома(неявно), либо сделать эти поля константными, чтобы совсем их не менять. Это в теории всё. Я не знаю зачем вообще с этим бороться. Это как бороться со сладкими конфетами и выбрасывать их в мусорку вместо того, чтобы их есть.
407 1328832
>>28827
Но подожди, это получается любой хацкер сделав дамп оперативы, получает полный доступ к архитектуре?
408 1328833
>>28827

>сделать эти поля константными


HASKIL?
409 1328835
>>28820
никак, в чужой монастырь настоящих программистов со своим ООП-уставом не ходят
410 1328836
>>28832
толсто
411 1328843
>>28835
>>28836
Клянусь не собирался толстить но что-то мне подсказывает, что наступил на мозоль, лол, сам учусть по прате.
А вот реально, как этого избежать? В MISRA не нашел с первого раза, она больше про стабильность.
412 1328847
>>28503
Попробуй libatspi чёт такое.
413 1328849
>>28742
Продолжать писать простые, напиши несколько простых, объедини их в более сложную.вообще это странно, возможно ты не умеешь разделять задачу на более мелкие?
414 1328851
>>28832
Память это набор нулей и единиц, не знаю, что он там делать будет.
все сломает, особенно лаба1.с
415 1328871
>>28820

> поля структур видны отовсюду


> Это весьма хуево. Как с этим бороться?


Есть идиоматичный код (который, кстати, невозможно повторить на крестах с этими ихними классами):
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; }
и другие методы...

Алсо, есть такая штука, называется документация, там можно описать, что в структуре разрешено менять напрямую и как именно. Можно написать, что ничего нельзя, это хороший подход.
417 1328873
>>28843
не думал, что один и тот же человек. А толстота про хакера. Каким образом инкапсуляция (политика компилятора с private модификаторами доступа) остановит хакера, способного "словить дамп оперативы"? Вот и подумал, что рофл. Уж больно умный термин присутствует в перемешку с откровенной ерундой, вроде этого >>1314292 . Впрочем, "толстота" - не вполне уместная оценка, такое даже забавно читать)
418 1328875
>>28851
большие слова обычно выравнены под 8-байтовую сетку, можно за что-то похожее на указатели зацепиться
419 1328877
>>28875
Ну это да, но это слишком нужно дрочиться.
да и все равно ось тебя не пустит по чужой памяти ползать, даже если ты на уровне ядра что-то поменяешь можно просто панику словить
420 1328883
>>28877

> да и все равно ось тебя не пустит по чужой памяти ползать


Иногда есть /dev/mem из юзермода. Из ядра есть все, что угодно. А еще ниже есть дамп через DMA.
421 1328884
>>28446
Так что вы мне голову морочите. Я же изначально говорил, что деревья используют для таких задач. Но какой-то анон сказал, что хэш-таблицы быстрее.
422 1328885
>>28742

> Уже решил сотню простых задач


Какого типа задачи?

>>28742

>но когда дело доходит до сложных, где потребуется написать как минимум пару функций, вступаю в ступор


Разве ты в сотне задач не писал функций?
423 1328886
>>28877
а junior hacker вакансии и не предлагаются)
424 1328889
>>28851
а свет - это волны (частицы). Что шпион будет делать с биноклем? Средства интерпретации сигналов (аналоговых/дискретных) существуют. Естественно, несанкционированное пользование на порядок сложнее. Это не новость, тупых хакеров не бывает.
425 1328907
>>28779
У человека в кратковременной памяти помещается примерно 7 объектов, без структур ты быстро утонешь в сложности и ничего писать не сможешь
426 1328913
>>28907
Для человеков с кратковременной памятью придумали IDE, в которые такой хуйней не страдают.
427 1328914
Котаны, эклипс марс кодирует строки, которые я объявляю в программе в unicode?
printf("%c = %d\n", "A", "A"); //{ = 1073646356
printf("%c = %d\n", "a", "a"); //$ = 1073646372
Как пофиксить чтобы char кодировался в ASCII?
428 1328916
>>28914
Ты хотел одинарные кавычки вокруг символов. Сейчас ты выводишь адреса (или части адресов) строк, а не численные значения символов.
429 1328917
>>28913
Пиздец ты тупой
430 1328919
>>28916
Обожаю тебя, анон.
Сегодня ты мой герой, рили.
Спасибо.
431 1328929
>>28851
Лол. Он получит маш. код, переведет в Асм (не в ручную конечно) и сделает все необходимое.
432 1328930
Я могу в теории, ввести в printf() индекс хуйни в стеке и получить значение?
433 1328935
>>28930
В теории нет (undefined behavior), на практике можешь. Чего конкретно ты хочешь добиться?
434 1328937
>>28935
Посмотреть, каким образом запушивается все в стек
Ну короче программирую Си с асм вставками, довольно интересно
435 1328942
>>28937

> Посмотреть, каким образом запушивается все в стек


Ну есть же отладчики. Но если очень хочется, то примерно так (тут повсюду 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); // Аргумент нужен как точка отсчета, сам по себе не используется.
}
436 1328948
>>28884
Ну это был не я, собственно, я и не написал, что нужно использовать хэш для его задачи.
437 1328950
>>28930
А то. Это называется format string attack
438 1329076
>>28948

>Ну это был не я


чем докажешь?
439 1329078
>>29076
Доказал твоей мамке за щеку, проверяй
440 1329079
>>28937
не все в стек пушится. Например, на Linux под x86_64 сначала выбираются RDI, RSI, RDX, RCX... для float свои регистры есть тоже
441 1329114
>>29078
С вертухи тебе бы въебал, чмоха малолетняя
442 1329117
>>28942

> stackptr++


> stack


> ++



проорал со спалившегося абстрактушка.
443 1329125
>>29117
Аргументы пушатся в обратном порядке же.
444 1329126
>>28436

> O(1)



можно не для математиков объяснить, это сколько?
445 1329128
>>29126
Значит за одинаковое время.
446 1329130
>>29128
а O(n) тогда сколько?
447 1329146
>>29130
В n раз больше, очевидно же.
448 1329147
>>29146

>очевидно же



что такое "O" так и не понял, ну да ладно, видимо это какието секреты математиков
449 1329150
>>29125
Он про то, что стек растет от больших адресов к меньшим.
450 1329152
>>29147

>Обозначение «„O“ большое» введено немецким математиком Паулем Бахманом во втором томе его книги «Analytische Zahlentheorie» (Аналитическая теория чисел), вышедшем в 1894 году. Обозначение «„о“ малое» впервые использовано другим немецким математиком, Эдмундом Ландау в 1909 году; с работами последнего связана и популяризация обоих обозначений, в связи с чем их также называют символами Ландау. Обозначение пошло от немецкого слова «Ordnung» (порядок).

451 1329154
>>29152

> читай книжки, я сам хуй знаю что это



так и думал
452 1329155
>>29150
Я понял. Но если первый аргумент, с адреса которого начинается цикл, был добавлен в стек последним и находится на вершине стека, то его адрес как раз и будет наименьшим из всех аргументов. Поэтому в >>28942 в цикле ++. Разве не так?
kateesnameyarik1.png16 Кб, 517x529
453 1329165
Всем привет. Пэхапэ-макака репортинг ин. Смотрел недавно трансляцию на тытрубе, где какие-то типичные битарды сычи красноглазики в количестве 2х штук писали код на си, угорали там над чем-то, тут у них утечка, ой, а тут код сишный в сиплюсплюс не конпилится, а тут двоичные числа не записать, ой, а тут из 16-ти битного в 32-х битный режим переходим, ой.

И меня этот процесс настолько затянул и воодушевил, что я захотел повысить собственное ЧСВ и научиться писать велосипеды для операционок, чтобы их можно было установить на любом компе, ну и конпилировать, конпилировать и еще раз конпилировать. А еще я думаю, что это будет плюсом, когда я пойду перекатываться в офис и черкану строчку об опыте на чем-то, кроме пхп.

Так вот, что мне для этого выбрать: каконичный С или же С++? Вроде как С++ мое чсв раздует до предела, но вдруг я его не осилю, а мне еще работать нужно будет.
454 1329216
>>29155
ну да, стек растет сверху вниз, виртуальные адреса 0x7fffffffffff-0x7fffff000000, а пушится все в обратном порядке, чтоб потом выбиралось в прямом, иначе бы не понять было, с какого адреса начинается argv, например, а так посмотрел argc, что лежит по адресу RSP, и дальше за ним уже собираешь все до NULL...
455 1329226
>>29165
судя по всему, тебе хочется именно того, что даст чистый Си. Начав с крестов и уснешь скоро (там инфы как воду из ведра пить), и пробелы в low-level знаниях останутся. Вообще, прелесть C++ доступна сишникам, девственные же джависты и прочие макаки, как ты себя обозвал, вряд ли извлекут пользу из кажущейся бессмысленной запутанности.
456 1329235
>>29154
O(1) означает, что процессору нужно сделать одно и то же количество операций для поиска по коллекции из 100, 1000 и 1000000 элементов. O(n) значит, что количество операций растет пропорционально размеру коллекции.
457 1329241
>>29235
маняматика и жидовские выдумки ненужны
458 1329247
>>29235
Я думаю O(1) одна операция. Постоянное время имеется ввиду сколько времени нужно конкретному процессору для выполнения 1 операции.
O(n) умножаем это постоянно время, допустим 0,001 секунды на n. Где n это обычно количество лупов в цикле, обычно соответствующая количеству элементов в массиве.
Но возможно манятеория.
459 1329250
>>29226
Понял, спасибо, осяду тут у вас тогда.
460 1329252
>>29247

>лупов в цикле


Количество ITT в этом треде.
461 1329301
>>29235

>что процессору нужно


нинужно, это на сферической геймашине Тюринга только работает
462 1329333
Господа сишники, вот вам вопрос из собеседования.

Программа на си компилируется в байт-код. Как можно скомпилировать байт код обратно в программу на си?
463 1329394
>>29333
Использовать декомпилятор или же продизассемблировать и восстановить исходный код.
464 1329411
БЛЯДЬ, ГДЕ МОЖНО СКАЧАТЬ НОРМАЛЬНЫЙ 32-Х БИТНЫЙ КОМПИЛЯТОР ДЛЯ СИШКИ??? ВЕЗДЕ ОДНА х64-ХУЕТА, СУКА!!!
465 1329449
>>29333
си в байт код ??? не, не слышал. Жава была замечена, а си нет.
466 1329456
>>29333

>Программа на си компилируется в байт-код.


Интерпретатор для С? Впервые слышу.
467 1329523
Объясните мне, он дурачок или это я чего-то не понимаю? Как он для char присваивает целые слова, а не только один символ?
https://youtu.be/guinn2k1PGE?t=340
468 1329526
>>29523
Нужно быть ебанутым, чтобы снимать видео по программированию и совсем ебнутой макакой, чтобы их смотреть. Пошёл нахуй отсюда, пидор грязный.
469 1329548
>>29523
Не char, а char*.

>>29526
Насколько надо быть ебанутым, чтобы в 2018 году вместо ответа на вопрос объяснять спрашивающему, какой он мудак? Пидор грязный-то ты.
470 1329558
>>29548
Пробовал со звёздочкой, невозможно преобразовать "const char [8]" в "char *"
471 1329564
>>29558
Я не телепат, чтобы видеть то, что у тебя там. Ты не можешь присвоить одну сишную строку другой с помощью =, нужно использоваться strcpy.
Прочитай Кернигана и Ричи про строки и после этого вторую главу вот здесь faqs.org.ru/progr/c_cpp/cfaqrus.htm , может начнешь понимать, что ты делаешь.
472 1329567
>>29548

>в 2018


2019.

>Пидор грязный-то ты


Нет ты. Видео-дауны самые поехавшие дауны, с таким же успехом можешь Сю по шебм объяснятьб прямо сразу в фап-треде.
473 1329572
>>29567

>Пидор грязный-то ты


Нет ты
480full-red-heat-screenshot.jpg18 Кб, 480x270
474 1329574
>>29165
Вот реально поддвачну этого >>29226

А от себя добавлю:
Я начал с C#, у них в шапке очень хорошая книга. Дошел до 2/3 книги. В какой-то момент появляется ощущение, что вроде все ясно, но чего-то не догоняешь, как-будто обладаешь разнозненными фактами а не знанием.
Я реально жалею о потраченном времени, надо было начинать с сишечки.
475 1329575
>>29567
>>29572
Вы оба, тащемто.
476 1329576
>>29567

>Нет ты. Видео-дауны самые поехавшие дауны, с таким же успехом можешь Сю по шебм объяснятьб прямо сразу в фап-треде.


Самые поехавшие дауны - это вот эта ебанутая публика, которая заходит в тред чисто чтобы похамить и самоутвердиться. Гуглишь что-нибудь, и знаешь, что если гугл дал тебе лор или какую-то еще рашкопомойку, то можно не кликать, потому что ответ на вопрос будет в лучшем случае на второй странице - до этого такие уникальные мамкины специалисты будут нести хуйню, о том, какой задавший вопрос мудак. Хотя ты и есть тот самый гнойный пидор, которому лучше бы заткнуться и убить себя.
Что касается видео, ничего плохого в них нет, если само видео пилит профессионал. Это, конечно, не случай того, что он принес, но ты-то не об этом сказал.
477 1329578
>>29165

>каконичный С или же С++? Вроде как С++ мое чсв раздует до предела, но вдруг я его не осилю, а мне еще работать нужно будет.


Си, потом вдумчиво читать Дизайн и эволюцию, потом книги Мейерса и Саттера.
Тогда С++ вообще не будет казаться сложным. Потому что он и не сложный особо, здесь даже не нужно знать, что такое ковариантность.
478 1329583
>>29576

>КУДАХ БАБАХ КУКАРЕКУ


Ясно.
479 1329586
>>29578

>читать Дизайн и эволюцию,


Щё це таке?
>>29583
Уходи отсюда, тебе здесь не рады, скудоум.
480 1329599
Поддерживаю. Заебали скудоумы. В програмаче последнее время они просто заполонили кучу тредов. Бля скудоумы, высирайте из своих тупых голов что нибудь кроме односложный предложений позязя
481 1329600
>>29576
Я захожу в тред так как мне Ся нужна для низкоуровневой логики и апать скиллы. Читаю сам и учусь, вопросов не возникает, читаю вопросы тех кто изучает и решаю их для себя, это достаточно полезно. Ни разу за свою жизнь не видел хоть одного человека научившемуся чему-либо по видео. Впрочем, мне похуй, если тебе нравится плодить этот рак здесь. Но всё-таки я не пидор, и даже на трапов ни разу не дрочил.
482 1329601
>>29586
Самая важная книжка Страуструпа
483 1329606
>>29411
mingw через msys2, tcc, pelles c 8
484 1329609
>>29600

>Впрочем, мне похуй, если тебе нравится плодить этот рак здесь


Мне тоже не нравится плодить рак, но рак - это ты. Из вопросов ньюфагов рождаются обсуждения так или иначе. Из "ололо ты мудак" не рождается нихуя, кроме вот этой уебанской атмосферы рашкофорумной дедовщины. У меня от нее бомбит, да.
А видео - это старый добрый известный со средневековья формат лекций, а так же мастерклассов и прочей хуйни, но переведенный в цифру. Если чел никогда не видел как программируют, почему не посмотреть это на видео?
485 1329611
>>29523
Литерал массива символов и присваивание его указателю такого же типа (char).
486 1329662
>>29126
За константное время, всегда одинаковое, не зависимо от величины таблицы.
487 1329663
>>29130
Предположим, что поиск из 10 элементов занимает 1 секунду. Значит, если n = 10, значит поиск будет занимать 1 секунду, если n = 1 000, поиск будет 100 секунд.
488 1329664
>>29147
Это обозначение временной сложности алгоритмов. Бывает сложность: O(1), O(n), O(log n), O в степени n.
489 1329666
>>29333
Не в байт-код, а в ассемблерный может, и может в машинный. Байт-код это машинно-независимый код, который исполняют не процессоры, а виртуальные машины, например: JVM, CLR, BEAM, Dalvik, etc.
490 1329667
>>29574

>В какой-то момент появляется ощущение, что вроде все ясно, но чего-то не догоняешь, как-будто обладаешь разнозненными фактами а не знанием


Видимо ты просто читал, но не практиковал. Обычно это происходит из-за этого. Тут дело не в языке.
491 1329671
>>29578

>потом вдумчиво читать Дизайн и эволюцию


Это та что Страуструп написал? Она же старая вроде.
492 1329672
>>29666
Ещё LLVM, который с собой clang таскает, тоже популярная штука, JIT вроде ещё есть, если я ничего не путаю.
сам пользуюсь онли gcc
493 1329675
>>29663
Еще раз. O-большое ничего не говорит о конкретном числе операций или секундах. Оно говорит о том, по какой функции будет увеличиваться количество операций при росте n. Это позволяет приблизительно сравнивать разные алгоритмы.

>>29666

> Байт-код это машинно-независимый код


И это как-то мешает тебе компилировать Си в байткод любой из перечисленных вм? С точки зрения компилятора разницы между байткодом и машинным кодом нет. К тому же, если вспомнить, что внутри x86 фактически RISC-based интерпретатор, то возникает вопрос, чем вообще "машинный" код x86 отличается от байткода.
494 1329679
>>29662

>За константное время, всегда одинаковое


Дополню:
константное или одинаковое != околонулевое
495 1329687
>>29675

>Еще раз. O-большое ничего не говорит о конкретном числе операций или секундах.


Еще как говорит. O большое говорит о времени выполнения алгоритма. Не о секундах, не о конкретном времени, а об отношении времени к длине коллекции. O(1) означает, что операция поиска в коллекции будет всегда проходить за одинаковое количество времени, то есть за константное время, независимо от длины коллекции.

>>29675

>Оно говорит о том, по какой функции будет увеличиваться количество операций при росте n.


Какой еще функции?

>>29675

>чем вообще "машинный" код x86 отличается от байткода.


Тем, что машинный исполняет конкретный процессор, а байт-код виртуальная машина.

>>29675

>И это как-то мешает тебе компилировать Си в байткод любой из перечисленных вм?


Не мешает, но обычно такое не делают. То кто задавал вопрос просто ошибся, назвав машинный код байт-кодом.
496 1329700
>>29687

> Тем, что машинный исполняет конкретный процессор, а байт-код виртуальная машина.


Исполняет виртуальная машина в процессоре.

> Не мешает, но обычно такое не делают


Правда? А я вот помню, как в свое время массово компилировали Си в AVM (Flash) и еще в JS с помощью Emscripten (тут немного не то, потому что вм у браузеров разные, и опкоды напрямую не доступны).

> Какой еще функции?


Той, которую ты пишешь в скобочках у O.

> об отношении времени к длине коллекции


Только когда n достаточно большое, причем где именно находится это "достаточно" не оговаривается. Например, обрабатывая массив данных на HDD, ты можешь написать алгоритм c O(n), который обгонит O(log n). Но с ростом количества жестких дисков, все детали реализации перестанут иметь значение, и рано или поздно O(n) обязательно станет медленнее O(log n).
497 1329723
>>29700

>Той, которую ты пишешь в скобочках у O.


Такая терминология не используется. Это ты от себя придумал.
498 1329732
>>29700

>Например, обрабатывая массив данных на 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 раз.
499 1329743
>>29732

> Ну ка расскажи как?


Ну например, если у тебя почти полностью заполненный SSD, ты упираешься в стирание блоков, и алгоритм, который экономит записи, может очень много выиграть у алгоритма, который о них не беспокоится. В случае HDD алгоритм, читающий последовательно, выиграет у random seek.

> а на больших разница будет в тысячи раз


Да. Никто и не спорит.
500 1329749
>>29743
Причем здесь диски? Алгоритм не зависит от железа. O(n) означает, что поиск будет проходить по всем элементам, там нет никакой экономии, экономия как раз при O(log n).
501 1329751
>>29749
Ты дохуя теоретик, попробуй начать писать код.
502 1329758
>>29751
Уроки-то сделал?
503 1329769
>>29743
Программа находится в оперативной памяти. Какие еще диски?
504 1329781
>>29769

> Программа находится в оперативной памяти


А еще она может быть в кэше, а еще она может выполняться из ROM или какого-то вида EPROM напрямую. Но это не так важно, потому что данные тоже могут лежать где угодно, и время выполнения алгоритма будет зависеть от его реализации и характеристик устройства, хранящего данные. С ростом n шанс, что реализация алгоритма с O(n) обгонит реализацию c O(log n) быстро уменьшается до нуля, но и говорить, что O(n) всегда медленнее O(log n) неправильно.
505 1329795
>>29667
Ты понимаешь, что ты сейчас разговариваешь с образованным, взрослым человеком, который зарабатывает на жизнь своим трудом? Ты мне советы даешь, как учиться?
Что значит не практиковал, уёбище?
Примеры и задачи решал, какая ещё практика в учебнике, придурок?
Тебе башку прострелить?
506 1329809
>>29781
Открой книгу "Построение и анализ вычислительных алгоритмов" авторов Альфред В. Ахо, Джон Э. Хопкрофт, Джеффри Д. Ульман. И прочти главу про сложность алгоритмов. В ней ясно дано понять, что увеличение производительности железа, почти не дает увеличения производительности программ. Потому что это мизерные цифры, по сравнению с потенциалом ускорения от использования оптимальных алгоритмов.

Правильный алгоритм может давать ускорение в тысячи раз. Увеличение мощности железа в тысячи раз, может уже не произойти никогда. Так как закон Мура уже не работает.

Программа не может выполняться из ROM, она должна быть загружена в RAM.

Твои посты состоят из набора не связанных ключевых слов.
507 1329814
>>29809

> Открой книгу "Построение и анализ вычислительных алгоритмов"


Я же говорю, что теоретик.

> Программа не может выполняться из ROM, она должна быть загружена в RAM.


А тебе никогда не рассказывали, что для того, чтобы воспользоваться DRAM после подачи питания, ее нужно инициализировать, причем относительно длинным кодом: зависит от контроллера памяти, но обычно это несколько килобайт? Памяти нет, но код нужно выполнить. Или даже хуй с ним, у нас SRAM. Но кто же скопирует код из ROM в SRAM? Как быть? Правильно! Нужно оторваться от книжек про алгоритмы и начать писать код почитать что-нибудь про архитектуру компьютера.
508 1329820
>>29814

>А тебе никогда не рассказывали, что для того, чтобы воспользоваться DRAM после подачи питания, ее нужно инициализировать, причем относительно длинным кодом: зависит от контроллера памяти, но обычно это несколько килобайт? Памяти нет, но код нужно выполнить. Или даже хуй с ним, у нас SRAM. Но кто же скопирует код из ROM в SRAM? Как быть? Правильно! Нужно оторваться от книжек про алгоритмы и начать писать код почитать что-нибудь про архитектуру компьютера.


Это ты теоретик. Пишешь непонятно о чем вообще. Во-первых, это не имеет ничего общего с языками высокого уровня. Во-вторых, мы обсуждали задачу поиска в огромной коллекции. При чем тут инициализация памяти вообще? Вот сядь и попиши код. Реши наконец хоть одну задачу. Ты только и делаешь, что кидаешься ключевыми словами, которые вообще не имеют ничего общего с обсуждением.
509 1329845
>>29820

>поиска в огромной коллекции


Как раздолбленное очко математека-теоретика?
511 1330278
>>29814
Слушай, почему вот это >>29809 понятно даже мне, хотя я инженер а не программист?
Да, процесс оптимизированнный под железо прекрасен, но в общем случае - процесс гораздо важнее.
Это везде так, даже на производстве мебели.
Зачем выебываешься?
512 1330311
Как-то я написал одному человеку юзать хэш таблицу вместо линейного поиска в таблице
Он заморочился, поэкспериментировал, оказалось что если в массиве до 1000 элементов, линейный поиск быстрее.
513 1330590
>>30311
Для хэш-таблиц важна степень заполненности таблицы, чтобы не было коллизий.
514 1331272
>>30590
Коллизии всегда будут, если у тебя не perfect hashing. Поэтому таблицу делают размером +10-30% от требуемого.
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 2 марта 2019 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски