М.Двач / Программирование

Двач.hk не отвечает.
Вы видите копию треда, сохраненную 26 ноября 2015 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

39 Кб, 400x512

21 Июл, 18:09 #518562 В конец треда | Веб

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

Ответы: >>518704, >>519389, >>519883, >>520078, >>523029

21 Июл, 18:25 #2 #518572

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

21 Июл, 19:46 #3 #518635

win в /pr/ не обсуждают, вот и весь сказ.

21 Июл, 20:26 #4 #518660

Вот насчет кармы это ты очень верно сказал
Си - это печать на всю жизнь
Освоил c#, python, erlang, haskell, go
А работа все равно уже 16 лет находится только на си и иногда на крестах
Все это мое "саморазвитие" нахуй никому не нужно
Прям хоть профессию меняй

40 Кб, 360x360

21 Июл, 21:05 #5 #518704

>>518562
Сидел в туалете, думал над твоим вопросом... Я вижу такой путь развития:

1) Читаешь K&R
2) Накатываешь FreeBSD
3) На няшной пишешь свой вариант утилиты dd, поглядывая в исходники оригинала при необходимости (https://svnweb.freebsd.org/base/release/10.0.0/bin/dd/). Если ты еще совсем нуб в Си - пишешь сперва эту: https://svnweb.freebsd.org/base/release/10.0.0/bin/mkdir/
4) Теперь пора делать проект средней сложности. Например накати иксы (gnome2 какой-нибудь) и с использованием gtk напиши какую-нибудь альфа-версию эмулятора некроприставки вроде NES. Чтобы можно было поиграть в марио без звука. Попутно осваивая потоки, работу с графикой через анальные прокладки GTK.
5) Сделал? Ты охуеннен. Ты уже можешь начать читать вот это http://www.osrtos.com/ с пониманием того, что тебе больше потребуется. Параллельно изучай спрос на рынке труда на различные мощные микроконтроллеры и необходимые применения.
6) Заказываешь отладочную плату подходящего тебе МК, например на пикриле распространенная плата ARM Cortex-M3 от NXP.
7) Портируешь на какую-нибудь RTOS свой некроэмулятор NES.
8) Выкладываешь на ютуб работу устройства чтобы потешить ЧСВ (хотя даже этим там уже никого не увидишь).
9) Начинаешь обивать пороги автомобильных, промышленных компаний, производителей бытовой техники, и прочих.
10) Работаешь в Рашке, тут главное не сдаться и не начать писать селекторы каналов для телевизоров Рекорд на 8-битном winchip до конца жизни.
11) Сдаешься в Корею в самсунг. Профит.

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

Ответы: >>518712, >>519390, >>519884

21 Июл, 21:11 #6 #518708

А что, еще остались контроллеры без крестов?

179 Кб, 500x468

21 Июл, 21:16 #7 #518712

>>518704
> gtk

Ответы: >>518731

21 Июл, 21:30 #8 #518720

C (няшная сишка) - самый простой и убогий язык из тех, что используются на практике. Более убогий - только брейнфак. Единственное выразительное средство - копипаст, для автоматизации которого есть даже специальный второй язык-препроцессор. Делает решение любой задачи нетривиальным, так что его решение задач с его помощью может требовать высокой квалификации. Тем не менее, типичная няшаблядь ничего не знает и не умеет. Даже дибиловатый обгвидок знает, помимо гвидопыха, еще и сишку, но сишкаблядь не знает ничего кроме нее. Языком владеют почти все, но только няшаблядь этим знанием гордится, остальные стыдливо скрывают. Также няшаблядь может ошибочно считать что знает C++ или несуществующий язык C/C++. Благодаря C компьютерные программы - самое ненадежное из всего созданного человеком.

Ответы: >>518728

215 Кб, 468x500

21 Июл, 21:41 #9 #518728

>>518720
> Благодаря C компьютерные программы - самое ненадежное из всего созданного человеком.

21 Июл, 21:44 #10 #518731

>>518712
Да что не так с жтк? Мне хоть один кутепидор может уже прояснить или нет?

Ответы: >>518732, >>518734, >>518830

21 Июл, 21:49 #11 #518732

>>518731
Gtk - самый лучший оконный фреймворк для C.
Потому что других нет.

Ответы: >>547722, >>554316

21 Июл, 21:51 #12 #518734

>>518731
> Да что не так с жтк?
Оно не написано на смолтоке.

21 Июл, 21:57 #13 #518740

Указывать сиблядям на проблемы языка бесполезно. Кроме сишки сиблядь нихуя не знает и не умеет, а на любое обвинение у сибляди есть универсальный ответ - "криворукость". Этим сиблядь как-бы намекает, что что все вокруг криворуки - т.е. сотрудники микрософта и интеля, пишущие кривые драйвера и библиотеки, прыщебляди, пишущие дырявое ведро своей системы вот уже не первый десяток лет, просто другие сибляди из соседнего подвала полусвовковой шаражки, в которой сиблядь работает. А вот сама сиблядь - сука граф Шарль Ожье де Бац де Кастельмор д’Артаньян среди педерастов, владеющий техникой левитации, предсказания будущего и написания небыдлокода на сишке. К сожалению, простым смертным едва ли не удастся увидеть творения сенсея, так и будут они работать с глючным говном криворуких интелевских и микросовтовских инжеренов, внезапно падающим от какого-нибудь buffer overflow, несмотря на зиллионы человекочасов, проёбанных на его тестирование и отладку.

93 Кб, 720x499

21 Июл, 22:00 #14 #518744

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

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

Ответы: >>518754, >>518831

19 Кб, 388x257

17 Кб, 485x424

38 Кб, 1680x1260

21 Июл, 22:11 #15 #518754

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

> Кроме сишки сиблядь нихуя не знает и не умеет

Ответы: >>518760

15 Кб, 200x221

21 Июл, 22:14 #16 #518756

Ну и Фортран еще, хотя это и говно мамонта.

40 Кб, 604x601

Аноним 21 Июл, 22:18 #17 #518760

>>518754
> 1. forth
> сейчас сейчас, еще неделю, я форт-систему уже почти совсем дописал
> 2. виртоговно
> сейчас сейчас, еще недельку, я собиратель мусора на стеке допишу
> 3. петухан-куриханыч
этот язык пока да, не знаю и не умею. У него есть библиотека времени выполнения

Ответы: >>518762

21 Июл, 22:21 #18 #518762

>>518760
> У него есть библиотека времени выполнения
Надо полагать, сишные printf и malloc являются инструкциями процессора?

Ответы: >>518765

Аноним 21 Июл, 22:21 #19 #518763

http://www.reddit.com/r/rust/comments/2lfbk3/help_me_understand_why_rust_binaries_are_so_large/
Собственно, хит эрат демонстрандум. Roost не смог стать еще толще и вытек из треда.

Ответы: >>518767, >>518769

Аноним 21 Июл, 22:22 #20 #518765

>>518762
> Надо полагать, сишные printf и malloc являются инструкциями процессора?
Это СТАНДАРТНАЯ БИБЛИОТЕКА языка Си, но не библиотека времени выполнения. Программу без стандартной библиотеки написать на языке программирования можно, без RTL нет.

Ответы: >>518770

21 Июл, 22:24 #21 #518767

>>518763
> 2015
> считать размер бинарника

Ответы: >>518768

21 Июл, 22:25 #22 #518768

>>518767
>2015
>Хеллоуворлд на мегабайт

Аноним 21 Июл, 22:25 #23 #518769

>>518763
ОСТАНОВКА
Петухан таки в деле, даже как-то удивительно.
http://www.reddit.com/r/rust/comments/2iwtjh/151byte_static_binary_for_x8664_linux_in_rust/
Кстати где-то там еще годебилы на хабре были, правда они изящнее поступили и просто не стали писать сборщик мусора, объявив его НЕ НУЖНЫМ.

21 Июл, 22:26 #24 #518770

>>518765
> CRT (C Runtime Library)
> не библиотека времени выполнения

Ответы: >>518771

Аноним 21 Июл, 22:28 #25 #518771

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

Ответы: >>518775

21 Июл, 22:33 #26 #518775

>>518771
Я шарпогосподин.

Ответы: >>518787

73 Кб, 507x623

Аноним 21 Июл, 22:50 #27 #518787

>>518775
Тогда не знаю, поймешь ты или нет, но вот. Видишь, нет библиотеки времени выполнения, маллоков и принтфов.

Ответы: >>547725

21 Июл, 23:19 #28 #518830

>>518731
>Да что не так с жтк?
Третья версия, например.

Ответы: >>518836

21 Июл, 23:27 #29 #518831

>>518744
>мэнглинг и RTL-то все равно есть
Мэнглинг не мешает, а без стдлибы вполне можно обойтись, так очень многие делают. На самом деле и без libc вполне можно жить - все равно обычно или при инициализации память берешь сколько нужно, или постраничными кусками. Так что без разницы, маллок дергать или сисколл. Работа с файлами через простенькую обертку, а больше ничего и не нужно по большому счету.

Ответы: >>518840

21 Июл, 23:31 #30 #518836

>>518830
Тебе не нравится цифра три?

Ответы: >>518841

21 Июл, 23:33 #31 #518840

>>518831
Удвою этого господина
>при инициализации память берешь сколько нужно, или постраничными кусками
На рубеже нулевых делали некий проект под freebsd
Быстро выяснилось, что стандартный malloc не использовал повторно освобожденные блоки
Короче в итоге так и обошлись - при старте делали sbrk на сконфигурированное значение, а управление кучей свое

21 Июл, 23:33 #32 #518841

>>518836
Мне не нравится, что гтк теперь практически гномолиба.

Ответы: >>518896

22 Июл, 00:39 #33 #518896

>>518841
Понятно. Очередные религиозные прыщефобии.

22 Июл, 11:51 #34 #519018

Почему в /зк всегда тонут (или же вообще не создаются) треды о языках программирования, которые мне интересны? Хочу чтоб был C-тред, Ada-тред и, может быть, Rust-тред. Ведь такой тип языков – это самые охуенные языки программирования же.

Ответы: >>519025

22 Июл, 12:12 #35 #519025

>>519018
> самые охуенные языки программирования
> байтоебское дерьмецо, осваиваемое за 2 дня
Посмотри го-тред к примеру. Обсуждать тупую элементарную парашу смысла нет, поэтому обсуждают Илюшу.

Ответы: >>519027, >>519033

22 Июл, 12:20 #36 #519027

>>519025
> осваиваемое за 2 дня
> подразумевая, что хаскель осваивать дольше

22 Июл, 12:40 #37 #519033

>>519025
Ada - элементарный язык? Ты ебанулся? Можно придумать и посложнее, конечно, но элементарным я бы не назвал.
Что касается C, то тут я тоже не согласен. Сам язык минимален, но для того, чтобы научиться писать на C надежный и легко поддерживаемый код, нужно времени побольше, чем 2 дня. И если в C нет "поддержки" ООП или ещё каких-то там возможностей в виде ключевых слов, то это не значит, что всего этого нет совсем, тебе точно также, как и с другими языками, нужно разобраться как на C правильно реализуются дженерики, рантайм полиморфизм и прочее. Зато простота и минималистичность самого языка дает преимущество в том плане, что сишный код всегда однозначно понятен, что сильно упрощает изучение чужого исходного кода.

Ответы: >>519350, >>519683

22 Июл, 13:18 #38 #519048

>чтобы научиться писать на C надежный и легко поддерживаемый код, нужно времени побольше, чем 2 дня
Ясен хуй - он ведь для этого не предназначен. Можно и ложкой бассейн вычерпать больше чем за 2 дня.
>как на C правильно реализуются дженерики, рантайм полиморфизм и прочее
Через нечитаемые костыли. Плавали - знаем.
>сишный код всегда однозначно понятен
Троллинг_ор_джаст_ступид.жпг

Ответы: >>519066

22 Июл, 14:07 #39 #519066

>>519048
>Ясен хуй - он ведь для этого не предназначен. Можно и ложкой бассейн вычерпать больше чем за 2 дня.
Суть в том, что на C научиться писать надежный и поддерживаемый код таки можно (см. успешные ОС), а такой же производительный на каком-нибудь хачкелле – нет.

>Через нечитаемые костыли. Плавали - знаем.
Нечитаемые костыли в C получаются, когда на него пытаются искусственно навесить слишком толстый слой абстракций, которого там не должно быть. Если рассматривать задачу всегда с практической точки зрения (то есть цель – то, как должна в итоге работать программа), то окажется, что все необходимое на C отлично реализуется, и не более многословно, чем в какой-нибудь джаве.

>>сишный код всегда однозначно понятен
>Троллинг_ор_джаст_ступид.жпг
Что не так?

Ответы: >>519074, >>519122

22 Июл, 14:36 #40 #519074

>>519066
> слишком толстый слой абстракций, которого там не должно быть
В самом деле, зачем нужны абстракции? Копипаст наше всё.

Ответы: >>519081

22 Июл, 14:49 #41 #519081

>>519074
Это как посмотреть. В C копипаст, так или иначе, всегда делает какую-то реальную работу, и при этом его в большинстве случаев возможно заменить на функции/макросы, или как-то ещё переструктурировать код, избавившись от большинства повторений; в то время как в какой-нибудь джаве, например, "абстрактная" иерархия классов там, где это не нужно, вполне может оказаться кодом, по сути вообще ничего полезного не делающим.

22 Июл, 16:13 #42 #519122

>>519066
> надежный и поддерживаемый код
> и не более многословно
Этот поехал уже в своем манямирке, уносите.

Ответы: >>519126

22 Июл, 16:19 #43 #519126

>>519122
Сравнивая с джавой. Там обработка исключений точно также занимает немалую часть кода.

Ответы: >>519127, >>519135

22 Июл, 16:22 #44 #519127

>>519126
http://ivansorokin.livejournal.com/58626.html

Ответы: >>519226

22 Июл, 17:00 #45 #519135

>>519126
> Сравнивая с джавой
С какой парашей еще сравним, м?

22 Июл, 19:53 #46 #519226

>>519127
Для такого есть goto.

Ответы: >>519276

22 Июл, 22:07 #47 #519276

>>519226
Для такого есть функции и в них циклы.
Открываешь все файлы, передаёт их на обработку, закрываешь — всего три функции.
Вызываются они внутри ещё одной функции.
Файлы будут закрыты в любом случае, т.к. в Сишке нет исключений, так что выполнение в любом случае приползёт к последней функции, закрывающей их.
Данный товарисч конечно же OCHE UMNY VIIYNOSHA но к сожалению он мудак.
Пiчальбида.

Ответы: >>519284

22 Июл, 22:33 #48 #519284

>>519276
А если надо подгружать файлы в рантайме, ммм?

23 Июл, 01:56 #49 #519350

>>519033
>правильно реализуются дженерики
мм, а как? я токо два варианта могу - на макросах запилить, тогда будет типизация работать по итогу, но отладка отвалитца
или на void*, тогда типизации не будет

Ответы: >>519360, >>519387

23 Июл, 03:07 #50 #519360

>>519350
C11 дает тебе еще один путь: делаешь копипастой сколько надо функций, а потом макрос с _Generic, который по типам аргументов выбирает нужное говно.
Правда нахуй это говно нужно кроме как "преобразовать в строку для печати" в толк не возьму. Ну да, есть еще трюки с "дефолтными аргументами", но это все настолько ненужно, что я прям даже не знаю.

Ответы: >>519387

23 Июл, 08:01 #51 #519387

>>519360
Нет. _Generic это про другое. Суть дженериков же как раз заключается в избегании копипасты. А _Generic+макрос ближе к оверлоаду (правда толку от него все равно нет).

>>519350
На макросах типа #define GENERIC_SORT(name, type, comp_func) самый лучший вариант я считаю. С отладкой проблем нет, т.к. тот же clang, выдавая ошибку, показывает не только на строчку с инстанциированием, но и кусок раскрытого макроса с ошибкой. Плюс всегда есть ключ -E, позволяющий целиком увидеть во что раскрывается макрос.

Ответы: >>519413

23 Июл, 08:06 #52 #519389

>>518562
Там тебе надо общий пррнцип понять, на примере каких-нибудь 8 ми битных микроконтроллеров.
RTOS не всегда нужна, для начала разберись как раьотает периферия.

23 Июл, 08:09 #53 #519390

>>518704
Полно заказов на разраьотку по под процы, только мало кто умеет.
Одна из реальных задач: FSK модем на msp430.

23 Июл, 09:39 #54 #519413

>>519387
> #define GENERIC_SORT(name, type, comp_func)
Ох уж эти костыли-костылики. Не говоря уже о том, что нет ничего более уёбищного, чем макросы на основе переписывания строк.

Ответы: >>519431

23 Июл, 10:09 #55 #519431

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

Ответы: >>519557

23 Июл, 15:31 #56 #519557

>>519431
То есть те же шаблоны ты можешь использовать непреднамеренно?

Ответы: >>519569

23 Июл, 15:41 #57 #519569

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

23 Июл, 19:45 #58 #519676

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

Ответы: >>519682

Си 23 Июл, 19:51 #59 #519678

Сишечка рулит, остальное - УГ

23 Июл, 20:11 #60 #519682

>>519676
Согласен. Веет чем-то настоящим. Но Java тоже пойдёт.

23 Июл, 20:15 #61 #519683

>>519033
> нужно разобраться как на C правильно реализуются дженерики, рантайм полиморфизм и прочее.
Няшная - это низкоуровневый язык, который нужен чтобы возить байтики в тележках. И точка.

Ответы: >>519685, >>519703, >>519719

23 Июл, 20:27 #62 #519685

>>519683
Хотя нет, это было когда-то там. Сейчас спецификации на всякие там кристаллы разрослись, одно Intel HD Audio чего стоит. Из-за этого начинают криво писаться драйвера, код плохо реюзается, каждому приходится разбираться заново. Так что эти ваши полиморфизмы с субтипами начинают быть все более нужными, даже в няшной.

Ответы: >>519691

23 Июл, 20:32 #63 #519691

>>519685
>Так что эти ваши полиморфизмы с субтипами начинают быть все более нужными, даже в няшной.
No thanks. У нас уже есть эталон кривизны - драйвера ATI (хотя и Nvidia не отстает), нового не надо.

Ответы: >>519695

23 Июл, 20:39 #64 #519695

>>519691
Эталон кривизны - это что-то из средневековья, этакое демонстративное устрашение темного люда.

Надо искать эталон прямизны, и, найдя его, пользоваться на здоровье и рассказывать другим.

Ответы: >>519697

23 Июл, 20:46 #65 #519697

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

23 Июл, 20:51 #66 #519700

Вот, как раз поясните: с развитием новых стандартов теперь есть ли возможность:
1) задать разрядность signed/unsigned в битах/байтах?
2) обрушить программу при переполнении целого?
Вопрос про стандарты самого языка, однако, про gcc отдельно тоже интересно.

Ответы: >>519705, >>519706

23 Июл, 20:55 #67 #519703

>>519683
>который нужен чтобы возить байтики в тележках. И точка.
И правильно - ведь компьютеры и предназначены для перевозки байтиков. Бойлерплейт из абстракций не нужен, особенно сейчас, когда закон Мура закончился.

23 Июл, 20:56 #68 #519705

>>519700
http://www.cplusplus.com/reference/cstdint/
https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html

Ответы: >>519713

23 Июл, 20:57 #69 #519706

>>519700
>задать разрядность signed/unsigned в битах/байтах?
#include <inttypes.h>
Там есть int8_t/uint8t/int16_t/uint16_t и так далее.
>обрушить программу при переполнении целого?
Насколько я знаю, в gcc нет такой фичи, только самопальные проверки. С ассемблерной вставкой полегче, но код превращается в нечитабельное говно:
add eax, dword ptr some_number
jo overflow_handler

Ответы: >>519707, >>519713

23 Июл, 20:59 #70 #519707

>>519706
Обосрался, не inttypes, а stdint.

23 Июл, 21:11 #71 #519713

>>519705
>>519706
Огромное спасибо. Про ассемблер знаю, жалко, что по-прежнему нет универсального способа.

23 Июл, 21:25 #72 #519719

>>519683
Не пойми неправильно, дженерики на макросах и динамик диспатчинг бывают нужны в сишке в первую очередь как средство достижения максимальной эффективности программы, но никак не ради абстракций или облегчения кодинга. Например дженерик сортировка в виде макроса + инлайн функция сравнения = ноль оверхэда, в отличие от того же qsort из стандартной библиотеки. Также иногда бывает необходимо работать через общий интерфейс с массивом указателей на разные объкты - соответственно прицепляем к структурам vtable'ы или просто указатели на функции, т.к. это тупо самый быстрый способ выбора реализации функции когда конкретный тип объекта заранее не известен.
Вообще я имел ввиду то, что изучить сишку (как и любой язык) - это ведь не только запомнить синтаксис, который действительно можно за 2 дня выучить. Многое, для чего в большинстве других языков имеется какая-то специальная фича, в C возможно сделать кучей разных способов, и нужно не так уж мало времени потратить, чтобы выработать самые годные техники для всех ситуаций.
Алсо да, сорт оф RAII при помощи goto (как тут выше заметили) - жизненно важная штука. Также всем советую еще всегда возвращать из функции код ошибки, а результат - через переданный параметром указатель, тогда можно делать
if (((rc = func1(...)) != 0) ||
((rc = func2(...)) != 0) ||
((rc = func3(...)) != 0)) {
switch (rc) {
//обрабатываем ошибки
}
}
это самый компактный способ выполнить ряд операций, которые могут зафейлиться и, в случае чего, обработать ошибки.
Всё это очень простые вещи конечно, но таки тоже требуют уделить им внимание при изучении языка.

Ответы: >>519737

23 Июл, 21:35 #73 #519728

Посоны, позвольте разбавить ваши интеллектуальные беседы своим дибильным вопросом.
Тоже байтоебствую с stm32, компилятор gcc.
Передаю данные на индикатор функцией, которая на вход получает указатель на строку. Соответственно надо знать когда строки кончаются. Функция strlen из string.h успешно работает. Но она порождает слишком много ассемблерного кода - НИНУЖНА.
Непонятно как вообще может быть определена длинна строки, если передается только указатель? Нуль-терминатор? Но оно же токо в плюсах?
Попытался найти код функции strlen, нифига не нашел. Но если проект собирается, очевидно она есть. Где её можно взять?

Ответы: >>519731, >>519735, >>519739, >>520799

23 Июл, 21:40 #74 #519731

>>519728
Нуль-терминированные строки есть не только в плюсах, они появились задолго до появления языков высокого уровня, лол.
Я вижу два варианта:
1) Можешь сам написать аналог strlen,там ничего сложного.
2) Если не хочешь использовать нуль-терминированные строки, запили строки кортежем длина строки + сама строка.
Для байтоебства первый вариант предпочтительней.

Ответы: >>519750, >>519753

23 Июл, 21:47 #75 #519735

>>519728
В K&R вроде была strlen. Там же код тривиальный типа while(звезда str++)++len;

Ответы: >>519750

23 Июл, 21:53 #76 #519737

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

Ответы: >>519742

23 Июл, 21:56 #77 #519739

>>519728
char stroka[] = "tekst stroki";
size_t dlina_stroki = sizeof( stroka );

Ответы: >>519741, >>519754, >>523043

23 Июл, 21:58 #78 #519741

>>519739
- 1

Ответы: >>519745

23 Июл, 21:59 #79 #519742

>>519737
Т.е. компилятор не будет вызывать библиотечный qsort, а сгенерит для меня специальную версию qsort'а с заинлайненым сравнением, так что ли?

Ответы: >>519744

23 Июл, 22:05 #80 #519744

>>519742
Только если компилятору будет доступно определение qsort. Если бы qsort была объявлена в хидере, как и функция сравнения, то вызов бы заинлайнился.

Ответы: >>519747, >>519792

23 Июл, 22:06 #81 #519745

>>519741
Что тебе не нравится?

Ответы: >>519750

23 Июл, 22:12 #82 #519747

>>519744
От это да, потом нужно будет самому проверить. Я что-то всегда думал, что он инлайнит только вызовы по имени функции, а тут получается, что отслеживает значение в указателе и тоже инлайнит. Все ж таки действительно немало тонкостей в няшной.

23 Июл, 22:20 #83 #519750

>>519731
>>519735
Действительно в K&R описывается нуль-терминатор.
Так и сделаю.
>>519745
Скорее всего потому, что если инициализировать строку как "текст", будет добавлен "\0", а если как массив {char1, char2, char3...} не будет.

Ответы: >>519752

23 Июл, 22:25 #84 #519752

>>519750
Если инициализировать массив string literal'ом, при этом указав размер массива равный количеству букв, то '\0' в конец строки не добавится.
Напр. char str[4] = "test"; - нуль-терминатор добавлен не будет.

23 Июл, 22:25 #85 #519753

>>519731
> Для байтоебства первый вариант предпочтительней.
Но почему, ведь второй вариант эффективнее, длина вычисляется за О(1)?

Ответы: >>519755, >>519765

23 Июл, 22:26 #86 #519754

>>519739
А вот это не работает с указателем. Так сразу попробовал.
Попробуй передай &stroka[0], ничего хорошего не получишь.

Ответы: >>519766

23 Июл, 22:27 #87 #519755

>>519753
Байтоебство байтоебству рознь. Где-то нужно оптимизировать по памяти (вариант с кортежем отпадает), где-то по скорости.

23 Июл, 22:40 #88 #519765

>>519753
Все равно в индикатор выталкиваю символы по 1ному. Да и строки короткие (1-5 символов).

23 Июл, 22:41 #89 #519766

>>519754
Зато strlen вызывать не нужно - компилятор уже все посчитал.

23 Июл, 23:22 #90 #519792

>>519744
А LTO это не про эти оптимизации?

Ответы: >>519899

41 Кб, 400x511

24 Июл, 01:10 #91 #519835

Зачем картинку испортил, пидор?

24 Июл, 03:46 #92 #519883

>>518562
Если для себя то не еби мозги себе и покупай Ардуину. Если хочешь действительно байтоебить то идешь на сайт easyelectronics и там проходишь учебный курс по AVR там все начинается с тру байтоебства ассемблера, но написано очень годно. Ну а по Си Кериган и Ричи классика.

24 Июл, 03:51 #93 #519884

>>518704
че за плата на пике? Какую годноту посоветуешь почитать для того что бы впердоливать во всякие ARM Unix'ы?

Ответы: >>519885

24 Июл, 03:52 #94 #519885

>>519884
а все в глаза долблюсь увидел что за плата.

24 Июл, 07:44 #95 #519899

>>519792
LTO по идее должна и в объектном файле инлайнить. А из хидера должно и без LTO инлайнится.

24 Июл, 17:42 #96 #520068

Сегодня при конвертировании строки из utf8 в cp1251 с помощью функции iconv, в качестве параметров указателей in и out буферов (в хэдэре объявлены с restrict) передал указатели с одинаковым значением (т.е. использовал один буфер). Все отлично работает, но вот думаю, может быть все же стоит использовать два буфера? Или в данной ситуации ничего плохого произойти не может?

Ответы: >>520286

24 Июл, 18:07 #97 #520078

>>518562
1. Искусство программирования Unix.
2. Справочник по сям.
3. Хуилиарды кода на сях в СПО.

Опционально: собор и базар.

Ответы: >>520796

25 Июл, 01:44 #98 #520286

>>520068
Зависит от операционной системы. Если что-то переносимое, то лучше два буфера, а если работает и так...

25 Июл, 21:27 #99 #520796

>>520078
>собор и базар.
говно без идей

25 Июл, 21:31 #100 #520799

>>519728
>Но оно же токо в плюсах?
ох лол блять... совсем молодёжь охуела

28 Июл, 23:31 #101 #522433

Отличаются ли чем-нибудь (кроме наличия/отсутствия деструктора) thread_local поинтер и thread specific storage (функции tss_… в c11 и thread_key_… в posix)? Что лучше использовать в c11?

Ответы: >>522588

29 Июл, 11:28 #102 #522586

Почему этот тред такой мёртвый? :(

Ответы: >>522587

29 Июл, 11:35 #103 #522587

>>522586
Потому что мало кто из двачеров жалует няшную
бамп годному треду

Ответы: >>522588

29 Июл, 11:37 #104 #522588

>>522587
Если знаешь, ответь на >>522433 вопрос позязя. Просто я не очень понимаю необхогдимость добавлять в стандарт tss_ набор функций, если есть thread_local. Может быть есть какое-то отличие, которое я не понимаю?

29 Июл, 21:06 #105 #523029

>>518562
Тебе сюда, коллега

>>522265

29 Июл, 21:22 #106 #523043

>>519739
>size_t dlina_stoki = sizeof(stroki) - 1

поправил, не благодари

143 Кб, 1280x1024

02 Авг, 17:50 #107 #524583

Запилил тут себе poor man's деструкторы в качестве упражнения. Как вам?

Алсо, почему C тред опять тонет?!

Ответы: >>524599, >>524614, >>527685

20 Кб, 311x278

02 Авг, 18:31 #108 #524599

>>524583
> NULL
> printf
> голые указатели
> Си строки

Ответы: >>524604

02 Авг, 18:43 #109 #524604

>>524599
Ну а что ты ожидал увидеть? Это же C тред в конце концов.

Ответы: >>524610

02 Авг, 19:14 #110 #524610

>>524604
Мб как свифт-обезьяна переменную именует не буковками а смайликами.

02 Авг, 19:35 #111 #524614

>>524583
Сорцы будут?

Ответы: >>524621, >>524689

02 Авг, 19:53 #112 #524621

>>524614
Если допилю до вменяемого состояния, то будут конечно, правда там смотреть особо не на что. Просто в начале automatic блока создается объект – стэк, в который потом записываются указатели на объекты и указатели на деструкторы, в конце блока это всё в цикле вызывается и уничтожается. Сейчас мне надо придумать как лучше сделать обработку ошибок. Вообще, таких велосипедов уже написано > 9000, мне просто свой сделать захотелось.

29 Кб, 660x316

02 Авг, 22:41 #113 #524689

>>524614
В общем вот, если нужно:
http://rghost.net/download/6YFd4XFfB/cd85f1cdc7210c06eb4fda7ec6a15e654c36a32c/c_raii.zip

Ответы: >>524795, >>526256

03 Авг, 03:08 #114 #524795

>>524689
А теперь то же самое через подмену адреса возврата, чтобы с return работало, а не только с break.

Ответы: >>524826, >>527693

03 Авг, 08:42 #115 #524826

>>524795
>через подмену адреса возврата
Будет не портабельно же. Если там добавить глобальную переменную const struct deinit_stack deinit_stack и потом сделать #define return auto_deinit(&deinit_stack); return, то будет тоже работать с return по идее. Алсо, в любом случае это всё хуита, ни один нормальный человек не станет всерьёз использовать что-то такое.

sage 06 Авг, 08:57 #116 #526256

>>524689
поясните за ключевые слова automatic и release, в гугле ничего не нашел. Это точно чистый Си?

Ответы: >>526273

06 Авг, 10:07 #117 #526273

>>526256
Это макросы, блядь.

Ответы: >>526747, >>527369

sage 07 Авг, 10:16 #118 #526747

>>526273
а где они определены?

Ответы: >>526748

sage 07 Авг, 10:25 #119 #526748

>>526747
а все понял

09 Авг, 01:44 #120 #527369

>>526273
>макросы
>не капсом
>#define if else
>#define true false

Ответы: >>527401

09 Авг, 10:47 #121 #527401

>>527369
>впервые увидел как меняют синтаксис сишки макросами
Ни в коем случае не заходи на http://libcello.org/, вообще охуеешь.

Ответы: >>527998

10 Авг, 01:50 #122 #527685

>>524583
Стоп, а разве в pure c запрещены {}-блоки без костылей типа do-while (0)? Может быть, я что-то не понимаю, но разве вместо autovar нельзя просто объявить переменные внутри блока, чтобы они автоматическими были? Или у меня мозги поражены крестами, лол.

Ответы: >>527687, >>528797

10 Авг, 01:53 #123 #527687

>>527685
Из простого блока ты не выйдешь break-ом.

Ответы: >>527692

10 Авг, 02:10 #124 #527692

>>527687
То есть у тебя break'и используются в блоках как "исключения для бедных", лол? Я бы на твоем месте сделал для такого обычные блоки и отдельный макрос, который делает goto за закрывающую скобку. Вроде был инструмент для генерации уникальных меток, но я запамятовал. Гулять так гулять, а по производительности это будет лучше, чем циклы, которые выполняются один раз.

Ответы: >>527693, >>527695

10 Авг, 02:11 #125 #527693

>>527692
Я мимокрокодил вообще. Я ему предлагал >>524795 непортабельный, но красивый вариант.

sage 10 Авг, 02:16 #126 #527695

>>527692
Алсо, цикл выкидывается, даже если без оптимизаций собирать - этой идиоме больше лет, чем тебе.

Ответы: >>527703

10 Авг, 02:22 #127 #527699

Поясните, как си хранит double ? Я так понял там под мантису 52+1 бита. Максимальное число, которое помещается в мантису 2^53=9007199254740992, выходит можно хранить 15-16 разрядов, но если написать
\tdouble a = 123.45678901234567;
\tprintf("%.14lf\n", a);
выводит 123.45678901234567, как он умещает 17-й разряд?

Ответы: >>527701

10 Авг, 02:29 #128 #527701

>>527699
Вот здесь поиграйся http://babbage.cs.qc.edu/courses/cs341/IEEE-754.html

Ответы: >>527702

10 Авг, 03:03 #129 #527702

>>527701
можно по подробнее я правильно понимаю, что иногда, когда в экспоненте хватает места, часть мантисы он может переложить в экспоненту? В мантисе храниться 1.9290123283179010, а не 1.2345678901234567, как я думал. Или где тогда она?

10 Авг, 03:04 #130 #527703

>>527695
Да похуй, зачем пессимизировать преждевременно? А еще - отдельный макрос на выход с деинициализацией будет няшнее, чем break, выглядит, как отдельная команда.

10 Авг, 21:36 #131 #527998

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

Ответы: >>528111

11 Авг, 01:00 #132 #528111

>>527998
Кстати, почему для сей нет человеческой библиотеки коллекций? Даже обосранный резиновый стэк самому приходится писать.

Ответы: >>528610

11 Авг, 22:00 #133 #528610

>>528111
https://ru.wikipedia.org/wiki/GLib

Ответы: >>528636

11 Авг, 22:33 #134 #528636

>>528610
Беда в том, что эта либа гнутая.

Ответы: >>533089

12 Авг, 11:19 #135 #528797

>>527685
http://ideone.com/SYTigT
http://ideone.com/NrdRSN
Сечёшь?

Ответы: >>528803

12 Авг, 11:23 #136 #528803

>>528797
В чем подвох? Одинаково же будет, не?

Ответы: >>528804

12 Авг, 11:24 #137 #528804

>>528803
А, понял. Охуеть просто, вообще пушка.

Ответы: >>528806, >>529279

12 Авг, 11:25 #138 #528806

>>528804
Энджой ер сишечка.

13 Авг, 05:10 #139 #529279

>>528804
Убери точку с запятой после вызова макроса и все.

Ответы: >>529282

13 Авг, 05:15 #140 #529282

>>529279
Поясни. Почему нужен тот костыль и почему нельзя дочку с запятой?
мимопроходил

Ответы: >>529292

13 Авг, 05:42 #141 #529292

>>529282
Потому что после блока {} не должно быть точки с запятой, если ожидается else.

Ответы: >>529293, >>529490

13 Авг, 05:53 #142 #529293

>>529292
А в крестах надо?

Ответы: >>529294

13 Авг, 06:13 #143 #529294

>>529293
Во всех языках с сишным синтаксисом после if и else надо statement. Или это expression statement (выражение, которое на ; заканчивается) или это statement с ключевым словом (ну тот же do или вложенный if), или это compound statement ({ такая хуйня в фигурных скобочках }).

Если ты написал if (expr) {y}; else ..., то после (expr) у тебя уже ДВА statement (compound в { скобочках } и пустое выражение с ;). Компилятор после второго statement уже не ожидает никакого else, поэтому и охуевает, внезапно его встретив.

Ответы: >>529296

13 Авг, 06:19 #144 #529296

>>529294
Нихуя не понял. Но спасибо за ответ. Потом ещё раз прочитаю.

Ответы: >>529297

13 Авг, 06:25 #145 #529297

>>529296
Ок. В крестах точно такое же поведение }; нельзя. И в JavaScript. И в PHP. И в Java.

13 Авг, 06:56 #146 #529302

Php

13 Авг, 16:23 #147 #529490

>>529292
А если просто писать HUI (hui), без точки с запятой? Тогда ведь можно обойтись блоком, его можно будет вставить везде.

15 Авг, 21:15 #148 #530740

Посоветуйте по С книг для начинающих.

Ответы: >>530845

16 Авг, 00:48 #149 #530845

>>530740
Брайан Керниган, Деннис Ритчи: «Язык программирования Си»,
Tony Albrecht: «Pitfalls of Object Oriented Programming»,
MISRA-C:2004 Language Guidelines,
Rob Pike: «Notes on Programming in C»,
Peter Krzyzanowski: «C Programming Style»

И незабывайте-про:
http://fprog.ru/2009/issue1/eugene-kirpichov-fighting-mutable-state/
А не то.

Ответы: >>530868, >>530873

16 Авг, 01:57 #150 #530868

>>530845
> fprog.ru/2009/issue1/eugene-kirpichov-fighting-mutable-state/
Хуета какая-то от неосилятора.

Ответы: >>530871

sage 16 Авг, 02:03 #151 #530871

>>530868
А ну да, у тебя ж еще и MISRA в списке. Тогда понятно: ты перечисляешь способы скатить мощь сишечки до своей любимой функциональнойпарашинейм.

16 Авг, 02:12 #152 #530873

>>530845
>Rob Pike: «Notes on Programming in C»
Где можно скачать полностью? На первой странице в гугле только маленький кусок.

Ответы: >>530874

16 Авг, 02:16 #153 #530874

>>530873
есть особый гугл: ebdb.ru

16 Авг, 11:02 #154 #530948

Спасибо, няшки, за книжки.

1869 Кб, 275x154

17 Авг, 21:20 #155 #531713

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

Ответы: >>531722, >>531753

17 Авг, 21:40 #156 #531722

>>531713
gcc/MinGW.

17 Авг, 22:42 #157 #531750

Привет, сишники, объясните, пожалуйста, отличие main() от int main()
Вроде бы одно и то же, но в Кернигане и Ритчи int не объявляют, а в интернетике во всех кодах его ставят. Зачем?

Ответы: >>531753

17 Авг, 22:51 #158 #531753

>>531713
Для шиндоус: Pelles C (полная поддержка C99/C11), и, внезапно, вижуал студия 2015 (там почти все необходимое, наконец, запилили, да и сам компилятор весьма неплох).

>>531750
Во времена K&R все функции по умолчанию возвращали int, если не было указано иное. В современных редакциях стандарта это пофиксили, теперь нужно писать тип возвращаемого значения, а старое поведение deprecated и кое-где уже даже не поддерживается. Я не уверен, но вроде в свежей редакции K&R тоже уже правильно, посмотри сам.. Алсо, int main() - это плюсы, а в сишечке - int main(void) или int main(int argc, char argv).

Ответы: >>531760, >>531784, >>531808

17 Авг, 23:06 #159 #531760

>>531753
>вижуал студия 2015
Где можно скачать ломаную, а не с таблеткой на один год?

Ответы: >>531762

17 Авг, 23:09 #160 #531762

>>531760
Бери Community Edition, она бесплатная: входишь в аккаунт Microsoft, она сама активируется, опционально выходишь и удаляешь аккаунт Microsoft.

17 Авг, 23:41 #161 #531784

>>531753
Спасибо! Может, есть новое издание, попробую поискать.
А вот int main(void), кстати, ни разу не видел. Везде в скобках ничего нет. Это тоже уже устаревшая версия записи?

Ответы: >>531793

18 Авг, 00:00 #162 #531793

>>531784
Пустые скобки в C в отличие от C++, где они эквивалентны (void) означают неизвестное число параметров. Например:
[code lang="c"]
int foo (); //declaration
//...
foo (1); //call
//...
int foo (int input) //definition
{
//...
}
[/code]

Ответы: >>531808, >>531942

18 Авг, 00:12 #163 #531799

Смотри, анон.
#include <stdio.h>
#include <string.h>

Если я не делаю второй инклуд, то компилятор ругается на встроенную функцию strlen.
[Warning] incompatible implicit declaration of built-in function 'strlen'

Почему так? Ведь без инклуда string.h этот код просто не должен компилироваться. Должна быть ошибка "такой функции нет".

Ответы: >>531805, >>531808

18 Авг, 00:21 #164 #531805

>>531799
Ты упоминаешь ее, и тем самым неявно объявляешь. Компилироваться должно, компоноваться нет.

18 Авг, 00:26 #165 #531808

>>531793
А теперь и пустые скобки нельзя. Для функций с переменным числом аргументов надо как минимум один аргумент и ..., а для остальных нужно явно указывать аргументы.

>>531799
Компилятор "знает" такую функцию, чтобы в определенных режимах (с оптимизацией) заменять ее вызов на эквивалентный код. Это "знание" не на уровне языка (не декларация), а на уровне компилятора. Так как функция при вызове неявно >>531753 объявляется как int strlen(), а компилятору известно о другом, он ругается.

18 Авг, 10:23 #166 #531942

>>531793
Кстати, вот ещё вопрос: в программах в интернетике в конце описания функции main ставят действие "return 0;". Обязательно ли его вставлять?

Ответы: >>531950, >>531952

18 Авг, 11:11 #167 #531950

>>531942
Нет, для main (и только для нее!) есть исключение: если выполнение доходит до конца функции, неявно возвращается 0.

18 Авг, 11:11 #168 #531952

>>531942
0 - код успешного завершения программы. передаётся выше в ОС. любой не 0 = в ходе выполнения была ошибка.

Ответы: >>531954

18 Авг, 11:14 #169 #531954

>>531952
В стандарте весело, кстати. Есть 0, EXIT_SUCCESS (может совпадать, и таки совпадает с 0) и EXIT_FAILURE, а остальные коды возврата - implementation defined. На деле, конечно, так, как ты сказал.

20 Авг, 11:48 #170 #532900

Эй! Сишники! Насколько сложно сейчас найти работу, где требуются знания Си?

20 Авг, 11:49 #171 #532901

Поясните про inline? Для чего он нужен?

Ответы: >>532921

20 Авг, 12:42 #172 #532921

>>532901
Это тоже хинт, как register, restrict и const. Если register предлагает компилятору ускорить доступ к переменной, то inline предлагает ему ускорить вызов функции. И, в отличие от register, компиляторы хоть и не всегда, но все же часто обращают на это внимание, подставляя тело inline-функции в месте ее вызова (что позволяет потом оптимизировать код еще больше). Современные компиляторы, опять же, и сами инлайнить умеют очень хорошо, но если функция несложная, маленькая, то inline можно указать а если ты уверен, что так точно будет лучше, то иногда даже какой-нибудь нестандартный __forceinline/__attribute__((always_inline)), т.е., "инлайни и ниебёт" можно воткнуть. Обычно в пример оправданного инлайна приводят какую-нибудь векторную арифметику - несколько выражений без ветвлений будут развернуты в десяток-два инструкций в месте вызова и отработают гораздо быстрее, без затрат времени на передачу аргументов, не сбрасывая конвейер процессора и т.п.

Ответы: >>532928

20 Авг, 13:05 #173 #532928

>>532921
Постой. const - это хинт? Разве?

Ответы: >>532980

20 Авг, 15:17 #174 #532980

>>532928
This, поэтому константы объявляются с помощью #define

Ответы: >>533386

20 Авг, 17:55 #175 #533089

>>528636
LGPL же. Можно линковать со своими проектами.

20 Авг, 22:41 #176 #533333

>>518562 (OP)
Это могила Берроуза?

Ответы: >>533366, >>533578

20 Авг, 23:11 #177 #533366

>>533333
лал

20 Авг, 23:42 #178 #533386

>>532980
Да, const по сути просто хинт. Но ты-то, как и с другими хинтами, в любом случае обязан соблюдать ограничения, которые спецификатор накладывает.

21 Авг, 17:24 #179 #533578

>>533333
Юрия Петухова.

21 Авг, 18:23 #180 #533620

Анон, помоги ньюфагу! Пытаюсь скомпилить srlua через mingw компилятор. Код glue.c компилируется без проблем, а вот srlua.c выдате ошибки, мол нехватате исходников lua. Ну я и скачал сорсы луа и добавил их в фолдер с кодом, компиляция пошла, но лезут другие ошибки.

Вот без сорсов луа:

C:\gcc-lua-install\tdm-gcc\bin>gcc C:\gcc-lua-install\srlua.c
C:\gcc-lua-install\srlua.c:19:17: fatal error: lua.h: No such file or directory
compilation terminated.

Вот с ними:

http://pastebin.com/6wXWCtLN

Ответы: >>533697, >>533873

sage 22 Авг, 01:35 #181 #533697

>>533620
Без сорсов, очевидно, нужны заголовочные файлы и либа.
С сорсами, очевидно, тоже нужны заголовочные файлы и... лучше собрать либу.

CMake поставить не пробовал? Хочешь руками?
Возьми на http://luadist.org/ уже собранные либы lua (тебе нужны оттуда include/.h и lib/.a? ну и .dll потом), укажи пути в команде компилятору (gcc -Iпуть-к-папке-с-h srlua.c полный-путь-к-liblua.dll.a)

23 Авг, 14:44 #182 #533873

>>533620
>скомпилить srlua через mingw компилятор
Зачем? Есть же vagrant + virtualbox

23 Авг, 17:30 #183 #533994

Здравствуйте. Я хотел бы спросить по поводу преобразования типов. Допустим у нас есть три переменные: short a, short b и int c. Нужно ли мне выполнять явное преобразование, если я хочу вычислить: c = a b? То есть надо ли мне записывать это так: c = (int) a b или c = (int) (a * b)?

Ответы: >>534005

23 Авг, 17:54 #184 #534005

>>533994
ЕМНИП, не нужно. Но компилятор ругнётся, что выполняется неявное преобразование.

Ответы: >>534007, >>534019

35 Кб, 851x740

40 Кб, 851x740

23 Авг, 17:57 #185 #534007

>>534005
Хуй тебе. Нужно преобразовывать иначе пикрил. Хотя возможно, это зависит от компилятора.

Ответы: >>534010, >>534313, >>534424

23 Авг, 18:09 #186 #534010

>>534007
Что у тебя за компилятор?

Ответы: >>534012

23 Авг, 18:10 #187 #534012

>>534010
GCC 4.9.2. На скрине же видно!

Ответы: >>534018

23 Авг, 18:23 #188 #534018

>>534012
И что у тебя не работает?

Ответы: >>534019

23 Авг, 18:26 #189 #534019

>>534018
Все работает. Я просто показал >>534005, что компилятор может молчать и не преобразовывать тип самостоятельно.

Ответы: >>534022

23 Авг, 18:33 #190 #534022

>>534019
Таки всё в сях есть int или указатель на int, не забывай об этом.

Ответы: >>534024, >>534034

23 Авг, 18:34 #191 #534024

>>534022
Ты к чему это? Я тебя не совсем понял.

Ответы: >>534026

23 Авг, 18:37 #192 #534026

>>534024
То, что ты написал long, а по факту там хитровыебанный int, потому и не ругается. Ты могу бы вообще char написать.

Ответы: >>534031, >>534033

206 Кб, 1366x768

23 Авг, 18:45 #193 #534031

>>534026
Пикрелейтед. Ничего, что MinGW?

50 Кб, 851x740

34 Кб, 851x740

33 Кб, 851x740

23 Авг, 18:49 #194 #534033

>>534026
Даже если из float в long или даже в char. Компилятору плевать на это.

Ответы: >>534034

23 Авг, 18:49 #195 #534034

>>534033
->
>>534022

Ответы: >>534040

23 Авг, 18:54 #196 #534040

>>534034
Ну по поводу float, все немного по-другому... А вообще, почему мы спорим? Я говорю, кто-то написал, что компилятор выдаст ошибку, я говорю что компилятор не выдает ошибки, ты говоришь почему так, я и так знал почему и мы спорим не из-за чего.

Ответы: >>534041

23 Авг, 18:57 #197 #534041

>>534040
Это я написал, что компилятор выдаст предупреждение. По-хорошему, вот если так по-честному, то должен бы.

Ответы: >>534418

23 Авг, 19:18 #198 #534055

А какой есть компилятор Си, который может в c99, и в ассемблерные вставки на синтаксисе intel?

Ответы: >>534063, >>534068, >>534418

23 Авг, 19:31 #199 #534063

>>534055
Watcom.

23 Авг, 19:38 #200 #534068

>>534055
GCC

24 Авг, 09:07 #201 #534313

>>534007
Это от машины зависит:
> Тип short часто имеет размер 16 бит, long — 32 бита, a int — или
> 16, или 32. Компилятору разрешено самостоятельно выбирать размер в соответствии с
> характеристиками аппаратуры и следующими ограничениями: числа типа short и int
> должны иметь длину не менее 16 бит, long — не менее 32 бит; тип short должен быть
> не длиннее int, a int — не длиннее long.

У меня, например, на x86 long идентичен int и переполнение в обоих случаях.

24 Авг, 11:19 #202 #534388

Поясните за fscanf. Допустим у меня есть строка: key: value.
Как мне это скормить fscanf, чтобы он считал эту запись в соответствующие переменные?

Ответы: >>534409

24 Авг, 11:20 #203 #534390

Поясните за fscanf. Допустим у меня есть строка: key: value.
Как мне это скормить fscanf, чтобы он считал эту запись в соответствующие переменные?

Ответы: >>534409, >>534414

24 Авг, 11:48 #204 #534409

>>534390
>>534388
Как же раздражает гуглокапча.
Пока нашел только способ, в котором надо считать одну строку и вычленить из нее елементы. Но я полагаю, должен же быть способ, как-нибудь считать два значения из одной строки? Пока делал так: fscanf ("%s[^:]%d", key, &value);

24 Авг, 11:56 #205 #534414

>>534390
fscanf - хуета для одноразового кода, парси вручную (strtok, strtol, strtod, все дела).

> fscanf ("%s[^:]%d", key, &value)
Да, примерно так оно и делается. Только у тебя размер буфера не указан (что будет, если введешь больше, чем размер key?). Надо:
"%размер[^:]: %d"

24 Авг, 12:00 #206 #534418

>>534055
Все могут в той или иной мере. Но код на асме лучше вынести в отдельные файлы, и с ними линковаться.

>>534041
Что за цирк вы тут устроили? -Wconversion

Ответы: >>534424

24 Авг, 12:41 #207 #534423

Как правильней писать в main: return 0 или exit (EXIT_SUCCESS)?

Ответы: >>534425, >>534426, >>534461

24 Авг, 12:43 #208 #534424

>>534418
>-Wconversion
В примере >>534007 это не сработает, потому что там присваивается произведение переменных с типом int переменной с типом long. int может быть преобразован в long без потери информации, значит неявное преобразование не может испортить значение, т.е. предупреждение не выведется. Значение портит переполнение вызванное произведением переменных типа int. Чтобы этого не было, нужно один из операндов преобразовать в long.

Ответы: >>534429, >>534430

24 Авг, 12:44 #209 #534425

>>534423
>exit (EXIT_SUCCESS)
this

24 Авг, 12:47 #210 #534426

>>534423
Если это единственный return, то лучше ничего не писать. А вообще, exit для других функций оставь, а в main лучше return (вопрос вкуса, реальной разницы нет).

33 Кб, 851x740

24 Авг, 12:48 #211 #534427

Подтверждаю слова этого.

Ответы: >>534429

40 Кб, 851x740

24 Авг, 12:50 #212 #534429

>>534427
>>534424

24 Авг, 12:50 #213 #534430

>>534424
А, вы о таких вещах. Ну это да.

24 Авг, 13:28 #214 #534444

Хочу педальку для вима https://github.com/alevchuk/vim-clutch

24 Авг, 13:29 #215 #534445

Если я хочу выделить память для хранения строки, безопасней ли использовать calloc, в случае, если я могу как-нибудь пропустить '\0'? Или все равно, что использовать?

Ответы: >>534450

24 Авг, 13:45 #216 #534450

>>534445
Если ты можешь пропустить где-то \0, то и решай эту проблему - напиши раз и навсегда себе модуль для работы со строками, ну и внимательнее будь. А так, да, calloc может немного подстраховать. Но ты с таким же успехом можешь в длине на 1 ошибиться и затереть самый последний \0.

24 Авг, 14:12 #217 #534461

>>534423
А ты посмотри что происходит после return 0 - например, в gcc после этого вызывается exit(return_value)

24 Авг, 21:51 #218 #534641

Есть ли какие-нибудь статьи или что-то вроде того о threads.h? Многопоточностью я еще не увлекался, а вот сейчас решил научится работать с ними. Даже не знаю с чего начать.

Ответы: >>534644

24 Авг, 21:56 #219 #534644

>>534641
Зачем оно тебе? С поддержкой очень безрадостно пока. Почитай лучше про pthreads/Windows processes and threads, будет намного полезнее.

25 Авг, 00:11 #220 #534696

Что в си означает выражение &&addr? Это не логическая операция.

Ответы: >>534697, >>534734

25 Авг, 00:17 #221 #534697

>>534696
Дай-ка фрагмент кода, где ты это откопал.

Ответы: >>534703

140 Кб, 1062x879

25 Авг, 00:26 #222 #534703

>>534697
Тот кусок уже не нашел, но вот аналогичный. Это из мануалов по обфускации кода и приемам антиотладки.

Ответы: >>534707

25 Авг, 00:36 #223 #534707

>>534703
Теперь я понял, почему мой компилятор жаловался на метки. Честно говоря, никогда не сталкивался с такой штукой и могу предположить только, что это. Надо будет и самому почитать про это. Интересно же.

Ответы: >>534710

25 Авг, 00:42 #224 #534710

>>534707
Да, это вообще охуенно. И материалы классные. Там надо знать не только си на высоком уровне, но еще и теорию чисел.

Ответы: >>534733

25 Авг, 01:42 #225 #534733

>>534710
Брось ты это дело. Нет лома против иды, деобфускатора типа миазмы, и маленькой тележки знаний наподобие http://pferrie.host22.com/papers/antidebug.pdf

25 Авг, 01:48 #226 #534734

>>534696
в с++11 rvalue сылка

Ответы: >>534738

25 Авг, 02:07 #227 #534738

>>534734
Еще походу в Си && используется для взятия адреса метки(label). Вот хуй знает где это в стандарте, мож кто подкинет

Ответы: >>534739, >>534761

25 Авг, 02:09 #228 #534739

>>534738
Вот че в инетах нашел
Note: In GNU C the operator '&&' may also be used as unary operator for taking addresses of labels.

25 Авг, 12:00 #229 #534758

Почему этот код нормально отработал на идеоне, а у меня на компе происходит ошибка при выполнении? Компилирую в DevCpp.

https://ideone.com/abSF9g

Ответы: >>534820, >>534833

25 Авг, 12:11 #230 #534761

>>534738
http://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Labels-as-Values.html#Labels-as-Values

Ответы: >>534780

25 Авг, 12:59 #231 #534780

>>534761
Как все сложно то...

25 Авг, 13:01 #232 #534781

Посоветуйте годной литературы по Си, кроме K&R.

25 Авг, 14:23 #233 #534820

>>534758
Ну видимо ты не можешь редактировать .text секцию просто так. Не знаю как на винде, на линухе надо вызвать mprotect.

125 Кб, 1366x768

25 Авг, 14:59 #234 #534833

>>534758
Потому что ideone компилирует с gcc -O2, так что твой самомодифицирующийся код нихуя не делает.

Ответы: >>534836

25 Авг, 15:07 #235 #534836

>>534833
Что надо сделать, чтобы этот код работал?

Ответы: >>534839, >>534840

25 Авг, 15:10 #236 #534839

>>534836
Ничего. Он не может работать. Память с кодом всегда read-only, сделать ее read-write тебе ос не позволит, да и вообще нахуя ты собрался опкоды на бред менять? Даже если ты их поменяешь, скорее всего получишь undefined instruction.

25 Авг, 15:17 #237 #534840

>>534836
книжку читай внимательнее, там в main вызывается makeCodeWritable(...). Наверняка выше было реализация этой функции.
https://books.google.com.ua/books?id=mig-bH3u0Z0C&pg=PT292&lpg=PT292&dq=char+p%3D%26%26begin&source=bl&ots=b3rFht4xWo&sig=LT2URWU1FAe7He7XqrjamftX17A&hl=ru&sa=X&ved=0CCwQ6AEwAmoVChMI2v7Bs-XCxwIVJaZyCh1VTw__#v=onepage&q=char%20p%3D%26%26begin&f=false

Ответы: >>534841

25 Авг, 15:22 #238 #534841

>>534840
Есть djvu этой книжки?

Ответы: >>534844, >>540495

25 Авг, 15:26 #239 #534842

Пиздец, там в makeCodeWritable используется mprotect. Это значит, что на винде все это не заработает? Есть способы то же самое повторить на винде?

25 Авг, 15:26 #240 #534844

>>534841
гуглить надо, у меня нет. Гугли VirtualProtect для винды и mprotect для линухи. Вроде так

Ответы: >>540495

25 Авг, 23:30 #241 #535047

У меня тут вопрос возник. Есть у меня есть два указателя. Первый указывает на строку а второй на произвольный участок(не инициализирован). Я могу сразу вызывать memcpy, чтобы скопировать строку в участок, на который указывает второй указатель? Или мне необходимо для нечала выделить память с помощью malloc?

Ответы: >>535084

26 Авг, 01:18 #242 #535084

>>535047
Либо malloc(), либо занять область на стеке:
char string[MAXNAME] = "";

26 Авг, 01:33 #243 #535090

https://ideone.com/yNK4rv
Что не так в этой сортировки? Почему она работает слишком медленно. Даже 256 элементов, занимает почти секунду.

Ответы: >>535093

26 Авг, 01:36 #244 #535093

>>535090
Все. Вопрос закрыт. Я кретин. Прошу прощения за то, что потревожил. Дело было в строке: 7.

26 Авг, 01:49 #245 #535107

>>518562 (OP)
>может я пиздоглазый
Ты русский? Значит - пиздоглазый!

Ответы: >>535113

26 Авг, 02:09 #246 #535113

>>535107
>пиздоглазый
"штсдгву БсзшвщкфяЮ
Х
ОСТ_ифде, не?
Ъ

Ответы: >>535126

26 Авг, 02:24 #247 #535126

>>535113
оПХБЕР, ЕЯРЭ БНОПНЯ
Зачем вы срете в нашем уютном тредике?

Ответы: >>535136

26 Авг, 02:53 #248 #535136

>>535126
OST_BALT{}y - pizdoglazyie

27 Авг, 06:06 #249 #535359

Как заинлайнить функцию из стандартной библиотеки?

Она у меня тупо вызывается через call, а я хочу чтоб компилятор ее на место вызова вставил.

Ответы: >>535393, >>535411

27 Авг, 08:52 #250 #535393

>>535359
Скопируй исходник функции себе в проект и делай с ним, что угодно. По-другому никак.

27 Авг, 09:58 #251 #535411

>>535359
собрать статически, не?

02 Сен, 17:47 #252 #538504

Умею делать циклы и функции. Как с помощью этого можно сделать какое-то практическое приложение? Чего нужно еще знать?

Ответы: >>538586, >>538592, >>538636, >>538646, >>540223

02 Сен, 21:09 #253 #538586

>>538504
системные вызовы

02 Сен, 21:16 #254 #538592

>>538504
Вызывай функцию в цикле, устраивай цикл внутри функции, запускай в цикле функции, которые выполняют внутри себя цикл, внутри которого вызываются функции.

02 Сен, 22:35 #255 #538636

>>538504
Научись в fopen/fgetc/fputc и напиши упаковщик методом RLE.

02 Сен, 23:12 #256 #538646

>>538504
Структуры, ссылки, указатели. Напиши наследование структур с виртуальной таблицей методов.

04 Сен, 12:56 #257 #539475

Дорогие байтоебы, вопрос по рынку (глобальному). Как за последние годы, по ощущениям, изменилось число вакансий, конкуренция? Когда Сишка пойдет ко дну, и пойдет ли вообще?

Ответы: >>539924

04 Сен, 22:20 #258 #539924

>>539475
Она ко дну никогда не пойдёт, но востребована в очень узком секторе.

05 Сен, 09:35 #259 #540099

Компилятор ругается что нельзя инициализировать массив переменной длины.

[code]
#include <sys/inotify.h>
#include <linux/limits.h>

...

const size_t kMaxEvent = sizeof(struct inotify_event) + NAME_MAX + 1;
char buf[kMaxEvent] = ""; // buffer for at least 1 event

[/code]

При этом в /usr/include/linux/limits.h:11:

#define NAME_MAX 255\t/ # chars in a file name /

А в /usr/include/linux/inotify.h:

[code]
struct inotify_event {
__s32 wd;
__u32 mask;
__u32 cookie;
__u32 len;
char name[0];
};
[/code]

Ведь конец должен считаться просто указателем? Не зря же меня заставили вручную возможную длину учитывать добавлением NAME_MAX?

Ответы: >>540107, >>540109, >>540135

05 Сен, 10:20 #260 #540107

>>540099
Разве NAME_MAX тут это не максимальный возможный размер? А sizeof(struct inotify_event) + NAME_MAX + 1 его всегда будет превышать. Хотя это не важно.

Я, вероятно, хуйню скажу, но может из-за переменного размера (хотя он и конст...) компилятор разделяет строку "char buf[kMaxEvent] = "";" на
char buf[kMaxEvent];
buf = "";
А присваивать так значение массиву нельзя, только при инициализации можно.

Ответы: >>540125

05 Сен, 10:28 #261 #540109

>>540099
Нельзя в Си делать массивы переменной длины, насколько я помню.

Ответы: >>540112

05 Сен, 10:35 #262 #540112

>>540109
Можно же, их просто инициализировать нельзя.
int ar[n];
int i =0;
for (i=0; i<n; i++){
ar = i;
}

Ответы: >>540113, >>540125

05 Сен, 10:36 #263 #540113

>>540112
хм, там ar[и] внутри лупа, конечно же.

05 Сен, 11:10 #264 #540125

>>540107
>Разве NAME_MAX тут это не максимальный возможный размер?
NAME_MAX - максимально возможный размер имени файла, а та структура состоит из имени файла и прочей лабуды

>>540112
>Можно же, их просто инициализировать нельзя.
Похоже, что это правильный ответ. Даже в тривиальном случае:

const size_t kMaxEvent = 10;
char buf[kMaxEvent] = {0};

Нельзя.

05 Сен, 11:27 #265 #540135

>>540099
#define kMaxEvent sizeof(struct inotify_event) + NAME_MAX + 1;
Энджой ер сишечка, в которой const - нихуя не конст и может меняться в рантайме.

05 Сен, 13:37 #266 #540221

Анон, что здесь происходит во второй строчке? Что означают эти две звездочки в данном контексте и какая вообще логика там реализуется? До указателей в K&R пока не дошел.

https://ideone.com/6owLDE

struct list root = NULL;
struct list *tmp = &root;

Ответы: >>540293

05 Сен, 16:44 #267 #540223

>>538504
Можешь забыть про циклы и хуярить лямбда-исчислением, чисто на функциях.

Ответы: >>540285

08 Сен, 18:41 #268 #540285

>>540223
хуя ты извращенец

08 Сен, 18:47 #269 #540293

>>540221
ну если одна звёздочка - это указатель, то две - это указатель на указатель

08 Сен, 19:17 #270 #540302

Си сам по себе не сложен по синтаксису. Так что дрочи практику, ну и пролистай пару книжек по алгоритмам, типа Дасгупты или Кормена.

08 Сен, 23:18 #271 #540495

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

Лучше изучай LLVM http://habrahabr.ru/company/abbyy/blog/265871/

16 Сен, 17:17 #272 #543906

Тред не читал.

Господа, посоветуйте годный учебник для дебилов, где были бы изложены все нюансы С11.

Ответы: >>543929

sage 16 Сен, 17:46 #273 #543929

>>543906
Берёшь документацию и читаешь.
http://www.iso.org/iso/ru/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=57853
Ах да, ты же дебил. Ну извини, годной инфы для дебилов не завезли, это тебе в детсаду надо спросить.

Ответы: >>543930

16 Сен, 17:49 #274 #543930

>>543929
Спасибо, капитан.

Ответы: >>543943

16 Сен, 18:11 #275 #543943

>>543930
Но он прав. Разве что покупать стандарт не обязательно. Ты ведь не разработчик компилятора, а хуй простой, так что последнего черновика (N1570) тебе вполне достаточно. Есть "21st Century C", её тут иногда советуют, но книжка на троечку. Если ты только учишь язык, найди книгу по C99, их дохуя, а потом просто посмотри список нововведений в С11.

Ответы: >>544339

17 Сен, 10:47 #276 #544339

>>543943
Ок, так и сделаю. Наверну K&R, потом уже по стандартам отдельно посмотрю.

Ответы: >>544341

17 Сен, 10:50 #277 #544341

>>544339
Только не забывай, что код в K&R - адов говнокод по современным меркам, а в режиме С99/C11 некоторые примеры даже не скомпилируются.

Ответы: >>544375, >>544403

17 Сен, 11:56 #278 #544375

>>544341
>адов говнокод
А как этот говнокод задетектить?

17 Сен, 12:48 #279 #544403

>>544341
Приведи пример говнокода из K&R. Именно говнокода, а не кода, который не удовлетворяет современным стандартам.

Ответы: >>544421, >>544427

17 Сен, 13:29 #280 #544421

>>544403
Абзац про goto. Хотя там так и сказано, что так делают только черви-пидоры, хуже которых нет.

Ответы: >>544427

17 Сен, 13:51 #281 #544427

>>544403
Так код, который не удовлетворяет стандартам - он говнокод и есть. Стандарты не из воздуха писались по крайней мере, бОльшая их часть. Множество примеров уязвимы к переполнению буфера, однобуквенные переменные, extern декларации внутри функции, implicit int, "лесенки" из вложенных for/if/while, вот это всё. Сейчас проглядел - оно лучше, чем я о нём думал. Видимо, на меня так кривой скан русского издания повлиял много лет назад. Но аргументы в силе: лучше брать что-нибудь менее протухшее.

>>544421
А вот с тобой не соглашусь. Пример для вложенного for адекватен (лучше бы туда return воткнуть, но это не всегда то, что нужно). Пример для goto cleanup - это вообще единственный способ сделать нормальную очистку без дублирования if (fp) fclose(fp) и if (obj) { free(obj->data); free(obj); } при каждой ошибке.

Ответы: >>544433, >>544449

17 Сен, 14:04 #282 #544433

>>544427
>Так код, который не удовлетворяет стандартам - он говнокод и есть.
Довольно странное определение. Если говорить о времени, когда была написана K&R, то код удовлетворял стандартам, а значит - не был говнокодом. Со временем стандарты поменялись, код остался тем же, но стал говнокодом. Выходит, что результат проверки, является ли код говнокодом, не постоянен во времени и зависит не от самого кода, а от того, какие на данный момент актуальны стандарты в языке.

Ответы: >>544461

17 Сен, 14:23 #283 #544449

>>544427
>Пример для вложенного for адекватен
Не совсем, если fastjump ведёт не на завершение метода, а после него что-то ещё делается кроме очистки, это уже говнокод, а не fastjump.

Ответы: >>544461

17 Сен, 14:45 #284 #544461

>>544433
Ну вот у нас тут goto-срач намечается. Были времена, когда можно было себе позволить писать на бейсике лапшу из GOTO, приправляя её POKE с магическими числами, и это было нормально пока один теорехтетик не вскукарекнул про considered harmful. Теперь это однозначный говнокод.

Так и с K&R. Это было нормально, например, потому, что программу писало полтора человека, которые отлично знали и сам язык, и свой код. Это было нормально, когда программы не торчали переполняющимся буфером в интернет. А теперь у нас гитхаб, и надо писать так, чтобы понял мимохуй, который сишечку вообще не учил, а учил плюсы "за 24 часа". И желательно вдалбливать про безопасность не в послесловии, а при первом упоминании массива или указателя. И про signed/unsigned тоже. И про UB до кучи, а то компиляторы стали умные и делают то, что разрешено стандартом, а не то, что ожидает человек, прочитавший K&R.

>>544449
> Не совсем, если fastjump ведёт не на завершение метода
Если бы это было завершение метода, то можно было бы сделать очистку и return прямо в for, а обычно хочется хотя бы, допустим, записать что-то в найденный элемент, что обычно и делается.

ладно, не обращайте внимания, я упорот

Ответы: >>544485, >>544497

17 Сен, 15:18 #285 #544485

>>544461
Нульчую этого упорыша.

школьник-кун

17 Сен, 15:40 #286 #544497

>>544461
>Ну вот у нас тут goto-срач намечается ... Теперь это однозначный говнокод.
В низкоуровневом программировании на С оператор goto активно используется, это уже вроде 100500 раз перетирали.
>компиляторы стали умные и делают то, что разрешено стандартом, а не то, что ожидает человек, прочитавший K&R
Я не утверждаю, что код из K&R актуальный. Тот, кто изучает C по K&R, должен обязательно учитывать, что язык сильно поменялся с того времени. Но, извини, я всё ещё не могу считать исключительно по этой причине код, предложенный в той книге, говнокодом.

Ответы: >>544566, >>544870

17 Сен, 17:59 #287 #544554

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

Скачал Dev C++, но он пока не может обработать даже банальный хеллоуволд. Гугл говорит, это потому, что у меня windows 8.1, слишком новая система для MinGW. Я подозреваю, это ещё и потому, что система не простая, а 64-разрядная. Соответственно, вопрос - есть какие-то ещё среды работы с Pure C под 8.1, или стоит ебаться с Dev C++? Или вообще готовиться к анальной ебле с каким-нибудь древним Turbo C?

Ответы: >>544558, >>544563, >>544566

17 Сен, 18:07 #288 #544558

>>544554
Ставь CodeLite + TDN-MinGW 64 (можно и х86, но зачем?). Работает везде, на 10-ке в том числе. А вообще под винду удобнее в Visual Studio писать.

Ответы: >>544566, >>544621

17 Сен, 18:15 #289 #544563

>>544554
Алсо проверь правильность PATH.

17 Сен, 18:24 #290 #544566

>>544554
>>544558
Вот двачую вижуал студию. Они в 2015 допилили поддержку современной сишечки до приемлемого уровня. Пару галочек уберёшь на тему ололо-safer-функций, и для новичка будет ок. Особенно если ты не смог MinGW поставить почему-то.

>>544497
> В низкоуровневом программировании на С оператор goto активно используется
Ты код на бейсике, про который я говорю, не застал или забыл? То, как сейчас goto используется (даже в GCC-шном стиле с адресами меток), не идет ни в какое сравнение с тем, что было.

> Я не утверждаю, что код из K&R актуальный.
> Тот, кто изучает C по K&R, должен обязательно учитывать
Тот, кто изучает K&R не может этого учитывать. Он не знает, как правильно. Он не может делать скидку на возраст книги. Он язык только учит, он не может пока различать, хороший код тогда и хороший код сейчас. И после K&R ему приходится... ну не переучиваться, но ломать некоторые плохие привычки. Я не утверждаю, что K&R нужно выкинуть. Ее нужно почитать (задачки там, вся хуйня), но лучше бы, чтобы она не была первой книгой.

Ответы: >>544585, >>544621, >>544623, >>544870

17 Сен, 18:41 #291 #544585

>>544566
>Ты код на бейсике, про который я говорю, не застал или забыл?
Мы вроде о C говорим, не? Я лично с бейсиком вообще не сталкивался и особо не стремился.
>Тот, кто изучает K&R не может этого учитывать. Он не знает, как правильно. Он не может делать скидку на возраст книги. Он язык только учит, он не может пока различать, хороший код тогда и хороший код сейчас.
Ты крайне плохо думаешь о новичках. Я читал эту книгу, и я это всё учитывал.
>но лучше бы, чтобы она не была первой книгой
Поправлю, она не должна быть единственным источником информации о языке C. Но первой книгой может быть вполне, какой и была в моём случае.

Ответы: >>544870

17 Сен, 19:07 #292 #544621

>>544558
>>544558
>>544566

Благодарю.
>>544566
>не смог MinGW
ну на этой версии Dev C++ уже стояла сравнительно новая версия, поэтому нужно было разбираться больше. Отсюда и вопрос - стоит ли ебаться

Ответы: >>544630

17 Сен, 19:13 #293 #544623

>>544566
>но лучше бы, чтобы она не была первой книгой
Стиль кодирования от автора, мелкие буквы, где стоят знаки подчёркивания, пробелы и т.д. все дела.

17 Сен, 19:25 #294 #544630

>>544621
>ну на этой версии Dev C++ уже стояла сравнительно новая версия, поэтому нужно было разбираться больше. Отсюда и вопрос - стоит ли ебаться
Если тебе принципиально нужно работать в кроссплатформенной IDE, то поебаться стоит. В итоге у тебя на разных машинах будет одинаковая среда разработки, что очень удобно. На винде 99% проблем с MinGW - это кривая переменная среды PATH. Dev C++ просто не видит компилятора или инклюды. Почитай внимательнее ошибки.
Но если линукс не нужен, но ставь VS и просто забудь про эту еблю с MinGW.

18 Сен, 05:04 #295 #544870

>>544497
>>544566
Посоны, изучаю С по K&R. Планирую после обмазаться Linux Kernel Style Guide. Этого будет достаточно?

>>544585
>она не должна быть единственным источником информации о языке C
Получается, что ты либо читаешь еще одну книгу параллельно/после (зачем тогда K&R? время не резиновое), либо гуглишь статьи и вопросы на SO - но, чтобы их гуглить, нужно уже знать, что ты хочешь найти.

Ответы: >>544896, >>545072

14 Кб, 600x600

18 Сен, 06:51 #296 #544885

Можно этот тред будет нубских вопросов о C?

Я так и не вразумею, когда прописываешь [code]int a = 10;[/code]

Программа где резервирует ~4 байта для переменной a?
Я слыхал что в block scope, ну типа в самом файле сурс кода, но в другом случае я углядел что там немного хитровыебанно, и по какой-то там hex формуле что ли хранится чето такое, потом из memory как то выгребается

кто-нить может по-русски уже сказать

2. Как написать 10^10 но так, чтобы программа calculated это значение? А то приходится писать как 1 000 000 0000 чтобы работало и калькулировала.

Ответы: >>544898, >>544900, >>544952

18 Сен, 07:42 #297 #544896

>>544870
>зачем тогда K&R?
Вот меня этот вопрос тоже волнует. Перекатываюсь на си и кресты с шарпа, и сразу встала проблема с литературой. Ну то есть хотелось бы найти некий относительно современный толмуд, куда можно было бы обращаться по необходимости, а не только SO шкурить. В шарпе это решается очень просто - кнопкой F1 плюс хелп постоянно обновляется, следуя за новыми фишками языка и это не говоря уже про StyleCop и Resharper. По крестам книг просто вагон, С++14 уже нормально расписан, поэтому тоже вопросов особо не возникает.
А с си как-то всё печально. Не, у меня, конечно есть книга 1995 года,. но это как-то несерьёзно по-моему.

Ответы: >>544952

18 Сен, 07:50 #298 #544898

>>544885
Другой нуб вкатывается. Бородатые дядьки, поправляйте.
1. Короч, есть такие понятия как declaration, definition и initialization (сори, не знаю как definition перевести). Declaration - это дать знать компилятору о новой сущности, чтобы он мог искать ошибки с ее использованием (int a;). Definition - выделяет память под эту сущность (сюрприз! в С int a; одновременно и declaration, и definition). Initialization - заполнить выделенную память чем-то на твой выбор. (int a = 10; - все три действия сразу). Разницу между Declaration и Definition легче просмотреть с функциями: void a(); - declaration; void a() { return 0; } (с телом) - definition.
Память под int a = 10; скорее всего выделена в стэке, кроме случая, если это написано вне функций - тогда в data segment.
2. Вроде в С нету такого оператора.

Ответы: >>544901, >>545109

18 Сен, 08:00 #299 #544900

>>544885
1. Да забей ты на её местоположение, нахуя тебе знать, где она лежит?
2. Если компилятор не вычисляет, то либо функцию используй, либо вычисляй заранее.

18 Сен, 08:18 #300 #544901

>>544898
Я же. Теперь моя проблема.

Я родил пару минут назад гениальный код:

char a = "abc";
(a + i) = 'z'; // i == 0; ожидание: "zbc"

И получил сегфолтом по лицу.
Забегая наперед, я уже понял что "abc" это статическая строка прямо в бинарнике, который в памяти ридонли. Проблема в том, что я это понял, случайно связав воспомниания с SO и каких-то книг. До того, как меня стукнуло это осознание, я разглядывал core dump в gdb (думал что у меня a + i выскакивает) и ни к чему не пришел.

Вопрос: каков должен быть порядок действий в gdb или неважно где, чтобы дебаггинг меня провел по такому пути. Segfault at line 2 (это было) -> Segfault cause: Write to RO area -> The area = text segment (RO) ну и следующий из этого очевидный вывод, что a указывает на text segment.

В моем же случае было Segfault at line 2 -> долго смотрел на line 2 -> ДОГАДАЛСЯ))) -> a указывает на text segment. Хочу нормальный последовательный подход.

Ответы: >>544903, >>544952

18 Сен, 08:21 #301 #544903

>>544901
Сорян, звездочки проебал, там a это указатель, и (a + i) берется по адресу.

18 Сен, 11:20 #302 #544952

>>544885
> когда прописываешь int a = 10;
> где резервирует ~4 байта для переменной a
Есть два с половиной стула. Либо ты прописываешь это внутри функции, тогда переменная будет автоматической, место под нее выделится в стеке при входе в функцию, а при выходе переменная с точки зрения языка перестанет существовать. Либо ты пишешь снаружи функции (а также внутри функции, но с ключевым словом static), тогда место под переменную будет один раз отведено при компиляции, и она будет жить после загрузки программы до ее завершения на одном и том же месте.

> какой-то там hex формуле
Поясни поподробнее. Может, тебе показывали код на асме для доступа к автоматической и статической переменной?

> Как написать 10^10
Ты можешь использовать scientific notation (1e10), но будь осторожнее.
Во-первых, это значение на 32-битной системе влезет только в long long (в обычный unsigned long влезает только 4.2e9).
Во-вторых, эта нотация определяет литералы с плавающей точкой (которые обрезаются до целого при присваивании к целочисленной переменной). Со всеми вытекающими последствиями в виде невозможности точно представить некоторые значения (хотя в double без потерь влезет всё, что тебе может пригодиться, лучше об этом помнить).

>>544896
> declaration, definition и initialization
Что-то типа объявление, определение, инициализация.

>>544901
char a[] = "abc";

> Хочу нормальный последовательный подход.
Сегфолт может быть либо потому, что по адресу ничего не замаплено (решается раздумьями, откуда в программе взялся такой указатель), либо потому что память не читается (то же), либо не пишется (то же + тут как раз может быть read-only память). Можешь сделать readelf -l и/или info proc mem и т. п. в gdb.

Ответы: >>545020, >>546185

18 Сен, 13:22 #303 #545020

>>544952
>Можешь сделать readelf -l и/или info proc mem и т. п. в gdb.
Спасибо, readelf мне показался трудночитаемым, да выше дата сегмента ничего нет, а вот (gdb) info proc mappings (и pmap) - это находка.

18 Сен, 14:31 #304 #545072

>>544870
>зачем тогда K&R? время не резиновое
Затем, что классика. Но, согласен, если ты хочешь побыстрей всё выучить и начать зарабатывать деньги, то да, можешь не читать. Эта книга больше интересна тем, кто любит язык C и хотел бы узнать о нём, как можно больше.
>гуглишь статьи и вопросы на SO
Тащемто есть ещё man, если ты работаешь в UNIX-like ОС. Для меня это достаточно исчерпывающий источник информации. Под виндой, по идее, тоже должен быть аналог.

Ответы: >>545259

18 Сен, 15:21 #305 #545109

>>544898
>Declaration - это дать знать компилятору о новой сущности, чтобы он мог искать ошибки с ее использованием
ты делаешь declaration переменной, расположенной в другой единице трансляции, чтобы сделать возможной ее использование в этой единице трансляции
компилятор же обрабатыват каждую единицу трансляции (по сути .c файл с кодом) по отдельности, формируя объектные obj файлы, далее линковщик все это собирает в исполняемый файл
другое дело, что правила declaration разные, для переменных нужно дописывать extern, для функций пишешь прототипы, свои заморочки есть для структур - тут разрабы языка поступили, как и в других случаях - строгость, формальность языка была приведена в жертву удобству и краткости

Ответы: >>545125, >>545303, >>545320

18 Сен, 15:45 #306 #545125

>>545109
> правила declaration разные, для переменных нужно дописывать extern, для функций пишешь прототипы
Для переменных не всегда обязателен extern. Но extern позволяет избежать лишних проблем. И для функций тоже можно extern, но это не решает никаких проблем, поэтому extern не пишут.

Есть один пример, выносящий мозг новичкам:
1.c:
int foo[1];
void bar(void) {
++foo[0];
}

2.c:
#include <stdio.h>
int foo[16384];
int foo[16384];
int foo[16384];

int main(void) {
extern void bar(void);
bar();
printf("foo[0] = %i\n", foo[0]);
return 0;
}

Магия! extern нет, размерность разная, definition нет, но это почему то работает. Не отвечай. Мы-то с тобой знаем, где здесь что, как работает, и какие тут проблемы. Но дай анонам самим подумать.

Ответы: >>545196, >>545258, >>545274, >>545303, >>545320

18 Сен, 16:24 #307 #545196

>>545125
> Не отвечай. Мы-то с тобой знаем, где здесь что, как работает, и какие тут проблемы. Но дай анонам самим подумать.
ох ебать, ну что за выебоны

18 Сен, 17:14 #308 #545258

>>545125
>выносящий мозг
Ну и что в нём выносящего?
Алсо С++ компилятор пошлёт тебя в жопу с твоими int foo[16384]. Пример говнокода as is.

Ответы: >>545320

18 Сен, 17:14 #309 #545259

>>545072
>Но, согласен, если ты хочешь побыстрей всё выучить и начать зарабатывать деньги, то да, можешь не читать.
За живое задел. Я изучаю С УЖЕ отрезав время от других, более перспективных в отношении денег, вещей. И переутомление подсказывает, что совмещение всего мне пора заканчивать. С - самое интересное и, увы, самое низкоприоритетное из моих занятий, а время и силы в следующий раз где-то через год будут.

18 Сен, 17:37 #310 #545274

>>545125
>но это почему то работает
> This is mentioned in the C standard in informative Annex J as a common extension:
>
> J.5.11 Multiple external definitions
>
> There may be more than one external definition for the identifier of an object, with or without the explicit use of the keyword extern; if the definitions disagree, or more than one is initialized, the behavior is undefined (6.9.2).

Ответы: >>545320

18 Сен, 19:05 #311 #545303

>>545109
>>545125
Тут следукт понимать, что кроме стандарта есть и реализация, произвольная. Например, IAR такой код проглатывает, но не проверяет сигнатуру функций.

А от extern функций тоже бывает польза. Вот я в текущем проекте ими реализовал своего рода интерфейс модуля расширения, и проверка его корректности съехала, таким образом, на линковщик.

Ответы: >>545320

18 Сен, 19:19 #312 #545311

Что за хуйню я читаю!? Это же пиздец ребята, я на Си не первый год сижу и никогда не заморачивался даже в самом битоёбском деле о такой хуйне, которая тут обсуждается. Впечатление такое, что здесь не Си изучается, а некая абстрактная хуета способная заглядывать в будущее. Зачем, зачем блядь заморачиваться над проблемой неоднозначно поставленой школьником для решения ведомых только ему, неформальных задач.

Ответы: >>545319

18 Сен, 19:53 #313 #545319

>>545311
А хуле ещё обсуждать? Не инжекты в процессы же, лол. Зато сверху вон привели классический пример, из-за которого Си люто ненавидим. Любой, сука, зстет может превратить код в нечитаемое и несопровождаемое говно. Что в мэйнстримных языках сделать несколько сложнее.

18 Сен, 19:55 #314 #545320

>>545274
Я и не говорил, что это хороший код. Я говорил, что этот код работает.
> J.5.11
Фактически, про UB там написано потому, что в одном translation unit может быть int, а в другом float, и тогда это, конечно же, UB. Одинакового размера. А механизм, позволяющий код типа >>545125 был введен в свое время не потому что >>545109
> строгость, формальность языка была приведена в жертву удобству и краткости
а потому что весь механизм заимствован и поддерживался для линковки с Fortran. И оно будет работать, потому что это де-факто стандарт и еще из-за того, что линкеру на стандарт сишечки похуй, что бы там комитет по этому поводу не думал. Хотя это и не повод так писать в наши дни.

>>545258
> С++ компилятор пошлёт тебя в жопу
У нас тут про сишечку тредик, если ты не заметил. А в сишечке это полностью валидный код. Ну, пока типы/размеры совпадают, да.

>>545303
Не совсем понял, о чём ты. Функции и так extern. Их можно сделать static, но по умолчанию они extern.

Ответы: >>545334

9 Кб, 420x237

18 Сен, 20:06 #315 #545324

прошлый тонет тут https://2ch.hk/pr/res/544175.html

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

так как было очень дахуя тупых школоты=тролей которые в глаза не видали мышку с шариком.
оптопара это 2 расположенных максимально близко датчика излучения.
колесо диск похуй как назовите можно сравнить с колесом обычного веласипеда со спицами ПРИ ЭТОМ известно, что расстояние между датчиками в опто паре МЕНЬШЕ чем толщина спицы.
развадить электрически ничего ненадо.
тое
мы имеем 2 бита изменяющихся во времени - скорость обсчета заведомо больше на несколько порядков чем скорость реакции датчиков на внешнее возбуждение.

оп пик слегка изменен красным относительно колеса в масштабе показано соотношение окон датчиков и лепестков диска (спиц ебаного веласипеда)

в прошлом треде до конечной реализации так и не дошли( выдерну наиболее перспективнаи идеи.

>>544283
>>544300
>>544321
ну и как жеж без него)
>>544366

ну на тебе задачку решиш моя помосчь тебе наврятле больше понадобится.

Ответы: >>545337

18 Сен, 20:27 #316 #545334

>>545320
>Я и не говорил, что это хороший код. Я говорил, что этот код работает.
В твоём конкретном случае работает. У кого-то это уже может не завестись. Для этого и существует понятие "неопределённое поведение". Например, если ты в 1.c сделаешь инициализацию

int foo[1] = { 1 };

то линковщик уже ругнётся.

>весь механизм заимствован и поддерживался для линковки с Fortran. И оно будет работать, потому что это де-факто стандарт и еще из-за того, что линкеру на стандарт сишечки похуй, что бы там комитет по этому поводу не думал.
Было бы ещё интересней, если бы ты какие-нибудь ссылки приложил к своему заявлению, где о подобном говорится.

Ответы: >>545372

18 Сен, 20:33 #317 #545337

>>545324
Я несовсем понял задачу, но давай подумаем. Я так понимаю тебе нужно знать куда вращается колесо со спицами?
Суть проста - чередование активации фотодиодов задаёт направление.

Вот тебе функция:

//это должны быть названия твоих диодов и их коды, физически их сопоставь как левый\правый или передний\задний или верхний\нижний, а код может быть любым значением.

#define LEFT 0b00000001
#define RIGHT 0b10000000

unsigned char previous = NULL;

unsigned char kudablya(unsigned char value)
{
if(value & LEFT && previous & RIGHT)
{
previous = value;
return RIGHT;
}
if(value & RIGHT && previous & LEFT)
{
previous = value;
return LEFT;
}

return NULL;
}

Ответы: >>545339

18 Сен, 20:37 #318 #545339

>>545337
Она принимает код активного диода и возвращает 1 из трёх значений - левый\правый и NULL, нужный для колибровки направления. Хотя о его нужности можно и поспорить. Тогда функция примет ваще примитивный вид

#define LEFT 0b00000001
#define RIGHT 0b10000000

unsigned char previous = NULL;

unsigned char kudablya(unsigned char value)
{
if(value & LEFT && previous & RIGHT)
{
previous = value;
return RIGHT;
}

previous = value;
return LEFT;
}

Ответы: >>545342

18 Сен, 20:40 #319 #545342

>>545339
Однако для её правильной работы нужно колесо двинуть туда-сюда, чтобы условие начало выполняться.

18 Сен, 21:15 #320 #545372

>>545334
> какие-нибудь ссылки приложил к своему заявлению
Ну, например: http://www.lurklurk.org/linkers/linkers.html#dups

19 Сен, 01:14 #321 #545489

Пожалуй нубский вопрос, не обессудьте: аргументы командной строки можно раздобыть где-то вне main? Про GetCommandLine знаю, однако ж требуется универсальность. Спасибо.

Ответы: >>545492, >>545677, >>545898, >>546347

19 Сен, 01:24 #322 #545492

>>545489
нет

Ответы: >>546239

19 Сен, 14:26 #323 #545677

>>545489
>аргументы командной строки можно раздобыть где-то вне main
Можно. Хуяришь глобальную переменную и оттуда ковыряешь данные по необходимости.

Ответы: >>545845, >>546239

19 Сен, 19:29 #324 #545845

>>545677
Я думаю, это и так было очевидно. Можно и как аргументы передавать другим функциям. Но в каждом случае тебе нужно сделать какие-то манипуляции в main() для этого.

Ответы: >>545854

19 Сен, 19:42 #325 #545854

>>545845
Если у тебя нет контроля над main(), в чем проблема написать GetCommandLine и аналоги под каждую следующую платформу, которую необходимо поддерживать?

Ответы: >>545869

19 Сен, 20:13 #326 #545867

Как на маке намутить gcc? Есть ли команда в терминале как в линуксе?

Ответы: >>545986

19 Сен, 20:13 #327 #545869

>>545854
Доступ к комстроке вне main есть не на всех платформах.

Ответы: >>545940

19 Сен, 20:43 #328 #545898

>>545489
обычно делают так: описывают структуру с полями где перечислены возможные аргументы, заводят глобальную переменную (зачастую сразу делают безымянную структуру), пишут функцию разбора - в нее прямо передается argc, argv, в этой функции происходит разбор и заполнение глобальной структуры
таким образом, main не засоряется - функция разбора вызывается один раз в самом начале
дальше уже пользуются данными из глобальной структуры, ну либо еще дописывают функции доступа и вызывают уже их, а не напрямую читают из структуры

Ответы: >>546239

19 Сен, 21:29 #329 #545940

>>545869
Примеры будут?

Ответы: >>545949

150 Кб, 1280x985

19 Сен, 21:36 #330 #545949

>>545940

19 Сен, 22:21 #331 #545986

>>545867
Анон, ответь

Ответы: >>545991, >>545992

19 Сен, 22:28 #332 #545991

>>545986
XCode, homebrew

19 Сен, 22:28 #333 #545992

>>545986
http://www.dmoz.org/Computers/Software/Operating_Systems/Mac_OS/Mac_OS_X/

Ответы: >>546005

19 Сен, 22:36 #334 #546003

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

Ответы: >>546006

19 Сен, 22:39 #335 #546005

>>545992
чёт яннп

Ответы: >>546008

19 Сен, 22:40 #336 #546006

>>546003
1) MISRA-C:2004 Language Guidelines
2) http://fprog.ru/2009/issue1/eugene-kirpichov-fighting-mutable-state/

Ответы: >>546031

19 Сен, 22:41 #337 #546008

>>546005
Типа коллекцiя закладок, собираемых сообществом.

Ответы: >>546012

19 Сен, 22:45 #338 #546012

>>546008
А эти компиляторы не кривые? А то не хочу как на виндоусе со всякими ошибками в стиле "вы взяли scanf, а не scanf_s".

Ответы: >>546017, >>546031

19 Сен, 22:51 #339 #546017

>>546012
Спокойно, там внутри Darwin.

Ответы: >>546021

19 Сен, 22:56 #340 #546021

>>546017
А можно поподробнее? Я в Си меньше недели, про все ништяки еще не знаю. Что за Дарвин?

Ответы: >>546026

243 Кб, 960x540

19 Сен, 23:09 #341 #546026

>>546021
Ну я это, я.

Ответы: >>546039

19 Сен, 23:14 #342 #546031

>>546006
О, привет. Тебя все еще не заебало таскать с собой это говно?

>>546012
> на виндоусе
-D_CRT_SECURE_NO_WARNINGS / -D__STDC_WANT_SECURE_LIB__=0

Ответы: >>546039

19 Сен, 23:31 #343 #546039

>>546031
Что это?
>>546026
Нет, ну серьезно

Ответы: >>546051

19 Сен, 23:43 #344 #546051

>>546039
Это магия, избавляющая майкрософтовый компилер от пропаганды _s, очевидно же.

Ответы: >>546065

20 Сен, 00:07 #345 #546065

>>546051
Отлично. А по той ссылке что можешь порекомендовать взять?

Ответы: >>546237

426 Кб, 1111x1600

20 Сен, 06:33 #346 #546185

>>544952
Вот спс!
>Либо ты пишешь снаружи функции
Ну по идее для базовых кодов, все всегда пишется внутри int main(), не? Я так и не совсем понял почему это так обязательно, тот же "printf("Hello, World!\n");" засовывать в main, почему без него то не работает?
>Поясни поподробнее. Может, тебе показывали код на асме для доступа к автоматической и статической переменной?
Ну наверное, это было на слайде, и там колонка была, типа программа резервирует память в этом месте и.т.д.

Ответы: >>546194

20 Сен, 08:07 #347 #546194

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

> засовывать в main, почему без него то не работает?
Так задумано. Код программы описывается функциями, выполнение программы начинается с функции main() и заканчивается после выхода из неё. Код вне функций никому не нужен, но можешь подумать, что было бы, если бы тебе разрешили так писать: ты линкуешь программу из двух файлов, в обоих код вне функций, какой из двух файлов должен выполниться первым? В плюсах есть такая проблема. Там у глобальных объектов конструкторы вызываются до main(). В случайном порядке.

20 Сен, 10:49 #348 #546237

>>546065
Ананасы, нид совет, я вообще ничего не понял по той ссылке

20 Сен, 11:00 #349 #546239

>>545492
>>545677
>>545898
Спасибо всем. Доступа к main нет от слова совсем просто. Странно что полно дряни типа errno, а argv, которые актуальны на всём протяжении работы, для любого потока в переменную не вынесены. Ну да и черт с ним.

Ответы: >>546278

20 Сен, 13:18 #350 #546278

>>546239
>Странно что полно дряни типа errno, а argv, которые актуальны на всём протяжении работы, для любого потока в переменную не вынесены.
Я думаю, это связано с тем, что размер argv непредсказуем.

Ответы: >>546292, >>546304

20 Сен, 13:46 #351 #546292

>>546278
Хотя я сейчас подумал, что если учитывать, что argv, argc будут лежать на стеке main() на протяжении всей работы программы, то фактически не нужно их куда-то копировать в кучу. Тащемто действительно странно, что не продумали глобальный доступ к ним by design. Может, кто из местных анонов пояснит, почему так сделали.

Ответы: >>546343

20 Сен, 14:34 #352 #546304

>>546278
Ну так-то в некоторых компиляторах (не будем показывать пальцем на Microsoft) есть __argc, __argv и даже __wargv.

20 Сен, 16:03 #353 #546343

>>546292
>argv, argc будут лежать на стеке main
Лежать будут указатели на них.
А вообще командная строка хранится в process environment block (PEB) которые создается системой при старте нового процесса. PEB кладется куда-то в адресное пространство процесса, в отличие от остальных структур процесса, что прячутся в адресное пространство системы. Это для винды, под юниксами делается как-то похоже скорей всего.
Забирать агрументы командной строки можно еще и функцией GetCommandLine.
Но тебе это знать не нужно, тк ты слишком маленький еще.

Ответы: >>546347, >>546371

20 Сен, 16:10 #354 #546347

>>546343
> Забирать агрументы командной строки можно еще и функцией GetCommandLine.
> Но тебе это знать не нужно, тк ты слишком маленький еще.
Откуда в треде столько ЧСВшных уёбков? Про GetCommandLine ещё было сказано в сообщении, с которого началось обсуждение этой проблемы >>545489

Ответы: >>546372, >>546398

20 Сен, 16:52 #355 #546371

>>546343
> Лежать будут указатели на них.
Почему это? Будут лежать именно argc и argv. На x86 на любой ос их даже найти там можно без проблем (если main не модифицировала).

> А вообще командная строка хранится в process environment block
Скорее в _PEB.ProcessParameters, но тебе это знать не нужно, тк ты слишком маленький еще.

Ответы: >>546398

20 Сен, 16:54 #356 #546372

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

Ответы: >>546385, >>546538

20 Сен, 17:21 #357 #546385

>>546372
>зачем это тебе понадобилось?
Я не тот анон, которому нужен доступ к argv вне main() из коробки. Я просто участвовал в обсуждении.

20 Сен, 17:58 #358 #546398

>>546347
>>546371
Сосите хуй, в общем. Я элита, вы говно. На этом постить прекращаю.

Ответы: >>546399

20 Сен, 17:59 #359 #546399

>>546398
Наконецто.

288 Кб, 1275x1755

298 Кб, 1275x1755

20 Сен, 18:42 #360 #546411

тред скоро пизданеца о бамп лимит
над пилить перекат.

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

первая электроника второй код а третий дружба как у поней мать их так.

Ответы: >>546419

20 Сен, 18:55 #361 #546419

>>546411
да дети да я пишу код еще под архитектуру ебаных конца восьмидесятых.
мне предлогает атмел я его нахуй шлю с его удобностью и сраными 3-5 мегагерцами.
тупым подсчетом реакции на прерывание мы видим что нас жестоко хотят наебать.
да проще да ненужен програматор да архитектура "ЗАТОЧЕННА ПОД С"
НО я на своем разогнаном ВИЖУ на порядок больше чем ты на сваих сраных 10 мегагерцах.
а если ты код неумееш писать кто тебе в этом виноват?.
мы имеем тоже что и вы да у нас нет встроенной флеши но кто мешает ее подключить?
написать код - размять сваи мазги
поиграть в угодайку погуглить даташиты всю хуйню.

20 Сен, 19:04 #362 #546420

кстати электронщики не стоит использувать ету поебалу китайскую жидкай силикон для конечных устройств.
как правило все идет на скрутках или на пайке.
эта смола меня раз пиздец как подъхебла
смантировал ну и думаю пачистю пайку бянзинчиком ОГА - ЭТА ХУЙНЯ РАСТВОРЯЕТСЯ в бянзинчиге.
и термоусадка в гавно превратилась... плак плак.
девайс надо переделывать(

20 Сен, 23:32 #363 #546538

>>546372
То не я, уже пояснили.
Мне-то просто знать наверняка надо было.
Я фана ради конпелятор теперь уже транслятор осилить пытаюсь, вот и использую в качестве "универсального ассемблера". Собственно и думал, не используя волшебных имён, подобно питону совместить тело програмы с блоком инициализации верхнего модуля и вынеся аргументы и прочее в отдельный модуль. Вобщем-то и так можно проинициализировать их из main, однако лишь для полностью подконтрольного приложения, не библиотеки например.

Ответы: >>546584

21 Сен, 02:40 #364 #546584

>>546538
Библиотеке аргументы должны либо скармливаться явно, либо она вообще не должна о них знать.

sage 23 Сен, 02:01 #365 #547721

Окей, сосоны. Поясните мне за такую хуйню. Я не буду говорить о том, что может я дебил, скажу так. Я дебил и не понимаю, какого хуя, чтобы изучить стандарт С11, на котором считается, что я должен писать, я должен платить бабки блядь? Какого хуя? Это такая же хуйня как JPEG 2000. Они тоже требуют бабки за спецификации. Какого хуя? Что за на хуй хуйня? Как изучать С11 при таком раскладе? Может K&R новое издание вышло с изменениями. Просто это вообще пиздос полнейший. Я бы вообще не возникал, если бы сейчас на венде сидел, там меня масм устраивал, но бля... На прыщах нужно как-то адаптироваться к новым стандартам и все такое. Или не надо?

Ответы: >>547781, >>547829, >>547998

sage 23 Сен, 02:05 #366 #547722

>>518732
Го свой напишем? Ну типа WxWidgets только для сишки и более аккуратный/интуитивно понятный. Сделаем кашерный ученик по нему и плюсофаги соснут хуйца, т.к. весь мир перейдет на сишку, кек.

sage 23 Сен, 02:28 #367 #547725

>>518787
Ебать уебищен этот синтаксис AT&T. У интела няша

Ответы: >>547779

23 Сен, 09:18 #368 #547779

>>547725
сорта говна

23 Сен, 09:21 #369 #547781

>>547721
Ну вроде я находил бесплатные версии в тырнете.

23 Сен, 11:34 #370 #547829

>>547721
препринты

23 Сен, 18:37 #371 #547998

>>547721
Есть TR, там всё то же, но бесплатно. Тебе хватит. Если у тебя какие-то проблемы с этим, можешь на K&R/C89 писать - многие так и делают, фанатично искореняя всякие C99измы, какой уж тут C11.

Ответы: >>548001

sage 23 Сен, 18:45 #372 #548001

>>547998
>TR
?

Ответы: >>548004

23 Сен, 18:54 #373 #548004

>>548001
Драфты же.
http://chimera.roma1.infn.it/SP/COMMON/iso-iec-9899-1990.pdf

Ответы: >>548019

23 Сен, 19:31 #374 #548019

>>548004
700 страниц, ебал я в рот

Ответы: >>548025

23 Сен, 19:51 #375 #548025

>>548019
А ты вычти введение про environment (там, в основном для разработчиков ОС и компиляторов), описание стандартной библиотеки (если уже учил Си, там не так много функций добавилось), приложения (проглядеть по диагонали или вообще не читать), и из 700 останется 150 страниц про язык. Хотя учить язык по спеке - это максимум мазохизм, конечно.

25 Сен, 14:14 #376 #548866

Байтоёбы, поясните ньюфагу, нахуя знать тыщщщу архитектур и кичиться этим? Какая нахуй разница: ARM, AVR, MIPS, x86? Ну кроме разрядности шины? Ведь сишному коду всё едино?

Ответы: >>548871, >>548932, >>548986, >>549127

25 Сен, 14:18 #377 #548871

>>548866
Если байтоёбишь просто потому что ты дохуя 1337, то чтоб выебнуться. Если для performance, то а как ещё-то? Конпелятор же не знает, какие у тебя данные, как они поступают и т.д. Да и в общем случае не всегда оптимально оптимизирует.

116 Кб, 1200x1200

25 Сен, 16:13 #378 #548932

>>548866
Как ты без ассемблера напишешь полностью ядро ОС???
Нет у меня конечно получилось 1 раз, но это было только благодаря создателям тулчейна, которые сделали так, что все само сохранялось и восстанавливалось, и предоставили интринсики для работы с указателем стека...

25 Сен, 18:16 #379 #548986

>>548866
Для общего развития, лол.
1) Сложный дебаг, дебаг чужого блоба, реверсинг.
2) Понимание, в какие примерно инструкции соберется код, помогает понять, как делать не надо (например, почему на этой конкретной системе исключения пиздец медленные, на этой часто можно пренебречь выравниванием, вот в той big-endian, и если ты хочешь совместимости, изволь ебать байтики, а вот та - вообще DSP с 24-битными словами, иди ищи пидараса, который к размеру int привязался).
3) Ну, и если у тебя сколько-нибудь критичный к скорости код, то ты рано или поздно придешь к Intel VTune Amplifier (или аналогу), а там без знания архитектуры никуда.

Ответы: >>550558

25 Сен, 23:29 #380 #549127

>>548866
>нахуя знать тыщщщу архитектур
Я не думаю, что кто-то реально шарит в большом количестве архитектур. Обычно на какой-то одной специализируются, разве нет?
>Какая нахуй разница: ARM, AVR, MIPS, x86?
DA TI OHUEL

мимо-работающий-со-SPARC'ом

29 Сен, 01:10 #381 #550558

>>548986
> на этой часто можно пренебречь выравниванием
Ты блять внатуре уебок чтоли? А ну пошел на хуй отседова на зассаные кресты, там тебе и место

Ответы: >>550565, >>550757

29 Сен, 02:02 #382 #550565

>>550558
Ну умеет x86 alignment fault проглатывать, ну пользуются этим часто. Оттого, что ты тут порвался, ничего не изменится ведь.

103 Кб, 599x527

29 Сен, 15:48 #383 #550757

>>550558
На stm8 выравнивание не нужно, например...

340 Кб, 1746x864

03 Окт, 11:40 #384 #552567

Си-нуб(Недавно закончил чтение C&R) просит помощи. Есть ли возможность реализовать в маздайной консольке цвитные строки, так, чтобы без особых костылей и надстроек над самой консолькой?

Ответы: >>552571

03 Окт, 11:45 #385 #552571

>>552567
Консолька винды 8.1 шлёт нахуй управляющие последовательности ANSI.
Выручай анон.

Ответы: >>553010

03 Окт, 14:04 #386 #552635

Накидайте что ли гитхабовских проектов на С, что бы можно было поковырять, да набраться уму-разуму. Желательно не что то крупное в котором можно утонуть.

Ответы: >>552845, >>552870, >>553146

03 Окт, 20:49 #387 #552845

>>552635

ну зайди на мой, у меня там си-карнавал просто - https://github.com/artnavsegda/artnavsegda

03 Окт, 21:28 #388 #552870

>>552635
sqlite почитай для начала.

04 Окт, 10:20 #389 #553007

Подскажите API винды для получения информации о железе. Хочу посмотреть, получится ли так определить, что мы находимся под эмулятором.

Ответы: >>553008, >>553293

04 Окт, 10:23 #390 #553008

>>553007
Нагуглировал такую штуку.
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms724958%28v=vs.85%29.aspx

Из той структуры, похоже, мало интересного можно узнать. Только о процессоре и архитектуре.

04 Окт, 10:41 #391 #553010

>>552571
WinAPI

55 Кб, 600x374

04 Окт, 15:20 #392 #553146

>>552635
Вот мое поделие.
https://github.com/shkolnick-kun/bugurtos

Ответы: >>553198

04 Окт, 16:45 #393 #553198

>>553146
Ебать ты крут

04 Окт, 18:40 #394 #553293

>>553007
Тебе нужно WMI + реестр на предмет всяких VirtualBox Additions.

05 Окт, 11:27 #395 #553765

Поцоны, может кто силен в C и SYSV Shared memory одновременно?
Вобщем смысл в том, что нужно создать сегмент с заранее заданым shmid, а не рандомным, как делает функция shmid().
Далее аттач уже работает, и все хорошо.

Или подскажите, как такие сегменты создавать, чтобы id=0, 1, итд было, а не рандомное uint32_t число?
~ # ipcs -m

------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 0 admin 666 557056 7
0x000006fd 32769 admin 666 12692 1

Ответы: >>553784, >>553788

22 Кб, 593x271

05 Окт, 12:37 #396 #553784

>>553765
А чем тебе не нравится рандомное число?

Ответы: >>554019

32 Кб, 604x209

05 Окт, 12:48 #397 #553788

>>553765
Вот тут пример, как работать с шаред мемори.
https://www.cs.cf.ac.uk/Dave/C/node27.html
Базарю, ID знать не надо, надо знать key.

Ответы: >>554019

05 Окт, 19:25 #398 #554019

>>553784
Ну, проблема немного шире: я пишу интерфейс к махровой проприетарщине, которая работает через shm, так вот в качестве shmid там может быть число от 1 до 16, и оно жестко зашито во всех программах в этом комплексе.
И вот каким-то образом оригинальный интерфейс управления создает сегмент shmid с id равным 0-16, в то время, как функция shmid из uclibc (а эти программы тоже на uclibc писаны) возвращает совсем не те значения.

>>553788
Key мне никак не поможет. Видишь листинг ipcs? Там key=0, а если я сделаю shmid с таким key, то он вернет совсем не 0, а функцию от этого key с результатом ближе к концу uint32_t.

Вообще, полное задание имеет вид "скопировать shmid 0 в shmid 1", при этом shmid=1 не существует, т.е. его надо как-то создать.

Ответы: >>554022, >>554084

05 Окт, 19:30 #399 #554022

>>554019
Да, пробовал IDA на этих утилитах, но постиг неудачу: архитектура MIPS, а для нее нет hex-rays decompiler, и вообще многих штук, которые бы повысили читаемость кода до того уровня, чтобы я осилил листинг.

05 Окт, 20:33 #400 #554084

>>554019
Ка грустно быть тобой!
Начнем с того, что стандарт posix определяет только api, соответственно нет переносимого надежного способа заставить shmget сгенерировать тебе сегмент памяти с id из определенного диапазона.
То есть в этой твоей пипиетарщине используют грязный хак с системными вызовами в обход uclibc.
И самое хуевое, что после обновления Ядра может перестать работать сама пипиетарщина.

Ответы: >>554110

05 Окт, 21:10 #401 #554110

>>554084
Непереносимый код мне и не нужен, учитывая то, что эта проприетарщина также никуда перенесена быть не может.
Вот только я не понял, как там этот shmget дергает системные вызовы?
в системный вызов ведь также передается и key, т.е. получается там ядро хакнуто?

вот код uclibc:
int shmget (key_t key, size_t size, int shmflg)
{
return __syscall_ipc(IPCOP_shmget, key, size, shmflg, NULL, 0);
}

#define __NR___syscall_ipc __NR_ipc
#include "ipc.h"
_syscall6(int, __syscall_ipc, unsigned int, call, long, first, long, second, long,
\t\t third, void , ptr, void , fifth)

Ответы: >>554242, >>554247

05 Окт, 21:33 #402 #554127

Анон, подскажи, как на Си намутить безопасный массив. Гугл завален гайдами на С++, а на Си ничего нет.

Ответы: >>554156, >>554277

05 Окт, 22:35 #403 #554156

>>554127
А безопасный - это как? Границы проверять при доступе? Ну так сделай Array_Get, Array_Put и проверяй.

Ответы: >>554177, >>554178

05 Окт, 23:24 #404 #554177

>>554156
Да, границы от перезаполнения

05 Окт, 23:26 #405 #554178

>>554156
Можешь рассказать поподробнее про эти две функции? Я первую неделю на Си

Ответы: >>554181

05 Окт, 23:34 #406 #554181

>>554178
Не могу, я их выдумал. Если тебе нужно проверять границы - проверяй их при каждом доступе. Чтобы не забыть о проверке случайно, оберни доступ к массиву в функцию.

Ответы: >>554185

05 Окт, 23:53 #407 #554185

>>554181
А как это реализовать? Ассертом?

06 Окт, 01:36 #408 #554242

>>554110
Не обязательно, может там просто задана определенная конфигурация при которой может быть всего 16 сегментов, х.з короче.

Ответы: >>554265

47 Кб, 600x628

06 Окт, 02:18 #409 #554247

>>554110
Обрати внимание на два крайних аргумента, что будет, если они будут не нулевыми?

Ответы: >>554264

06 Окт, 06:32 #410 #554264

>>554247
они похоже, зарезервированы для совместимости, дальше вызов имеет вид:

case SHMGET:
return sys_shmget(first, second, third);

Проблема только одна: не могу найти код самого sys_shmget, может я настолько туп? Ищу в исходниках ядра, и не нахожу конкретики.

Ответы: >>554369, >>554371

06 Окт, 06:34 #411 #554265

>>554242
Не, их можно создавать через shmget с номерами явно большими, я проверял.

06 Окт, 08:06 #412 #554277

>>554127
запили функцию, которой будешь контролировать все свои опасности и работай с массивом только через неё.

06 Окт, 10:01 #413 #554316

>>518732
Ты забыл про Windows API.

91 Кб, 800x606

06 Окт, 13:04 #414 #554369

>>554264

http://lxr.free-electrons.com/ident?i=sys_shmget
Надо в гугле искать, а не самому исходники рыть, она платформеннозависима, соответственно ты и не можешь её найти п кроссиплатформенном коде.

39 Кб, 599x448

06 Окт, 13:10 #415 #554371

>>554264
А нет, она вполне себе кросс....
http://lxr.free-electrons.com/ident?v=2.4.37;i=sys_shmget

Ответы: >>554392

06 Окт, 13:22 #416 #554374

Аноны, помогите начинающему. Есть допустим stdio.h, там прописана декларация функций и прочая-прочая. Остальное где? Откуда сами функции берутся? Как это всё происходит?

Ответы: >>554457, >>554473

06 Окт, 14:37 #417 #554392

>>554371
Спасибо, анон!
По твоей наводке удалось проследить, как оно создается:
отсюда http://lxr.free-electrons.com/source/ipc/shm.c?v=2.4.37#L231
идем сюда http://lxr.free-electrons.com/source/ipc/shm.c#L484
и начинаем греть голову, как бы это все вызвать в реальном коде. Пока идей нет.

Ответы: >>554397

06 Окт, 14:54 #418 #554397

>>554392
А вот тут - ахтунг!
Этот файл из linux 2.4.х!
У тебя какая версия ядра?

Ответы: >>554401, >>554424

06 Окт, 15:10 #419 #554401

>>554397
У линуса на гитхабе это все тоже есть.
И да smid <= 16 это колдунство то еще,
такое впечатление, что эти куски памяти создаются в самом начале работы ядра.

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

Ответы: >>554424

06 Окт, 15:59 #420 #554424

>>554397
Да, там 2.6.30, я естественно с оглядкой на это ядро делаю.

>>554401
Да, сейчас попробовал: если не создано вообще ни одного shm-сегмента, то shmid первым создает сегмент 0, а вот уже второй сегмент создается с большим ID.
Теперь пытаюсь выяснить: то ли сегменты <16 все-таки можно создать, то ли создатели этого дела ебанутые, и остальные 15 никогда там не работали и не проверялись.

Ответы: >>554427

06 Окт, 16:10 #421 #554427

>>554424
Короче, аноны, докопался:
http://lxr.free-electrons.com/source/ipc/util.h#L158

Получается, создать их все-таки можно, но не в текущем ядре, на котором крутится система.
т.к. по дефолту SEQ_MULTIPLIER = 32768, и соответственно, создаются сегменты с 32768*номер сегмента + id сегмента.
Итого, единственные вариант, где номера сегментов будут нужные: SEQ_MULTIPLIER = [0-15].
Теперь ищу в ядре, где это значение записано, и поменяю бинарно (а ядро тоже блобом, патчей, который накатил создатель этого дерьма - также нет).

Ответы: >>554432, >>554438, >>554446

442 Кб, 455x500

06 Окт, 16:22 #422 #554432

>>554427
>SEQ_MULTIPLIER
http://lxr.free-electrons.com/source/include/linux/ipc.h#L8
Вот оно, держи.
школьник кун

Ответы: >>554433

69 Кб, 560x416

06 Окт, 16:24 #423 #554433

>>554432
точнее так:
ать: http://lxr.free-electrons.com/source/ipc/util.h#L16
два: http://lxr.free-electrons.com/source/include/linux/ipc.h#L8

190 Кб, 900x557

06 Окт, 16:31 #424 #554438

>>554427
Я бы не стал так менять, ибо можно жестко наколоться!
Кто знает, что там еще поменяно???
школьник-кун

Ответы: >>554443

06 Окт, 16:39 #425 #554443

>>554438
Ты так говоришь, как-будто у меня есть выбор!

Ответы: >>554450

95 Кб, 800x517

06 Окт, 16:41 #426 #554446

>>554427

158 static inline int ipc_buildid(int id, int seq)
159 {
160 return SEQ_MULTIPLIER * seq + id;
161 }

265 new->id = ipc_buildid(id, new->seq);
266 return id;

Мне кажется, или тут fail???

Ответы: >>554452

59 Кб, 437x604

06 Окт, 16:51 #427 #554450

>>554443
seq - это номер версии,

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

Походу, твои быдлокодеры считают, что сегменты создаются в самом начале работы...

Ответы: >>554453, >>554454

06 Окт, 16:52 #428 #554452

>>554446
Вообще, возвращает оно то, что надо, так что скорее всего id = key, new->id = shmid или что-то подобное.

287 Кб, 599x527

06 Окт, 16:53 #429 #554453

>>554450
Ядро патчить не надо, попробуй передать вместо настоящего shmid вот такое значение:
shmid%SEQ_MULTIPLIER,
вдруг сработает???

Ответы: >>554456

06 Окт, 16:55 #430 #554454

>>554450
Могу только сказать, что оно никогда не освобождается при работе, там даже перезапуск сервисов не предусмотрен.
Возможно этот юзерспейс писался для какого-нибдуь старого ядра, или для ядра с таким патчем:
http://www.programdoc.com/1272_129170_1.htm
Но я проверил, патч в ядро не брали, и в том ядрес, на котором все это работает, такого нет.

Ответы: >>554456

06 Окт, 16:59 #431 #554456

>>554454
Вот это
>>554453
должно сработать, ибо похоже, для сегментов история не проверяется в ядре...

Ответы: >>554460

06 Окт, 17:00 #432 #554457

>>554374
Нельзя тупые вопросы задавать, да?

06 Окт, 17:04 #433 #554460

>>554456
> должно сработать, ибо похоже, для сегментов история не проверяется в ядре...

Не сработало: если таким образом модифицировать key, то id выдается тот же самый, ничего не меняется.
Если модифицировать id, то shmat (dst): Identifier removed
Т.е. зааттачиться к сегменту не выходит.

Ответы: >>554461, >>554462

06 Окт, 17:06 #434 #554461

>>554460
Значит ШМАТ проверяет версию сегмента, жаль.

06 Окт, 17:15 #435 #554462

>>554460
>shmat (dst): Identifier removed
Ну тогда придется патчить ядро,
проследи все зависимости от SEQ_MULTIPLIER, и поправь их так, чтобы не было зависимости от версии.

06 Окт, 17:57 #436 #554473

>>554374
А сами функции линкер берет из библиотек (.a, .lib) - там хранится набор уже скомпилированных в объектные файлы функций (статическая библиотека) или указания, в какую .so/.dll обратиться за этими функциями при запуске (динамическая библиотека). Одна из библиотек называется CRT (C runtime library) и цепляется автоматически, поэтому от тебя никаких телодвижений не требуется.

Ответы: >>554477

06 Окт, 18:07 #437 #554477

>>554473
Спасибо, анон! А откуда линкер знает, к какой библиотеке это относится? Я просто пытаюсь разобраться в механизмах всего этого.

Ответы: >>554488, >>554531

06 Окт, 18:24 #438 #554488

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

Ответы: >>554512

06 Окт, 18:57 #439 #554512

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

06 Окт, 19:38 #440 #554531

>>554477
> Вот я включаю заголовок либы в свой файл, по скобкам или кавычкам определяется локальный заголовок или нет.
Никакой разницы, системный это заголовок или твой. И даже заголовок ли это вообще (ты с тем же успехом можешь декларировать функции сам). Когда ты декларируешь, но не определяешь функцию или глобальную переменную, компилятор помещает в объектный файл имя (символ), помеченное как extern. Типы либо кодируются прямо в это имя (в С++, гугли name mangling), либо теряются (в С в лучшем случае в символ попадает общий размер аргументов функции).
На этом работа компилятора заканчивается, и в дело вступает линкер. У него перечислены объектные файлы (то, во что скомпилировалась программа), а затем библиотеки (дефолтная, плюс указанные тобой).
Линкер пытается для кажого extern (не определённого, внешнего) символа найти объектный файл, где определён символ с таким же именем (public символ). Т.е., он связывает, допустим, обращение к fopen из твоего объектного файла с тем объектным файлом, где лежит fopen. Поэтому он и называется линкер ("редактор связей" в старой русскоязычной литературе).
Если символ не был найден в объектных файлах, линкер идёт по списку библиотек (в том порядке, в котором они указаны). Когда он находит символ в одной из библиотек, он "достаёт" из библиотеки соответствующий объектный файл и добавляет его к списку объектных файлов, участвующих в сборке. Этот процесс повторяется, пока линкер не разрешит все extern-символы, или пока не закончатся библиотеки в списке. В первом случае линкер пойдёт компоновать исполняемый файл, а во втором он скажет "undefined reference to _some_name".

Ответы: >>554544

06 Окт, 19:48 #441 #554544

>>554531
Блин, даже не знаю, как тебе благодарность выразить, настолько четко и ясно объяснил. Ебану вискаря за твое здоровье. Спасибо огроменное! Двач-помогач!

06 Окт, 20:02 #442 #554558

помогите нульку, господа.
почему я получаю Segmentation fault(core dumped)?

http://pastebin.com/znRAfFhZ

Ответы: >>554605

06 Окт, 20:47 #443 #554605

>>554558
Ты объявил указатель s в main, но: ты не инициализировал этот указатель, и в результате getchars пишет введённый текст в случайное место памяти (чаще всего в стеке). Поэтому программа падает.
Чтобы прочитать строку, тебе нужно выделить под неё буфер. Например, так: char s[MAXLINE]; или ты можешь использовать malloc().

Ответы: >>554610

06 Окт, 21:01 #444 #554610

>>554605
спасибо!

06 Окт, 22:13 #445 #554646

Анон, ответь мне, как проделать это.
http://ru.stackoverflow.com/questions/455873/%D0%A5%D0%B5%D1%88-%D0%BE%D1%82-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8-%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BD%D0%B0-%D0%B2%D0%B8%D0%BD%D0%B4%D1%83

Ответы: >>554673

06 Окт, 22:56 #446 #554673

>>554646
Ты вконец охуел. Хотя бы вопрос сюда скопировал!

> Как узнать, сколько вордов занимает функция
Никак это не проделать в общем случае. Ты можешь пропарсить объектники или отладочную информацию, отсортировать и посчитать размеры но по ссылке совершенно справедливо пояснили за инлайн. Или можешь собирать без оптимизаций или с оптимизациями, но контролируя каждый билд дизассемблером и надеяться на то, что компилятор не меняет порядок функций. Но проще всего вынести всё необходимое тебе в .dll и посчитать хэш сразу всей кодовой секции.

Ответы: >>554676, >>554677

sage 06 Окт, 22:58 #447 #554676

>>554673
Алсо, добавлю, что Visual Studio уже достаточно давно увлекается неполным склеиванием функций, превращая код в страшную лапшу, когда адрес конца функции меньше адреса её начала. Так что нужно очень внимательно смотреть за оптимизациями и прочим LTCG.

06 Окт, 22:59 #448 #554677

>>554673
Пиздец, нахуя тогда в той книге этот пример с хешированием по вордам функции?

Ответы: >>554680

06 Окт, 23:01 #449 #554680

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

Ответы: >>554685, >>554686, >>556729

06 Окт, 23:04 #450 #554685

>>554680
>Книгу покажи
www.cs.arizona.edu/~collberg/.../lecture1.pdf

06 Окт, 23:05 #451 #554686

>>554680
Блджад, вот.
http://www.cs.arizona.edu/~collberg/Teaching/mgu/2015/

Ответы: >>554696

06 Окт, 23:19 #452 #554696

>>554686
А. Ну смотри, раз ты в это лезешь, ты должен быть готов мириться со всем этим говном.
В книге гцц, в гцц можно брать адреса меток lecture1.pdf, страница 31, например - разница между двумя адресами даст тебе приблизительный размер функции. Иногда, лол. Когда-нибудь ты будешь делать "правильно", а пока просто собирай с -O0

Ответы: >>556101

33 Кб, 200x200

10 Окт, 06:22 #453 #555803

>>518562 (OP)
Есть задача. Программу написанную на Си нужно переписать на ассемблер. Есть .ехе и .с файлы. Программа небольшая. Анон, помоги.

Ответы: >>555871

10 Окт, 11:00 #454 #555849

Посоны, как работать с memmem? (_GNU_SOURCE)

можете привести пример рекурсивного вызова? (надо найти все позиции, которые создержат искомые бинарные данные)

просто когда я засовываю memmem в while() оно ловит segmentation fault, а если хоть 100 раз подряд написать без while - работает нормально.

Ответы: >>556090

10 Окт, 11:50 #455 #555871

>>555803
А почему не хочешь, чтобы компилятор тебе ее на ассемблер переписал?
у GCC есть:
gcc -S hello.c
у других скорее всего аналогично.

10 Окт, 22:59 #456 #556090

>>555849
> просто когда я засовываю memmem в while() оно ловит segmentation fault,
Покажи, как засовываешь.

10 Окт, 23:36 #457 #556101

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

Ответы: >>556114

11 Окт, 00:01 #458 #556114

>>556101
Если ты будешь делать в реальности что-то защищать, ты можешь, например, взять свой объектный файл с защищаемым кодом и посмотреть/посчитать в дизассемблере точную длину функции. Или пропарсить объектный файл, отсортировать символы и считать функцией все байты до следующего символа.
Если же ты шифруешь секцию целиком, ты можешь просто распарсить заголовки исполняемого файла, там будут точные размеры и офсеты секций - их загрузчик использует.
Ещё протекторы делают макросы для программиста с _emit (http://stackoverflow.com/questions/731428/what-is-the-equivalent-of-emit-on-linux) последовательностей магических байтов в нужных местах функции, протектор их ищет в бинарнике и заменяет эти последовательности и код между ними на шифрованный эквивалент. Например, https://www.google.com/search?q=макросы%20themida

Ответы: >>556275, >>556710

11 Окт, 11:49 #459 #556275

>>556114
Насколько сложно самому написать парсер объектных файлов и как это можно сделать? Ничего не нагуглил об этом.

Ответы: >>556967

11 Окт, 20:36 #460 #556587

http://pastebin.com/LiMhctkb
Анончик, почему сишка - неортогональное говно?

Ответы: >>556593

11 Окт, 20:42 #461 #556593

>>556587
Потому что переменные любого типа приводятся к int.

49 Кб, 560x373

11 Окт, 22:20 #462 #556669

А где можно посмотреть на различные коды написанные на C?
Есть ли сайт где можно сортировать списки кодов по просмотрам, фаворитам, дате?
Мне было бы интересно полюбоваться различными интересными кодами (с комментариями естественно), ну например код в котором все слова переводятся в верхний регистр (uppercase).

И кстати, может кто-нить подсказать, где все программеры тусуются? Ну на каком сайте/irc канале? русскоязычный/англоязычный
а то я только про канал #C на freenodes знаю

Ответы: >>556672, >>556710

11 Окт, 22:23 #463 #556672

>>556669
>А где можно посмотреть на различные коды написанные на C?
Скачай бубунту, там их дохуищща.

>Есть ли сайт где можно сортировать списки кодов по просмотрам, фаворитам, дате?
нет.

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

11 Окт, 23:23 #464 #556710

>>556114
(MS) COFF - очень просто, ELF чуть сложнее. Можно готовые либы найти. А вообще, гугли форматы. Можешь википедию для начала почитать.

>>556669
На гитхабе есть поиск по языку, тебе мало? Ну иди на ideone, pastebin, govnokod.

11 Окт, 23:52 #465 #556729

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

Ответы: >>556742, >>556746

12 Окт, 00:11 #466 #556742

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

Ответы: >>556745, >>556746

12 Окт, 00:12 #467 #556745

>>556742
>функцией
функцию

фикс

12 Окт, 00:14 #468 #556746

>>556729
> Что то мне кажется ты немножечко пиздишь
Я говорил ПО СТАНДАРТУ (преобразование указателей на данные в указатели на функции упоминается в Common Extensions, но это не портабельно).

На x86 ты можешь читать код. Но не ограничивайся x86, ознакомься, например, с https://ru.wikipedia.org/wiki/Гарвардская_архитектура

>>556742
>найти сигнатуру соответствующую команде jmp
Существует как минимум три способа вернуть управление на x86 и ещё десяток других на других архитектурах. При этом они все могут применяться в одной и той же функции, т.к., return может быть несколько, да и компилятор может парочку своих воткнуть.

Ответы: >>556836

12 Окт, 07:59 #469 #556836

>>556746
>При этом они все могут применяться в одной и той же функции, т.к., return может быть несколько, да и компилятор может парочку своих воткнуть.

ааа, внатуре

12 Окт, 14:27 #470 #556967

>>556275
в потрохах бекэндов яп очевидно же

15 Окт, 12:19 #471 #558872

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

Ответы: >>559214

Аноним 15 Окт, 21:31 #472 #559214

>>558872
http://drakon.su/
Тут есть всё, что тебе нужно знать об алгоритмах и их красивом оформлении.

Ответы: >>559216, >>559389

Аноним 15 Окт, 21:32 #473 #559216

>>559214
Чтоб не блукал по ссылкам
http://drakon.su/biblioteka/start

sage 16 Окт, 02:03 #474 #559389

>>559214
Ты опять выходишь на связь?

12 Кб, 597x392

16 Окт, 03:18 #475 #559428

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

Ответы: >>559470

16 Окт, 06:48 #476 #559470

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

1) В case 10 дублируется условие.
2) mass2[i - 5] будет писать вне массива при flag != 0 && i < 5. flag точно инициализируется 0?
3) В default не хватает break (не критично, пока ты еще case не добавишь в конец).
4) Если Inter() будет выдавать последовательность 1 1 1 1 1 10 2 2 2 2 2 12, ты заполнишь массивы разными элементами. Хуй знает, что тебе не нравится.
5) Перепиши это говно.

10 Кб, 263x193

prime number 16 Окт, 10:11 #477 #559535

Пытаюсь найти наименьший prime number greater than the inputted value (наименьшее простое число, которое больше чем введенный номер).

Допустим, юзер ввел 8, а программа должна найти следующее простое число (prime number) = 11.
https://ideone.com/uKcWmo

Кстати, как мне "дебугнуть" мой код? А то он чето не пашет сейчас. У меня есть встроенный lldb, который работает как gdb debugger.

Я ввел в него скомпилированный код test.out
а дальше попытался дебугнуть этот код, не получилось.

Ответы: >>559554, >>559927

16 Окт, 10:37 #478 #559554

>>559535
Ты документацию к lldb читал? Так иди читай.
http://lldb.llvm.org/tutorial.html
http://lldb.llvm.org/lldb-gdb.html
Файл ил консоли lldb грузится командой "file test.out".

16 Окт, 22:36 #479 #559927

>>559535
У тебя в программе нет ни генератора простых чисел, ни проверки делимости (кроме 2 и 3).

20 Окт, 15:20 #480 #562156

Хочу попросить помощи для студента-первокурсника, чтобы добрые аноны помогли разобраться в постейших лабараторных на си.
Хочу очень во всем этом разобраться.
Мои контакты: [email-masked]

Ответы: >>562158

20 Окт, 15:27 #481 #562158

>>562156
А напиши их сюда, мне вот оче интересно что за лабораторные,
мимобезвышки

Ответы: >>562169

2464 Кб, 2236x2236

2153 Кб, 2322x1899

20 Окт, 15:40 #482 #562169

>>562158
Очень простые. Но я хотел бы именно позадавать вопросы, понять.
Задание номер 10

20 Окт, 16:59 #483 #562227

Среда monodevelop, Ubuntu 14.04, math.h добавлен, в параметрах компиляции прописано -lm -lSDL -lGL -lc -lgcc

Error: undefined reference to `sinf' (5555)

Какого хуя, а?

Ответы: >>562233, >>562754

20 Окт, 17:01 #484 #562233

>>562227
А, и компилятор GCC.

21 Окт, 04:09 #485 #562754

>>562227
Покажи финальную командную строку линкера.

92 Кб, 175x175

22 Окт, 17:33 #486 #563795

Привет, погроммач, я тоже первокур, который мало чего понимает.
Помогите мне, пожалуйста, разобраться с самым простым.
Нужно разобраться, как работают циклы (особенно те, што считают суммы квадратов чисел, считают всякую тригонометрию) и массивы; и как, сопсно, обозначать и правильно использовать переменные, как подбирать нужные к ним действия.
Лучше по скайпику линк: "gnwoerk", штобы тут не засорять.
Надеюсь на доброту анона.

Ответы: >>563873

22 Окт, 18:49 #487 #563836

>>518562 (OP)
Приветствую вас. Ни у кого случайно не завалялась реализация фибонначиевых куч на си? Был бы ультра благодарен за подгон. lonelypath[at]yandex.ru если что. Всем счастья.

Ответы: >>563873

22 Окт, 19:55 #488 #563873

>>563795
>>563836
Что за хуесосы в православном треде?

Ответы: >>564224

23 Окт, 13:27 #489 #564224

>>563873
А што, собствинна, не так? Мммм?

31 Окт, 16:41 #490 #570112

Анон, какая есть функция в СИ, чтобы округлить дробную часть числа до определенного десятка. Например, число 2.982001 до 2.982000

Ответы: >>570130

31 Окт, 16:48 #491 #570130

>>570112
До тысячных?
floor(2.982001*1000) / 1000, но имей в виду, что не все числа могут быть точно представлены в виде float или double.

Ответы: >>570133, >>570142

31 Окт, 16:50 #492 #570133

>>570130
Спасибо, надеюсь сработает

Ответы: >>570139

31 Окт, 16:54 #493 #570139

>>570133
Если тебе жизненно необходимо точное представление, изобрети свой fixed-point и храни тысячные в целочисленной переменной (т.е., например, не метры с плавающей точкой, а миллиметры без нее).

31 Окт, 16:55 #494 #570142

>>570130
Ты можешь объяснить почему это так работает?
Я знаю что такое флор, но вот именно как ты сделал до тысячных, а если мне надо до 10000сячных?

Ответы: >>570179

31 Окт, 17:03 #495 #570179

>>570142
floor округляет вниз (1.23 -> 1, 1.9 -> 1). Есть еще round, который округляет как в школе (1.23 -> 1, 1.9 -> 2) и ceil который округляет вверх (1.23 -> 2, 1.9 -> 2).

Тебе нужно оставить тысячные доли, а остальное отбросить. Ты умножаешь число на тысячу, "перемещая" эти нужные тебе разряды из дробной в целочисленную часть (2.982001*1000 -> 2982.001) и отбрасываешь оставшуюся дробную часть (floor(2982.001) -> 2982.0). После этого ты возвращаешь разряды обратно в дробную часть, разделив результат на 1000 (2982.0 / 1000 = 2.982).

> если мне надо до 10000сячных
Значит на 10000 и умножаешь/делишь. Это арифметика школьная, куда точку поставить.

Ответы: >>570186

31 Окт, 17:05 #496 #570186

>>570179
Спасибо большое, так и думал

02 Ноя, 13:58 #497 #571325

Есть живые?
Объясните нубу как пользоваться pipe. Вот есть у меня легендарный процесс A и его дочерний популярный процесс B, я ввожу некие данные в A, но мне нужно передать их в B, обработать их там и вернуть результат в A, как это провернуть?

Ответы: >>571867, >>572379

03 Ноя, 00:32 #498 #571867

>>571325
http://www.tldp.org/LDP/lpg/node7.html

https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa365574(v=vs.85).aspx

Ответы: >>572109

31 Кб, 491x311

03 Ноя, 11:47 #499 #572109

>>571867
Спасибо, буду мозг ебать пытаясь зрозумить.

Ответы: >>572391

03 Ноя, 20:07 #500 #572379

>>571325
Методов на самом деле дохуя,
выбор зависит от задачи...

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

Ответы: >>572534

03 Ноя, 20:21 #501 #572391

Спрошу в тонущем треде, дабы не засорять раздел.

>>572109
>зрозумить
Одни хохлы, блядь. И под кроватью хохлы. Вы всегда были или набижали после скачек? Не замечал вас до 2013 года в русскоязычном сегменте интернета. Даже вконтакте вас особо заметно не было.

Ответы: >>572426, >>572534

03 Ноя, 21:13 #502 #572426

>>572391
Скоро сам забалакаешь на ихней мове.

03 Ноя, 23:02 #503 #572534

>>572379
Ну я просто учусь пока, процессов 2 (про дочерний я напутал чутка): запускаю процесс (программу), ввожу туда пачку значений (пускай будет 2, не суть важно наверное), запускается второй процесс через execl, который по pipe должен получить эти значения, обсчитать и вывести результат. Находятся они на одной машине, до сетей пока еще не дошел.
>>572391
Мань, заспокойся, руssкий я, руssкий.

04 Ноя, 16:44 #504 #572994

>#include <iostream>
>#include <sstream>
>#include <algorithm>
>#include <iterator>
>
>int main()
>{
> std::string str;
> std::getline(std::cin, str);
> std::istringstream ist(str);
> std::copy(std::istream_iterator<std::string>(ist),
> std::istream_iterator<std::string>(),
> std::ostream_iterator<std::string>(std::cout, " ") );
>}
Как этот кусок(удаляет лишние пробелы между словами) переписать на Си, посоны? Желательно объяснение для моего уровня дцп-кодера.

Ответы: >>573136, >>573140

04 Ноя, 18:44 #505 #573136

>>572994
Это кресты? Ну и пиздец же

Ответы: >>573167

04 Ноя, 18:47 #506 #573140

>>572994
char input[100] = {"surprise mother fucker"};
char result[100];
// fgets(input, 100, stdin);
for (int i, j = 0; i < strlen(input); i++, j++) {
\tif (input == ' ') {
\t\twhile (input[++i] == ' ') {}
\t\tresult[j++] = ' ';
\t}
\tresult[j] = input;
}
printf("%s\n", result);

Ответы: >>573145

04 Ноя, 18:55 #507 #573145

>>573140
http://pastebin.com/00bCJT7N

Ответы: >>573167

04 Ноя, 19:16 #508 #573167

>>573136
Ага, они самые.
>>573145
Не работает. Когда запускаю ничего в консоли не выводит и потом закрывается. В кодблокс компилировал если что.

Ответы: >>573169

04 Ноя, 19:17 #509 #573169

>>573167
Лол, в Дев спп работает, но после выполнения есть строка >щ@

Ответы: >>573172

04 Ноя, 19:18 #510 #573172

>>573169
А если по одному символу вводить, то нет этой строки.

04 Ноя, 19:21 #511 #573177

Всё, заработало. Спасиб :3

04 Ноя, 20:20 #512 #573247

Вернемся к вопросу по pipe, издание второе уточненное и дополненное: как положить данные в pipe в процессе А, а потом забрать их оттуда в процессе B?

Ответы: >>574063

05 Ноя, 02:41 #513 #573595

#include <stdio.h>
#include <stdlib.h>

int main()
{
int n=0, i=0, j, k=0, x=0;

FILE input, output;

if ((input = fopen("input.txt", "r")) == NULL)
printf("no file\n");
else
fscanf (input, "%d", &n);
output = fopen("output.txt", "wt");
while (k<=n)
{
k=0;
i++;
x=x+i;
for (j=1; j<n; j++)
{
if((x%j) == 0)
k++;
}
}
fprintf(output,"%d",x);
fclose(input);
fclose(output);

return 0;
}

помогите, какого хуя программа не завершается. просто запускается и нихуя не происходит. из дебага нихуя не понятно

Ответы: >>573638, >>579760

05 Ноя, 08:22 #514 #573638

>>573595
Бесконечный цыкол

Ответы: >>579760

05 Ноя, 18:17 #515 #574063

>>573247
Сам разобрался.

09 Ноя, 01:10 #516 #576540

Пора перекат пилить. Кто решиться стать опом?

13 Ноя, 03:04 #517 #579551

>>518562 (OP)

Запилил перекат.
Все у кого есть глаза, приглашаются сюда >>579550 (OP)

13 Ноя, 15:02 #518 #579760

>>573595
как верно заметил >>573638 , у тебя бесконечный цикл.
При каждой итерации ты присваиваешь k = 0
[CODE]
while (k<=n)
{
k=0;
[/CODE]

Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 26 ноября 2015 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion