Этого треда уже нет.
Это копия, сохраненная 24 декабря 2022 года.

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

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

Пожалуйста, пользуйтесь 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/n2479.pdf (февраль 2020, с диффами)
- Последний черновик ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf (декабрь 2020)

Чем компилировать:
- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio 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

Онлайн-утилиты:
- №70: http://arhivach.net/thread/713839/
- №71: http://arhivach.net/thread/727405/
- №72: >>2245329 (OP) (OP)
- №73: >>2297526 (OP) (OP)
2 2400221
Уронил дегенерату на голову ферритовый кубик. Номер треда старый.
3 2400265
Блять, еще и с разметкой обосрался, ну пиздец просто
4 2400317
есть видеокурсы нормальные какие-нибудь? собираюсь на торренте купить, а то из книжек с нуля даже хз что выбрать
5 2402453
>>00317
Тимофей Хирьянов, например и на ютубе.
https://vk.com/video/playlist/-153393975_14
6 2404150
Что правильно (или лучше) делать, когда нужно получить несколько значений (в общем случае - разных типов) от функции? Запаковать в структуру на хипе и через указатель возвращать её с последующим высвобождением памяти в вызывающем коде? Звучит по-уебански, но ничего лучше я не придумол

репост из конкурирующего треда
7 2404194
>>04150
Я сварщик не настоящий, но почему бы не использовать глобальные переменные?
8 2404207
>>04150
Возвращай структуру или кортеж, значения распихивай так https://en.cppreference.com/w/cpp/language/structured_binding
9 2404209
>>04207
А стоп, это же си тред, тогда только структуру.
10 2405456
>>04150
Почему не модернизировать переменную по указателю? Всю жизнь с си так делал и жив.
11 2407847
Бля я не понимаю си.
Ну прочёл я Кернигана ебаного.

Че мне функции из головы что ли придумывать каждый раз?
12 2407855
Ну хорошо придумал функции sumTwoFuckingaNumbers
сложил два числа блять
А как мне написать что-то годное?
Например типо снифера или кваки
Где этот промежуточный материал брать?
Из крс книги вообще ничему не научишься лол
13 2407872
>>07855
Из кода. Берешь хороший код и учишься. Неинтересно - встаешь на кассу.
14 2408058
>>07855
>>07847
Поэтому вам и говорят, что нужно учить не язык, а программирование и конкретную предметную область. Чем тебе поможет знание языка, если ты не сможешь его применить по причине своего незнания? Для начала ты должен формализовать задачу, построить архитектуру приложения, найти/составить модели, которые будут решать твои проблемы, а только потом садиться за код. Т.е. написание кода в работе программиста - это 5-10% от его общей работы. Для начала все строится на бумаге.
15 2408267
>>00317
Есть норм челик какой-то, который пояснял на конфе про то, почему он пользует няшную + демонстрирует всякие свои трюки, например, про макросов на memalloc/dealloc, чтобы находить проблемные места с управлением памятью на этапе разработки. Курсы наверное нахуй не нужны раздобудь копию стандарта n1256.pdf и ещё читни на досуге книжку Ритчи и Peter Linden Deep C Secrets.
16 2408282
>>07847

>Че мне функции из головы что ли придумывать каждый раз?


Я в школе программировал 5 лет, написал кучу программ, игр, всяких опытов провел, но так и не понял зачем нужны функции, ни разу функции не использовал, какая-то мутная непонятная хуйня. А потом дошли руки до си и там сплошные эти функции, и вопроса не возникло, всё естественно как воздух. Так что функции лишь плод си-подобного синтаксиса, на самом деле нахуй не нужны для программирования, ведь это математическая концепция, а программирование не математика. Си заставляет лепить эту функцию main() (говно если честно, за такое надо бы по ебалу бить), так что от этого не уйти, но дальше функции не нужны, а если понадобятся, сам узнаешь, ведь понять их в си труда не составляет.
sage 17 2408556
>>08282

>Си заставляет лепить эту функцию main() (говно если честно, за такое надо бы по ебалу бить)


на джаве только не пытайся писать, там тя вообще инсульт хлопнет
а вообще жырновато - даже в олимпиадном дрочении у меня без функций жепа скрипела поначалу да, тоже не сразу выучил, что меня выдало?
18 2408621
>>08556
Джава, шарп и подобное это макакины языки, код абстрактный, плевать, да и они лишь скопированы с си.

А вот с си немного обидно, неплохой, реальный язык, но вот эта тяга автора в говноматематике там где она не нужна, раздражает. Напоминает хаскел, рак примерно схожей природы, насильное пихание математики. И не только форсом main(), но и вообще функций, даже подпрограммы (процедуры) выполнены в виде функций. Это особенно опасно для учебы, когда такое дают людям без представления о программировании, у них складывается впечатление, что программирование это сплошные функции, когда на самом деле наоборот, функции имеют весьма узкое применение, лишь в своей околоматематической области. Отсюда возникают дебильные, очень распространенные вопросы вроде "как вернуть несколько значений". Потому что к голову насрали чужеродной программированию парадигмой. Такое надо давать когда человек уже имеет правильное представление, а не с нуля шизу воспитывать.
19 2408745
>>08621
Да, правильно, нахуй эти функции нужны,то все для ученых в говне моченых. Мы люди простые, просто копипастим код, когда нужно и пишем портянки.
20 2408755
Продублирую здесь.
Пишу свой двухколёсный дебаггер. Вот есть процесс, ему соответствует программа и слинкованные с ней в рантайме библиотеки (libc, ld и прочее); сегменты программы загружены в выделенную процессу память, библиотеки отображены и я всю эту красоту могу наблюдать в /proc/{pid}/maps.
Всё, что мне нужно сделать, это найти запись в таблице символов файла программы/библиотеки по адресу вызванной функции. Я парсю инфу о сегментах из /proc/{pid}/maps, смотрю, какой сегмент соответствует адресу функции и для соответствующего имени файла с помощью libelf подгружаю нужные мне заголовки.
Дальше это работает так:
https://pastebin.com/0rLUpUWF
(код сырой; на данном этапе нужно было, чтобы это просто работало)
data содержит маппинг файла программы/библиотеки, addr = адрес_функции - адрес_сегмента.
Для самого executable код вроде работает, но не для слинкованных с ним либ. Что я упускаю?
22 2409349
>>08621

> А вот с си немного обидно, неплохой, реальный язык, но вот эта тяга автора в говноматематике там где она не нужна, раздражает. Напоминает хаскел, рак примерно схожей природы, насильное пихание математики. И не только форсом main(), но и вообще функций, даже подпрограммы (процедуры) выполнены в виде функций.


Не понял, кто в этом виноват: автор учебника или языка?

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


Любая подпрограмма - бесплатная функция. Это круто.

> Отсюда возникают дебильные, очень распространенные вопросы вроде "как вернуть несколько значений".


Это не дебильный вопрос. Это родовая травма языка, где нельзя fun x = (x,x)
23 2409470
>>09349

>Это не дебильный вопрос. Это родовая травма языка, где нельзя fun x = (x,x)


Почему сложно вернуть структуру, она будет один хуй у колера на стеке.
24 2409501
>>09470
В нормальных языках не нужно вводить для этого тип: ты просто возвращаешь N значений через values или (,,,).
25 2409517
>>09501

>В нормальных языках


Пиши на них, в чем проблема?
26 2409552
>>09349

>Не понял, кто в этом виноват: автор учебника или языка?


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

> функция. Это круто.


> fun x = (x,x)


вот такие промытые математутки головного мозга. Круто - не значит правильно.

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

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

Поэтому, по своему предназначению, си - подходящий язык для учебы, однако на практике это не так. Си - не является учебным языком, это утилитарный язык для работы, поэтому автор счел правильным достаточно серьезно исказить его парадигму (завязка на функциях) ради практического удобства применения. Но это искажение вредно для учебы, дает искаженное осознание что такое программирование, скрывает за собой парадигму компьютера, которую обучающийся должен знать в первую очередь, т.к. она является основой - реальна, в отличие от прочих виртуальных.
sage 27 2409559
>>09552
Ебать шиза. Хейтер функций. Пиздец сказали бы - не поверил что такие поехавшие существуют.
28 2409661
>>09552

>Си - не является учебным языком


В книжке Кнута учебным является MIXASM )) Кому ты пиздишь Кнуту, мне или Иисусу?
29 2409708
>>08282

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


На GW-Basic что ли программировал?
sage 30 2409770
>>08282
Толсто.
31 2409950
>>09661

>В книжке Кнута учебным является MIXASM


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

Но это лишь рассуждения базирующиеся на доброй воле. В реальности, рапример, правящие структуры могут быть заинтересованы плодить тупых макак, поэтому специально дают виртуальные языки, чтобы быдло оставалось в неведении о настоящем функционировании компьютера. Ограничение доступа, как говорится. Ну и тому подобное, вариантов много, не суть.
32 2409960
>>09950
Поэтому для обучения Паскаль используют. Мистер Столяров, вы?
33 2409971
>>09960
До сих пор? Слабо верится. Что-то не видно тредов по паскалю с домашкой, все на си.
34 2409980
>>09950
Узнаю тон общения, упрямство, тупость и неумение читать поехавшего борца с абстракциями из предыдущего треда. Ты, хуйня? Может примешь наконец таблетки и перестанешь засорять треды своими "оригинальными" идеями?
35 2409982
>>09960
Паскаль не о том вообще, он учит восе не программированию, паскаль учит высокоуровневому коду в стиле энтерпрайз, жестко форсит рамки "хорошего стиля". Это чисто прикладной аспект на более позднем этапе этапе обучения. А я говорил о первоначальном обучении именно основам программирования, они должны быть низкоуровневыми (в плане парадигмы), отсюда стиль ассемблера. Это не имеет ничего общего с энтерпрайз-кодом.
36 2410064
>>09982

>паскаль


>энтерпрайз


Мы точно про один и тот же паскаль говорим?
37 2410085
>>09950

>Оторован от реальности


Так и ассемблеры твои тоже оторваны от реальности нахуй.
38 2410411
>>10085
реальности вообще не сущесвтует
солипсист в треде все в симулякры
39 2410529
>>10411

>реальности вообще не сущесвтует


В 99.99% случаев так и есть, потому что большинство людей - идиоты, а значит живут в манямирке. Для идиотов реальности не существует, их реальность построена их шизой. А настоящую, реальную реальность, видят только мудрые люди, но таких очень-очень мало.
40 2410759
>>10411
Не знаешь матчасти
@
Начинаешь пиздобольствовать и философствовать
41 2410966
>>09552
Нуээ, если задача стоит обучить спецов программировать железо, то надо им давать какой-нибудь здравый ассемблер (мипс) и потом полировать это си как удобным макроассемблером. А если надо обучить решать задачи на компьютере, то незачем эти ассемблеры (1% сам придет к этому), пусть мыслят в терминах zip, join, регулярочки.
42 2410990
>>10966

>если задача стоит обучить спецов программировать железо


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

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

Понимаешь, эти два подхода совсем разные. Если с нуля пичкать макакингом, коверкается разум и к нормальному программированию сложно будет прийти.
43 2411002
>>10990

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


А что такое правильное понимание и зачем оно.

> Основание - предположение что язык си (данный тред) для такого существует, как техническая специальность, а не как офисный макакинг.


Язык не специальность.

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


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

> к нормальному


Ну вот опять. Умение решать задачи на ЯВУ (не си) оказалось макакингом и ненормальным программированием.
44 2411155
>>11002

>А что такое правильное понимание и зачем оно.


>>09552
Всё исчерпывающе расписано, читай. Или если не можешь, не отвечай, это не диалог.
45 2412025
>>05456
>>05456

>не модернизировать переменную по указателю?



Т.е. сделать структуру с нужными значениями и передавать её по указателю? Хорошая идея, учитывая, что объект в моём случае будет на стэке. Точно лучше кучи и глобальных переменных.
46 2418169
Хелпаните по сокетам.
Есть несколько адресов и один порт. На все это дело шлется udp инфа с сервера, и есть клиент который читает данные с этих сокетов каждый в отдельном треде
Че я делаю: создаю для каждого треда отдельный сокет, ставлю setsockopt опцию реюза для порта, бинжу адрес INADDR_ANY и моим портом, потом ставлю setsockopt опцию с адресом уже конкретным
Собсно я че то не так делаю или в логике какая то проблема? Потому что у меня каждый тред читает все адреса вместо одного конкретного
16567036063550.jpg28 Кб, 334x506
47 2419537
>>18169

> адрес INADDR_ANY

48 2419734
>>19537
А по раньше написать не мог? Странная хуйня вообще, я же в следующих строчках подписываюсь на разные мулькаст группы, он не должен ничего читать с any
По крайней мере поведение такое, что одиночный сокет не читает инфу с забинженнным адресом any или конкретным и не подписанным на группу, а два подписанных на конкретные группы с забинженным any читают все подряд
Довольно противоречиво устроено, не?
49 2420569
Это тред про аниме? Не подскажете, хочу записывать события с устройства ввода, затем немного изменяя их отправлять окну программы, ах да, система X11. Смогу я это всё сделать средствами xlib? Или лучше записывать через usbmonitor и делоть драйвер, эмулирующий устройство ввода?
50 2422929
char someArray[const]
Серьезно?
51 2422954
>>22929

>Серьезно?


Что не так?
52 2422980
>>2399452 (OP)
Пердиксы дореволюционные, как оно пишется на этом древнем говне в 2022м году?
53 2422991
>>22980
На этом "древнем говне" до их пор пишутся драйвера и прошивки, чтобы ты своих гномиков мог по экрану гонять.
54 2423013
>>22991
Справедливо.
55 2423034
>>22954
Даже при том, что я знаю про прикол a и [a]i, никогда бы не подумал, что именно там написано.
56 2423035
>>23034
О чем ты вообще?
57 2423037
>>23035
char someArray[const]
58 2423041
>>23035
Точнее так
void foo(char someArray[const])
59 2423042
>>23041
Хабр сегодня читал?
60 2423043
>>23041
>>23037
Так, а возмущение в чем? Лично я ничего криминального не вижу.
61 2423044
>>23043
Понятно.
image.png80 Кб, 251x201
62 2423046
Требую пикрил в шапку.
63 2423051
>>23044
Так, что понятно. Ты можешь человеческим языком обьяснить?
64 2423054
>>23051
[const]
65 2423066
>>23054
Бля, не пойму что не так. Или ты думаешь, что const к типу относится, лол? В данном примере const - это переменная, скорее всего, целочисленного типа. В Си констранты только через #define определяются. Замени const на любое другое название в своем примере и ничего не изменится.
66 2423087
>>23046
А поч так шакально
67 2423092
>>22929
Ты к нам с курсов яндекса пожаловал или че?
dfdfff.png12 Кб, 798x498
68 2423103
Господа, проблема следующая: в коде под линух меня заебало под каждым вызовом linux api функции (read, write, send, recv, select и тп) вставлять проверку на errno == EINTR (прила юзает setitimer(), поэтому эти EINTR реально происходят)
Мне бы хотелось написать универсальную враппер-функцию, которая в качестве аргумента будет получать адрес адрес linux api функции, вызывать её с переданными параметрами (разное количество), проверять результат на -1 и если errno == EINTR то вызывать заново.
Трабла в том, что я не понимаю как неизвестное количество аргументов во враппере прокинуть в вызываемую api функцию
Это вообще реально сделать не используя макросы ?
1523069502422.png16 Кб, 1235x109
69 2423121
>>23066

>Или ты думаешь, что const к типу относится, лол?


Представь себе, именно об этом и пост. Серьезно?
70 2423167
>>23103
Автор виснущего говна, ты?
Испольщуй маски и SA_RESTART
71 2423323
>>23121
Пиздец, никогда такой ебалой не пользовался. Век живи, век учись.
У тебя указатель на массив carray получается константным, а вот carray[] уже изменять можно.
72 2423405
>>23103
Я бы несколько inline функций сделол вида eintr_wrapper_n, где n - число параметров, или подобные макросы если <C99, и не ебал бы мозг с типо красивым решением. Просто и понятно.
73 2423824
>>23323
Это ведь кал из С99? Там еще можно char a[static 3]
74 2424045
>>23167
Забыл добавить, что этот враппер в случае выпадения из api по EINTR вызывает функцию, которая чекает флаги, устанавливаемые обработчиками сигналов и выполняет определенные действия, поэтому сигналы с SA_RESTART не катят. Мне нужно ловить эти моменты с EINTR и вызывать ProcessSignals()

>Автор виснущего говна


Причем тут "виснущего говна", хочешь сказать что вызов API может начать бесконечно нонстопом выкидывать EINTR ? Схуяли?
>>23405
Мм, ну тогда уже проще один макрос с ##__VA_ARGS__ сделать
75 2424238
Анон, скажи, как в Си корректно без Undefined Behaviour прочитать данные по адресу 0?
Приведение нуля к указателю: int p = (int )0x0; приводит к тому, что такой указатель становится нулевым. По стандарту разыменование нулевого указателя вызовет Undefined Behaviour.
Я правильно понимаю, что средствами языка Си без Undefined Behaviour невозможно прочитать данные адресу 0x0000?
Если что, то по адресу 0x0000 находится таблица векторов прерываний.
76 2424244
>>24238
По стандарту NULL не обязан физически состоять из одних нулевых бит, а что должно находиться по адресу 0 зависит от процессора и его режима работы.
А так можешь поиграться с mmap_min_addr
77 2424248
>>24238
Это физический адрес. Смотри на /dev/mem
78 2424507
>>24244

>По стандарту NULL не обязан физически состоять из одних нулевых бит


По стандарту присваивание указателю нуля делает его нулевым указателем. А нулевой указатель не может быть разыменован без ЮБ. Следовательно, невозможно написать корректную программу на Си для чтения данных по адресу 0.
79 2424869
>>24507

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


Можно.

int ∗v = ∗(int ∗)NULL;
и
int ∗v = ∗(int ∗)0;

Это 2 разных кода, которые делают разные вещи.
80 2424927
>>24869

>Это 2 разных кода, которые делают разные вещи.


Нет, одинаковые. В обоих случаях на выходе получаются нулевые указатели.
81 2425122
>>24927

>В обоих случаях на выходе получаются нулевые указатели.


NULL не является указателем на нулевой адрес.
Capture.PNG2 Кб, 160x69
82 2425130
>>24869

>Это 2 разных кода


Одинаковый код.

И проблемы нет. Если адрес 0 есть, он разыменуется, иначе будет ошибка доступа например.
83 2425143
А вы можете решить задачку на палиндром?
84 2425145
>>25130
Ты наверное думаешь что и char везде 8 бит?
85 2425146
>>25143
Я уже решил на крестах, однострочник.
86 2425162
>>25146
Вы приняты, оставайтесь на линии.
87 2425663
>>25122
Не важно чем там является NULL.
Присваивание нуля значению указателя на выходе даёт нулевой указатель. У нас никак не может получиться нулевой адрес, потому что присваивание нуля на выходе всегда превращает указатель в нулевой.
>>25130
Код одинаковый, но проблема есть: разыменовании нулевого указателя — это UB.
88 2425696
>>25663

>проблема есть: разыменовании нулевого указателя — это UB.


В чём заключается проблема?
89 2425703
>>25696
Я хочу написать программу программу на Си без UB, которая читает данные по нулевой адресу.
Однако средствами Си сделать это невозможно.
90 2425717
>>25663
>>25696
>>25703
Ситред август 2022 года, аноны не знают определение NULL и чем он отличается от 0.
91 2425719
>>25703
Я не спрашивал о желаниях, а спросил в чём заключается проблема.

Если что,

>"я захотел <что-то>, и невыполнение сего это проблема"


нет, это не проблема.
92 2425866
>>25717
Проиграл.

мимо 1сник
93 2429602
Как правильно аллоцировать память для многомерного массива? Я конечно понимаю, что всё в общем случае есть смежный/разреженный одномерный массив, и потому можно взять n1 x n2 x .. x nk памяти. Но ведь нужно ещё куда-то указатели нижних порядков записывать.
94 2429869
>>29602

>Как правильно аллоцировать память для многомерного массива?


Для маленьких кусков памяти malloc(a b ... * z).
Для больших кусков памяти malloc(a) for (i < a) malloc(b) for (j < b) ...
95 2429870
>>29869
Test *
97 2430260
>>29887
Прверь пути в свойствах.
98 2430346
Объявляем матрицу 3х3 (к примеру)

int A[3][3] = {...};

main (){

/∗
передаём массив в функцию func (int∗∗, ...)
∗/
func (A,...);

}

Проблема: если в gdb просто вывести (int∗∗)A, то получим некоторый указатель. Если разыменовать как A[0],
то получим тот же (!!) указатель. А если ещё раз разыменовать A[0][0], то как и должно
быть получим нулевой элемент матрицы. Я нихуя не понял эти чудеса, лол.

Если уже в самой функции разыменовать A как (int∗)(A[0]), то получим невалидный указатель,
скастованный из элементов первого ряда матрица
99 2430361
>>30346
Все вроде верно.
А[0] это первый указатель на массив из трёх интов.
Почему не валидный, там и должен быть первый ряд.
Screenshot(1).png37 Кб, 452x140
100 2430387
>>30361
Непонятно то, что A в мэйне указывает сам на себя. Т.е. A указывает и на начало всего массива из девяти элементов, и сам на себя. Приэтом A[1], A[2] это указатели на два других ряда. Я наверное совсем не понял, как работают декларации многомерных массивов.
101 2430406
>>30387
Да, наверное, всё так и есть. A[][n] это не тоже самое, что и ∗∗A.
В первом случае, как я и понял, это начало смежного одномерного массива, который компилятор рассматривает как n равноразмерных массивов; а во втором случае - указатель на массив указателей, которые в свою очередь указывают на одномерные массивы и необязательно смежные.
В чём я не прав?
102 2430509
>>30361
Это одна из особенностей языка Си, что "матрицу", размещенную в стеке, надо в заголовке функции прописывать как A[][M], то есть количество столбцов должно быть константой, а вот на количество строк может быть любым, лишь бы памяти хватило. А вот если бы ты память аллоцировал для указателя int A, то подобное бы сработало, почему так, если честно не знаю, интересно бы было послушать экспертов
103 2430547
>>30387

>Т.е. A указывает и на начало всего массива из девяти элементов


Из трёх. У тебя массив из трёх массивов. Т.е. реально у тебя в памяти 4 массива, три с интами, и один с указателями на эти три.
104 2430562
>>30509

>надо в заголовке функции прописывать как A[][M], то есть количество столбцов должно быть константой,



Это же проблема или нет? Ведь тогда сигнатуру функции, работающий с матрицами нельзя сделать под параметризируемый размер.

>>30547

>и на начало всего массива из девяти элементов



Я имею ввиду, что int A[][3] указывает на начало непрерывного массива из девяти целочисленных элеметов, а не указателей.

>Т.е. реально у тебя в памяти 4 массива, три с интами, и один с указателями на эти три.



Ну если верить отладчику, то нет. Только указатель и девять элементов int. А вот для int ∗∗, будет всё именно так, как ты описал.
Но декларировать матрицы таким образом не получится. Придётся брать память и хранить где-то размеры матрицы.
Вообщем как я понял A[][] это больше для компилятора, в рантайме никакого массива с указателями не ряды не будет.
Зато такой способ должен экономить память, поскольку есть только один массив и указатель на него, внезависимости от многомерности.
твиттер-6124395.jpeg101 Кб, 811x967
105 2430709
>>30562

> Это же проблема или нет? Ведь тогда сигнатуру функции, работающий с матрицами нельзя сделать под параметризируемый размер



Но можно же передавать одномерный массив типа A и две переменные, n и m, а потом умножением соответствующих индексов получать место, которое занял бы элемент в двумерном массиве...
106 2430714
>>30709

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


A[1][2] и A[2][1] будут на одну и ту же ячейку памяти указывать...
107 2431447
>>25717
Махровый сишник с бородой не знает что такое макросы и верит в разницу между нулевым указателем и нулевым указателем.
108 2431942
>>31447
Толсто.
109 2432014
>>25717

>не знают определение NULL



#define NULL 0
110 2432358
>>32014

> #define NULL 0


Вот именно
И этот сишник с чего‐то вдруг решил, что есть разница между:
int p = NULL
int
p = 0
И говорит, что второе — это нулевой адрес. В этих двух случаях на выходе возникает нулевой указатель.
На си мы в принципе не можем получить нулевой адрес.
111 2432503
>>32014
>>32358
В стандарте есть строки, которые говорят о том, что NULL всегда является 0? Там есть строки, которые говорят о том, что чтение/запись именно по адресу 0 неопределено?
112 2433796
>>32503
Да не важно чем там является NULL.
Важно то, что при присваивании 0 указателю получается нулевой указатель, а не нулевой адрес.
113 2434024
0 можно использовать везде, где можно NULL (о прототипах функций не забываем только).
114 2436835
Для арифметики указателей есть только один способ в виде каста к uint_ptr?
115 2443766
Это последний тред по си?
16612361059620.png77 Кб, 1080x616
116 2444579
Копаюсь в реализациях протоколов TCP/IP, и тут есть такой код, как на пике. Зачем так написано, я нюфак и у меня глаза ломаются от такой записи?
Мб я вообще не так понимаю эту запись?
117 2444821
Посоветуйте библиотеку для реалтаймового отслеживания звуковых паттернов в создаваемом 3д парти программой аудиопотоке.
Проще говоря, хочу отслеживать аудиопоток на предмет определенных частотно-амплитудных характеристик (например превышение порога 70дб на частоте 10345Гц и 8212Гц одновременно), чтобы автоматически выявлять звук сирены, и использовать затем в качестве триггера
Понятно что это всё делается на фурье, но мб уже есть что-то годное и готовое
118 2444887
>>44579
Нельзя.
119 2444942
>>44579
>>44887
а чё будет если DSIZE не делится на 4?
120 2444949
>>44887
Почему? Синтаксически неправильно чтоли?
Я ведь в двух случаях указываю адрес первого элемента массива.
121 2444973
>>44949
1. Передача первых 32 бит из массива.
2. Передача указателя на массив.
122 2444978
>>44973
Бляя, я долбоеб, а ведь правда. Сук, до этого вообще таких записей не видел, в учебнике Праты нет раздела, где объясняется как читать такое?
sage 123 2445378
На мейлаче кто-то вообще работает на сишке не за мамкины борщи и не у с дедами в нии за рыбную котлету?
124 2445481
>>45378
Тебе зачем?
sage 125 2445566
>>44821
Бамп...
126 2448982
У компилятора есть возможность, подобно флагу -D, но наоборот, передать информацию из кода - компилятору? Например, флаги компиляции.
127 2448985
Нужно дать префикс подключаемым библиотекам, в путях -
#define MY"../path/to/"
#define MYINCLUDEMY"file.c"
#include MYINCLUDE
Компилятор ругается -
1. warning: extra tokens at end of #include directive
2. fatal error: ../path/to/: No such file or directory
128 2448991
Как перейти от K&R в написание драйвера?
Ну то есть я могу в циклы и в структуры
129 2448992
>>45378

>На мейлаче кто-то вообще работает на сишке не за мамкины борщи и не у с дедами в нии за рыбную котлету?


У программиста си зарплата как у продавца одежды
Screenshot20220830081610.png97 Кб, 880x773
130 2449868
>>48991
Прочитать один драйвер и одно описание устройства.
image.png31 Кб, 894x184
131 2450034
>>44579
Неси сразу соурс код, долбоёб. На пике у тебя непонятно нихуя чё ты скопировал.
15682022204070.png65 Кб, 414x368
132 2450036
>>09950
>>09950

>Нужен просто нормальный язык похожий по структуре на ассемблер


Уже есть smalltalk, но он наебнулся от виртуальности и контора его запилившая пошла по миру. Хотя спустя 50 лет до сих пор не могут допилить программинг до ТОГО уровня. Жаль что он пиздец медленный. А так да, C++/С это то ещё донное говно, но выбора нет, жрать приходится в три горла.

За ФП вообще убивать надо. Я бы анально запретил ФП программирование вне прототайпинга. Но это лишь рассуждения.
image.png181 Кб, 1584x941
133 2450148
Замутил себе локальную документацию на STL кек.
134 2450423
Хочется задать вопрос, но тред плавает между мирами. За что наказан СИ, что его нету в каталоге программача? Адепты раста зловредствуют?
изображение.png160 Кб, 699x687
135 2450425
Bwer43gko4nb0adgfdcv.jpg92 Кб, 750x522
136 2450443
>>50425
А у меня пустая страница, когда тыкаю на СИ в списке. При этом остальные страницы работают правильно. Скрин пустой страницы не стал делать. Ну просто без таких табличек, и всё.
137 2450461
Прочитал на вики про обратные вызовы (callback) и ничего толком не понял. Понял только, что у функций есть свой адрес. А зачем это нужно и как это работает?
Где можно подробнее про это прочитать?
138 2450484
>>50461
Не надо ничего понимать, мань. Если ты не понял, то это не для тебя.
139 2450517
>>50148
ручками парсишь сорцы или как?
140 2450549
>>50484
Откуда ты тут такой агрессивный, что тебя проткнуло?
141 2450708
>>50034
Так мне непонятно было что передается в функцию, сурс тут нах не нужен был.
142 2450930
А нахуй вы какое говно пишете? Почему не можете операционку с нуля осилить?
143 2450935
>>50423

>Адепты раста зловредствуют?


Раст и Си - друзья на века, лол. Пока что все ОС и системные библы написаны на Си, то от него не отказаться.
144 2454206
>>50935
Золотые слова
145 2455186
Анон я заебался. Может у меня gcc багованный? Как state может быть не 0 или 1? Что его заставляет становиться 2 и даже 3?
https://pastebin.com/tu4Rmh5v
146 2455196
>>55186
Сука.
147 2455371
>>55186
А что такое
int w[0];
?
148 2455434
>>55371
Я думал это формальность, объявлять количество элементов в array. Думал, при вызове элемента он автоматически создается и все. Но походу это баг и вызывало. При обращении к w[1] например происходит обращение к state вместо этого.
149 2455442
2022. Си тред, итоги.
150 2455448
>>55186
госпаде спаси и сохрани
151 2455707
>>55186

>код без отступов, форматирования и в одну строку

152 2455785
Парни, а можете для человека не особо разбирающегося ответить, что такое zero runtime и какие преимущества благодаря этому есть в Си. Заранее спасибо!
153 2457896
Есть один K&R и в самом начале есть пикрил упражнение. Проблема в том, что getchar() не читает backspace в windows 7 cmd вообще.

C ходу на ютубе нашел https://www.youtube.com/watch?v=l3bXLhAEtxI
чел тоже час гуглил и видно, что многие застревают здесь, в гугле куча постов находится.

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

Или таки есть решение? При условии, что можно использовать только те инструменты с которыми K&R нас успел познакомить до этого упражнения.
154 2458372
>>57896
ты тама руками вводишь чтоли? пайпай инпут из файла
155 2458418
>>58372

>При условии, что можно использовать только те инструменты с которыми K&R нас успел познакомить до этого упражнения.

156 2458536
>>57896

>что можно использовать только те инструменты с которыми K&R нас успел познакомить до этого упражнения.


Ну так скачай совместимый с С компилятор С. В юниксе такой есть из коробки.
157 2458613
>>58536
Я юзаю gcc под виндой. На линуксе getchar() просто будет читать backspace?
158 2458639
>>58613
Направь файл в stdin, тогда прочитает.
159 2458775
Там Столлман выпустил свою книгу по GNU C. Любителям gcc может понравится.
160 2458839
.post__images {
visibility: hidden;
};
1978619.jpg518 Кб, 2048x1365
161 2458984
Сап программач. Есть годный материал по односвязным / двусвязным спискам, словарям и хэш таблицам, с особенностями их реализаций на си и различных методов сортировки. По статьям, найденным в гугле, как-то отрывочно и тяжко даётся.
162 2458985
>>58984

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


знак вопроса забыл
163 2458999
>>58984
Если совсем база нужна то у Праты в учебнике уделено несколько глав спискам.
164 2459065
>>58984
Смотри в предыдущем треде, я там кидал сцылку на гитхаб с алгоритмами на сях.
П 165 2459308
>>58984

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


sys/queue.h

>хэш


hcreate.c
ohash.c
(Курить Кнута, чтобы понять, что там не так)

>различных методов сортировки


wikipedia
166 2459568
А че вы спрятались?
167 2460378
Есть нормальная документация по написанию аплетов для мейта?
1662905513301.jpg130 Кб, 528x604
168 2460445
есть видеокурсы нормальные какие-нибудь? собираюсь на торренте купить, а то почему-то очень трудно на книгах фокусироваться
англ знаю
169 2460472
>>60445

>видеокурсы


>язык с 30 функциями в стдлибе и 5 кейвордами.

171 2460559
>>60472
Как раз для такого языка и имеет смысл делать видеокурс.
173 2461095
>>59308

>косяки


Какие конкретно, лол?
дед 174 2461344
>>61095
В ohash.c вот этот пиздец
incr = ((hv % (h->size-2)) & ~1) + 1;
можно заменить на incr = (hv >> 16) | 1
работать будет быстрее.
175 2461941
Какие есть гнутые проекты, которые не состоят из лапши кода?
176 2464082
>>2464081 (OP)
Перекат
177 2464097
>>64082
Нахуя перекатывать при 176 постах?
178 2464098
>>64097
1. Тред без тега.
2. В треде неправильный счет, он 74, а не 73.
3. Тред умер.
179 2472970
>>64098

>3. Тред умер.


В этом ты прав
Screenshot from 2022-09-27 22-11-59.png15 Кб, 485x181
180 2475965

>писать не на лиспе


>не пытаться задефайнить хоть какой-то адекватный синтаксис


лольский
181 2482621
>>64098
ебучие трансы с растотреда мечтают убить си
и для начала решили убить тред по си таким подлым способом
хуле еще от пидарасов ожидать
182 2482734
>>82621
просто все байтослесари уехали на донбасс прямо с завода
постить в тред некому
183 2482735
ьуъ сука
предлагаю пойти в растотред и насрать там
184 2482736
>>82621

>АСМ тред мертв


>Си тред мертв


>Тред про крестам мертв


>Рряяя тупые растаманы


Пиздец ты дегенерат, а перекатывать и писать в треды тоже растаманы запрещают?
185 2482942
>>82736
как блядь писать в тред, я еле его нашел. тег отъебнул

> Пиздец ты дегенерат


иди в жопу
186 2482943
>>82734
господь забирает лучших
187 2483011
>>82942
А в чем виновны растоманы, если Макабу с разметкой сломал Абу, а не перекатили Сишники?
188 2485886
Анончики, а насколько сложно для ардуино или малинки пописать что-нибудь? Ну там лампочкой помигать, температуру с датчика считать и всё в таком духе? Поучил чисто для общего развития сишечку по книжкам, потрогал её в идешке, хочется проектик написать но идеи только из эмбеддед сферы есть ну не круды же писать в самом деле
189 2485987
>>85886
Базового уровня сишки хватит. С ардуинками и контроллерами нужно больше знаний о конкретном устройстве или хотя бы ориентироваться в документации и понимать где что найти.
Задачка 190 2486446
Ку. Нашёл себе интересную задачу. Сразу вопрос: это можно сделать на С?

Мне нужно реализовать обратную рекурсию. Это означает, например:
У меня есть функция f, в этой функцие есть функция g, а в функции g визывается f. Все это нужно для перебора дерева.
Объясню на примере дерева:
У меня есть дерево U. Оно состоит из v1, v1... В части дерева v1, есть 2 елемента a1 и само дерево U.

Это реализуемо на Си?

P. S. В логических языках это возможно. Это типо математически.
191 2486613
>>86446
На Си всё возможно.
Можешь более формально описать?
192 2486615
>>86446
В чем проблема то? Пока стек не переполнится все будет работать.
193 2486628
>>86446

>Это реализуемо на Си?


Да

void g(); // Теперь можно вызывать g, хотя она ещё не определена

void f() { g(); }
void g() { f(); }
194 2486705
>>86696 (Del)

>День, когда сдохнет последний кодосёр на Сишке, станет праздником человечества.


Т.е. когда везде будут распространены процессоры, жрущие джавовский байт-код?
195 2486709
>>86705
Жаба это кринж, будет встроенная CLR пердолить шарповый код в процессоре со встроенными анальными зондами от майкрософт.
196 2487026
>>2399452 (OP)
Аноны, а с++ тред тут ? Не могу найти.
197 2487086
198 2489731
1475017599image.jpg83 Кб, 1280x720
199 2491496
>>2399452 (OP)
Анонимы, я прошу, скиньте пожалуйста гит репозиторий одного чувака, который расписал весь свой многолетний путь в Си, какие технологии учил, что знает, прежде чем он начал успешно проходить собесы. Там было куча примеров (а может и не было), короче дохуя подробно расписано какие технологии выучил в течении нескольких лет.
Бля, ну такой охуенный гит был и я его проебал.
Я помню точно, это был гитхаб, и там был длинный ридми файл.

Мне просто завтра на собес.
200 2491547
>>2399452 (OP)
Увожаемые!
На Си вообще работа есть? Кроме какого-нибудь убогого инжиниринга в бесполезном НИИ за 15к?
image.png63 Кб, 892x207
201 2492707
хихихихих
202 2492830
>>91547
Дваждую вопрос этого анонима. На hh все плохо.
203 2493007
>>91496

>Мне просто завтра на собес.


Ну как прособеседовался?
205 2493139
>>93007
Кстати, довольно неполохо!

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

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

>>93061
Спасибо, но я сам нашел, вся суть описана в ридми на главной:
https://github.com/jwasham/coding-interview-university

И вот кстати тоже неплохое нашел, пока рылся по гитхабу.
https://github.com/arorarahul/C-programming-for-interviews
206 2497365
>>91547
Есть, гугли IoT (уже почти нет), OS, Linux kernel, сетевые технолологии. Платят от 150 до 250
207 2497609
>>97365
Полторы вакансии на всю Россию.
208 2497616
>>97609
Ну сейчас рынок просел,но мне ещё по сетям пишут. А ещё знай С++. Не надо выучивать тыщи либ, но я всегда говорю "С++ немного знаю, приходится часто разбираться, но мой основной язык это Си".
Тред утонул или удален.
Это копия, сохраненная 24 декабря 2022 года.

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

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