Программирование


Ответить в тред Ответить в тред

Check this out!
<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
577 44 132

C Programming Language #53 /clang/ Аноним # OP 06/02/20 Чтв 12:44:32 15930831
C Programming L[...].png (78Кб, 792x1023)
792x1023
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь https://ideone.com/#, https://wandbox.org/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [​i​] или ∗.

Что читать:

- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- Черновик стандарта ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2385.pdf
- man/Dash/zealdocs

Чем компилировать:

- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.

Что еще почитать:

http://c-faq.com/
FAQ из comp.lang.c. Древний, но все еще актуален.

Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.

Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).

Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.

Ben Klemens "21st Century C: C Tips from the New School" (2012)

Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)

Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)

MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard и http://web.archive.org/web/20190213011655/homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf

Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C

https://github.com/kozross/awesome-c

Онлайн-утилиты:

- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.

Прошлые треды:

- №50: http://arhivach.ng/thread/502813/
- №51: http://arhivach.ng/thread/510484/
- №52: http://arhivach.ng/thread/529928/ >>1570501 (OP)
Аноним 06/02/20 Чтв 13:48:19 15931862
>>1592456 →
>>1592455 →
Всё же не стоит слушать советы маня-петухов линуксоидов, в который раз замечаю что если им что-то непонятно они начинают орать что это во всём винда виновата и нужно срочно ставить юникс.

>>1592449 →
Анон, выпили 11-ю строку с ++len, т.к. это лишнее прибавление индекса. Ибо ты в цикле последнее что делал это прибавлял индекс, а т.к. программа вышла из цикла то индекс не забитый, следовательно после цикла увеличивать ничего не нужно, а нужно сразу записывать '\0'.
Аноним 06/02/20 Чтв 14:21:54 15932623
Стикер (0Кб, 473x500)
473x500
>>1593186
Ты победил. Люблю просто в винду иголочкой потыкать.
Аноним 06/02/20 Чтв 14:31:38 15932794
пердоля.webm (1998Кб, 624x352, 00:00:42)
624x352
>>1593262
Токсичний линуксоид, ничего удивительного. Триггерится на окна и пытается всеми правдами и не правдами завлечь человека в болото пердолинга.
Аноним 06/02/20 Чтв 14:47:44 15933075
>>1593279
Видео хочет рассказать мне, что непердоля готов терпеть отвалившиеся полки, заедающие ящики, пердящий двигатель, лишь бы рампочка горела прямо сейчас.
Аноним 06/02/20 Чтв 15:27:13 15933546
>>1593279
Чего ты хочешь от сектантов, использующих технику по религиозным мотивам. Пока другие занимаются делами, эти философствуют и агитируют в секту, а кто не согласится становятся врагами, против которых воюют. Обычное бесполезное быдло с кухонной политикой вместо жизни.
Аноним 06/02/20 Чтв 23:14:56 15938487
image.png (41Кб, 728x710)
728x710
>>1593083 (OP)
Можете подсказать, как в вашем языке эта строчка переводится?
Аноним 06/02/20 Чтв 23:16:27 15938508
>>1593848
check if scanf() return value is equal 2
Аноним 06/02/20 Чтв 23:17:57 15938539
>>1593850
Да это понятно, сами эти проценты и амперсанды что делают?
Аноним 06/02/20 Чтв 23:19:15 159385610
Аноним 06/02/20 Чтв 23:21:09 159385711
>>1593856
А, тебе на таком уровне. Я уже начал расписывать, что в кавычках схема, проценты это плейсхолдеры для переменных после кавычек, амперсанты берут адреса.
Аноним 06/02/20 Чтв 23:22:21 159386112
>>1593857
Да не, я с лабой ебусь, уже просто для сокращения времени в треды захожу для переводов. То на си, то на плюсах, то на питоне код похожий нашёл, а решить пока не могу задачу
Аноним 07/02/20 Птн 19:11:11 159449413
5451251245.jpg (113Кб, 1083x689)
1083x689
Аноны, давно в С появились классы?
Аноним 07/02/20 Птн 19:13:28 159449814
>>1594494
В 1999 же, ну.
Написано ведь.
Аноним 07/02/20 Птн 19:14:23 159450215
>>1594498
Владимир Васильевич, это вы?
Аноним 07/02/20 Птн 19:14:46 159450316
>>1594494
Си с классами, хуле.
Аноним 07/02/20 Птн 19:38:51 159453617
>>1594494
Ого, оказывается шизоиды, которые вещали, что Си это ООП язык, были правы. А я над ними смеялся. Приношу свои извинения. Ведь со стандартом не поспоришь.
Аноним 08/02/20 Суб 01:49:08 159494318
Господа, я нихуя не понимаю в make, cmake, configure и прочей подобной залупе. Есть какая-то книга, где всё это подробно описывается?
08/02/20 Суб 03:27:38 159498319
>>1594943
> make, cmake, configure и прочей подобной залупе
Если у тебя есть program.c, ты делаешь make program, а дальше происходит магия. Просто и не требует ничего читать. По CMake есть стандартная книга Mastering CMake, отвратительная настолько же, насколько отвратителен сам CMake. А configure - это просто скрипт, внутри там может быть что угодно, и делать оно может что угодно, но так-то man autoconf.
Аноним 08/02/20 Суб 03:47:22 159498820
>>1594983
Что значит отвратителен? Симейк нужен генерить проекты визуал студии из пердоисходников. Вполне полезная вещь, правда применение ограниченное.
08/02/20 Суб 03:58:08 159499121
>>1594988
> Что значит отвратителен?
Ну это когда ты можешь cc file.c, и все работает, но CMake тебе говорит, что на самом деле у тебя компилятора нет, и ничего не работает, и вообще ты мудак, и иди нахуй. Мало того, что синтаксис CMake в принципе не предназначен для восприятия гуманоидами, так тебе еще постоянно приходится расставлять везде if-ы на случай, если у твоего юзера старый CMake. А уж если тебе вдруг понадобится добавить туда поддержку кастомного компилятора, ты серьезно задумаешься о поиске другой системы сборки.
08/02/20 Суб 03:59:53 159499222
>>1594991
А еще нужно обязательно проверить, есть ли у тебя в 2020 году stddef.h. И еще раз проверить. И в каждом проекте отдельно проверить, вдруг он куда-то делся!
Аноним 08/02/20 Суб 14:28:36 159532123
>>1594983
Есть еще m4 и др. Конкретно мне нужно разобраться как добавить опции компиляции в чужой проект или скомпилировать другим компилятором или слинковать этот проект с другой версией либы.
Аноним 08/02/20 Суб 21:02:42 159577124
>>1594983
Двачну. Хуже cmake'a могут быть только люди которые его используют. Эти пидорасы попросту не пишут как правильно собирать их дерьмо.
Аноним 08/02/20 Суб 23:34:36 159591125
image.png (1249Кб, 767x1024)
767x1024
Можно в шапку следующего треда закинуть пикрил. Симпатично выглядит.
Аноним 09/02/20 Вск 03:21:12 159598926
>>1595771
>не пишут как правильно собирать
Но системы сборки существуют как раз чтобы не думать как собирать, а оно собиралось само. Иначе какой смысл?
Аноним 09/02/20 Вск 05:32:44 159600927
изображение.png (74Кб, 499x852)
499x852
>>1595989
Но когда я открываю cmake чужого кода, где под 200 строчек, а в каждой из вложенных папок ещё cmake файлы, то я понимаю что никакой возможности в этом разобраться нету, и это сложнее любого си, си++ и ассемблера сразу.

Вот си++ проект чужой для пример.
В верхнем файлы 597 строк. Это Eigen3 и он, слава богу, работает. Но по какой-то причине в проекте есть cmake-файл для Eigen3, хотя этот самый Eigen3 не требует cmake-файла и работает просто есть заинклудить его файлы.
Там происходит ошибка из-за того, что CMAKE_CXX_FLAGS имеет какой-то не такое значение, причём ошибка происходит в глобальных файлах cmake (который в директориях cmake находятся), а не в тех, что есть в этом проекте. Эта ошибка связана с openmp. Там есть кастомная переменная, которая включает и выключает куду и openmp, но даже когда я отключаю через это переменную - оно всё-равно жалуется на openmp, хотя казалось бы оно даже не должно пытаться его использовать после этого.
Для использования openmp обычно достаточно прописать set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp"), обычно. Я пробовал указывать это в разнообразных файлах вместо того кода, что уже был, но но всё-равно не собирается, потому что оно получается некую переменную OpenMP_CXX_FLAGS и без неё не работает. Какое значение должно быть у этой переменной - никто не знает.
За 4 часа я так и не смог собрать эту штуку и мне видится это очень плохой и перегруженной системой сборки. Книги про cmake которая создаст цельное представление как с этим работать - я не нашёл, отдельные статьи рассказывают лишь про cmake-файлы на 10 строк, которые и так исходя из содержания понятно что делают и как написать, и когда ошибка происходит в каком-то _FPHSA_HANDLE_FAILURE_CONFIG_MODE, то это даже не гуглится. Комментариев в cmake-файлах тоже нет.
Аноним 09/02/20 Вск 06:58:07 159601828
Где можно почитать про потоки, асинхронку и вот это все? В k&r по си эта тема затрагивается?
Аноним 09/02/20 Вск 07:02:33 159602029
image.png (6Кб, 448x135)
448x135
Да еб, что не так с этим конкретным куском кода? Буквально два часа назад нормально отрабатывал, а теперь реаллок постоянно проваливается. Я подумал - что-то потекло, винда не почистила, почистил через Rammap. Не работает, ребутнул пеку - опять не работает! Размер точно больше нуля, предыдущее значение - не нуль. Притом, чсх, в режиме отладки через gdb все работает. Правда, багуют другие места, но мне именно их-то и нужно отловить, а не ебаться с реаллоком, который сраные три сотни байт свободных найти не может!
Аноним 09/02/20 Вск 07:14:48 159602130
>>1596009
Не понял твое поведение. Проект один, значит должен быть cmake в корне, в ним и работаешь, остальные не должны тебя касаться. Если нет какой-то библиотеки, нужно её поставить, иначе ничего не соберется, очевидно. Но ты зачем-то лезешь внутрь и пытаешься проигнорировать отсутствие библиотеки. Неадекватное поведение.
Аноним 09/02/20 Вск 07:19:53 159602231
>>1596020
Покажи размер size через printf
Аноним 09/02/20 Вск 07:23:55 159602332
>>1596020
Очередной дебиловкатывальщик из питона и джаваскрипта закукарекал. Фундаментальный дефект мозга, ведущий к необучаемости и как следствие непригодности для программирования на си.
Аноним 09/02/20 Вск 07:52:01 159602833
>>1596021
>не должны тебя касаться
Корневой cmake загружает дочерние (через include, ExternalProject_Add и subdirs - вроде бы всё это ссылается на другие cmake-файлы), потому что там кастомные либы (помимо всяких eigen - для которых они cmake-файл за компанию, видимо, засунули) со своими cmake-файлами от тех же, кто сделал "корневой" проект. Я собирал по отдельности каждую из дочерних либ вместе с тестовым кодом использования, и собрались (после фиксов по типу вычищения лишних строк про openmp) все кроме одной с той же ошибкой.

Отсутствие какой библиотеки я пытаюсь проигнорировать? Внутрь лезу не я, а ide, которое говорит про ошибку вызванную кодом во внутренних cmake-файлах.
Да, наверное проблема простая и фиксить за пять минут - но я не вижу точку приложения сил, мне не понятно куда копать и что читать, чтобы понять логику работы этого.
Аноним 09/02/20 Вск 08:11:31 159603034
image.png (27Кб, 920x283)
920x283
>>1596022
Да вот. И указатель точно не нулевой был (хотя реаллоку так-то должно быть пофиг)
>>1596023
Даже в небо не попал. Питон и жаваскрипт не знаю, как в школе перешел на Си с Паскаля, так на нем и ковыряюсь. Да, я необучаемый. И что?
Аноним 09/02/20 Вск 08:27:50 159603135
>>1596030
Все, нашел, спасибо за пинок. Выше по тексту я стек поломал.
Аноним 09/02/20 Вск 08:30:15 159603236
>>1596028
>Корневой cmake загружает дочерние
Это не должно тебя касаться, это не твой проект, Cmake файлы уже написаны, не тобой, значит они уже работают, а ты лезешь и ломаешь. Повторяю: система сборки существует, чтобы само работало, не нужно туда лезть. твоя задача работать только с самой системой, НО НЕ С ПРОЕКТОМ, лишь указать на нужный компилятор и нужные библиотеки предоставить, а сборка происходит автоматически.

>Я собирал по отдельности каждую
Решил страдать херней? Твоё дело, но Cmake тут ни при чем. Твои проблемы от твоей больной головы.

>ide, которое говорит про ошибку вызванную кодом во внутренних cmake-файлах.
Какая иде? Это всё консольное добро.

Аноним 09/02/20 Вск 08:59:29 159604637
>>1596032
>Это не должно тебя касаться, это не твой проект, Cmake файлы уже написаны, не тобой, значит они уже работают
Не работают.
В более простых проектах (проектах с более простое иерархией в cmake-файлах) я открываю верхний CMakeLists.txt через ide и программа компилируется. В этом случае не компилируется.
>а ты лезешь и ломаешь
Боковые библиотеки не собираются. Если поправить cmake файлы (заменив /openmp на -fopenmp и удалив некоторые другие строчки), то они начинают работать, что говорит о том, что cmake файл не исправен (по крайне мере со стороны моего компилятора и моей версии cmake). Всё что нужно, пофиксить последнюю библиотеку, которая отказывается собираться, и тогда весь проект заработает (я думаю).
>Это всё консольное добро.
Я ничего не могу сделать с файлом "Makefile". Никакого видимого аналога make ни в папке компилятора, ни в папке Cmake, ни в папке ide я не вижу - что и каким образом делает ide с make-файлом - я не знаю, и не знаю где об этом прочитать, хотя очень хотелось бы.

Ты ругаешь меня и говоришь что я делаю не правильно, но при этом не говоришь что нужно сделать и игнорируешь мою фразу, что я не понимаю что нужно сделать и куда копать, чтобы в этом разобраться. Угу, а то я не понял, что я делаю что-то не правильно.
Аноним 09/02/20 Вск 12:21:36 159613838
>>1596046
>что говорит о том, что cmake файл не исправен (по крайне мере со стороны моего компилятора и моей версии cmake)
Отлично, и какой из этого вывод? Конечно лезть в файлы и править. Браво.
А поставить правильную версию на ум не приходило? Ту, для которой создан проект и на которой собран? Что это за паталогическое пердоленье - создавать себе проблемы на пустом месте и устраивать героическую неравную борьбу с ними?

>Ты ругаешь меня и говоришь что я делаю не правильно, но при этом не говоришь что нужно сделать и игнорируешь мою фразу, что я не понимаю что нужно сделать и куда копать
А как иначе? Я не могу знать что там у тебя, поэтому ничего сказать не могу. Тем более, с CMake давно имел дело и всё забыл. Но это всё не имеет значения, ведь вопрос не в том что тебе делать, а в том, почему ты страдаешь херней (выше пример), почему у тебя отсутствует фундаментальная способность к здравому смыслу и когерентному логическому мышлению? А еще, подозреваю, отсутствует базовая компьютерная грамотность. С этим всем помочь не могу тем более, такое вообще неизлечимо как правило.

Но вспомним о чем был разговор: >>1595771
Я не осуждаю твои ебанутые фетиши, но не надо обвинять CMake в своих личных загонах.
09/02/20 Вск 13:20:19 159616439
>>1596138
> Что это за паталогическое пердоленье - создавать себе проблемы на пустом месте
Это про CMake. Вот у анона проблема в том, что -fopenmp - это из gcc/clang, а то самое /openmp, что там было - msvc. Если бы у CMake был нормальный синтаксис, нормальная документация, вменяемые опции - человек, который писал CMakeLists, не хардкодил бы ключик, а сделал бы это правильно.
Аноним 09/02/20 Вск 13:33:20 159616940
>>1596138
Я поставил cmake 3.11, как и указано у них на сайте. Выдаёт ошибку на стадии разбора cmake файлов, то что он какую-то хуйню с openmp (OpenMP_CXX_FLAGS) не может найти не считая фикса /openmp. Хотя там mingw в списке поддерживаемых есть и это должно само работать без моего участия. Да, ещё как я упоминал выше, там есть переменная USE_OpenMP, которая по идее как раз нужна для включения и выключения OpenMP, но если её поставить в false, он всё-равно пытается загрузить openmp и падает с ошибками.
Почему ты упорно считаешь, что я глупее тех, кто написал подобный cmake, и то что в cmake-файле нет проблемы?

>А поставить правильную версию на ум не приходило?
Если проект написаный под cmake 3.11 не собирается на версии 3.15 - то это какая-то сомнительная фигня получается, потому что найти несколько либ под одну и ту же версию cmake будет проблематично. Зачем там тогда вообще идёт строчка cmake_minimum_required(VERSION 2.8), если оно настолько версиязависимо?
>Конечно лезть в файлы и править. Браво.
Почти поправил. Боковая либа не работала без фиксов и заработала с фиксами. Зачем нужна система сборки, если она собирает под одну платформу, один компилятор и одну версию?
Аноним 09/02/20 Вск 13:51:35 159618841
>>1596031
Так покажи. Как стек ломал-то? Другому анону интересно. У тебя data хранило значение не в пределах памяти стека?
Аноним 09/02/20 Вск 14:12:19 159620542
>>1596169
>Я поставил cmake 3.11, как и указано у них на сайте.
Ну вот опять. Какой в жопу сайт, если непосредственно в файле CMakeLists.txt, про который ты только что сам говорил, первой строчкой идет версия. Где связь между сайтом и исходниками вообще? Ты сайт компилируешь или файлы проекта?
Дальше не читал, надоело.
Аноним 09/02/20 Вск 14:31:14 159621343
>>1596205
Слушай, ну если разработчик под дистром пишет, что нужна версия такая-то, а на самом деле нужна другая - такое себе дело.
Это опять к >>1595771
мимо другой анон
Аноним 09/02/20 Вск 14:45:45 159623144
>>1596213
Херовая документация затрагивает в той или иной форме примерно 100% софта, так что винить в этом конкретно cmake довольно странно.
тоже мимо
Аноним 09/02/20 Вск 15:07:32 159625345
Аноним 09/02/20 Вск 15:11:18 159625646
>>1594983
>make program
А как же Makefile?
Аноним 09/02/20 Вск 15:11:21 159625747
Аноним 09/02/20 Вск 15:14:00 159626248
>>1596253
>>1596257
никогда не видел cmake, но уже хочу с вами согласиться
Аноним 09/02/20 Вск 15:15:30 159626349
>>1596262
peer pressure
В софте сплошь и рядом.
Аноним 09/02/20 Вск 15:21:15 159626850
>>1596262
Да это очевидный пиздец.
1. CMake - полноценный язык программирования. Его скрипты - неоднородная процедурная портянка, в которой даже автор разобраться не может.
2. Нахуя он генерирует проект msvc (когда студии может не быть вообще), make-файлы и прочее говно вместо того, чтобы собирать самому? Всё равно лишняя зависимость.

Вместо CMakeLists.txt можно прикладывать экзешник, который сам всё соберёт. Никакой разницы.

Вот было бы для сборки что-нибудь декларативное и удобное, как хотя бы мавен. На автоматическое разрешение зависимостей я и не надеюсь даже.
Аноним 09/02/20 Вск 15:21:36 159626951
>>1596263
но в Си-тредике хуйни не скажут
Аноним 09/02/20 Вск 15:22:20 159627152
>>1596269
Не гони, я тут постоянно хуйню говорю.
Аноним 09/02/20 Вск 15:25:30 159627253
Аноним 09/02/20 Вск 15:33:44 159628254
>>1596268
Я не думаю, что кто-то тут считает, что cmake охуительно хороший, это просто артефакт своего времени, как какой-нибудь ed. Такой "весёлый" из-за кросплатформенности между досом и юниксом, так что экзешник ты не приложишь, или на твоём любимом сорте линукса не заработает.

>Нахуя он генерирует проект
Потому что в этом его задача, это автобилдер, а не компилятор. Какие ещё есть интерфейсы для общения с компиляторами?
Аноним 09/02/20 Вск 15:39:06 159629055
>>1596282
> артефакт своего времени
Если бы. Его используют вовсю, и подыхать он не собирается.

> не заработает
А проект для говновижуалки не заработает, если вижуалка не установлена. Ну окей, пусть будет не экзешник, а скрипт на питоне. Всё равно придётся что-то доустанавливать.

> автобилдер, а не компилятор
Ну так и make - это не компилятор.
Аноним 09/02/20 Вск 15:48:02 159631056
>>1596290
>Если бы. Его используют вовсю, и подыхать он не собирается.
Естественно. Люди крайне не хотят изучать что-то новое, даже если оно лучше подходит под их задачи. Установить и разобраться с линуксом? Нет, они уже привыкли к виндоусу и ни за что с него не слезут. Лучше сидеть и неделю за неделей рационализировать свой выбор, чем это время потратить на изучение нового. И так на каждом уровне: vim, systemd, emacs, wayland.

А так даавно уже есть более современные и вменяемые автобилдеры, тот же Meson, который как раз использует
>скрипт на питоне

>Ну так и make - это не компилятор.
Так make и не автобилдер. Make — это рецепт, а cmake это генератор рецептов, в зависимости от того, сковородка у тебя есть, или духовка, или кухонный комбайн.
Аноним 09/02/20 Вск 15:55:51 159632157
>>1596310
> Люди крайне не хотят изучать что-то новое
В более хипстерских языках изучают охотнее. Часто меняют системы сборки, переходят с одних "устоявшихся" фреймворков на другие и т.д.

> Meson
Хм, надо глянуть.

> Make — это рецепт, а cmake это генератор рецептов
Наверное, я хочу что-то среднее. Чтобы оно само на разных системах налету генерировало и сразу же исполняло рецепты.
Аноним 09/02/20 Вск 16:02:35 159633058
>>1596321
>В более хипстерских языках изучают охотнее. Часто меняют системы сборки, переходят с одних "устоявшихся" фреймворков на другие и т.д.
Давай так. Ты сам сидишь на винде и являешься частью абсолютно этой же проблемы. Разбирись в себе, и узнаешь, почему эти ребята не хотят слезать с cmake.

>Чтобы оно само на разных системах налету генерировало и сразу же исполняло рецепты.
Оно так и делает? Когда оно у тебя останавливается?
Аноним 09/02/20 Вск 17:26:43 159643459
>>1596032
Ну я почему то половину проектов не могу собрать. А все из-за того, что система настолько гнилая, что самим разрабам впадлу потратить 5 минут и написать нормальные правила и документацию по сборке.
Аноним 09/02/20 Вск 17:39:05 159644760
>>1596321
>> Люди крайне не хотят изучать что-то новое
>Наверное, я хочу что-то среднее. Чтобы оно само на разных системах налету генерировало и сразу же исполняло рецепты.
Ну и почему ты не хочешь ничего изучать, кроме единственной волшебной кнопки на все случаи жизни? Даже не начал ничего изучать, а уже слился. Может стоит признать собственную несостоятельность и съебать в закат?

>>1596330
А как оно исполнит? На линуксе могу поверить, но не на винде. CMake работает в обычной консоли, а для сборки сгенеренного проекта нужно запускать консоль студии, а их еще две, в зависимости от разрядности. А если ты долбоеб захочешь открыть в IDE и там тыкать мышкой?
Аноним 09/02/20 Вск 17:50:27 159646761
>>1596447
>А как оно исполнит? На линуксе могу поверить, но не на винде.
В винде одни программы не умеют вызывать другие, по твоему мнению, или что?
>А если ты долбоеб захочешь открыть в IDE и там тыкать мышкой?
Если ты хочешь влезть в середину пайплайна и потыкать там что-то, то естественно пайплайн нужно остановить. Так же как, например, с gcc -c. Для этого cmake тоже пригоден.
Аноним 09/02/20 Вск 17:50:40 159646862
>>1596447
> не хочешь ничего изучать, кроме единственной волшебной кнопки на все случаи жизни
Да, я хочу волшебную кнопку. Почему вместо решения задач программы, которую я пишу, я должен возиться с однотипными проблемами сборки, которые до меня уже тысячи раз решали и продолжают решать вместо автоматизации этого процесса, как в других языках? Давно уже изобрели более удобные инструменты, но почему-то принято их не использовать, а страдать.
В ебучем мавене достаточно написать пять однотипным строчек, чтобы всё само скачалось и импортировалось. Здесь же приходится ебаться с каждой первой библиотекой.
Аноним 09/02/20 Вск 17:52:41 159647163
>>1596468
Впрочем, не исключаю, что это всё с непривычки. Больших/средних проектов на C/C++ я не писал.
Аноним 09/02/20 Вск 17:55:55 159647864
Стикер (255Кб, 512x496)
512x496
>>1596468
>Да, я хочу волшебную кнопку.
Вот и авторы проектов cmake считают точно так же. Тяпнул, ляпнул, заработало? Готово, лучше они пойдут решать задачи программы, которую пишут.
Аноним 09/02/20 Вск 17:58:55 159648365
>>1596478
Неее, с cmake так точно не будет. Не "тяпнул ляпнул", я будешь долго сидеть и копаться. Когда наконец заработает, никто не гарантирует, что скоро сломается. И до написания собственно кода так и не дойдёт.
Аноним 09/02/20 Вск 18:00:17 159648566
>>1596483
Ну, главное у них заработало. Будут они ещё возиться с однотипными проблемами сборки!
Аноним 09/02/20 Вск 19:39:22 159652567
>>1596256
> А как же Makefile?
А у make implicit rules есть, если тебе просто спроситьсобрать. Makefile - это когда тебе что-то посложнее нужно.
Аноним 09/02/20 Вск 22:58:27 159681168
>>1596525
Ну вот, анон спрашивал про искусство обмазывания всякими мейками, очевидно имелись ввиду мейкфайлы, а не шорткат cc -o $1 $1.c
Аноним 10/02/20 Пнд 00:22:01 159692769
Почитал про sequence points.
Придумал такой пример:
int b = 10;
if (a || ++b) {
printf("%d\n", ++b);
}
Правильно ли я понимаю, что в таком случае мы имеем undefined behavior? Так как изменение переменной b происходит дважды между двумя sequence points?
Аноним 10/02/20 Пнд 00:26:43 159693570
>>1596927
Между условием и телом if есть sp
Аноним 10/02/20 Пнд 00:27:58 159693771
>>1596927
> изменение переменной b происходит дважды между двумя sequence points?
Нет тут такого. А вот если бы у тебя было:
++b + ++b
То да.
Аноним 10/02/20 Пнд 00:39:50 159694972
>>1596935
Точно? А можно какой-то пруф, пожалуйста?
А то вот все, что я нашел:
1. В конце каждого полного выражения(Глава Стандарта 1.9/16). Обычно они помечены точкой с запятой ;

2. В точке вызова функции (1.9/17). Но после вычисления всех аргументов. Это и для inline функций в том числе.

3. При возвращении из функции. (1.9/17) Есть точка следования сразу после возврата функции, перед тем как любой другой код из вызвавшей функции начал выполняться.

4. (1.9/18) После первого выражения (здесь оно называется 'a') в следующих конструкциях:

a || b
a && b
a , b
a ? b : c

Сори, что это для плюсов
Аноним 10/02/20 Пнд 00:42:12 159695073
>>1596937
Да, это очевидный пример, я хотел что-то не такое искусственное и более сложное придумать. Ибо, судя по этой инфе >>1596949
sp нет между заголовком и телом условного оператора (не считая тернарный)
Аноним 10/02/20 Пнд 01:40:25 159698274
>>1596949
> At the end of a full expression. This category includes expression statements (such as the assignment a=b;), return statements, the controlling expressions of if, switch, while, or do-while statements, and all three expressions in a for statement.
Аноним 10/02/20 Пнд 01:58:25 159698675
>>1596982
Спасибо.
Можешь привести какой-нибудь нетривиальный пример, где можно проебаться из-за sp?
Аноним 10/02/20 Пнд 10:11:50 159704576
>>1595911
Переведи для нюфага. И почему перед main int или void пропущен?
Аноним 10/02/20 Пнд 10:14:31 159704877
>>1597045
В древнем стандарте был неявный инт, его можно было не писать.
Аноним 10/02/20 Пнд 18:21:29 159741378
>>1597045
С с99 сконпелирует, с с11 выдаст Wimplict но тоже сконпелирует. Только в этом ворнинге даже смысла нет, ибо конпелятор не даст выстрелить в систему и ретерны сам подставит. Смысл исключительно стилистический
Аноним 10/02/20 Пнд 19:41:18 159746379
Это нормально что я занимаюсь по книги k&r с 11-января 2020-го и сегодня я сделал упраженение 1-19 на 31-ой странице. по-моему я как-то медленно двигаюсь..
Аноним 10/02/20 Пнд 20:38:25 159750580
>>1597463
не нормально такую хуйню спрашивать
Аноним 10/02/20 Пнд 21:29:46 159754981
>>1597463
Я тебе открою страшную тайну: прорешивание упражнений из книжек прокачивает тебя в умении решать упражнения из книжек. Прокачивают ли они тебя как программиста, науке до сих пор не известно.
Аноним 10/02/20 Пнд 21:41:34 159756182
>>1597463
Я читал Страуструпа 2 года. Если чувствуешь себя тупым, вспомни меня.
Аноним 10/02/20 Пнд 23:00:46 159763783
>>1597549
О, мантры айкьюшизика.
Аноним 10/02/20 Пнд 23:31:08 159766484
>>1597637
Сикп уже полностью прорешал, ковбой? В нвидию устроился?
Аноним 11/02/20 Втр 00:29:52 159768885
>>1597561
ну у страуструпа там 1000+ страниц.
Аноним 11/02/20 Втр 00:30:36 159768986
>>1597549
ага, только есть одно НО, без синтаксиса ты обосрёшься. его всё равно учить надо, элементарно книгу от создателя по языку нужно пройти чтобы начать на нём кодить.
Аноним 11/02/20 Втр 00:31:37 159769187
>>1597561
ну и как оно того стоило? я просто планирую против k&r в страуструпа вкатиться.
Аноним 11/02/20 Втр 00:40:53 159769488
Маллокалка не на шутку хуеет с этого кода.
https://pastebin.com/LqTwwxeZ
Когда грузится с существующего файла, у нее то во время load
>corrupted size vs. prev_size
то во время save
>sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed
це ж бля якась пiзда...
Надо заметить, это происходит, когда округленный размер для аллокации вычисляется типа так size+-size%0x40 . Разувериваться в безопасности этого божественного трюка я, однако, решительно отказываюсь.
Аноним 11/02/20 Втр 00:48:53 159769689
>>1597691
Сложно сказать. Там рассказывается вообще всё, но на практике большую часть будешь использовать редко. Что действительно можно сказать, так это то, что прям задрачивать теорию не нужно, лучше потратить это время на написание своих проектов. Да и нормальные люди быстрее эту книгу читают, так что вдруг в твоём случае будет всё не так плохо, как у меня.
Аноним 11/02/20 Втр 00:52:00 159769890
>>1597696
Я и не задрачиваю теорию, я просто стараюсь решать все задачи которые представлены в книге. Ну лишними эти знания не будут в любом случае, может быть на практике то и не будешь использовать на знать полезно для более детального понимания, мало ли когда пригодится.

Не в чтении проблема, а проблема в заданиях. Прочитал и тебе 4 задания выкатили и ты их 3 дня решаешь. Ну я, правда решаю на совесть, а не на отъебись чтобы идеально было. Не знаю я мне кажется страуструпа я тоже наверное года 2 буду изучать.
Аноним 11/02/20 Втр 00:53:09 159770091
1 книга по радоэлектронике для новчика + k&r + страуструп > 5 лет обучения в вузе на программиста
Аноним 11/02/20 Втр 00:53:15 159770192
>>1597698
>Ну я, правда решаю на совесть, а не на отъебись чтобы идеально было.
Ты так можешь к плохому приучиться, до хорошего не дочитав.
Аноним 11/02/20 Втр 00:53:33 159770293
>>1597696
А сколько тебе лет?
Аноним 11/02/20 Втр 00:57:13 159770594
>>1597702
22. На плюсы уже забил, слишком тупой я для них.
Аноним 11/02/20 Втр 01:08:06 159771095
>>1597705
о так мы ровесники, мне 22 исполняется через, месяц. А что так? Голый Си же никому не нужен сейчас, я сам в Си вкатываюсь, только чтобы в плюсы вкатываться проще было. У меня цель на С++ кодить. Ради этого я прочитал книгу которая знакомила с основами погромирования на базе питона, прочитал вводную книжку о радиоэлектронике. Сейчас вот СИ пройду, наконец до С++ дотяну.

На него просто подготовиться надо хорошо.
Аноним 11/02/20 Втр 01:11:35 159771196
Боги си, подскажите мне тупому по указателям, которые *. Как-то конкретно в них не могу въехать, только поверхностно. Они ссылаются на адрес в памяти, а не на саму переменную, как тогда мы в этот адрес памяти записываем значение? Вроде смотрел, читал, но всё ещё не ясно понимаю
Аноним 11/02/20 Втр 01:15:08 159771497
>>1597710
Да я прост в другие языки перекатился, где легче найти работу. Целеустремлённости не хватило довести до победного.
На плюсах даже прочитал книжку по Qt + мануалы по парочке других либ. Даже писал что-то. Сейчас иногда пишу ннбольшие проекты для себя, когда есть желание и свободное время.
Аноним 11/02/20 Втр 01:27:00 159771698
>>1597714
В веб небось перекатился? У меня была одна попытка вкатиться в веб, но он какой-то пресный и бездушный. А вот С\С++ для души, неудиветильно, что ты даже сейчас на них продолжаешь кодить.
Аноним 11/02/20 Втр 08:24:21 159776599
>>1597716
Бекенд, жаба.

>А вот С\С++ для души, неудиветильно, что ты даже сейчас на них продолжаешь кодить.
Пожалуй, так и есть.
Аноним 11/02/20 Втр 10:08:31 1597805100
Мы тут все такие, чтоли?
мимо 21 лвл, вкатываюсь в функционалОЧКУ и продолжаю говнокодить на Сях для души
Аноним 11/02/20 Втр 10:08:54 1597806101
>>1597805
>вкатываюсь в функционалОЧКУ по работе
фикс
Аноним 11/02/20 Втр 18:50:19 1598411102
>>1597711
Когда создаёшь указатель, ты пишешь тип на который он ссылается. Компилятор знает размер этого типа и оперирует данными по адресу в указателе в соответствии с этим типом и его размером.
Аноним 11/02/20 Втр 20:17:45 1598492103
>>1597689
Какое отношение упражнения имеют к синтаксису? Learn You Haskell for a Great Good, например, вообще без упражнений, а в ней не только синтаксис, но и всякие концепции вроде аппликативных функторов и моноидов описаны. А уж Си в разы проще, по-крайней мере если брать язык сам по себе, без предметной области в виде системного программирования и т.д.
Я же не говорю, что разбираться вообще не надо, просто глупо решать все упражнения подряд. Нужно оценивать упражнения исходя из того, что они могут тебе дать и какой цели ты хочешь добиться в процессе обучения.
Аноним 11/02/20 Втр 20:57:15 1598562104
>>1598492
В хуевых книгах в упражнениях даются новые знания. То есть смотришь упражнение, видишь - хуита скучная, а потом оказывается, что в решении там важный пункт главы, но если ты не решал упражнение, то ты не заглядывал в решение , и поэтому нихуя не узнал. Насколько я помню, K&R хорошая книга, а вот Кнут или SICP - хуевые.
Аноним 11/02/20 Втр 21:06:07 1598574105
>>1598562
Если в книге нет каких-то важных пунктов, либо нет сносок типа "эта тема отдельно заняла бы целую главу, поэтому загляните в такой-то источник, если считаете необходимым", то это хуевая книга и ее читать не нужно.
Аноним 11/02/20 Втр 22:06:19 1598641106
>>1598492
в том что если тупо читать не делать упражнений это в одно ухо влетает в другое вылетает. благодаря упражнениям ты на практике видишь как это всё работает.
Аноним 11/02/20 Втр 22:51:54 1598743107
>>1598641
>в том что если тупо читать не делать упражнений это в одно ухо влетает в другое вылетает.
Это называется ADHD, твоя мамка мало витамина D ела
Аноним 12/02/20 Срд 00:25:16 1598862108
1FEpthiyimg.jpg (30Кб, 326x252)
326x252
>>1593083 (OP)
Сишники вопрос на повестке дня. Что не так с С под окнами и почему все говорят что на С надо кодить только с UNIX подобных систем
Аноним 12/02/20 Срд 00:25:30 1598863109
12/02/20 Срд 01:39:08 1598924110
>>1598862
Заебали. В Си все ок, на Си надо кодить. ОС - дело десятое.
Аноним 12/02/20 Срд 01:54:10 1598933111
>>1598743
ну это примерно как прийдти в автошколу, инструктор сядет за руль поездит, расскажет тебе как всё переключается и скажет "ну всё давай иди, через неделю в гаи на экзамен" примерно тоже самое читать теорию и не делать никаких задач.
Аноним 12/02/20 Срд 01:55:25 1598934112
>>1598862
Просто создатель СИшки был ярым фанатом пердолей, поэтому это мнение даже в своей книжке пропагандировал что он под unix заточен и всё здесь на примерах unix системы. Нормально под окнами кодиться, на них. К тому же сам microsoft активно двигает эти C\C++
Аноним 12/02/20 Срд 02:00:43 1598937113
image.png (31Кб, 275x385)
275x385
image.png (21Кб, 277x267)
277x267
image.png (119Кб, 395x302)
395x302
Аноним 12/02/20 Срд 02:05:05 1598938114
>>1598934
на что ты намекаешь? когда я говорил что майкрософт сишки двигает, я не имел ввиду что их разработали они, а то что они как монополисты на рынке создают основные продукты на нём. и в виде тех же вакансий.
Аноним 12/02/20 Срд 02:13:47 1598943115
>>1598938
Просто вместе с тобой поражаюсь, как это
>создатель СИшки
> своей книжке пропагандировал что он под unix заточен
вместо того, чтобы просто и ясно сказать, что
>Нормально под окнами кодиться
за 14 лет до их создания.
Аноним 12/02/20 Срд 02:17:10 1598945116
>>1598943
а ну понял. ну я особо там не ебу когда что создано было, кек ёбаный. в конце концов я книгу от 2014-го года вроде как читал или от 2011-го не важно, можно было написать что окнам инормально кодится.
Аноним 12/02/20 Срд 02:30:24 1598950117
>>1598945
>от 2014-го года вроде как читал или от 2011-го не важно
Создатель С в 2011 уже умер.

Многовато ты "не особо там ебёшь" для обладателя такого сильного мнения, я тебе скажу. Какую-то книгу, непонятно чьего авторства, неизвестно какого года прочитал, и она тебе всё объяснила. Книга точно по С была, а не по эзотерике?
Аноним 12/02/20 Срд 02:56:49 1598955118
>>1598862
>Что не так с С под окнами
С учетом того, что Windows API исключительно сишный, это очень странное утверждение
Аноним 12/02/20 Срд 05:06:13 1598973119
>>1598955
> Windows API исключительно сишный
Уже давно не исключительно. Есть крестоапи местами уже (те же HTTP, или GDI+), есть COM, который тоже по идее на крестах, хотя и можно дергать из Си. И, наконец, есть множество managed интерфейсов без native эквивалентов.
Аноним 12/02/20 Срд 06:43:51 1598980120
>>1598973
COM сишный, GDI+ тоже, про HTTP не знаю. То, что на С++ - это врапперы.
Аноним 12/02/20 Срд 08:31:29 1598999121
>>1598980
>То, что на С++ - это врапперы.
На голом винапи еще во времена windows 3.1 забили писать, слишком геморно, по крайней мере что касается гуи-интерфейсов, для которых сделали библиотеки на классах. Да что винда, сам язык без классов не имеет смысла. Тот же банальный std::string, как ты без строк собрался программировать, клоун. Разве что студентик олимпиадник с лабами уровня хеллоуворлд.
Аноним 12/02/20 Срд 11:01:29 1599059122
>>1598999
тише, дружище. Тут половина треда это дети из школы 21, которые строк сложнее ASCII не видели, ты на себя только помойное ведро сейчас навлечешь рассказывая им о реальном мире, где даже на микрухе эмулируют ООП.
Аноним 12/02/20 Срд 14:50:42 1599180123
Аноним 12/02/20 Срд 15:53:04 1599239124
Capture.PNG (106Кб, 781x458)
781x458
Анчоусы, хелпаните, пожалуйста. Переведите мне задание(1-20), я опять не до конца понимаю смысл(ёбаный инглиш)
Аноним 12/02/20 Срд 16:02:55 1599248125
>>1599239
А переведите, пожалуйста, все задачи с пика. Я вообще ебанусь с этим ёбаным инглишом я не понимаю нахуй что они хотят.
Аноним 12/02/20 Срд 16:36:58 1599289126
>>1599239
скачай уже русский перевод, дубина
Аноним 12/02/20 Срд 16:37:48 1599291127
>>1599289
я уже нашёл, спасибо.
Аноним 12/02/20 Срд 16:51:15 1599303128
В чём разница между ++c и c++ ? Почему плюсы с разных сторон пишутся, на что это влияет?
Аноним 12/02/20 Срд 17:26:56 1599337129
изображение.png (2Кб, 298x75)
298x75
>>1599303
В случае ++i оно добавляет единицу и возвращает это значение.
В случае i++ оно возвращает переменную и добавляет единицу. Тут ещё якобы временная переменная может появиться в каких-то случаях. Смотри префиксный и постфиксный инкремент.
Можешь просто использовать только первый, он гарантированно не хуже второго.
Аноним 12/02/20 Срд 17:36:02 1599347130
>>1599337
спасибо, огромное анчоус. понял
Аноним 12/02/20 Срд 17:37:29 1599351131
>>1599347
Всё же посмотри что-то про "префиксный и постфиксный инкремент", я очень грубо описал - подумал что ты просто названия не знаешь.
Аноним 12/02/20 Срд 17:41:03 1599356132
>>1599351
понял. щас гляну, спасибо ещё раз, анчоус.
Аноним 12/02/20 Срд 17:42:35 1599359133
>>1599351
А ты не можешь объяснить зачем у него в коде константа COLS?



И что значит "tab stops" у него в задании. Что это за остановки табуляров такие?
Аноним 12/02/20 Срд 17:48:03 1599361134
Аноним 12/02/20 Срд 17:49:22 1599363135
>>1599361
>>1599359
а уже не надо, спасибо. у меня хватило ума загуглить.
Аноним 12/02/20 Срд 18:22:36 1599413136
>>1598980
> GDI+ тоже
Ты опять выходишь на связь? Уже написал для нас пример работы с Flat GDI+ API на Си?

>>1598999
> На голом винапи еще во времена windows 3.1 забили писать
Куча софта написана на голом винапи. Вон, например, новая миранда недавно зарелизилась, лол.

> даже на микрухе эмулируют ООП
ООП != кресты. ООП - это про объекты, на сишке точно так же пишут в ООП-стиле, передавая указатели на структурки в соответствующие им функции, потому что это единственный разумный подход в больших проектах.
Аноним 12/02/20 Срд 19:16:46 1599474137
29.jpg (433Кб, 1024x768)
1024x768
Capture.PNG (2Кб, 124x198)
124x198
>>1599361
Ну типа в консоле ширина табуляра расчитывается формуле

8 - ("number of symbols in a string" % 8)

COLS у него это тот самый tabs stops по-русски говоря шаг табуляра, каждые 8 символов. То есть табуляр идёт не от последнего введённого символа, а он идёт как по линейке.
Пример на пике 2.

Попробуй это в консоле, с запятой после hello и без неё и ты заметишь что ширина табуляра динамическая. То есть сама ширина табуляра она не фиксирована, а равна расстоянию которое осталось до tabs stop. Если осталось до него 3 символа, то 3 ём пробелам, если 5 то 5-ти пробелам.
Аноним 12/02/20 Срд 20:11:02 1599514138
Поясните, чем отличается '\0' (aka NUL - не путать с NULL) от 0 (как обычный ноль)? Ничем же, верно? То есть '\0' это просто специальная escape sequence?
Аноним 12/02/20 Срд 20:15:29 1599518139
>>1599514
#include <stdio.h>

int main(void)
{
printf ("%d\n%d\n", (int)'0', (int)'\0');
return 0;
}
Аноним 12/02/20 Срд 20:15:46 1599519140
>>1599514
Символ конца строки. Не путай с '\n' который означает переход о на новую строку.
Аноним 12/02/20 Срд 20:18:08 1599523141
>>1599518
Нет, ты не понял, анон, я не про '0' говорил. а про 0 без кавычек, то есть не символ
Аноним 12/02/20 Срд 20:19:59 1599525142
>>1599519
Я знаю, что такое символ конца строки. Чем отличается '\0' от обычного нуля, который не символ? Зачем ввели '\0' (это же отдельная escape sequence (еще раз повторяю вопрос)), вместо того чтобы просто писать нуль (не символьный нуль)?
Аноним 12/02/20 Срд 20:21:28 1599528143
>>1599523
Покажи, где ты хочешь написать 0 (без кавычек) вместо '\0'?
Аноним 12/02/20 Срд 20:22:09 1599529144
>>1599525
скинь пример кода где это употреблено, я не понимаю о чём ты.
Аноним 12/02/20 Срд 20:22:50 1599530145
>>1599528
Например,
char str[2];
str[0] = 'x';
str[1] = 0;
Аноним 12/02/20 Срд 20:24:11 1599536146
Аноним 12/02/20 Срд 20:24:43 1599537147
Аноним 12/02/20 Срд 20:26:17 1599543148
>>1599530
Ну это разве реалистично? Ты так стал бы писать? Чтобы строки в таком виде не раскладывать и ввели. Так-то можно и '\n' на 10 в ASСII заменить.
Аноним 12/02/20 Срд 20:28:35 1599546149
>>1599530
>str[0] = 'x';
>str[1] = 0;
>>1599536
ну так ты char вводишь int этот int заменяется на соотвествующий символ в ascii таблице и он означает NULL то есть ничего, пустоту. всё.
Аноним 12/02/20 Срд 20:29:32 1599548150
unnamed.gif (56Кб, 512x349)
512x349
Аноним 12/02/20 Срд 20:32:52 1599552151
15814778519640.jpg (7Кб, 400x410)
400x410
Аноним 12/02/20 Срд 20:33:53 1599554152
>>1599525
> Зачем ввели '\0' (это же отдельная escape sequence
Чтобы делать "foo\0bar\0abc\0def\0\0", например. В форме символьной константы не отличается ничем, но в крестах, например, '\0' это char, а 0 это int. В сишке оба инты.
Аноним 12/02/20 Срд 21:05:48 1599583153
>>1599554
Понял, сяп.
>В сишке оба инты.
А это точно? '\0' - это интовая константа/литерал?
То есть при char x = '\0' происходит неявное преобразование из signed char в signed int?

Алсо если '\0' - это заложенная стандартом СИ (ВЕРНО?) escape sequence, то почему я не вижу ее в этой таблице?
https://en.wikipedia.org/wiki/Escape_sequences_in_C
Аноним 12/02/20 Срд 21:06:34 1599585154
>>1599583
>неявное преобразование из signed char в signed int?
Опечатался. Имел в виду, из signed int в signed char
быстрофикс
Аноним 12/02/20 Срд 21:08:33 1599587155
>>1599543
>>1599546
>>1599548
Вам тоже спасибо, анончики. Но я хотел услышать, чем именно отличается 0 от '\0'. (я думал, мб, '\0' является char-константой, а не интом). И хотел понять, является ли '\0' стандартизированной escape sequence. И эти вопросы все еще открыты. Сори, если я изначально по-еблански спрашивал, и вы меня не совсем так поняли
Аноним 12/02/20 Срд 21:25:40 1599607156
Аноним 12/02/20 Срд 21:29:18 1599614157
>>1599583
>почему я не вижу ее в этой таблице?
С глазамы проблемы, похоже. Посмотри ещё раз внимательней на числовые последовательности в той таблице. Её ещё можно записать как \x0 или \u0000 например.
Аноним 12/02/20 Срд 21:29:50 1599617158
>>1599614
>глазамы
глазами

быстрофикс
Аноним 12/02/20 Срд 21:30:32 1599618159
>>1599587
'\0' является частью набора символов. В мультьтибайтовом кодировании он может быть представлен в том числе и несколькими байтами, если структура жёсткая (например, строго три байта на символ). Но обратное запрещено (нельзя использовать '\0' для чего-то другого).
http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
5.2.1.2
>The null character ('\0') may not be used as part of a multibyte encoding, except for the one-byte null character itself. This allows existing functions which manipulate strings to work transparently with multibyte sequences.
Запрет тут проговорен явно, а возможное мультибайтовое представление, это уже мой вывод.
Аноним 12/02/20 Срд 21:44:56 1599648160
>>1599607
>>1599614
>The byte whose numerical value is given by ...nnn interpreted as an ...al number
Так какой еще the byte? В стандарте регламентируется соответствие \nnn определенному byte? Что это за byte? Откуда он берет соответствие?
И я все еще не увидел ничего про однозначное соответствие '\0' нулю
Аноним 12/02/20 Срд 21:49:03 1599657161
>>1599618
Спасибо. Все же выходит, что '\0' это это однозначно one-byte null character itself, однако соответствие этого null character конкретному числу зависит от применяемой кодировки, так? То есть может оказаться, что '\0' == 116?
Аноним 12/02/20 Срд 21:51:04 1599660162
>>1599648
\0 - это в восьмеричной (octal) системе 0.
\1 -> 1
\2 -> 2
...
\7 -> 7

Байт, соответсвенно 00000000, 00000001, 00000010, ... 00000111.
Аноним 12/02/20 Срд 21:55:44 1599674163
>>1599657
>То есть может оказаться, что '\0' == 116?
Не запрещено, насколько я понимаю. Строчки обязательно должны заканчиваться чем-то, что представляется '\0'. Если это будет (long long) 116, то ничего страшного, но нельзя использовать (int) 0 для других целей, например, обозначать так 'a'.
Аноним 12/02/20 Срд 22:07:00 1599685164
>>1599674
Какая-то хуита из разряда "в байте не обязательно 8 бит".
Аноним 12/02/20 Срд 22:12:50 1599692165
>>1599685
Действительно. А ещё система может быть не windows. Зачем вообще это в стандарте языка программирования? Пусть пердоли сами разбираются!
Аноним 12/02/20 Срд 22:13:09 1599694166
>>1599660
>Байт, соответсвенно 00000000, 00000001, 00000010, ... 00000111
Понял. Значит, в однобайтовой кодировке мы составляем байт с помощью \nnn value (в данном случае octal).
То есть в таком коде:
char x = '\0';
Работает следующим образом:
1) '\0' - данная escape sequence составляет байт 00000000
А дальше?
Аноним 12/02/20 Срд 22:13:48 1599696167
>>1599685
ну кстати да, английский символ занимает 8 бит, а русский 6 бит например.
Аноним 12/02/20 Срд 22:19:30 1599702168
>>1599692
> А ещё система может быть не windows
Как ни пиши, что-нибудь хоть сколько-то большое без плясок даже на разных версиях одной ОС сходу не заработает.

>>1599696
Меньше байта всё равно не будет. Например, булев тип тоже занимает аж целый байт, и 7 битов из 8 расходуются зря. А с учётом алигнмента ещё больше.
Аноним 12/02/20 Срд 22:22:03 1599707169
>>1599702
ну я и не заявляю что байт может быть меньше 8 бит. просто это к тому же не все биты используются.

а что из себя представляет мусор? ну вот допустим мусор в массиве в си где анон вначале треда горел что ему не объяснили. что есть мусор в символе?
Аноним 12/02/20 Срд 22:22:24 1599708170
>>1599707
в массиве, не в символе. пофиксил себя.
Аноним 12/02/20 Срд 22:29:05 1599716171
>>1599674
>но нельзя использовать (int) 0 для других целей, например, обозначать так 'a'.
А вот про это где сказано?
Регламентируется стандартом?
Аноним 12/02/20 Срд 22:30:29 1599717172
>>1599707
Не нашёл постов про мусор. Наверное, речь про неинициализированные данные, когда ты получил в своё пользование память, но ещё ничего ей не присвоил, но пытаешься её читать. Там может оказаться что угодно, и по стандарту такое чтение - undefined behavior.
Аноним 12/02/20 Срд 22:32:41 1599718173
Аноним 12/02/20 Срд 22:33:24 1599719174
Аноним 12/02/20 Срд 22:45:37 1599735175
>>1599719
>The null character ('\0') may not be used as part of a multibyte encoding, except for the one-byte null character itself
Эта?
Но тут ведь не говорится, что кодировка не может в (int) 0 кодировать какой-либо символ, вроде того же 'a'.
Здесь просто говорится, что '\0' не может быть частью составленного из нескольких байт символа (в мультибайтовых кодировках).

Или я уже совсем ебнулся?
Аноним 12/02/20 Срд 22:54:31 1599742176
>>1599735
Попробую перефразировать:
Исходя из цитаты, я не вижу запрета на использование (int) 0, в однобайтовых кодировках для кодирования каких-либо символов
Аноним 12/02/20 Срд 22:57:59 1599743177
>>1599742
> стандарт:
> A byte with all bits set to 0, called the null character, shall exist in the basic execution character set
О чем вы вообще?
Аноним 12/02/20 Срд 23:39:23 1599768178
>>1599743
execution character set - это другое.
Я спрашиваю о том, допускается ли создание кодировок, в которых null character-ом (нулевым байтом) будет кодироваться какой-нибудь символ. Например 'a'.
Аноним 12/02/20 Срд 23:52:20 1599783179
>>1599768
> это другое
Нет. Execution character set - это то самое, с чем работает твой код в рантайме. А source character set - это о тексте программы, который компилятор читает из .c файла. Все важное (читай: строковые литералы) конвертируется в execution character set практически сразу же.
Аноним 13/02/20 Чтв 00:09:50 1599807180
>>1599783
Понял.
Но ведь
>shall exist
не означает shall represent a line terminator или вроде того
Имею в виду, где регламентируется то, что все кодировки в качестве байта/набора байтов, где биты установлены в 0, должны представлять собой признак окончания строки (не могут являться каким-либо другим символом, вроде 'z')?
Что мне мешает сделать кодировку, где null-character будет кодировать цифру '8'? Ничего ведь, верно? А где в стандарте Си говорится о том, что такую кодировку для программ на Си использовать нельзя?
Аноним 13/02/20 Чтв 00:27:58 1599830181
А как научиться читать код на c?
Ну правда. Язык элементарен.
Но как только пытаешься влезть в исходники nginx или даже sqlite, мозг начинает плавиться и вытекать.
Аноним 13/02/20 Чтв 00:32:03 1599840182
>>1599830
Просто без задней мысли берёшь
int ((foo)(void ))[3]
и читаешь
Аноним 13/02/20 Чтв 00:34:15 1599843183
Аноним 13/02/20 Чтв 00:42:37 1599853184
>>1599843
Простите, пару звёздочек съело.
int (✭(✭foo)(void ))[3]
Аноним 13/02/20 Чтв 00:46:00 1599857185
>>1599853
Все равно понятнее не стало, расшифруй
Аноним 13/02/20 Чтв 00:47:17 1599858186
>>1599853
Все, кто не использует тайпдефы для сложных типов - пидарасы. И пишут они говнокод.
Аноним 13/02/20 Чтв 00:55:09 1599869187
>>1599857
Ну смотри, первое действие выполняется в скобках, значит лезем в самые глубокие.
Там у нас две на одном уровне
(✭foo) и (void )
значит слева направо:
(✭foo) - звёздочка, значит указатель, указатель на foo. Что такое foo, ещё не знаем. Смотрим дальше.
(void ) - тип в скобочках после названи, значит это аргумент, а foo, получается, функция.
(✭foo)(void ) - указатель на функцию foo с аргументом void
Поехали дальше, следующие скобки:
(✭(✭foo)(void )) означает, что эта функция возвращает указатель, указатель на что?
int ✭ [3]
Указатель на массив из трёх интов.
Итого:
int (✭(✭foo)(void ))[3] - указатель на функцию foo от void, возвращающую указатель на массив из трёх интов. Без задней мысли :3

>>1599858
А тайпдефы ты как разбирать будешь, ммм?
Аноним 13/02/20 Чтв 00:58:19 1599872188
>>1599869
Прочитаю один раз комментарий к тайпдефу вместо того, чтобы парсить эту хуиту каждый раз.
Аноним 13/02/20 Чтв 01:00:41 1599873189
>>1599869
А что значит "указатель на массив из трех интов"?
Указатель может быть только на тип инт. То есть на нулевой элемент в массиве.
Так что ты немного проебался, походу. Там функция return'ит массив из 3х указателей на int
Аноним 13/02/20 Чтв 01:05:04 1599876190
>>1599873
Указатель может быть на другой указатель.
Аноним 13/02/20 Чтв 01:06:31 1599879191
>>1599873
>Указатель может быть только на тип инт.
Указатель может быть на что угодно. Более того, ты по нему даже можешь размер объекта узнать, так, например, память для многомерных массмвом выделяют.
>Там функция return'ит массив из 3х указателей на int
Тогда было бы вот так
int ✭(✭foo)(void )[3]

Аноним 13/02/20 Чтв 01:15:56 1599899192
>>1599879
А какой смысл в первом случае? Там, где "указатель на массив из трех интов"? У нас типа в той строке инициализируется пустой массив из 3-х интов и ретернится указатель на него? Так? (Если опустить функцию)
Аноним 13/02/20 Чтв 01:16:20 1599901193
image.png (37Кб, 578x523)
578x523
>>1599879
Вот пример, а то скучно ждать.
Аноним 13/02/20 Чтв 01:20:30 1599910194
>>1599899
Я не очень понимаю, какой смысл ты ищешь. Я просто показал, что так можно. Зачем это вообще отдельный разговор, можешь обсудить с аноном выше, у которого во всем тайпдефам комментарии есть.
Аноним 13/02/20 Чтв 01:24:51 1599918195
>>1599901
Понял, прикольно. И полезно. Первый раз такое вижу. А за счет чего вообще меняется смысл при заключении указателя в скобки? То есть к каким вещам мне вообще нужно было бы обращаться, чтобы понять, что int (звездочка foo)[3];
Объявляет указатель foo на безымяный инт из 3-х элементов? Я не понимаю, как все это связывается так.
Аноним 13/02/20 Чтв 01:26:28 1599920196
Аноним 13/02/20 Чтв 01:28:20 1599927197
>>1599918
>А за счет чего вообще меняется смысл при заключении указателя в скобки?
За счёт порядка действий.
Как отличить указатель на функцию от функции, возвращающей указатель понимаешь? Тот же принцип.

>>1599920
vscode
Аноним 13/02/20 Чтв 01:30:25 1599929198
>>1599920
Или ты про терминал? Тогда fish
Аноним 13/02/20 Чтв 04:37:17 1600008199
1504866301903.png (13Кб, 582x327)
582x327
>>1599618
> Но обратное запрещено (нельзя использовать '\0' для чего-то другого).
Утютю. '\0' это лишь нулевой байт типа char но на типы си похуй, там всё - числа. Всё состоит из байтов, используй как угодно.
Аноним 13/02/20 Чтв 05:57:44 1600023200
>>1599587
> Но я хотел услышать, чем именно отличается 0 от '\0'.
char c = 0
от
char c = '\0'

отличается ничем
Аноним 13/02/20 Чтв 06:09:09 1600027201
1456682615182.png (4Кб, 591x210)
591x210
>>1600023
>отличается ничем
Неверно. Отличается.
Аноним 13/02/20 Чтв 06:09:30 1600028202
>>1600008
Но... разговор же совсем не про это был.
Аноним 13/02/20 Чтв 06:11:32 1600029203
>>1600027
sizeof(0) не char же, очевидно.
Аноним 13/02/20 Чтв 06:17:02 1600030204
>>1600028
А про что? Если я не протупил, разговор был про бред, . Кодировки не включают в себя нулевой символ, кроме единственного - терминатора. Т.е. \0 не используется нигде, кроме конца, остальные строки пишутся без нулей, любые.

>>1600029
О том и речь. 0 это int, а не char. Разница как бы есть, хотя конечно язык всё равно преобразует, сократит или растянет если надо.
Аноним 13/02/20 Чтв 06:32:04 1600032205
>>1600027
Это тролинг тупостью, ясно
Аноним 13/02/20 Чтв 07:05:39 1600039206
>>1600032
>ясно
У дебилизма есть и свои плюсы, удобно определять. Все дебилы как боты по одному шаблону. Пяток регексов и посты автоматически подсвечиваются.
13/02/20 Чтв 12:34:10 1600195207
Аноним 13/02/20 Чтв 12:44:31 1600201208
>>1600193
>14-летний школьник

инженер
Аноним 13/02/20 Чтв 18:43:37 1600550209
>>1598999
> Тот же банальный std::string
У винды есть рейлтайм для управления строками.
Аноним 13/02/20 Чтв 18:45:09 1600553210
>>1599858
Двачую. Тот же самый код с использованием using/typedef и нормальными кастами выглядит в разы понятней.
Аноним 13/02/20 Чтв 19:42:53 1600620211
Ананасики, всем хэллоу уорлд. Тут есть аноны, которые разрабатывали прошивки (на си или крестах - не суть важно)?
Хочу вкатиться в разработку прошивок для умных девайсов и прочей имбэдщины (не спрашивайте почему я такой ебанутый, просто люблю лоу лвл, и к тому же, у меня в стране это востребовано, поэтому голодным не должен остаться).
Что посоветуете почитать? Насколько нужно быть матерым в железе? А то я из мира софта, а о железе знаю только названия нескольких интерфейсов вроже uart, spi, i2c, jtag... Я понимаю, что разработка прошивок - это 85% времени втыкания в datasheet девайса, под который пишется прошивка, но тем не менее, хочу какой-нибудь мало-мальски структурированный источник информации по сабжу. Ну и имеются в виду прошивки, которые крутятся на борде , процессором, а не без оного (слышал, что есть разница, ибо там, где не проца, все пишется на fpga или верилоге, могу ошибаться).
О себе вкратце - студентота, знаю Си, кресты, немного внутренности Линукса (и вообще Линукс няшка, да, я линуксоид), асм х86 и немного знаю асм ARM, имею опыт в базовом реверс-инжиниринге. Ну и сети, алгоритмы, структуры данных, офк, тоже.
После энного кол-ва опыта обязательно захочу вкатиться в безопасность прошивок (реверсинг и эксплуатация). Но без опыта в разработке оных, я полагаю, смысла сразу прыгать в инфосек сей отрасли не имеет смысла (или я ошибаюсь?), поэтому и прошу о помощи.
Дай наука здоровья всем, кто ответит.
Аноним 13/02/20 Чтв 22:38:07 1600925212
>>1599901
У тебя ведь тут получились два анонимных массива на фрейме стека размерностью 72 и 576 байт, соответственно, к которым никак не обратиться, а также два сложных составных типа int (звездочка) [][], в которых указатели указывают на последовательность байтов на куче размерностью 72 и 576, соответственно. Верно?
Я к тому, что ты к своим массивам никак не обратишься, ибо указатели переопределил.
Аноним 13/02/20 Чтв 22:40:30 1600930213
>>1600023
Ну то есть, несмотря на то, что escape sequence '\0' составляет нулевой один байт, компилятор все равно формирует из этого байта int, а потом неявно преобразовывает к char в таком коде?
char x = '\0';
Аноним 13/02/20 Чтв 22:43:21 1600935214
>>1600925
Я нигде не создавал массивы на фрейме стека. Так же как
int (*foo)(float a, double b)
не является функцией, так и
int (звездочка) [][]
не является массивом.
Аноним 13/02/20 Чтв 23:15:01 1600970215
>>1600935
Я еще не дошел до подобных сложных составных типов, поэтому и задаю такие вопросы.
>int (звездочка) [][]
не является массивом.
Тогда почему в таком коде не выдает segmentation fault?
char ('звездочка'arr_ptr)[6];
'звездочка'arr_ptr[0] = 'x';
'звездочка'arr_ptr[1] = 'y';
Аноним 13/02/20 Чтв 23:39:41 1601004216
Screenshot20200[...].png (36Кб, 775x353)
775x353
Аноним 13/02/20 Чтв 23:52:44 1601031217
>>1593083 (OP)
Бля, какая же сишка охуенная. Простая и понятная, ничего лишнего, но при этом такая мощная. Обожаю сишку.
Аноним 14/02/20 Птн 00:46:44 1601088218
>>1601004
А, ну у меня clang онлайн почему-то не ругался.
Спасибо за скрин.
Зачем тогда указывать размерность массива при объявлении указателя на него? (Для того, что ты показывал на примере выше с sizeof?) Это ведь по сути указатель на указатель. На конструкцию char ('звездочка'arr_ptr)[]; не ругается же
Аноним 14/02/20 Птн 00:48:51 1601089219
>>1601088
>(Для того, что ты показывал на примере выше с sizeof?)
Имел в виду, объявляем размерность массива, на который указывает указатель, чтобы могли такие фичи вытворять с определением размера по сути даже неинициализированного массива в памяти (тупо по описанию)?
Аноним 14/02/20 Птн 00:52:28 1601094220
>>1601088
>На конструкцию char ('звездочка'arr_ptr)[]; не ругается же
Естественно не ругается, это просто неинициализированный указатель. На int ✭ ptr; тоже ругаться не будет.

>>1601089
>определением размера по сути даже неинициализированного массива в памяти (тупо по описанию)
Со структурами же так постоянно делаешь, почему с массивами не делать.
Аноним 14/02/20 Птн 01:27:28 1601128221
Capture.PNG (19Кб, 777x83)
777x83
Анчоусы, зацените оптимизацию кода.
https://pastebin.com/g1shMe1J

Делал упражнение 1-20 из книги k&r. Что скажете? Хороший он? не говнокод? Как у него с оптимизацией? Я старался чтобы программа делала как можно действий при выполнении.
Аноним 14/02/20 Птн 01:33:33 1601130222
>>1601128
вроде неплохо, покрайней мере с условиями if else ты хорошо дружишь, большинство ньюфань все через if прописывают.
Аноним 14/02/20 Птн 02:07:46 1601139223
>>1601130
Ловко ты его подъебал.
Аноним 14/02/20 Птн 02:09:42 1601140224
>>1601139
я не подъёбывал, мне действительно кажется что у него с условиями всё ок. если видишь у него дерьмо в коде напиши где.
Аноним 14/02/20 Птн 02:52:02 1601150225
>>1601094
>это просто неинициализированный указатель
Угу, такой же неинициализированный как и char ('звездочка'arr_ptr)[6];

>Со структурами же так постоянно делаешь, почему с массивами не делать.
Хм, кстати, да. Логично. Что-то не подумал об этом.

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

И еще: а чем конкретно отличается char 'две звездочки'ptr и char ('звездочка') arr_ptr ? В первом случае у нас указатель на указатель на char. А во втором - указатель на массив char'oв. Но ведь массив char'ов состоит из указателя который указывает на нулевой байт набора - то есть то же самое, а именно указатель на указатель на char, нет? И да, я вижу, что компилятор мне выдает ворнинг при попытке ptr = arr_ptr;, мол, это разные типы, но почему? Хочу прояснить тонкости
Аноним 14/02/20 Птн 02:53:26 1601151226
>>1601150
>и char ('звездочка') arr_ptr
char ('звездочка') arr_ptr[]
быстрофикс, забыл квадратные скобки добавить
Аноним 14/02/20 Птн 03:01:23 1601152227
>>1601150
>Угу, такой же неинициализированный как и char ('звездочка'arr_ptr)[6];
Да. Проблема-то там не в создании указателя, а в том, что ты неинициализированной переменной в 'звездочка'arr_ptr[0] пытаешься 'x' присвоить. А его некуда присваивать, указатель неинициализированный, он никуда не указывает.

>Хочу прояснить тонкости
Читай книжки. Объяснять, конечно, полезно, но мне столько печатать лень.
Аноним 14/02/20 Птн 03:06:41 1601154228
>>1601128
>оптимизацию кода
Я бы тогда нагенерировал все возможные количества пробелов заранее и выбирал среди них через switch, а не цикл
for (int i = 0; i < TABSTOP - (count % TABSTOP); ++i)
крутил.

Ну и заменять одну '\n' на другую в
if (c == '\n') putchar('\n');
довольно странно. Как в известном индусском яваскрипте:
if a==5 return 5;
if a==6 return 6;
и т.д.
Аноним 14/02/20 Птн 03:16:14 1601155229
>>1601154
> нагенерировал все возможные количества пробелов заранее
printf("%*s", num, "") или даже "........" + [8 - num].
Аноним 14/02/20 Птн 03:20:26 1601156230
>>1601155
Да, или так. Я просто думал про более сложные случаи, когда строчки разные С массивом мне нравится больше всего.
Аноним 14/02/20 Птн 03:30:17 1601157231
>>1601152
>Да. Проблема-то там не в создании указателя, а в том, что ты неинициализированной переменной в 'звездочка'arr_ptr[0] пытаешься 'x' присвоить.
Я это понимаю. Изначально пытался присвоить какие-то значения, потому что не понимал, что под массив в той конструкции не выделяется память. Ну то есть семантика самого оператора была не ясна. Сейчас-то я уже понял суть.
>указатель неинициализированный, он никуда не указывает.
Если говорить корректно, то он указывает в произвольный (или несуществующий) участок памяти (адрес), ибо память, которая выделяется для указателя при объявлении этого самого указателя, содержит мусор. Но ты это итак, конечно, знаешь. Просто не хочу каких-то недосказанностей. Думаю, когда мы говорим в частности о Си, то особенно важна точность формулировок.
>Читай книжки. Объяснять, конечно, полезно, но мне столько печатать лень.
Ну плез, плез, плез, анончик. Очень тяжело выцепить прошаристых людей. Особенно в таких штуках. Серьезно. И не обязательно сейчас катать стену текста, если там много. Можешь ответить по возможности, например, завтра вечером. Когда я начинаю углубляться в это, то одна прочитанная вкладка материала порождает две-три непрочитанных, ибо вопросов больше и больше.
Кстати, а какие книжки читать, к примеру? Что посоветуешь?
Аноним 14/02/20 Птн 03:44:56 1601164232
>>1601157
>Очень тяжело выцепить прошаристых людей.
А я не прошаристый. Я читал-то одного прату. Но мне понравился. Просто попадается что-то интересное, открываю стак оверфлоу, а там вот такие ответы
https://stackoverflow.com/questions/1247486/list-comprehension-vs-map/6407222#6407222
Или такие
https://keithschwarz.com/interesting/code/?dir=knuth-morris-pratt
Но это, конечно, не очень хороший способ систематические знания получать, книжки лучше, просто я нетерпеливый.
Аноним 14/02/20 Птн 12:15:02 1601343233
Screenshot from[...].png (13Кб, 410x359)
410x359
Аноним 14/02/20 Птн 13:37:00 1601449234
https://pastebin.com/n5PmD1cd

Нормально ли получилось реализовать алгоритм сортировки вставками?
Аноним 14/02/20 Птн 13:49:01 1601477235
>>1601154
>>1601343
спасибо, вам, анчоусы. но я таких методов ещё не проходил, я же только в конце первой главы.
Аноним 14/02/20 Птн 13:50:11 1601481236
>>1601154
а потому что счётчик \n считает, а её считать нельзя. иначе программа будет некорректно пробелы считать.
Аноним 14/02/20 Птн 13:51:44 1601484237
>>1593083 (OP)
Аноны, а зачем вам это древнее говно? Вы бы еще на турбобейсике кодить начали?
Ну серьезно- нахуя?
Аноним 14/02/20 Птн 14:03:31 1601510238
>>1601484
> Вы бы еще на турбобейсике кодить начали
C старше

> Аноны, а зачем вам это древнее говно
А что если не C?
Аноним 14/02/20 Птн 14:03:41 1601511239
>>1601484
От этого языка блевать не тянет, как от всяких модных питонов, похапэ и яв. Этот язык с душой, мне всё равно сколько ему и есть ли работа на нём, буду кодить на нём.

Этот язык символ того времени когда программист был ещё нормальным человеком, а не хипстерским хуесосом с бородкой на 300кк в наносек и модными наклеечками на крышке ноутбука. Этот язык симовол тех лет когда офисы IT компаний выглядили как обычные офисны, а не как модные кафешки для креативных дезигнеров.

Этот язык это рассвет IT индустрии. Именно он положил начало рассвету этой индустрии. В нём всё.

Анон, тебе непонять. Это не то что ты думаешь. Этот язык учат не васяны которым надоела пятёрочка и они хотят ВАЙТИ В ОЙТИ ШТОБЫ ДЕЛАТЬ САЙТЫ ПОД КЛЮЧ И ПОЛУЧАТЬ 300КК В НАНОСЕК. Здесь людям плевать на деньги, на то есть ли на этом языке работа, здесь сидят онли идейные.

Аноним 14/02/20 Птн 14:15:09 1601528240
>>1601484
Не надо шутить с байтоёбами, блядь. Здесь другие ребята. Это не питонисты, это не похапе макаки. Анон, твои модные фреймворки здесь просто обоссут. Это тред отборных байтоёбов блядь! Они всё разнесут! Они всю твою веб студию пройдут за один час! Они взорвут все твои макбуки, всех твоих верстальщиков, девочек-дизайнеров. Аноны, ты — макака. Ты остановись, блядь, ты кончай, ты джаву спрячь подальше на склад. И забудь про своего Джобса. У нас был один мудак, неосилил книжу Ритчи, блядь — и был выпизднут отсюда. И другой чудак был, плюсы не осилил на Страуструпа выёбывался — и также получил струю мочи в листо. И ты повторишь ту же ошибку. Ты похапе забудь, похапе твой отработал своё, блядь. Ты подумай о будущем веб индустрии: она гибнет! Твои джуниоры бегут из этой отрасли. Там никто не хочет работать, в вебе, никто! У тебя обезъянник, блядь! CSS, HTML, JS! Это… инструменты макак, блядь! Ни души, блядь, ни управления памятью нету у вас, нет разработчиков! Всё айти читает Ритчи, Страуструпа, блядь. Операционные системы, — только C\C++, блядь. И C++ здесь — C! Вот здесь любят байтоёбов, а тебя — презирают, блядь, презирают!...
Аноним 14/02/20 Птн 14:20:37 1601544241
>>1601484
Ты на чем прошивки будешь разрабатывать, додик? На крестах или расте, где бинарник весит больше твоей мамки? И к тому же медленнее (на таком уровне разница даже в несколько микросекунд играет роль)
Лучше, чем С, для самого низкоуровневого байтоебства еще не придумали и походу уже не придумают.
Аноним 14/02/20 Птн 14:22:14 1601547242
>>1601544
Из современных языков только C\C++ нужны, остальное нинужно.
Аноним 14/02/20 Птн 14:46:39 1601595243
Screenshot from[...].png (13Кб, 409x358)
409x358
>>1601343
Перепрошую, анони. Трошки обiсрався.
Аноним 14/02/20 Птн 15:10:26 1601644244
>>1601595
Интересно а на нём только прошивки писать можно? А можно на нём написать графическую программу с GUI для вывода графика и построения функций?
Аноним 14/02/20 Птн 15:24:50 1601668245
>>1601644
Блять, ну сам-то подумай. Можно. А потом графиками рисовать картинку Дума, после чего из всего этого состряпать прошку и запустить на осциллографе.
Аноним 14/02/20 Птн 15:26:42 1601672246
unnamed.jpg (27Кб, 512x310)
512x310
>>1601668
Не, я имею в виду нормальные графики хорошего качества а не пиксельное гавно. Вообще можно ли на СИ такое сделать? Вот как на пике.
Аноним 14/02/20 Птн 15:35:13 1601683247
>>1601672
Можно, на C всё можно. Гугли "c plot library".
Аноним 14/02/20 Птн 15:40:37 1601689248
>>1601683
спасибо, огромное. а зачем тогда если на нём можно всё сделали c++ ?
Аноним 14/02/20 Птн 15:50:12 1601706249
>>1601689
Вопрос удобства. Плюсы оказались удобнее сишки, сишка - удобнее ассемблера, ассемблер - удобнее двоичных кодов.
Аноним 14/02/20 Птн 15:51:13 1601708250
>>1601706
Вот понятно, спасибо, анчоус. Все бы так поясняли ньюфаням.
Аноним 14/02/20 Птн 16:02:58 1601716251
>>1601672
А по какой причине может быть такое, что этого нельзя сделать?
Да хоть на ассемблере. Все эти алгоритмы растеризации линий есть и не очень сложные - нужно лишь абстрактный массив заполнить цветами, и нужен какой-то интерфейс, который сможет это отобразить на экране - например, это может быть функция ос или просто указатель на область памяти с экранным буфером. Или осциллограф, но тогда ему уже совсем другой массив нужно заполнять другим способом, так как другие аппаратные требования.
Аноним 14/02/20 Птн 16:21:28 1601734252
>>1601708
Следовательно пользоваться надо тем что удобно, а не архаичным говном
Аноним 14/02/20 Птн 16:29:15 1601745253
>>1601716
Я просто ньюфаня и пока даже не представляю как подобное делать. Максимум что у меня было это питоновские графики, которые по сути были готовой библотекой, а мне интересно знать как сделать график на более низком уровне. Поэтому я вкатываюсь уже месяц в СИ.
Аноним 14/02/20 Птн 16:59:02 1601790254
>>1601745
Ну дерни SDL2 или WinAPI. Готовых средств из коробки нет, graphics.h никто не поддерживает уже хрен знает сколько.
Аноним 14/02/20 Птн 17:10:32 1601809255
>>1601481
>а потому что счётчик \n считает, а её считать нельзя. иначе программа будет некорректно пробелы считать.
Я про то, что ты дклаешь
if (c == '\n') putchar('\n');
вместо
if (c == '\n') putchar(с);
То что обрабатывать '\n' надо отдельно, это понятно.
Аноним 14/02/20 Птн 17:24:22 1601825256
>>1601809
а спасибо, щас пофикшу. понял, анон. спасибо огромное
Аноним 14/02/20 Птн 17:32:02 1601833257
>>1601595
Ты все еще обосрался. У тебя %*s в printf хочет два аргумента (ширину и строку), а ты передаешь один. Если оно и работает, то только чудом.

>>1601672
Вроде в Skia нормальный сишный апи наконец завезли, попробуй.
Аноним 15/02/20 Суб 11:19:56 1602412258
>>1593083 (OP)
Товарищи, посоветуйте инструмент для построения диаграмм зависимостей в исходном коде. Есть исходники опенсорсной БД на С. Какую утилиту можно натравить на эти исходники, чтобы получить графическое представление того - что откуда вызывается. Желательно еще, чтобы на основе make-ов можно было понять какие исходники в какие .so группируются
15/02/20 Суб 13:23:38 1602593259
Аноним 16/02/20 Вск 01:03:14 1603458260
Где предпочтительней описывать функцию в СИ? Вначале программы или в конце? В книжке Ритчки, вконце функцию описывает, однако в интернете видел примеры где функцию вначале описывают. Скажите, молю.
Аноним 16/02/20 Вск 01:13:07 1603461261
Аноним 16/02/20 Вск 01:20:01 1603465262
>>1603461
А как сделать так чтобы функция изменяла те переменные которые она получает?
Аноним 16/02/20 Вск 01:21:22 1603466263
>>1603461
>>1603465
Есть функция которая получает 3 интеджера и делает с ними вычисления, мне нужно чтобы во время этих вычислений изменлялись и те перменные которые я передал в main. Помогите, анчоусы, молююю
Аноним 16/02/20 Вск 01:22:03 1603467264
>>1603465
Указатели. Передавать нужно будет &адреса переменных, а не сами переменные, как в scanf.
Аноним 16/02/20 Вск 01:23:18 1603468265
>>1603467
спасибо, огромное уже полез гуглить.
Аноним 16/02/20 Вск 01:24:12 1603469266
>>1603466
void myfunc(int ★a, int ★b, int ★c)
{
★a = 0;
★b = 0;
★c = 0;
}

int main()
{
int a, b, c;
myfunc(&a, &b, &c);
return 0;
}
Аноним 16/02/20 Вск 01:25:42 1603470267
>>1603469
спасибо, анчоусы. я уже в гугле прочитал про указатели, не нужно более.
Аноним 16/02/20 Вск 03:03:57 1603492268
>>1603467
Ссылок не завезли? Тяжелый случай.
Аноним 16/02/20 Вск 06:41:34 1603530269
>>1603492
Ссылки - это черезжопные указатели
Аноним 16/02/20 Вск 07:47:29 1603542270
>>1603530
В данном случае строго наоборот. У указателей другое назначение, но присунуты через жопу из за отсутствия ссылок.
Аноним 16/02/20 Вск 08:05:04 1603543271
>>1603542
Какое у указателей незначение?
Аноним 16/02/20 Вск 08:23:11 1603547272
>>1603543
а) как у переменной, б) перемещаться по памяти.
Для данной задачи ничего этого не нужно, нужен только алиас переменной, чтобы её менять. Указатель же привносит кучу ненужных мусорных действий и потенциальных проблем.
Аноним 16/02/20 Вск 09:34:33 1603558273
>>1603547
Сколько синтаксического сахара достаточно для одного и того же назначения?
Аноним 16/02/20 Вск 11:33:20 1603623274
>>1602593
Так я помимо связи бинарников между собой, хотел еще вызовы в коде - графически отобразить, и то - в какие .so какие искодники собираются, насколько это возможно
Аноним 16/02/20 Вск 13:33:17 1603697275
>>1603492
>>1603547
Лол, тебя удивляет, что сишка - это не плюсы? В сишке нет множества удобных вещей, на то она и сишка.
Аноним 16/02/20 Вск 14:02:22 1603714276
>>1603697

в гугловых гайдлайнах разрешается использовать только ссылки на константы. Если функция должна менять аргумент, требуют использовать указатель, чтобы продеонстрировать, что функция имеет сайд-эффекты.
Аноним 16/02/20 Вск 14:05:36 1603717277
>>1603714
...
это достаочная разумное соглашение, а сним у ссылки-аргумента функции остаётся только одно применение - оптимизация. Но во многих случаях имеет смысл просто передавать структуру по значению.
Аноним 16/02/20 Вск 15:32:03 1603812278
>>1603469
>>1603467
>>1603492
а почему никто не рассматривает extern? это же самый простой вариант по крайней мере мне так кажется.
Аноним 16/02/20 Вск 16:29:03 1603915279
for(; i > 0; --i)

допустимо ли так писать?

или лучше

for (void; i > 0; --i)?
Аноним 16/02/20 Вск 16:33:44 1603921280
Аноним 16/02/20 Вск 16:34:43 1603922281
ea3b38558bf0532[...].jpg (40Кб, 759x422)
759x422
CPiGAMWcAA3Xgz.jpg (92Кб, 1024x682)
1024x682
>>1603714
>в гугловых гайдлайнах
я тебя умоляю щас бы думать что люди из яндекса\гугла в чём-то разбираются. там такие уёбы работают, особенно в гугле. индусы, негры, азеятки всякое дерьмище собранное по квотам. с каких пор они стали арбитрами по СИ? пусть
Аноним 16/02/20 Вск 16:35:14 1603926282
>>1603921
понял. а когда нужно использовать while а когда for? они же по сути 2 идентичных цикла.
Аноним 16/02/20 Вск 16:35:18 1603927283
>>1603714
Гугл это тырпрайз, галера рабов, никто там ничего не выбирает, как сказано, так и делают. Хороший, дебильный аргумент - заткнуться и не думать.
Аноним 16/02/20 Вск 16:37:06 1603930284
>>1603922
нахуй они присели на 2 фотке?
Аноним 16/02/20 Вск 16:38:15 1603933285
>>1603930
Там 2 пизды карлицы и чтобы с ними обняться нужно самому присесть слегка на корточки вот все и по приседали.
Аноним 16/02/20 Вск 16:42:59 1603936286
>>1603927
Все крупные айти компании это галеры рабов с уёбищными вертикальными системами. Работать там можно только если ты макака. Поэтому индусы и азиаты просто как мухы на гавно липнут во всякие микрософты, гуглы, интелы.

Также очень удобно веб-макакам работать в таких компаниях где удобно срать только строго своим стеком и не разбираться ни в чём другом, мол всё остальное не мои проблемы. Всякие девачки верстальщицы и мамкины хипстеры на пыхах выигрывают от такого.

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

Вообще работать айтишником и кодить дома ради интереса это разные вещи. Когда работешь айтишником там самое главное что выполнить задачу в поставленные сроки, она может быть неоптимизированна иметь какие-то баги, но главное чтобы тёта срака могла в нужный срок вводить свои бухалтэрские данные.

А дома ты пишешь, код и потом шлифуешь\переделываешь его доводя до идеала, вот это творчество.
Аноним 16/02/20 Вск 16:44:21 1603937287
>>1603922
Вернулся бы ты в свой МВП-тред.
Аноним 16/02/20 Вск 16:46:51 1603939288
>>1603936
А ещё меня бесят европейские(в американских не работал, но думаю что там также) компании. Их офисы, нахуя они офисы превращают в подобие детских садов или комнат отдыха. Какие-то петушиные офисы с классическим КРЕАТИВНЫМ ДИЗАЙНОМ всё в каких-то ярких развесёлых тонах, куча диванов натыкано, кухни эти маразм короче. Мне в такой обстановке работать неуютно, почему нельзя сделать классический серый строгий офис. Не офисы, а какие-то дома отдыха. Хотя в России в последнее время тоже мода пошла на эту креативность уебанскую.
16/02/20 Вск 16:56:40 1603959289
>>1603922
3 инженера на команду в 13 человек
правило 80/100 работает
Аноним 16/02/20 Вск 16:58:33 1603964290
>>1603926
Когда хочешь, без разницы, for - всего лишь сахар для while.
Если у тебя последовательный обход от n1 до n2, то лучше for - ведь он призван уменьшить количество строк и повысить лаконичность в таких случаях. Во всех остальных случаях с более сложными условиями выхода - while. Ещё есть подозрения, что for лучше оптимизуется компиляторами.
Ещё есть особый случай сахара for (;;) для бесконечного цикла, где для while придётся писать через довольно таки уродское while(1).
Аноним 16/02/20 Вск 17:00:05 1603965291
>>1603936
Причём особо удивляет когда погромисты с хабара да и вообще хвастают как дохуя платят в ойти, так дохуя что хватает снимать однуху 22 квадрата замкадом и ездить на квашкае в кредит на 7 лет, и 20% зарплаты тратить на парковку у работы.

И главное остальные верят в этот бред. Поехал в Риге смотреть квртиру в деревянном доме 27 квадратов за 16.5 к с начатым ремонтом. Маклерша оказалась знакомой родителей моей жены, хули этож деревня 600к. Вобщем после осмотра ценник врубила 16.8к, а наследующее утро уже блять 17.3к, видимо потомучто я айтешник. Я охуел с такой наглости, т.к. в объявлении двухнедельной давности указано 16.5к, а месяц назад было 17к. Сейчас буду несчадно вертеть эту тётку и тянуть с покупкой пока сама не скинет до первоначальной цены.

Это пиздец товарищи что вы творите рассказывая про "неебические" зарплаты...
Одно слово, айтишники - уебаны, которым пальцы сцука надо вырывать.
Аноним 16/02/20 Вск 17:00:11 1603966292
>>1603964
спасибо большое, анчоус, за подробные объяснения. благодарю ещё раз.
Аноним 16/02/20 Вск 17:07:52 1603982293
>>1603965
Да нет никаких зарплат в айти высоких. Я погромист с опытом. Самые максимальные зарплаты в России у вайтишника могут быть 200-250 тысяч в месяц максимум и это только в Москве. И таких вайтишников на 200-250к в Москве единицы. Единственный шанс заработать на айти огромные деньжища это высрать какой-нибудь ёба-продукт которым будет пользоваться быдло (ОС, игру, прилу уровня тиктока, сайт знакомств и т.д.). Но даже там не всё так просто, высрать много кто может, это нужно всё разрекламировать(отвалить огромную кучу бабла маркетолухам, пиарщикам, сммщикам), потом даже если ты будешь сам писать тебе всё равно пнадобятся всякие дезигнеры и прочие специалисты в айти по второстепенным технологиям в которых ты не ебёшь ничего или ебёшь, но недостаточно.

И то после всего этого не факт что твой говно софт взелтит и его кто-то будет покупать. Халявы в айти в этом нету. Единственная причиная по которой его раскручивают что там на работу можно без дипдлома устраиваться и для обучения хватит компьютера с интернетом дома, вот всё быдло с пятёрочек и валит в айти. Да и то они сейчас тот же веб обвалили уже эти вкатывальщики, т.к. в веб проще всегов катываться всё быдло бежит туда чтобы побыстрее 300кк в итоге, там джуниоры нахуй не нужны и сеньёорами уже пятки жечь начинает. Яркий пример хохол с ютуба который приехал в сша с опытом работы на похапэ и отсасывает там без работы уже несколько месяцев. Даже с опытом веб макаки уже не везде пристраиваются.
Чтобы в айти быть нужно это хуйню любить, не то чтобы я его прям так люблю просто у меня другое больше ничего не получается особо. Сам в веб пытался, мне вообще все говорили "да ты там вообще все раком нагнёшь ты же на сях-хуя опыт имеешь" а меня стошнило от него только на стадии изучения CSS, не моё это всё. Роднее на заводе пилить всякое гавно для станков.
Аноним 16/02/20 Вск 18:05:10 1604061294
>>1601833
>все еще обоср
да, там "" в аргументы добавить надо, конечно же
я даже компилить не пробовал лул
Аноним 16/02/20 Вск 18:54:11 1604140295
>>1603982
>это нужно всё разрекламировать(отвалить огромную кучу бабла маркетолухам, пиарщикам, сммщикам)
Нужно пилить инновационный продукт, типо ютюба в свое время, чтобы не конкурировать с существующими гигантами. Ну это мои маняфантазии.
Аноним 16/02/20 Вск 19:03:25 1604151296
>>1604140
Ну иновационный продукт это то что я не стал упоминать так как скорее всего никому из присуствующих в треде это никогда не светит. Иновационный это не то что продукт который будет быдло покупать, а продукт который действительно будет первым в своём роде, прорыв. Ну это нужно быть и погромистом дохера и знать чего рынок хочет. Это вообще самый анриальный вариант. Людей которые ты вылезли едининцы.
Аноним 16/02/20 Вск 19:05:44 1604153297
>>1604140
Другое скажу, что скорее всего 1995-2005 были пиком инноваций в сфере компьютерных технологий. Мы шли к этому с начала 60-х и 70-х, и все монополии и главные игроки рынка появились в конце 90-х, и что интересно, некоторые из них первый десяток лет были полуживые, типо Netflix'a того же, но появились же они тогда.

Своего рода это же было с самолестроением и автомобилестроением, и с другими областями инженерии. Да, есть маленькое исключение в виде Маска, и то с натяжкой его можно поставить в один ряд с Генри Фордом в индустрии автомобилестроения и с его Теслой, которая хорошо забытое старое. Так индустрия после середины 50-х развивалсь итеративно, эволюционно, медленно, с тонким изучением маркета и методом брут-форса по отношению к потребителю когда у потребителя есть смартфон, купленный в 2012 году, тут ещё сломать голову нужно, какая фича заставит его купить новый, а не с помощью гениев-изобретателей и революций в построении автомобилей которые бы переворачивали всё верх дном.

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

Ну это я так, высрал.
Аноним 16/02/20 Вск 19:08:14 1604156298
>>1603922
Тебя не смущает, что у азиатов самый высокий показатель IQ в мире, также самое лучшее в мире образование? Индусы саморазвивались тысячелетия и теперь вникают в суть чего либо очень быстро, осознанность делает свое дело. Ну а негры - негры просто любят работать, они упрямые что пиздец и тащат таски тупо на выносливости. Такой стак всяко лучше, чем стак из ленивого ваньки, жадного еврея и гейропейца.
Аноним 16/02/20 Вск 19:10:59 1604159299
>>1604156
IQ это тест для обезъянок на него можно настаскать даже тупого хача если он будет постоянно эти задачи решать. Загуглил хоть бы для кого этот тест изначально изобретали, IQ блядь.

А тебя не смущает что такая "великая" азеятская нация которая изобрела якобы и бумагу и компас и порох с таким IQ последние 1000 лет были в жопе откровенной, на примере того же китая. А сейчас якобы в расцвет их все их товары технологически отстают от европейских и американских. Даже у японцев. Азиаты могут как обезъянки повторять и осваивать технологии. Они не творческая нация, они очень трудоспособны и могут как роботы по одному и тому же алгоритму задротить сутками, чего нет у белых. В этом сила азиатов.

Аноним 16/02/20 Вск 19:11:25 1604161300
>>1604156
>самое лучшее образование в мире
>китай
>индусы
зря я тебе отвечал, ты же шизик
Аноним 16/02/20 Вск 19:14:30 1604166301
>>1604153
А как же нейронОЧКИ довольно свежее открытие
Аноним 16/02/20 Вск 19:18:33 1604173302
>>1604159
>>1604161
Ох уж этот классический ВРЁТИ. Подрыв неосиляторов - отрицал.
Аноним 16/02/20 Вск 19:27:48 1604181303
Ритчи, стоило давать примеры вывода программ, я нихуя не понимаю условий с этими ёбаными строками, ни английском, ни с переводом...
Аноним 16/02/20 Вск 19:50:56 1604222304
Аноним 16/02/20 Вск 20:50:00 1604285305
>>1603922
>>1603927

Бля, вы можете хоть что-то высрать кроме аргумента ad hominem, по топику?

Где разумно использовать функцию с аргументом-не ссылкой на константу?
Аноним 16/02/20 Вск 20:51:11 1604287306
>>1604285
в смысле, с простой ссылкой, чтобы функция имела сайд-эффекты
Аноним 16/02/20 Вск 20:52:50 1604291307
>>1604285
в книги ричи, например где он ещё в первой главе пишет про extern тупо сделать глобальную перменную и всё. никакой лишней путаницы. а макаки из гугла внутри своей уютной индусско-китайско-лесбиянско компании могут какие угодно стандарты лепить
Аноним 16/02/20 Вск 21:02:11 1604299308
>>1604291
Каеш, глобальную переменную. функции вообще не нужны, всё нужно в мейне писать, если где угол нужно срезать - ебашь goto.
Аноним 16/02/20 Вск 21:03:49 1604300309
Скажите честно кто сколько в день программирует? Ну я под временем подразумеваю именно то время когда вы прямо думаете над погромированием. Я думаю часа 3-4 максимум, после уже тупо не могу, не то что желания нет, а просто мозг уже не думает. мне нужно отвлечься на несколько часов на двач\какую-нибудь игру или что-нибудь поделать, но только не погромирование. потом когда я возвращаюсь к работе, опять лучше думаю.
Аноним 16/02/20 Вск 21:05:21 1604301310
>>1604299
Ну так речь шла изначально о том чтобы функция получала переменную и её изменяла походу работы. Гораздо проще сделать глобальную и всё. А как это влияет на идеологию функции я не знаю, ибо функции нужны для того чтобы кол-во кода сократить просто, функция это какой-то кусок кода который можно вызывать в различных частях программы без копирования всего кода.
Аноним 16/02/20 Вск 21:18:15 1604317311
>>1604301

Смотри, это правда, Джон Кармак может написать кваку ни сишечке, используя глобальные переменные.
Но ты наверняка не Джон Кармак, а васян (как и я впрочем), потому лучше обойтись функцией с аргументами-указателями, и не плодить зазря глобальных переменных.
Аноним 16/02/20 Вск 23:54:27 1604653312
Аноны, кто знает как сайт называется. Там типа всякие соревновательные задания уровня "напиши программу делающую то-то и уместись в 30 строк кода" и там показывают рейтинг самых топовых людей у кого это получилось. Можно разные языки выбирать. ЧТО это за сайт был?
Аноним 17/02/20 Пнд 02:30:37 1604771313
>>1604285
Везде, где нет хачкело-дебилов, у которых программирование это "сайд-эффекты". Хорошо бы и в си-треде не было, но дерьмо уже растеклось.
sequence points Аноним 17/02/20 Пнд 05:29:55 1604818314
Несколько дней назад уже задавал вопрос по поводу sequence points, однако, углубившись в эту тему, появилось еще большее количество вопросов.
1) a = 1, b = 2, c = 3;
a = b = c; - undefined behavior? Операция присваивания происходит справа налево, однако неизвестно в какой момент результат операции должен был записан в переменную, ведь sequence points в выражении нет. То есть мы можем получить такой результат:
a = 2, b = 3, c = 3

2) int i = i++; - не undefined behavior в отличие от:
int i;
i = i++;
? Судя по стандарту, int i = i++; это не undefined behavior точка следования в объявлении с инициализацией на момент завершения вычисления инициализирующего значения. Пример. Рассмотрим выражение «int a = ( 1 + i++ );». Точка следования вставляется после вычисления выражения «( 1 + i++ )»;
Однако какова в таком случае должна быть логика работы данного кода? На машине, где все байты установлены в 0, я понимаю работу строчки int i = i++; следующим образом:
Компилятор видит expression i++. Постфиксный инкремент. Следовательно, откладывает инкремент i после выполнения присваивания. Ставим SP после оценки нашего expression, где i в rvalue == 0. Затем i = i, то есть присваиваем 0 переменной i. После видим ; - ставим еще один SP. После чего компилятор должен сделать инкремент i; То есть в итоге i должен быть равен 1. Однако, когда я printf'аю результат, то в консоль выводит, что i имеет значение 0. Следовательно, я неправильно понимаю работу этой строки, верно? Ведь, опираясь на стандарт, должно быть определенное поведение, не должно быть никаких отсечений модификаций переменной и т.д. В чем тогда суть SP в данном случае? Как компилятор разбирает данную строку? Поясните пошагово, пожалуйста

3) 'звездочка'ptr++ = x++; - неопределенное поведение? Или неопределенное поведение только в случае модификации одной и той же переменной более одного раза между двумя SP?

Столько часов разбираюсь с этой темой, но некоторые моменты все никак не могу прояснить. Очень надеюсь на развернутый и подробный ответ по каждому пункту. Тема важная, другим анонам тоже будет полезно знать
Аноним 17/02/20 Пнд 05:46:47 1604823315
>>1603915
>допустимо ли так писать?
Да, допустимо. И так лучше, чем вариант с войдом.
>>1603921
while работает медленнее
>>1603926
while более читабельный вариант в сложных нагромождениях, однако for - более быстрый. Если пишешь функцию для либы, то для оптимизации лучше использовать for Можешь почекать исходники некоторых функций из стандартных либ. Например, strlen. Или еще что-нибудь. Там встретишь for (; <exp> ; <exp>). Алсо for позволяет инициализировать несколько переменных в заголовке цикла. Например, for (int i, j, k, l, m; <exp>; <exp>), память под которые будет очищена при выходе из этого самого цикла. В случае с while тебе бы пришлось объявлять их до цикла, следовательно, они бы висели в памяти всегда.
Аноним 17/02/20 Пнд 06:18:10 1604829316
>>1604818
>int i;
>i = i++;
>Судя по стандарту, int i = i++; это не undefined behavior
У тебя переменная неинициализированна, о чём ты, вообще?
Аноним 17/02/20 Пнд 06:33:29 1604832317
>>1604823
>В случае с while тебе бы пришлось объявлять их до цикла, следовательно, они бы висели в памяти всегда.
Можно их в отдельный {} загон вместе с while.
Аноним 17/02/20 Пнд 08:14:43 1604872318
>>1604832
Сначала говорят "си это ассемблер", а потом сидят переменные экранируют. Вас, пидарасов, нужно заставлять кодить на классическом бейсике со всеми глобальными переменными и переходами только по goto/gosub и никаких функций-хуюкций, минимум год, чтобы железно и навсегда поняли как программы работают. И только потом пускать на языки с абстракциями и пидарскими феласофиями. А то сразу лезут в говно не по уму, а потом кукарекают сивый бред.
Аноним 17/02/20 Пнд 09:28:16 1604918319
изображение.png (49Кб, 908x570)
908x570
изображение.png (57Кб, 1706x413)
1706x413
изображение.png (24Кб, 1088x311)
1088x311
>>1604818
>a = b = c;
>однако неизвестно в какой момент результат операции должен был записан в переменную
Ты не правильно понимаешь присваивание, мне кажется.
(b = c) присваивает переменной b и "возвращает" значение c. То есть даже если фактически на момент разбора a=.. значение b всё ещё не изменилось, сюда подставляется не значение b, а значение c. Нет гарантии, что в b будет нужно значение на момент записи a, но есть гарантия, что в a будет записываться нужное значение.
Компиляторы вон просто записываю одно значение по двум адресам, как будто бы там всегда есть скобки, если бы присваивание по каким-то причинам требовало явного возврата левого операнда, то с volatile оно было бы вынуждено записать и тут же прочесть значение b.

>int i = i++;
Как ты себе такое представляешь? Он либо пожалуется на то что такая переменная уже есть, либо левая i будет новой переменной в новой области видимости, и это уже код int a=i++. Если ты имел ввиду именно int i=i++, то этот код настолько же бессмысленный, как и int i=i; или int i=2*i;
Или ты хочешь писать код на подобии кода со второго пика? Тогда у меня больше нет никаких комментариев.

>>1604872
Предположу, что он имел ввиду, что код с for занимает внутри функции всего 3 ячейки памяти (под i и с используется одна и та же), а если написать переменную вне for или {}, то i будет попадать во "глобальную" область видимости функции и нужно будет занимать четвёртую ячейку для c. Размер стека экономят, почему бы и нет?
17/02/20 Пнд 09:47:44 1604926320
>>1603623
>вызовы в коде - графически отобразить
IDE
>в какие .so какие искодники собираются
makefile
Аноним 17/02/20 Пнд 10:50:22 1604957321
>>1604771

хорошо, когда по функции понятно, что она делает.
по с++ функции с аргументом-ссылкой непонятно, по сишной функции с аргументом-указателем ясно, что она может поменять указатель сразу. но васяну приятно, что можно лишней букавы не писать, потому он будет высирать телеги про гугл, который не умеет в написание кода.
Аноним 17/02/20 Пнд 13:52:58 1605098322
>>1604957
Твое пиздоболие имеет смысл только для тырпрайзо-помоек, где толпы тупых взаимозаменяемых макак жуют чужой код. Тут да, надо чтобы посторонним даунам было понятно как можно быстрее. Но за это расплачиваются лишними простынями блоатного говнокода. Но это норм, ведь тупые макаки и не против строчить однообразное говно, а что оно по сути бесполезный блоат, им похуй, деньги же платят. Им пообще похуй на то, что они пишут, хоть "хуй" на столе у соседа.
А тред как бы не про тупое говно, а про программирование, для людей , которым оно небезразлично. Ты знаешь, что сам пишешь, есть комменты, да даже в IDE по нажатию кнопки выскакивает прототип со всей инфой, включая комментарий. Проблем нет, и код чистый, понятный и надежный.

Да и вообще всё лирика. Просто здравый смысл: Если нужно менять переменную, используется она сама - ссылка, это прямое выполнение задачи. А указатель это а) другая переменная, которая не нужна, плодить лишние сущности. б) указатель работает не с переменной, как ссылка, а с памятью - низкоуровневой подложкой под абстракцией переменной. Это ничто иное как васянское костылестроение на пустом месте. Нет, понятно, если ссылок нет, приходится выкручиваться, но в плюсах же есть, а они та же сишка, так что оправдания говноедству нет.
Аноним 17/02/20 Пнд 14:39:57 1605149323
>>1604823
спасибо за подробный разбор для ньюфани, анчоус.
Аноним 17/02/20 Пнд 15:55:31 1605264324
>>1604918
>int i = i++;
>Как ты себе такое представляешь?
Обыкновенно. Переменная объявлена до прибавления, так что всё работает нормально, единичка прибавляется к текущему содержимому.

>пик 2
Это работает потому что функции одинаковые и вызываются друг за другом?
И в гегле прочитал, что объявлять функцию volatile бесполезно, слово игнорируется.
Аноним 17/02/20 Пнд 16:26:58 1605308325
>>1604818
Нахуя ты в этом говнокоде разбираешься? Есть такая вещь как best practice, тупо следуя ей, ты избегаешь этих дебильных ошибок и говнокода.
Аноним 17/02/20 Пнд 16:33:36 1605322326
изображение.png (3Кб, 293x147)
293x147
изображение.png (4Кб, 474x146)
474x146
>>1605264
>Переменная объявлена до прибавления
Так не бывает, оно не скомпилируется.
А если там новая область видимости (например {}) - то у тебя уже две переменных, а не одна. Вторая картинка - у них разные значения и разные адреса в памяти. Нельзя два раза написать int i=.. так чтобы это была одна и та же переменная.

>Это работает потому что функции одинаковые и вызываются друг за другом?
Считай, что это не работает вовсе. Это сработает только на одном компиляторе и на одних настройках. Да, так получается, что переменные в функциях попадают на одну и ту же ячейку стека. Но это супер плохой код, никогда не используй ничего подобного, и слово volatile тоже обходи стороной.
>объявлять функцию volatile бесполезно
Не бывает volatile функций, volatile такой же модификатор как и const, типы const int, volatile int и int - разные и функция к ним отношения не имеет.
Аноним 17/02/20 Пнд 16:37:02 1605328327
Ну что, БАЙТОСЛЕСАРИ, как вам работается на ЗАВОДЕ? С премией за отлизывание ануса в совковому деду-пердеду в месяц чистыми хоть 500$ выходит?

А мы тут вашего залетного КУЗЬМИЧА в кружок отпетушили, принимайте пополнениезабирайте назад.

>>1605269 →
>>1605259 →
>>1605243 →
Аноним 17/02/20 Пнд 16:42:48 1605340328
>>1605264
>единичка прибавляется к текущему содержимому
Просто не понимаю чего ты хочешь добиться. Тебе нужно единицу к какой-то переменной добавить, и чего бы ты не хочет добиться, есть способы намного более понятные другим людям и компилятору, без неоднозначностей.
То что там будет sequence points - код никак не замедляет, никакой дополнительной инструкции для этого не предусмотрено и это лишь абстракция. В действительности половины переменных вовсе не существует, и данные сразу между регистров пересылаются - если убрать все volatile из кодов со скриншотов, то там даже вызова функций не будет, там сразу будет в printf передано 20 и (скорее всего) 1 без вызовов te1/te2.

А если для чего-то хочешь понять как это интерпретирует компилятор - то смотри какой код он генерируется, но не будет никакой гарантии что код не поменяется на следующей версии компилятора, другой платформе или ещё где. Наверное, где-то в документации компилятора даже написано каким путём какая неоднозначность разрешается.
Аноним 17/02/20 Пнд 17:05:08 1605377329
>>1605264
Кстати, вот ещё погляди, тебе понравится вывод программы скорее всего - если тебе интересны такие штуки про существование несуществующих переменных.
https://ideone.com/zSjw5N
Аноним 17/02/20 Пнд 17:11:36 1605386330
>>1605322
>Так не бывает, оно не скомпилируется.
Ты тролль или дебил? Откуда взялясь еще строчка?

>типы const int, volatile int и int - разные
Но не лля возвращаемого функцией значения. Оно и так константа, ты не поменяешь, и c volatile то же самое, ничего не меняет и игнорируется.
Аноним 17/02/20 Пнд 17:15:37 1605390331
>>1605386
Наверное, второе.
>Переменная объявлена до прибавления
Каким образом ты объявляешь переменную до подобного прибавления, в таком случае? Что ты имел ввиду под этой фразой?

>Откуда взялясь еще строчка?
>Если ты имел ввиду именно int i=i++, то этот код настолько же бессмысленный, как и int i=i; или int i=2*i;
Аноним 17/02/20 Пнд 17:28:53 1605412332
>>1605390
У тебя два объявления в двух строчках:
int i ...
int i ...
Конечно ругается на переобъявление, но речь шла только об одной строчке:
int i=++i;
тут всё работает как и должно.
Аноним 17/02/20 Пнд 17:37:54 1605435333
>>1605412
>речь шла только об одной строчке
И какой смысл должен быть у такой строчки? Начальное значение i не определено, какой результат ты рассчитываешь получить?

>>1605386
Ага, ты прав, не смог добиться разного поведения функций с volatile и без. Но всё ещё не исключаю, что можно добиться разного поведения компилятора при разных типах из-за какой-нибудь оптимизации - плюсовый typeid выдаёт разные типы.
Аноним 17/02/20 Пнд 17:48:24 1605446334
>>1605435
>какой результат ты рассчитываешь получить?
Прямой результат, блин, хватит тупить. Что написал, то и получил - увеличение переменной на единичку. Что неясно, алё?

А что не присвоил сначала значение напрямую, какая разница? Ты можешь сказать НИНУЖНО, но так ли в этом уверен? Если уверен, мои соболезнования.
Аноним 17/02/20 Пнд 18:07:25 1605463335
>>1605446
Не понимаю, ничего не ясно. И, наверное, уже не пойму.
Ага, уверен абсолютно. Компилятор может подобным переменным присваивать начальное значение 117 и будет совершенно прав - ведь это соответствует стандарту. Но вряд ли это то, что тебе нужно. Программа и переменные - лишь абстракция и я спрашивал из какого начального состояния абстракции какое конечное ты хочешь получить после выполнения своей строчки.
Аноним 17/02/20 Пнд 18:59:20 1605517336
>>1605463
Тут нет абстракций. Переменная использует память, а память всегда содержит данные, она так устроена железно. Не бывает пустой памяти, с черной дырой вместо данных, к которой нельзя прибавить число по причине отсутствия в ней числа как такового.
Аноним 17/02/20 Пнд 19:15:18 1605531337
>>1604823
> while работает медленнее
Нет. for - полный аналог while, только с сахарком. for (expr1; expr2; expr3) { ... } разворачивается до { expr1; while (expr2) { ...; expr3; }} Но на самом деле большинство компиляторов даже while (x) {...} разворачивает дальше, в if (x) { do { ... } while(--x) }.

> память под которые будет очищена при выходе
Не будет. Оставить автоматические переменные висеть в стеке до выхода из функции дешевле, чем заниматься лишней очисткой.
Аноним 17/02/20 Пнд 19:33:12 1605547338
>>1605463
Чего ты с ним споришь, он же просто троллит тупостью.
Аноним 17/02/20 Пнд 23:21:13 1605910339
Анончики, я принес вам ништяк. Пользуйтесь.
https://pastebin.com/Ed83qm4v
как избежать ебучих кодоповторений в свич-кейсах?
Аноним 17/02/20 Пнд 23:35:16 1605929340
>>1605517
>память всегда содержит данные, она так устроена железно. Не бывает пустой памяти, с черной дырой вместо данных
Ну конечно же бывает. Буквально вчера была на хабре статья про ретрожелезо. Там при чтении несуществующего адреса памяти в регистр приедет мусор, который находится в тот момент на шине данных с прошлых инструкций.
Аноним 18/02/20 Втр 00:18:15 1605987341
>>1605517
> как избежать ебучих кодоповторений в свич-кейсах?
Ты можешь в отдельной функции в case-ах заготавливать параметры (read_length, signedness, endianess, format_string - вот это все), а читать, инкрементировать указатель и форматировать после switch, централизованно. А второй функцией парсить остальные спецификаторы типа A или S, выставляя флаги. Или даже собрать это все в табличку и выкинуть свитчи нахуй. У меня от тебя kaitai struct. Еще имена и кодогенератор зделоть, и будет заебись, никакой сраной джавыскалы.
Аноним 18/02/20 Втр 01:20:00 1606019342
>>1605987
Можешь пример показать?
Аноним 18/02/20 Втр 02:03:24 1606028343
>>1605929
>при чтении несуществующего адреса
Переменные создаются в существующей.
Сначала добавлял несуществующие строчки как оргумент в пользу своей тупости, теперь добавил несуществующую память (настоящий баран, прёт одним способом). И это несмотря на то, что носом ткнули еще в первый раз (и необучаемый)
Аноним 18/02/20 Втр 02:12:25 1606030344
>>1605517
>память всегда содержит данные, она так устроена железно.
Открой для себя защищенный режим и виртуальную память
Аноним 18/02/20 Втр 03:15:50 1606039345
>>1606028
Какое мерзкое животное
мимо
Аноним 18/02/20 Втр 04:04:50 1606047346
>>1606030
А виртуальная память где находится? В десятом измерении далекой галактики? Или может всё таки в физической памяти?
Аноним 18/02/20 Втр 04:06:57 1606048347
>>1606047
Си - не про физическую память. Язык описан в терминах абстрактной машины, поэтому компилятор, который при попытке int k; printf("%d\n", k); будет делать exit(1) - это абсолютно нормальное, документированное поведение программы. Более того, именно это (в числе прочего) и происходит при сборке с -fsanitize=memory.
Аноним 18/02/20 Втр 04:14:44 1606049348
>>1606048
>не про физическую память?
Такого никто не говорил, опять придумываешь из жопы бред, разговаривая сам с собой.

Какая бы ни была память, всё равно основана на физической, где данные есть всегда. Я честно не понимаю, зачем настолько невежественные люди лезут в си, где это важно. Иди в языки высшего уровня, там похуй, сиди в своих маня-абстракциях и нормально будет.
Аноним 18/02/20 Втр 04:16:09 1606050349
>>1606047
Виртуальная память может нигде не находиться. Можно сделать так, что у тебя страница памяти будет при чтении выдавать нули, а при записи данные будут уходить вникуда, и никакой физической памяти у нее не будет.
Аноним 18/02/20 Втр 04:16:48 1606051350
>>1606047
Железо ничего не знает про виртуальную память, это абстракция операционной системы. Кури мат. часть.
Аноним 18/02/20 Втр 04:17:30 1606052351
>>1606048
>-fsanitize
Упс, теперь ячно, опять эта шлюха. Вляпался, блин.
Аноним 18/02/20 Втр 04:18:54 1606053352
>>1606048
>Язык описан в терминах абстрактной машины, поэтому компилятор, который при попытке int k; printf("%d\n", k); будет делать exit(1) - это абсолютно нормальное, документированное поведение программы.

Противоречит стандарту.

Хотя можно и сейчас настроить компилятор что он будет выдавать ошибку на таком коде.
Аноним 18/02/20 Втр 04:19:07 1606054353
>>1606050
>при чтении выдавать нули
Вот именно, может выдавать нули или не нули, но не может не выдавать числа. Числа всегда есть, потому что так устроена память, хоть сколько раз манявиртуальная.
Аноним 18/02/20 Втр 04:20:37 1606055354
>>1606051
>Железо ничего не знает про виртуальную память, это абстракция операционной системы. Кури мат. часть.

Виртуальная память реализуется процессором. Опять же, гугли "protected mode"
Аноним 18/02/20 Втр 04:22:54 1606056355
>>1606054
Может выдавать что угодно, хоть тред с двача. Хотя для этого надо будет ядро линукса патчить.
Аноним 18/02/20 Втр 04:27:34 1606057356
Аноним 18/02/20 Втр 04:35:38 1606058357
>>1606056
Шутки шутками, но подведу простыми словами.
>int i=i++;
Нормальная запись, имеющая нормальный смысл, по одной простой причине: НЕ БЫВАЕТ НЕИНИЦИАЛИЗИРОВАННОЙ ПАМЯТИ
Память по дизайну всегда инициализированна данными, не может не быть, её невозможно очистить, только заменить одни данные на другие, поэтому с памятью можно работать в любой момент.
В коде выше, переменная объявлена до работы с ней, поэтому функционирует как и должна. Никаких проблем и странностей нет.
Аноним 18/02/20 Втр 04:41:34 1606059358
>>1606058
>НЕ БЫВАЕТ НЕИНИЦИАЛИЗИРОВАННОЙ ПАМЯТИ
А переменные бывают. i не память, а переменная.
Аноним 18/02/20 Втр 04:49:26 1606060359
>>1606058
Чет ты какой-то шизик
Аноним 18/02/20 Втр 05:04:14 1606061360
>>1606053
> Противоречит стандарту.
If the lvalue designates an object of automatic storage duration that could have been declared with the register storage class (never had its address taken), and that object is uninitialized (not declared with an initializer and no assignment to it has been performed prior to use), the behavior is undefined.

Совершенно не противоречит.
Аноним 18/02/20 Втр 05:04:26 1606062361
>>1606059
В джаваскрипте -да, в Си - нет. Си это машинный язык низкого уровня, тут переменная это простое число, адрес памяти с данными, прямая проекция памяти, общей сырой памяти, а вовсе не какой-то абстрактный объект сам по себе как в языках высокого уровня. Посмотри на 3-ю картинку >>1604918 , цветом подсвечен соответствующий ассемблерный код. Каждая всего всего лишь номер, адрес в памяти: 4, 8, 12. Ты спокойно можешь попасть из одной переменной в другую, никакой инициализации не требуется, абстракция языка абсолютно минимальна, ты сидишь голой жопой на сырой памяти.
Аноним 18/02/20 Втр 05:12:57 1606063362
>>1606062
>Посмотри на 3-ю картинку
Там переменная инициализированна.
Аноним 18/02/20 Втр 05:21:32 1606066363
>>1606062
Жавамакака не палицаxddd
Даже у сишки под капотом куча абстракций, а в malloc.c сидит оптимизируюший менеджер памяти куда 90% сишников не заглядывает.
Аноним 18/02/20 Втр 05:26:27 1606067364
>>1606066
Думаю, стоит ли расказать ему что ОС чистит страницы памяти перед тем как отдать их процессу?
Аноним 18/02/20 Втр 05:27:02 1606068365
>>1606062
> Ты спокойно можешь попасть из одной переменной в другую
Не можешь. Нарушаешь правила strict aliasing или ходишь за пределы переменной - дружно идешь нахуй, помахивая undefined behavior. Например, компилятор может притвориться, что "не заметил" доступ в другую переменную, и ему похуй, что у тебя там в голове за "машинный язык низкого уровня". Вот, например, так: https://godbolt.org/z/c2vbPJ
Аноним 18/02/20 Втр 05:34:16 1606073366
>>1606063
Нет, потому что "переменная" это лишь число - адрес, а значит она не существует, пока к ней нет обращения. Обращение может быть хоть на запись, хоть на чтение, только тогда появляется соответствующая инструкция с правильным числом-адресом. Совсем не нужно сначала писать, а потом читать, ведь память уже есть. Если у тебя программа только из объявлений:
{
int a,b,c,d,e,f;
}
то тут кода вообще никакого нет, ибо с памятью ничего не происходит, нет не только инициализаций, но и ничего не создается, потому что нет объектов, создавать нечего, ведь память и так есть уже, а больше ничего не нужно.
Аноним 18/02/20 Втр 05:39:09 1606075367
>>1606068
>Не можешь. Нарушаешь правила strict
>Не можешь перебегать дорогу в неположенном месте. Нарушаешь правила дорожного движения
Можешь. Пошел нахуй, дебил.
Аноним 18/02/20 Втр 05:40:15 1606076368
>>1606073
>Нет
На указанной тобой картинке нет инициализации?
Аноним 18/02/20 Втр 05:41:58 1606077369
>>1606076
Читать не обучен, ясно.
Аноним 18/02/20 Втр 05:44:40 1606078370
>>1606077
Я специально стараюсь как можно меньше слов и идей тебя заставлять обдумывать, но всё равно получается:

>- Там переменная инициализированна.
>- Нет
>- Нет?
>- Ряяя ты не умеешь читать!
Аноним 18/02/20 Втр 07:27:57 1606090371
>>1606068
Приводить в качестве примера оптимизации в столь оторванном от реальности контексте - бред.

В подобной короткой хуйне даже твою мать можно заоптимизировать до пары сотен кг.

Ты подрочи эти переменные в 10 разных местах, сделай асинхронное обращение к ним какое, а потом покажи, как это оптимизед эвэй будет.
Аноним 18/02/20 Втр 11:37:59 1606233372
>>1606090
>Приводить в качестве примера оптимизации в столь оторванном от реальности контексте - бред

Странный ты...
Аноним 18/02/20 Втр 11:51:46 1606240373
>>1606233
Ты не понимаешь, вот int i=i++; это нормальный реальный контекст, постоянно так в продакшене делаю, лично цукерберг одобряет.
Аноним 18/02/20 Втр 11:53:46 1606242374
>>1606028
Во первых это другой анон. Во вторых доп память могла находиться в картридже. Который внезапно могут вынуть во время работы программы.
Аноним 18/02/20 Втр 12:36:31 1606279375
image.png (981Кб, 1088x1080)
1088x1080
Тут сидят люди, имеющие влияние на стандарт языка? Вот смотрите, a!=b означает !(a==b). В связи с этим я требую, чтоб a!%b означало !(a%b), (a!+b) означало !(a+b) и т.д. Согласитесь, удобно проверять таким образом делимость, противоположность и прочее. Я жду, блядь.
Аноним 18/02/20 Втр 12:46:47 1606290376
Аноним 18/02/20 Втр 12:55:09 1606306377
Аноним 18/02/20 Втр 13:05:18 1606331378
>>1606279
Вот смотри, ++x и x++ означают пре- и постинкремент. В связи с этим я требую, чтоб ==x и x== означало пре- и постэквивалент. Чтобы в первом случае x приравнивался к x до вычисления объемлющего выражения, а во втором случае - после.
Аноним 18/02/20 Втр 18:57:04 1606787379
Нужна помощь одному дебичу. Чем принципиально отличается вот это:

char buf = "0000";

от такого:

char
buf = malloc (5);
//заполняем буфер теми же четырьмя нулями;
//и ставим \0 в конце;
Аноним 18/02/20 Втр 18:57:49 1606790380
>>1606787
Ну разумеется там поинтеры, а не ебучий курсив блять
Аноним 18/02/20 Втр 19:20:09 1606815381
>>1606787
"0000" - это неизменяемая константа.

malloc - изменяемая память
Аноним 18/02/20 Втр 19:21:06 1606818382
>>1606787
Напиши buf[2]=123 в первом случае и во втором.
В первом случае эта область вроде как только для чтения и в неё нельзя записывать.
Аноним 18/02/20 Втр 19:34:39 1606837383
>>1606787
Аноны ниже правы, но и нет.
У тебя в первом случае выделяется память на стеке(статический), во втором - в динамической памяти(динамический, само собой).
Аноним 18/02/20 Втр 19:39:17 1606843384
>>1606837
Нет, это не стек.
Там идёт какая-то область памяти до (или после) глобальных и статических переменных, и строковые литералы где-то там. Но это не стек. Стек, это char buf[5]="0000".
Аноним 18/02/20 Втр 19:43:51 1606852385
image.png (265Кб, 592x569)
592x569
Аноним 18/02/20 Втр 19:52:09 1606868386
image.png (113Кб, 1839x746)
1839x746
Аноним 18/02/20 Втр 20:57:17 1606942387
>>1606868
Интересно.
Ведь 8 и 11 кажутся одним и тем же с точки зрения выделения памяти, ан нет.
А char x[] = "test" будет равносилен 7 и 8 строкам?
Аноним 18/02/20 Втр 20:59:45 1606946388
>>1606942
> кажутся одним и тем же с точки зрения выделения памяти
Они и есть одно и то же. Просто шизик -O3 забыл. И использовать переменные забыл.
Аноним 18/02/20 Втр 21:14:13 1606974389
Аноним 18/02/20 Втр 22:13:27 1607047390
>>1606868
>Специально для студентиков.
От школьника? Чтобы переменная была статической, надо ее либо объявлять глобальной вне всех функций, либо внутри функций с ключевым словом static.
Аноним 18/02/20 Втр 23:22:30 1607136391
>>1606946
-O3 тут не причем. И использование переменных тоже.

>>1606974
> Аряяяя не тот компилятор
Классика. Ну посмотри что генерит clang, если msvc по каким то надуманным причинами тебя не устраивает.

>>1607047
А ты не очень умненький, как я посмотрю. Переменная создается на стеке, но вот значение хранится в статической памяти.
Аноним 18/02/20 Втр 23:29:32 1607150392
1501628513207.png (75Кб, 1014x669)
1014x669
>>1607136
>Ну посмотри что генерит clang
Аноним 19/02/20 Срд 00:58:06 1607254393
image.png (135Кб, 1309x634)
1309x634
image.png (16Кб, 732x109)
732x109
>>1607150
Ну и? Ассемблер не знаешь что ли? Все верно. Открой отладчик и посмотри, если не веришь. Статические данные в .rdata разделе.
Аноним 19/02/20 Срд 01:31:35 1607281394
>>1607254
> Ну и?
Нормальный компилятор сделал нормально, в отличии от мс параши.
Аноним 19/02/20 Срд 01:41:07 1607293395
>>1607281
Вы заебали это кормить. Нет, MS тоже умеет обоими способами массивы инициализировать: https://godbolt.org/z/B1515J просто у них другие взгляды на эффективность
Аноним 19/02/20 Срд 02:18:15 1607323396
>>1607281
Ты дурачок? Я тебе скринов наделал из отладчика, компилил шлангом x64. Глаза то открой. Жду твои вскукареки по поводу не той ОС.
Аноним 19/02/20 Срд 02:23:47 1607328397
>>1607323

Я понимаю что ты уже вытекаешь с треда, но приглядись к выделенному красным тут >>1606868
Аноним 19/02/20 Срд 02:26:27 1607330398
>>1607328
Это мой скрин и есть. Я понимаю, что ты нихуя не понимаешь этот код. Я тебе объясню, это СТЕКОВАЯ СТРОКА. Шланг же пихает строки в .rdata. Тупой же ты дегенерат.
Аноним 19/02/20 Срд 02:53:09 1607359399
>>1607330
Я так понимаю ты уже понял где обосрался, но пытаешься сохранить лицо.
Аноним 19/02/20 Срд 03:14:48 1607373400
>>1607359
Вот это проекции.
Ладно, давай на пальцах, как с отладчиком.

1. Тебе чем то не угодил msvc и ты впример мне кинул говновывод gcc >>1606974

2. Я указал тебе посмотреть на вывод нормальных компиляторов msvc gcc >>1607150 Твои гринпук текст ИМПЛАИНГ сборка GCC == CLANG и CLANG != MSVC. Хотя заметь, я нигде не писал, что clang сгенерит такой же код как и msvc, я сказал, что оба компилятора генерят правильную сборку в отличии от gcc. (Вот здесь твой обсер, маня, ты сам чего то там напридумывал не разбираясь в теме и смеешь что-то пиздеть).

3. Итого: gcc - оптимайзит в стек ( кладет хуй на программиста ), msvc - кидает все статик, кроме явного выделения на стеке (все правильно), clang кидает все в статик (чтобы наверняка)

4. ТЫ - выдаешь вывод clang'a и gcc за одинаково равных, хотя они в корне разные и конфликтуют друг с другом >>1607281 при этом называя msvc говном.

Выходит ты обосрался то. Типичный хейтерок + низкоквалифицированная маня.
Аноним 19/02/20 Срд 03:56:19 1607395401
изображение.png (128Кб, 1812x764)
1812x764
>>1607136
>Классика
Просто не смог пройти мимо студии и не тыкнуть в неё пальцем.

>посмотри что генерит clang
Ну давай, смотрю. Вторая и третья строчка на соседних адресах, в стеке. Точно не уверен, но и в msvc будет то же самое (оно не запускается на годболте).
Всё что я имел ввиду - на пике. Я имел ввиду, первая строчка хранится в readonly-памяти, вторая и третья хранится в стеке, а четвёртая(даже не строчка) в куче. А пятая, которую я добавил в области глобальных и статических переменных.
То что gcc кладёт сразу значение, а clang или msvc зачем-то копирует из какой-то залупы никак не меняет то место, где по факту оказывают расположены байты строчки.
Не понимаю в чём ты меня убедить пытаешься, и не понимаю что ты имел ввиду, когда написал что вторая строчка - статическая память, ведь адрес её байтов такой же, как и адрес байтов стековой строчки.
Аноним 19/02/20 Срд 03:58:00 1607396402
>>1607373
Найс, ты мне линкуешь мой пост называя его твоим. Это уже верх фарса даже на дваче.
Аноним 19/02/20 Срд 04:02:56 1607398403
2020 год. Двач на острие науки выяснил, что разные компиляторы могут по-разному компилировать с в ассемблер в автоматических дефолтных настройках (которые ещё хуй знает, насколько дефолтные между разными системами, или даже их версиями и дистрибутивами). Скоро ещё к разным ручным настройкам оптимизации перейдём, ух там сколько возможностей откроется.
Аноним 19/02/20 Срд 04:05:46 1607399404
>>1607395
Лол, просто прекрати, ты каждым постом умудряешься загнать себя еще глубже в яму, которую сам себе вырыл.
Аноним 19/02/20 Срд 05:48:06 1607429405
image.png (57Кб, 965x631)
965x631
>>1607395
Ни в чем, это вы доебались со своими компиляторами, пидорасы блять.

https://godbolt.org/z/ZU93TP

Расписал для дебилов, надеюсь теперь всем все понятно.
Аноним 19/02/20 Срд 05:52:44 1607431406
>>1607429
>{'t','e','s','t'};
А кампот?! '\0' не забывай, он может, но не обязан быть в пятой ячейке твоего [5] массива
Аноним 19/02/20 Срд 09:48:07 1607506407
>>1607429
Почему кланг хранит стековый массив в данных? Типа "памяти хватит всем, давайте хранить массивы в двух экземплярах"? Хотя, я скорее поверю, что у говнокодеров так просто получилось и решили не заморачиваться исправлением, работает же, ну и хрен с ним.
Аноним 19/02/20 Срд 11:37:14 1607588408
>>1607506

Потому что блядь как он тебе запилит при загрузке экзешника еще не существующий стекфрейм функции в которую еще не зашли?
Аноним 19/02/20 Срд 11:39:21 1607592409
>>1607588

>экзешника

Шиндошсблядь, плез.
Аноним 19/02/20 Срд 11:49:23 1607600410
Есть возможность приобрести ноут https://www.ebay.com/itm/Acer-Travelmate-B117-M-Laptop-Intel-Celeron-1-6GHz-4GB-Ram-64GB-SSD-Win-10-Pro-/153799005761?_ul=RU&redirect=mobile (не нашел другого линка с характеристиками).

Хватит ли его для работы на c/c++? (Смогу ли я на нем написать и протестировать свою ось?) Если да, то какой линупс ставить? Если нет, то чего не хватает?
Аноним 19/02/20 Срд 13:59:22 1607772411
>>1607588
Не подумал, бывает. Но всё же, как понимаю, разница где хранятся данные. Прямые стековые в коде и сразу пишутся, а из данных грузить надо, это по идее медленно.
Аноним 19/02/20 Срд 14:29:53 1607839412
>>1607772

Смысл стековых данных что их не "еще не существует" при входе в блок и "уже не существует" при выходе. Они существуют только пока процессор внутри блока. И всё это за счет принципа FIFO, где все переменные после выхода из функции грохаются кхуям и потом это место затирается уже совершенно другими переменными из другого блока/функции.
Аноним 19/02/20 Срд 14:36:44 1607847413
Аноним 19/02/20 Срд 14:38:35 1607851414
>>1607839
Ну как не существуют. Все константы из исходного хода хранятся в экзешнике и загружаются в память при его старте. Только стековые находятся в коде, прямо в инструкциях которые заносят их в стек, а другие в сегменте данных и загружаются оттуда. Смысл стека же в скорости, а грузить из жопы не очень быстро. По крайней мере я так понимаю, от чего возникает вопрос говнокода кланга, который всё в данные пихает, а мог бы и в стек, раз программист так пишет.
Аноним 19/02/20 Срд 14:43:08 1607856415
>>1607851
Говнокод наворотила студия
stack_buf[0]='t'
stack_buf[1]='e'
stack_buf[2]='s'
stack_buf[3]='t'
Аноним 19/02/20 Срд 14:44:17 1607858416
>>1593083 (OP)
Кто-нибудь линтерами пользуется? Или только на компиляторы полагаетесь, а в стиле на свои руки?
Аноним 19/02/20 Срд 14:44:46 1607859417
>>1607856
И где говнокод? Крутая оптимизация, вместо тормозных говноциклов.
Аноним 19/02/20 Срд 14:50:17 1607872418
Аноним 19/02/20 Срд 17:45:31 1608061419
Как в си можно считать такое?
1 2
3 4 5 6
7 8 9
10
(Т.е. в каждой строчке неизвестное кол-во чисел)
Надо записать в матрицу:
1 2 0 0
3 4 5 6
7 8 9 0
10 0 0 0
Аноним 19/02/20 Срд 17:46:08 1608062420
>>1608061
Размер матрицы заранее известен
Аноним 19/02/20 Срд 18:43:00 1608099421
>>1608061
А в чем конкретно сложность? Считать по строкам или разбить считанную строку?
Аноним 19/02/20 Срд 18:47:43 1608104422
>>1608099
Да двачеров пока дождешься...
Уже свой велосипед придумал:
for(i=0; i<n; i++)
for(;;){
scanf("%d%c", &x, &c);
...
if(c=='\n')break;
}
Аноним 19/02/20 Срд 19:12:46 1608112423
>>1607772
> а из данных грузить надо, это по идее медленно
Нет, не медленно. Строковые инструкции в современных процессорах опять починили, и rep movs будет быстрее сколько-нибудь длинной серии mov. Общая логика у компиляторов такая: много инициализаторов - данные копируются из "шаблона" одним циклом, "шаблон" в секции данных (если линкер .text и .rdata не смержит), мало инициализаторов или между ними дырки - переменная инициализируется инструкциями по кусочкам, разными способами (например, иногда массив предварительно обнуляется, иногда нет, иногда SIMD, иногда по байтам - зависит от конкретной ситуации и конкретного компилятора; кто-то, вроде бы 16-битный ватком, умел push-ами массивы собирать). Собственно, я пример уже приводил для студии: https://godbolt.org/z/B1515J у других аналогично.
Аноним 19/02/20 Срд 19:37:27 1608131424
>>1607851
>Смысл стека же в скорости, а грузить из жопы не очень быстро.

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

а) не стоит путать формальную семантику Си с её реализацие конкретным компилятором конкретными свичами. компилятор должен выдать программу. которая соответсвует семантике абстрактной магины си. ВСЁ, никаких блядь "переменных на стеке", никаких прямых обращений к памяти НЕТУ.

б) у васяна могут быть странные представления о том, как проц выполняет машинные коды. Тип, он берёт инструкцию из памяти, и выполняет её, ещё одну, и выполняет. На самом дела процессор берёт сразу дохуя инструкций, и блядь делает какую-то адскую ёбань типа, заполняет пайплайн, предсказывая джампы, пытается избежать кэшмисса. Очень много чёрной магии, гарантируется лишь то, что конечный рещультат однопоточной проги будет такой, какой он будет по представлениям васяна. Чтобы понять, что быстрее, а что медленне, нужно реально курить маны.

в) компилятор пишут достаточно умные люди, умнее среднего васяна, эти люди хотят выжать максимум производительности проца и эти люди курили маны. Перед компилятором стоит дилемма: пожертвовать производительностью, или наказать васяна хуём за то, что он не читал стандарт. Решение этой дилеммы часто зависит от флага оптимизации.
Аноним 19/02/20 Срд 19:47:46 1608135425
>>1608131
> Скорость зависит от того, нужно ли подгружать что-то в кэш
Ты сам себе противоречишь. Стек постоянно пидорасится, поэтому стекфрейм гарантированно в кэше. Тут он прав.
Аноним 19/02/20 Срд 23:21:23 1608523426
image.png (22Кб, 682x303)
682x303
я изобрел foreach, теперь вам не нужны кресты
Аноним 19/02/20 Срд 23:26:07 1608529427
image.png (22Кб, 703x306)
703x306
>>1608523
пастити пазяиста, действовал сгоряча эмоционально
Аноним 19/02/20 Срд 23:31:34 1608532428
А можете накидать курсов/книг, которые учат не с, а чему то прикладному на с? Вебсерверы, бд, дрова, что там ещё пишут на сях?
Аноним 20/02/20 Чтв 00:16:54 1608592429
Аноним 20/02/20 Чтв 00:38:20 1608623430
>>1608532
Если бы такие книги ещё были.
Максимум, наверное, есть в каких-нибудь проектах инструкция для начинающего контрибьютора.
Поэтому придётся просто сидеть, целыми днями вникать в исходники, гадая о назначении функций по их названиям, редким и кратким комментариям, и играясь с ними в отладчике.
Аноним 20/02/20 Чтв 00:48:42 1608638431
>>1608532
Напиши свой драйвер символьного устройства. Задача простая, на C, ещё и архитектуру ядра чуть изучишь.
Аноним 20/02/20 Чтв 01:07:56 1608651432
>>1608638

А с чего начать?

>>1608592
Просто, я на питоне могу сайт написать, гуй сделать, таск на pyspark засабмитить, а c могу только алгоритмические задачки решать и хз как на нем писать.
Аноним 20/02/20 Чтв 01:22:33 1608664433
>>1608523
С typeof любой дурак может.

>>1608529
Теперь банановый с UB.

>>1608651
> могу только алгоритмические задачки решать и хз как на нем писать
Иди на гитхаб, ищи проекты на сишке, фикси проблемы из issues.
Аноним 20/02/20 Чтв 08:26:02 1608755434
Хорошо бы было, если б каждый массив (всё что инициализируется в {} скобках) на момент компиляции показывал свой размер остальной программе через оператор, типа * и &.

Не идиотская идея же.
Аноним 20/02/20 Чтв 08:32:08 1608758435
>>1608755
хотя можно задавать максимум дефайном, инициализировать умолчания, {} не превышает дефайн, потом смотреть, равны ли значения инициализированным, если да, то за пределами, хотя это мозгоёбство.
Аноним 20/02/20 Чтв 08:49:44 1608766436
>>1608758
чёрт, сайзофом тоже можно вроде.
Аноним 20/02/20 Чтв 08:50:12 1608767437
Аноним 20/02/20 Чтв 11:03:14 1608856438
Вот почему эта падла ругается? Какая ему еще нужна скобка перед точкой с запятой?

https://ideone.com/fork/y9ingp
Аноним 20/02/20 Чтв 11:09:50 1608861439
>>1608856
>Какая ему еще нужна скобка перед точкой с запятой?
У тебя 36 открывающих и 30 закрывающих скобок...
Аноним 20/02/20 Чтв 11:14:06 1608869440
>>1608861
Спасибо, брат. Из-за такой хуйни столько тупил...
Аноним 20/02/20 Чтв 11:32:20 1608887441
Какие перспективы после изучения С в 2020? Можно найти работу или вы чисто для себя изучаете?
Аноним 20/02/20 Чтв 11:34:11 1608889442
>>1608887
Если ты хочешь ради денег - сразу нахуй.
А если интересно, то в любой даже самой непопулярной сфере можно найти профессию.
Аноним 20/02/20 Чтв 11:37:59 1608894443
>>1608889
> Если ты хочешь ради денег - сразу нахуй.
Неужели все настолько плохо?
> А если интересно, то в любой даже самой непопулярной сфере можно найти профессию.
А если я хочу несложные программы для себя писать - с какого языка стоит начать, если до этого почти не программировал?
Аноним 20/02/20 Чтв 11:39:55 1608897444
>>1608894
Какого рода несложные программы?
Аноним 20/02/20 Чтв 11:45:45 1608901445
>>1608894
>Неужели все настолько плохо?
Что значит плохо? Хуевое решение при цели стать миллионером пиздовать в промышленные альпинисты.
Можно пойти в экономику, там шансов будет в сотни раз больше, хотя хороший пром альпинист вполне может через лет десять иметь свой первый лям.
Аноним 20/02/20 Чтв 12:03:30 1608926446
>>1608901
А может и два квадрата.
Аноним 20/02/20 Чтв 12:52:46 1608964447
>>1608897
Несложные. Ну я вот на си для себя делал программу, которая во внешнем файле искала нужное слово и выводила предложение целиком.

Например в файле

123 какой-то текст 1
222 какой то текст 2
345 какой то текст 3
...

Вбиваешь номер и консолька мне выдавала текст на нужной строке.

Ещё хочу бота для твича своего сделать.

Ну и по максимуму я хочу сделать какой нибудь платформер уровня самого первого марио.

Ещё я атмегу8 ( не пердуино) ковырял маленько, пытаюсь собрать свой геймпад, прошивка под нее готовая есть, но тут у меня уже проблемы с пайкой. Но в идеале хотелось бы понимать и редактировать эти прошивки для атмеги.

Сам я с программированием не связан. По книге для С из оп-поста как-то дошел до функций, проблем с пониманием не было.

>>1608901
Не, мне миллионы не нужны, тысяч 40-50 было бы заебись получать.



Аноним 20/02/20 Чтв 12:55:40 1608966448
>>1608964
Туда ли ты зашел, петушок?

Аноним 20/02/20 Чтв 13:00:13 1608967449
>>1608966
Долбоебина, что не так?
Аноним 20/02/20 Чтв 13:01:16 1608968450
>>1608964
Если тебе нужна десктопная программа как результат, то посмотри на шарп и питон. Особенно, если это бот для твитча. Байтоёбские возможности си тут мягко говоря не нужны - текст или интерфейс для программы намного менее запарно в чём-то высокоуровневом обрабатывается. Такое на си есть смысл писать, только если тебе сам процесс очень нравится и ты готов потратить достаточно времени на это.
Аноним 20/02/20 Чтв 13:05:04 1608971451
>>1608967
Тому, что вакансии С на 40-50 есть я уверен, а вот что бы на них кто то работал - нет.
После получения всех знаний что необходимы на подобную вакансию - ты сьебешь куда нибудь за 100+.

С это не про ботов, платформеры и дрочение текстовых файлов. Это как хуй знает, пинцетом землю копать.
Ты можешь, но там лопата если что лежит.


Аноним 20/02/20 Чтв 13:08:39 1608973452
>>1608967
>>1608971
А ну и самое главное.

>всех знаний что необходимы на подобную вакансию
Вот ты охуеешь это все получать. Потому что на 90% это состоит из нечитаемой, устаревшей, хуевосделанной зазнавшимися нердами хуйни.
Аноним 20/02/20 Чтв 13:08:47 1608974453
Аноним 20/02/20 Чтв 13:27:14 1608986454
>>1608968
С# это же тот же JS не?

Вроде видел что на питонах ботов делают для твича. Но питон это вообще полноценный язык или на нем только скрипты можно хуячить? На питоне игры кто-нибудь вообще делает?

А на си графический интерфейс вообще можно прикрутить или только в консольке ебаться?

Я ещё думаю о том какой язык лучше всего подходит для начального обучения программированию. Начинать с того же с++ мне кажется хуевой идеей.

Ну и байтоебить на си пока я читал книгу мне в принципе понравилось.
Аноним 20/02/20 Чтв 13:30:02 1608994455
>>1608971
>>1608973

Как это си не про дрочение текстовых файлов? Как раз операции с текстом на нем вроде норм получаются. Ну и игры на нем вроде как инди студии делают иногда.

Неужели работа на си - это только поддержка старого говна?
Аноним 20/02/20 Чтв 13:37:29 1609002456
Аноним 20/02/20 Чтв 13:41:15 1609007457
>>1608994

>Ну и игры на нем вроде как инди студии делают иногда.

Инди-студии делают игры на конструкторах вроде уеча и юнити, либо на более легковесных аналогах.

Геймдев еще в конце 90х перелез на кресты, даже на соснулях - последним из могикан был кармак, причем порт последних написанных им сорцов третьей кваки тебе скинули выше, уже думец 3 кармак с начала нулевых писал уже на кривых, но крестах.

Аноним 20/02/20 Чтв 13:42:28 1609009458
>>1608994
>Неужели работа на си - это только поддержка старого говна?

нет, еще написание дров, библиотек-ускоряшек когда наждо ускорить скриптцо, кода для микроконтроллеров.
Аноним 20/02/20 Чтв 13:54:27 1609023459
>>1609009
Т.е. писать дюпроги для атмеги - это только си?
Аноним 20/02/20 Чтв 13:55:12 1609025460
>>1609002
А что насчёт остального?
Аноним 20/02/20 Чтв 13:58:51 1609032461
>>1593083 (OP)
Как жить без статика в С89?

Если в разных С файлах будут переменные с одинаковыми именнами, меня не озалупит?
Аноним 20/02/20 Чтв 14:00:19 1609036462
>>1608986
>На питоне игры кто-нибудь вообще делает?

БЛ на питоне написана, например.
Аноним 20/02/20 Чтв 14:02:02 1609042463
Доброго времени суток
Есть несколько общих вопросов по исследовнию сишных библиотек для проекта. Исследуемая библиотека BPF
1. Как измерять производительность компиляции (чем и в каких единицах измерения)
2. Как затестить скорость отброса пакетов, если они будут генерироваться на той же машине
3. Существуют ли готовые решения для тестов самого BPF (например, для сравнения скорости работы кода JIT и прекомпилированого)
4. tcpdump -d выводит именно bpf bytecode или попросту похожий assembler-like код?
Не бейте сильно если выдал что-то крайне тупое
Аноним 20/02/20 Чтв 14:02:42 1609045464
Аноним 20/02/20 Чтв 14:04:00 1609048465
>>1609045
Эроге. Книжечка с картиночками
Сложные игры писать на питоне ресурсозатратно
Аноним 20/02/20 Чтв 14:04:56 1609051466
Аноним 20/02/20 Чтв 14:10:55 1609057467
>>1609051
https://habr.com/ru/post/66562/ пруф
Он интерпритируемый. Каждый раз когда запускаешь код на питоне, сначала он интерпритируется в другие ЯП (обычно си, на сколько знаю), после чего уже куски си, которые друг к другу никто не оптимизировал, компилятся в машинный код, который уже выполняется машиной
Аноним 20/02/20 Чтв 14:14:16 1609060468
>>1609051
Кстати, я могу быть и не прав, сам учусь только
Аноним 20/02/20 Чтв 14:29:31 1609065469
>>1609060
С какой книги начать учить питон? Чет в треде по питону не отвечают нихуя
Аноним 20/02/20 Чтв 14:31:01 1609067470
>>1609065
Самое базовое - Byte of Python
Довольно маленькая и разжеванная книга, но воспринимается на ура
Буквально за пол дня можно совершенно свободно владеть общим синтаксисом
Аноним 20/02/20 Чтв 14:32:14 1609068471
Аноним 20/02/20 Чтв 15:25:19 1609108472
>>1608986
>это вообще полноценный язык или на нем только скрипты можно хуячить?
Ну так. Не знаю почему ты спрашиваешь в си-треде, но питон интерпретируемый и он тормознее си в 20-200 раз на любом коде, и потому сложную игру реального времени на нём писать не очень. Говорят есть всякие "компиляторы", которые совсем медленный скрипт в более-менее резвый байт-код уровня шарпа превращают, но никогда не пробовал и врать не хочу. Возможность прикрутить интерфейс есть, как и в си.
Если ты хочешь игру - то идеальная комбинация, это написать игровую механику на с++, а вот все менюшки, справки и прочее выполнить на каком-нибудь лёгком скриптованном языке - что интерфейс не был прибит гвоздями и его можно было менять без особых проблем. Если у тебя визуальная новелла или сапёр то всего этого не требуется, конечно, и вряд ли ты будешь делать такую игру в ближайщие два года, где без с++ не разобраться. С си без крестов ещё раз повторю - имеет смысл писать игру на си, только если тебе очень нравится сам процесс, а игра или какой-то другой результат даже приблизительно тебя не интересует.

>Начинать с того же с++ мне кажется хуевой идеей.
По сравнению с си там чуть-чуть ниже порог вхождения и намного больше пространства для изучения. Можно изучить только си, и потом писать на с++ взяв от плюсов только стандартные контейнеры, ссылки и вызов методов у структур — фактически ты всё ещё будешь писать на си (и твой код можно будет переделать в си-код почти без изменений), но очень сильно облегчишь свои страдания синтаксическим сахаром в виде вызова методов и ссылок.
Питон имеет ещё более низких порог вхождения (его просто нет по сравнению с си) - но он очень многоуровневый и тоже имеет громадное пространство для изучения, порог то низкий — но во что ты входишь? Вникнуть в питон и использовать все его возможности сложнее, чем сделать это с си/си++. Это лишь мой субъективный опыт. При этом изучив питон использовать си++ ты едва-едва сможешь и будешь писать не оптимальный код, пытаясь воплотить идеи питона там, где этого не требуется — а изучив си++ потом можно без какой-либо длительной адаптации на среднем уровне использовать питон.
Аноним 20/02/20 Чтв 17:11:39 1609226473
>>1609108
>Начинать с того же с++ мне кажется хуевой идеей.
>>По сравнению с си там чуть-чуть ниже порог вхождения

У этого указатель сорвало, переинициализируйте.
Аноним 20/02/20 Чтв 17:14:15 1609227474
>>1609032
Ты без статика да ещё и с глобальными переменными? Тут два варинта анон, ты либо кармак, либо долбоёб. Выбирай.
Аноним 20/02/20 Чтв 20:11:59 1609390475
>>1609057
> куски си, которые друг к другу никто не оптимизировал
> компилятся в машинный код
> питон
Лолшто?
Аноним 21/02/20 Птн 01:32:54 1609782476
аноусы, чисто ради интереса. объясните в общих чертах как выглядит код такой игры как gta допустим. я сегодня играл и представил что там наверное всё заключено в большой цикл while в котором записана вся эта загрузка карт, текстур и прочего на каждый кадр. мой персонаж как обеъект имеет различные действия, типа стрельбы и прочего которые влияют на другие объекты.
Аноним 21/02/20 Птн 01:51:37 1609799477
>>1609782
то есть один цикл While прошёл от и до == 1 кадр на мониторе компьютера сформирован. за 1 секунду while совершается от 25 до 45 раз в среднем. в зависимости от того кол-ва требуемых для выполнения операций в цикле.

вот стоишь на улице допустим просто 40 кадров, сделал выстрел пистолетом, загрузился звук, прошло движение, появилась дырка на объекте кудаа пуля попала уже в цикле действий было больше чем когда ты на улице был и получилось 30 кадров.

ну образно говоря. скажите, пожалуйста, я правильно думаю? если что я ньюфаня. просто представил как бы я это закодил если бы у меня такая задача была.
Аноним 21/02/20 Птн 02:16:18 1609813478
>>1609799
> ну образно говоря. скажите, пожалуйста, я правильно думаю?
Образно говоря, ты правильно думаешь.

> прошло движение
Движение "само" получается. Ты рисуешь пулю, говоришь, куда ей и с какой скоростью двигаться. Функция обновления игрового мира двигает ее куда надо, в зависимости от того, сколько прошло времени с предыдущего апдейта. Функция отрисовки рисует пулю по вычисленным координатам.

> уже в цикле действий было больше чем когда ты на улице был и получилось 30 кадров
Если движок и железо не совсем говно, то у тебя действий гораздо меньше, чем нужно чтобы заполнить 1000 / 30 = 33 мс апдейтами мира и рендером. Фпс дропаться будет только в сложных сценах.
Аноним 21/02/20 Птн 02:52:38 1609823479
>>1609108
А что насчёт работы для питона?

Если сейчас все игры делают на с++, то имеет смысл учить сперва С, а уже потом с++? Я как-то начинал сперва книжку по с++, потом сразу же по с, мешал команды из обоих и это все нормально работало.
Аноним 21/02/20 Птн 08:14:04 1609886480
>>1609823
>мешал команды
Шизло, плиз, посиди в ридонли сначала и желательно не тут, а в книжках

Командир межрасового батальона блядь.
Аноним 21/02/20 Птн 09:41:07 1609932481
>>1609886
Всякие cout и printf вполне работают вместе.
Аноним 21/02/20 Птн 10:21:29 1609948482
>>1609932
Да, пока у тебя не выключена синхронизация.
Аноним 21/02/20 Птн 10:24:21 1609950483
Аноним 21/02/20 Птн 11:17:58 1609984484
scope.PNG (70Кб, 610x307)
610x307
Это ведь неправда, у функций scope глобальный и распространяется на весь файл, как и у переменных с extern, почему он так пишет, типа стандарт старый?
Аноним 21/02/20 Птн 11:21:34 1609986485
>>1609813
понял. спасибо, анон. ну мне просто ради интереса чтобы поверхностно знать как это всё работает.
Аноним 21/02/20 Птн 11:21:37 1609987486
>>1609984
> Это ведь неправда, у функций scope глобальный и распространяется на весь файл, как и у переменных с extern, почему он так пишет, типа стандарт старый?

В с89 скоуп на "строки выше".

Именно поэтому в языке есть прототипы функций.
Аноним 21/02/20 Птн 11:22:48 1609989487
>>1609782

Тут выше гитлаб на исходники третьей кваки выкладывали, чего гадать, можешь глянуть.
Аноним 21/02/20 Птн 11:23:02 1609990488
>>1609987
Чем "на строки выше" отличается от "на весь файл"? Как это связано с прототипами функций?
Аноним 21/02/20 Птн 11:28:00 1609997489
>>1609823

>сейчас все игры делают на с++,

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

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

Основная проблема геймдева, из которой так же возникает его особенность -

ГЕЙМДЕВ - ЭТО НЕ РАЗРАБОТКА СОФТА, ГЕЙМДЕВ ЭТО РАЗРАБОТКА КИНЦА И РАБОТАЕТ ГЕЙМДЕВ КОНТОРА КАК КАКАЯ СЕРИАЛОСТУДИЯ ИЛИ КИНОСТУДИЯ А НЕ КАК СОФТОВАЯ ГАЛЕРА.

В геймдеве 90% всего работы это арт-составляющая, на всех стадиях поиска идей, прототипирования, арт-дизайна, контента. Непосредственно механика и обслуживающий её код (скриптинг, двигло и прочее) - это процентов так 10.
Аноним 21/02/20 Птн 11:32:40 1610001490
>>1609990
>Чем "на строки выше" отличается от "на весь файл"? Как это связано с прототипами функций?

Тем, что часть файла строчками ниже того места где ты дергаешь функцию суть есть аут оф скоуп.
Аноним 21/02/20 Птн 11:36:40 1610011491
>>1609997
ну да, главное дизайн надрочить, а кодер это только всё оживляет и делает так чтобы оно двигалось.
Аноним 21/02/20 Птн 11:38:11 1610014492
>>1610001
Под "дёргать" ты имеешь в виду вызов функции? Но речь идёт не о вызове, а об определении
Аноним 21/02/20 Птн 12:15:25 1610047493
exercise.PNG (23Кб, 795x92)
795x92
В каком я сильном ступоре. K&R, Exercise 1-24
Аноним 21/02/20 Птн 12:23:59 1610058494
>>1610047
Посчитать. Поделить на 2. С остатком? Тревога!
Аноним 21/02/20 Птн 12:36:53 1610082495
>>1610058
считать тяжело, вернее детектить их.
Аноним 21/02/20 Птн 12:38:32 1610086496
>>1609227
Ты жопочтец. А я перепутал static с inline.
Аноним 21/02/20 Птн 12:40:18 1610088497
>>1610058
Почему в задании так и не написано?
Аноним 21/02/20 Птн 12:41:27 1610089498
Стикер (319Кб, 433x380)
433x380
>>1610086
Инлайн переменные в с?
Аноним 21/02/20 Птн 12:43:05 1610090499
>>1609997
Ага именно поэтому блядь на всякие дрочильни, которые разрабатывают не 500 человек, патчи, в которых всем понятно что и как, могут выходить годами.

Хуйня все это. Как раз арт и все творчество очень хорошо параллелится.
100 дизайнеров нарисуют 100 моделек в 10 раз быстрее чем 10 дизайнеров.

Напишут ли 100 разрабов движок в 10 раз быстрее, чем 10 разрабов? Да нихуя не факт. Коду постоянно надо успевать за меняющимися концептами и идеями, при этом не залезая в технический долг. Дохуя кто не справляется.


Аноним 21/02/20 Птн 12:44:15 1610094500
>>1610082
Ты не можешь число вхождений символа сосчитать?

>>1610088
Там написано unmatched. Так что они как минимум должны быть парами. Он вон даже это пишет, что сложно, а так вообще надо стеком проверять, чтобы ещё такого "([)]", например, не было.
Аноним 21/02/20 Птн 12:45:18 1610095501
>>1610089
2x жопочтец.

Я спрашивал че будет с одинаковыми именнами переменных, без статика. Т.к. перепутал статик с инлайном.
Статик был в С89, инлайн нет.
Аноним 21/02/20 Птн 12:48:23 1610100502
>>1610094
причём здесь вхождения символа когда там просят проверку на синтаксис. чтобы скобки соотвествовали и прочее.
Аноним 21/02/20 Птн 12:52:09 1610104503
>>1610100
А программы ты как пишешь? Не символами?
Аноним 21/02/20 Птн 13:00:15 1610115504
>>1610047
На самом деле программа не сложная, просто подзаебаться придётся немножко пока думать над кодом будешь. Здесь очень много проверок if нужно будет.
Аноним 21/02/20 Птн 13:00:52 1610117505
>>1610047
Выглядит как классическая задача на стека:
1)Реализуй стек
2)Пробегись по тексту:
Если нашел левую скобку - пуш в стек
Если правую - поп и сравнение
Аноним 21/02/20 Птн 13:05:02 1610120506
Аноним 21/02/20 Птн 13:08:37 1610127507
Аноним 21/02/20 Птн 13:09:07 1610128508
>>1610127
я такого в книжке не проходил ещё.
Аноним 21/02/20 Птн 13:10:51 1610130509
>>1610128
Тогда предлагаю пропустить эту задачу.
а вообще, брошурка Полякова по си мне зашла гораздо лучше k&r
Аноним 21/02/20 Птн 13:13:17 1610136510
>>1610130
я её сделаю просто с учётом тех функций языка которые мне уже известны по книге. я уже гуглил решения этой задачи они там через switch делали ещё как-то заумно, к моменту этой задачи о таких инструментах читателю ещё неизвестно.
Аноним 21/02/20 Птн 13:14:34 1610138511
>>1610136
Скинь сюда ради интереса
Аноним 21/02/20 Птн 13:18:30 1610142512
>>1610138
а что там интересного? натыкаю туда кучу is-else вот и вся программа. ну ладно, скину если уж хочешь.
Аноним 21/02/20 Птн 13:20:19 1610144513
>>1610142
Да не своё говно ты, понятно, запоришь, ссылку на решение скинь.
Аноним 21/02/20 Птн 13:27:47 1610153514
Аноним 21/02/20 Птн 13:39:31 1610163515
Аноним 21/02/20 Птн 14:01:27 1610190516
>>1610047
Я долго с ней ебался
Аноним 21/02/20 Птн 15:14:30 1610281517
>>1610190
Завидую тебе, анон. Ты уже это прошёл, а я только в самом начале. Ну как вначале, у меня уже основа кода есть, уже в каких-то простых случаях ошибки детектятся.
Аноним 21/02/20 Птн 19:42:40 1610559518
>>1593083 (OP)
Много перечислено книг, но в основном все о самом языке. Есть книги по разработке? Как Си применять то вообще? Как писать кроссплатформенный код? Как писать параллельный, конкурентный, асинхронный код? Как взаимодействовать с ОС? Какие есть незаменимые либы, кроме стандартной библиотеки? Какие есть инструменты? Много вопросов имеется. Си вроде один из самых старых языков, но информации о том как его использовать в реальной жизни очень мало.
Аноним 21/02/20 Птн 19:47:07 1610563519
>>1610153
Что такое стек в процессоре?
Аноним 21/02/20 Птн 20:01:02 1610580520
>>1610559
ща бы в си нестаднартные либрари подключать, вот это маня, ой манюна. возвращайся в свои джавы, питоны, пыхи неча здесь тебе ловить. какая разработка на си? мань, язык годый, но в современных реалиях его в основном используют для написания драйверов.
Аноним 21/02/20 Птн 20:26:26 1610608521
>>1610580
Ты работаешь или как?
Аноним 21/02/20 Птн 20:37:02 1610619522
>>1610580
>ща бы в си нестаднартные либрари подключать
А евент либы, libuv, libevent, etc? Щас бы слушать твои маняфантазии
Аноним 21/02/20 Птн 20:37:24 1610620523
>>1610580
>возвращайся в свои джавы, питоны, пыхи неча здесь тебе ловить
Пшлнх
Аноним 21/02/20 Птн 21:32:23 1610699524
>>1610563
Просто некоторая область памяти вместе с указателем на эту область (точнее на её часть). Обычно используется для субрутин (точнее выхода из них).
Выглядит это примерно так:
sp=#1111 (это stack pointer, он хранит значение ячейки памяти в которую будет проводиться запись)
pc=0 (указатель на память с которой мы работаем прямо сейчас)
Далее инструкции (начиная с #0000)
0000 MOV $13, A (просто инструкция)
0001 CALL #1C56 (вызов субрутины по адресу 1С56, в этот момент число 0001 (наш pc) записывается в память по адресу 1111, а sp=1112)
...
1С56 ADD B, A (просто инструкция, в этот момент pc=1C56)
1C57 RET (команда которой заканчивается любая субрутина, pc=верхнее число в стеке т.е. 0001)


Субрутина - это, считай, функция.

Сама реализация отличается от процессора к процессору: где-то стэк идет вниз, где-то вверх итп). Пример выше не относится к какому-то конкретному процу.

Не знаю, правда, как у современных amr'ов с х86, но раньше было так. Не думаю что они поменяли реализацию, но поправьте если что.
Аноним 21/02/20 Птн 21:34:51 1610702525
>>1610699
>Просто некоторая область памяти вместе с указателем на эту область
Где? В кэше какого-то уровня? Не в оперативке же?
Аноним 21/02/20 Птн 21:42:32 1610713526
>>1610702
Нет "в процессоре" никакого стека. Это просто кусок оперативки:
int stack[100];
// Стек у нас full descending:
// descending: растет вниз, в младшим адресам по историческим причинам;
// full: sp указывает на ячейку, содержащую последнее воткнутое значение, а не на пустую ячейку, как в empty-стеках.
int ∗sp = stack + 100;
void push(int value) { ∗(--sp) = value; }
int pop(void) { return ∗(sp++); }
Иногда (далеко не всегда) у процессора есть какие-то инструкции, которые позволяют делать вот эти push/pop одной командой. И часто есть конкретный регистр, которых хранит sp. В x86 есть еще немного сахарка (да, сахарок на уровне машинного кода) для вложенных стекфреймов, но его никто не использует.
Аноним 21/02/20 Птн 21:42:55 1610714527
>>1610702
У процессора есть своя память, в частности, гугли что такое регистры.
Аноним 21/02/20 Птн 21:59:55 1610728528
>>1610714
Точно, забыл про регистры. Получается есть регистры отведенные под стек? И получается, что этот анон >>1610713 ошибается, говоря, что в процессоре нет стека?
Аноним 21/02/20 Птн 22:09:05 1610736529
>>1610728
Это троллинг тупостью?
Аноним 21/02/20 Птн 22:09:52 1610738530
>>1610728
Почему я ошибаюсь? Я же написал, что:
> И часто есть конкретный регистр, которых хранит sp.
Но в том же ARM, если ты не используешь систему команд Thumb, ты можешь использовать для указатестека любой регистр, можешь даже несколько параллельных стеков иметь, потому что там работа со стеком осуществляется обычными mov и ldm/stm (load/store multiple), в которых ты можешь адресоваться относительно любого регистра. Сам стек при этом лежит в обычной, адресуемой памяти. Да, в том же ARM можно положить стек в TCM, это такой небольшой кусок SRAM, который расположен в процессоре, но опять же: 1) с точки зрения программиста разницы с обычной памятью нет; 2) можно и не ложить стек туда, этой памяти мало, поэтому туда обычно обработчики прерываний суют.
Аноним 21/02/20 Птн 22:16:44 1610745531
>>1610736
В смысле? Я задал конкретные вопросы, безо всякого троллинга.

>>1610738
Регистры где, про процессоре же? Так почему ты пишешь, что в процессоре нет стека?
Аноним 21/02/20 Птн 22:20:55 1610749532
>>1610745
> Так почему ты пишешь, что в процессоре нет стека?
Потому что в регистр в лучшем случае влезает 64 бита (если он не SIMD), для стека это как-то маловато, нет? Так что я тоже начинаю склоняться к тому, что это
> троллинг тупостью?
Аноним 21/02/20 Птн 22:23:24 1610756533
ПЕРЕКАТ Аноним # OP 21/02/20 Птн 22:30:09 1610769534
Аноним 21/02/20 Птн 22:32:24 1610772535
>>1610749
Чего ты мне голову морочишь? Я понятия не имею какой размер регистра. Тем более не знаю размер стека. С чего ты взял кстати, что 64 бита мало для стека?

>>1610756
>Кароч, на тебе линк: https://www.ixbt.com/cpu/cpu-digest-2009.shtml
Там про стек ни слова

>пиздуй нахуй
Уёбок чсвшный
Аноним 21/02/20 Птн 22:37:13 1610782536
>>1610772
Сначала внимательно ознакомься с архитектурой, а затем вернись, и перечитай что тебе ответили тут.
Аноним 21/02/20 Птн 22:42:41 1610791537
>>1610782
Ты сам не можешь ответить есть стек или нет и где он находится. И ты мне советуешь ознакомиться с архитектурой? Вот это настоящий троллинг тупостью. Скажи, а сишники все такие чсвшные? Я с вас в шоке, вы даже не знаете собственного инструмента. Не ты ли мне писал, что сторонние либы использовать зашквар? Хотя какая разница, вы тут все одного поля ягоды.
Аноним 21/02/20 Птн 22:56:05 1610801538
>>1610791
Этот питонист порвался, несите нового.
А вообще, тебе уже ответили. Повторяю:
Есть старые процессоры (серии 8080 итп), в них нет ярого выделения оперативки, про них можно сказать что стек находится "в процессоре"
А есть более современные (arm итп.), у них, со слов другого анона (а причин не доверять ему я не вижу) есть такое разделение, и более выгодным получается хранить стек "вне процессора" (причины он тоже описал)
Аноним # OP 21/02/20 Птн 23:02:05 1610807539
>>1610801
> Есть старые процессоры (серии 8080 итп), в них нет ярого выделения оперативки
Чего? В 8080 стек в оперативке, как и везде. Регистр SP используется под указатель стека.
Аноним 21/02/20 Птн 23:05:24 1610814540
>>1610801
Сомневаюсь, что стек процессора может храниться в оперативке. Это оверхед.
Аноним 21/02/20 Птн 23:07:40 1610816541
>>1610807
Разве у 8080 был отдельный блок памяти?
Аноним 21/02/20 Птн 23:08:35 1610819542
>>1610816
Тфьу, модуль отдельный, модуль.
Аноним 21/02/20 Птн 23:10:18 1610821543
>>1610563
У процессора нет стека, у него есть регистр SP - stack pointer, т.е указатель на ту область, которую ОС/программист зарезервировал под стек. Можно выделить память, настроить доступ страниц и создать свой стек, например.
Аноним 21/02/20 Птн 23:11:23 1610826544
>>1610814
У тебя в ОС пара тысяч потоков обычно (естественно, не все выполняются, большинство висит на IO). Каждому нужен стек. Внимание, вопрос: сколько памяти должно быть в процессоре, чтобы разместить стеки там, если учесть, что одному потоку в современной ОС обычно требуется около 50-100к?

>>1610816
Тебе давали микросхему, у нее ноги для адресной шины/шины данных, а память ты припаиваешь внешнюю, отдельным жирным устройством. Откуда там внутренняя-то?
Аноним 21/02/20 Птн 23:21:24 1610844545
800px-Intel8080[...].png (59Кб, 800x713)
800x713
>>1610826
>>у нее ноги для шины данных
Даже загуглил, и правда.
последний раз имел с ним дело в виде сишной структуры, там память шла в куче с регистрами... шиза наверное
Ладно, пойду я отсюда, пока еще кого не обманул.
Ссыль кста на стек: https://ru.wikipedia.org/wiki/Стек_вызовов
Аноним 21/02/20 Птн 23:28:59 1610854546
800px-Intel8008[...].png (59Кб, 800x564)
800x564
>>1610844
Это 8008 со внутренним стеком
Аноним 21/02/20 Птн 23:39:52 1610866547
>>1610821
Как сам программист может зарезервировать память под стек?
Аноним 21/02/20 Птн 23:45:41 1610879548
>>1610826
>У тебя в ОС пара тысяч потоков обычно
Какие тысячи? У меня в линуксе не более 100 процессов висит.

>Внимание, вопрос: сколько памяти должно быть в процессоре, чтобы разместить стеки там, если учесть, что одному потоку в современной ОС обычно требуется около 50-100к?
Откуда цифры 50-100 Кбайт? Некоторые виртуальные машины выделяют под процесс всего 2,5 Кбайта, например BEAM (Эрланг).
Аноним 22/02/20 Суб 00:14:21 1610914549
>>1610879
> Какие тысячи?
Взял с потолка, имея в виду сервера, очевидно же. На клиенте меньше, на винде с двумя ядрами чуть больше 500 потоков (это семерка, наверняка в десятке больше). В серверных приложениях с асинхронщиной традиционно делают по потоку на ядро минимум, там тоже будет больше.

> Откуда цифры 50-100 Кбайт?
Выбирал когда-то, сколько давать потокам в своих приложениях. Можешь попробовать пройти по всем потокам в системе, посмотреть на rsp относительно верхушки стека, посчитать среднее и рассказать нам.

> некоторые виртуальные машины выделяют под процесс
И ничего не хранят в системном стеке, у них все свое, так?
22/02/20 Суб 00:26:33 1610926550
>>1610914
Рандомно потыкал вручную (да, опять винда): эксплорер - 60K, нотепад - 24К, севензип 40К, отродья хромиума - потоки от 4К до 32К, торрент - от 4К до мегабайта, рандомное говно на дотнете - куча потоков, у каждого 40-50К. Это все commit (с оглядкой на working set), т.е., это тот размер, который используются реально. Окей, получается, что скорее 50К, чем 100.
Аноним 22/02/20 Суб 00:46:07 1610943551
>>1610914
>На клиенте меньше, на винде с двумя ядрами чуть больше 500 потоков (это семерка, наверняка в десятке больше).
Где ты вообще потоки видишь? Диспетчер задач в Windows, как и системный монитор в Линукс показывают процессы, а не потоки.

>И ничего не хранят в системном стеке, у них все свое, так?
Не понял о чем ты. При запуске "управляемого кода" в любом случае создается процесс ОС.
Аноним 22/02/20 Суб 00:47:29 1610945552
изображение.png (1Кб, 186x75)
186x75
изображение.png (196Кб, 1502x938)
1502x938
>>1610879
>Какие тысячи?
Он почти прав.
Виндоус 10, у меня открыты - браузер с 6 вкладками борды (примерно 100 потоков из-за ебанутой многопроцессной системы - голову бы открутил тому кто это придумал), дискорд (около 60 потоков по тем же причинам), питон (4 потока), фигня в фоне для ram-дисков (2 потока), explorer.exe (76 потоков). Всё остальное - какая-то неведомая ебола в системе. При этом у меня отключены все службы обновления, службы телефонии и куча других мусорных служб, с которыми там бы ещё сотни четыре набежало.

Не могу удержаться и прикреплю вторую картинку, просто чтобы линуксоиды увидели этот (это ещё не весь список) ужас.
Аноним 22/02/20 Суб 00:53:00 1610950553
>>1610945
>Виндоус 10, у меня открыты - браузер с 6 вкладками борды (примерно 100 потоков из-за ебанутой многопроцессной системы - голову бы открутил тому кто это придумал), дискорд (около 60 потоков по тем же причинам), питон (4 потока), фигня в фоне для ram-дисков (2 потока), explorer.exe (76 потоков).
Ясно понятно. Хорошо что у меня Линукс. Там такого и близко нет. 40-50 пользовательских процессов + столько же системных.
Аноним 22/02/20 Суб 00:55:48 1610953554
>>1610866
Я же написал. Выделяешь блок памяти, настраиваешь доступ к страницам (rw/x/g), добавляешь обработчик, меняешь контекст потока и готово. При должном желании получится полноценный почти пользовательский стек.
Аноним 22/02/20 Суб 00:58:14 1610955555
>>1610950
Процесс и поток это одно и тоже в линуксах?
Я слышал там другое внутреннее устройство потоков, с куда более лёгким переключением между ними, чем в виндах. А процессы более-менее схожи.
Аноним 22/02/20 Суб 01:33:03 1610992556
>>1610943
> Не понял о чем ты. При запуске "управляемого кода" в любом случае создается процесс ОС.
Процесс создается, но если ты сделал в скрипте x = my_script_func(), используется ли для этого вызова "обычный" стек, или у тебя в struct vm_context { uintptr_t vm_callstack[NUM]; }, а все объекты, включая вот эту vm_context - в куче. В таком случае стек будет использовать только диспетчер вм, а ему совсем немного нужно - ну будет там вложенность 3-4 вызова от силы.

>>1610953
Да в большинстве случае достаточно просто rsp поменять на куда-угодно. Можно даже в "реальном" стеке выделить кусок, так корутины в сишке делают.

>>1610950
> 40-50 пользовательских процессов
А ты потоки-то посчитал? ps -eLf

>>1610955
> Я слышал там другое внутреннее устройство потоков, с куда более лёгким переключением между ними
Там фактически нет разницы между потоком и процессом. Отличия от процесса в основном в том, что создается поток через clone(), а не через fork() и в том, что адресное пространство потоков - общее.

> с куда более лёгким переключением между ними, чем в виндах
Да в виндах уже UMS (user-mode scheduling) завезли, и давно. Хуй знает, насколько оно там быстрее.
Аноним 22/02/20 Суб 07:05:05 1611107557
>>1610953
>Выделяешь блок памяти, настраиваешь доступ к страницам (rw/x/g), добавляешь обработчик, меняешь контекст потока и готово. При должном желании получится полноценный почти пользовательский стек.
В Си разве такие возможность в язык встроены? Это наверное api ОС позволяет такое делать? Где можно об этом почитать?
Аноним 22/02/20 Суб 07:08:38 1611108558
>>1610992
>Там фактически нет разницы между потоком и процессом.
Как это нет. Множество потоков могут принадлежать одному процессу. Но не наоборот.
Аноним 22/02/20 Суб 21:20:38 1611864559
>>1611108
> Множество потоков могут принадлежать одному процессу
Это детали. Как и про доставку сигналов, про execve и прочие тонкости. В винде отличия гораздо сильнее: процесс не может выполнять код, ему нечем.

>>1611107
> В Си разве такие возможность в язык встроены?
Частично: есть setjmp/longjmp, они меняют в том числе и указатель стека, но по стандарту они непрозрачные (хотя на конкретной ОС ты можешь попатчить jmp_buf сам). Можно дергать всякие SetThreadContext в винде (для своего потока можно через SEH/VEH поменять, я кидал пример в соседний тред >>1597614 →), setcontext в nix (только оно deprecated). Но лучше всего написать реализацию на ассемблере самому, там реально пара инструкций. Это про переключение стеков. А что касается:

> Выделяешь блок памяти, настраиваешь доступ к страницам
Это ты просишь у ОС. Смотри на mprotect/mmap в nix и на VirtualProtect/VirtualAlloc в винде, например.

> Где можно об этом почитать?
В мануале по процессору, в описании ABI твоей ОС.
Аноним 22/02/20 Суб 23:31:01 1612063560
>>1611864
>процесс не может выполнять код, ему нечем
Шта блять? Может ты и прав, но как я узнаю об этом? Где это написано?

Аноним 23/02/20 Вск 01:27:54 1612186561
Аноним 23/02/20 Вск 02:43:51 1612215562
nothreads.png (14Кб, 469x318)
469x318
>>1612063
> как я узнаю об этом
Windows Internals расскажет тебе, что есть системная структура KPROCESS, что в KPROCESS есть linked list c потоками (KTHREAD), в потоках сохраняется контекст CPU И все остальное, что нужно выполняющемуся коду, и что планировщик, естественно, работает именно с KTHREAD. Ты можешь подумать, что ничего не мешает тебе иметь KPROCESS с пустым списком KTHREAD. Дальше ты можешь посмотреть WRK или какую-нибудь книжку/статью про Native API и узнать, что ZwCreateProcess и более низкоуровневые функции сами по себе не создают никаких потоков, ну и затестить: собрать https://pastebin.com/raw/axHPfjFn и посмотрев в любом таскменеджере, увидеть, что потоков у тебя ноль, и process times тоже по нулям, и переключений контекста нет (пикрелейтед), потому что планировать нечего. Если что, suspended процессу выставил не я.

В линуксе все по-другому. Планировщик там оперирует тасками (struct task_struct, фактически - процессами), именно в таске лежит сохраненный контекст CPU, всякие там стеки и прочие флаги, и главное, именно ему назначается тот самый pid (process id), который ты видишь в листинге ps. В линуксе контекст неотделим от процесса, поэтому в линуксе ты не можешь сделать поток без процесса, процесс без потока и все такое прочее.
Аноним 23/02/20 Вск 02:57:32 1612219563
>>1610854
Охуенно, я про такие извращения минувших дней даже не знал. Спасибо.
Аноним 23/02/20 Вск 09:28:34 1612278564
>>1612186
Ты винду в пример приводишь, как будто это эталон какой то. У меня вот линукс стоит.
Аноним 23/02/20 Вск 21:02:58 1612996565
>>1612278
> Ты винду в пример приводишь, как будто это эталон какой то. У меня вот линукс стоит.
Ядро NT проектировалось с учетом ошибок UNIX. Ядро Linux было изначально ограничено необходимостью реализации POSIX. К тому же, оно изначально никак не проектировалось по сути, а писалось, как получится.
Аноним 24/02/20 Пнд 07:29:33 1613313566
>>1610745
Стек в ram, указатель на память в регистре
Аноним 24/02/20 Пнд 10:10:31 1613348567
>>1612996
>Ядро NT проектировалось с учетом ошибок UNIX.
Угу, проектировали проектировали, да не выпроектировали. Совместимость с POSIX неполная, костыльная. Из-за этого нельзя просто так взять, и установить какой нибудь язык программирования.
Аноним 24/02/20 Пнд 17:12:16 1613657568
>>1610945
>примерно 100 потоков из-за ебанутой многопроцессной системы - голову бы открутил тому кто это придумал
Без этой многопроцессной системы у нас был фуррифокс, который вис со всеми открытыми вкладками, если хотя бы одна зависла, например из за васи шутника написавшего бесконечный цикл на JS
Аноним 24/02/20 Пнд 20:01:50 1613856569
>>1613657
Опера не висла. А там были отдельные потоки на вкладку, а не процессы.
24/02/20 Пнд 22:06:20 1614001570
>>1613348
> Совместимость с POSIX неполная, костыльная
Это плюс, а не минус. POSIX основан на принципах, которые не выдержали столкновения с жестокой реальностью. Например, ты не можешь просто взять и написать сколько-нибудь быстрое кроссплатформенное сетевое приложение - в линуксе свои костыли, во фре свои, в маке третьи.

> нельзя просто так взять, и установить какой нибудь язык программирования
Ты хотел сказать компилятор. Нет, не из-за этого.
Аноним 26/02/20 Срд 21:37:00 1616206571
>>1614001
Ну давай пособирай Окамловские пакеты под винду.
Аноним 27/02/20 Чтв 21:26:11 1617480572
>>1616206
> Ну давай пособирай Окамловские пакеты под винду.
Так это их проблемы, что они не могут писать кроссплатформенный код и не завезли поддержку винды.
Аноним 01/03/20 Вск 08:29:38 1619621573
>>1617480
Компилятор Окамла работает на винде. Но проблемы могут возникнуть при компиляции пакетов.
Аноним 12/03/20 Чтв 22:34:21 1631472574
>>1593083 (OP)
for (int i = 0; 1; ++i)
printf("E\n");

вот здесь что сперва происходит printf или ++i. По-моему printf я так понял что ++i делается после каждого выполнения тела цикла. Я прав?
Аноним 13/03/20 Птн 13:33:04 1631997575
>>1631472
printf. Инкрементация пред-какая-то (забыл название) работает только для выражений, expressions. По логике конструкции for, ++i выполняется всегда после 1 итерации цикла.
Аноним 13/03/20 Птн 13:35:03 1631998576
>>1631997
т.е. экспрешон вовне скобок возвращает i, а потом самоплюсуется
Аноним 13/03/20 Птн 13:35:26 1631999577
Аноним 14/04/20 Втр 13:20:01 1657716578
>>1596310
systemd - говно ебаное, автор выебистый sjw петух на зарплате у RedHat, который имеет славу писать залупу и по слухам вся эта шелупонь с CoC для того, чтобы повнедрять уязвимости в kernel
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов