24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Аноним 21/07/15 Втр 18:09:04 #1 №518562 
14374913446790.jpg
Коданы, может я пиздоглазый, но не заметил треда про Си не плюсы или решетка, а чистый си
Хочу программировать под микроконтроллеры и байтоебить. Подкиньте хорошей литературы. И еще интересно, является ли знание сабжа, на достаточном уровне, так сказать плюсом в карму, при устройстве на работу. Алсо, большой роли плюсы в карму не играют, больше для себя собираюсь этим заниматься.
Аноним 21/07/15 Втр 18:25:34 #2 №518572 
Они емнип когда-то были, но не взлетели. В принципе, крестотред уже и так наполовину забит байтоебством, в прошлом вон вообще асм был, так что почти рилейтед и можно спрашивать там. Но если ты возьмешься за поддержание отдельного, будет здорово.
Аноним 21/07/15 Втр 19:46:09 #3 №518635 
win в /pr/ не обсуждают, вот и весь сказ.
Аноним 21/07/15 Втр 20:26:29 #4 №518660 
Вот насчет кармы это ты очень верно сказал
Си - это печать на всю жизнь
Освоил c#, python, erlang, haskell, go
А работа все равно уже 16 лет находится только на си и иногда на крестах
Все это мое "саморазвитие" нахуй никому не нужно
Прям хоть профессию меняй
Аноним 21/07/15 Втр 21:05:36 #5 №518704 
14375019369470.jpg
>>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 радикально не становятся.
Аноним 21/07/15 Втр 21:11:00 #6 №518708 
А что, еще остались контроллеры без крестов?
Аноним 21/07/15 Втр 21:16:14 #7 №518712 
14375025748250.png
>>518704
> gtk
Аноним 21/07/15 Втр 21:30:52 #8 №518720 
C (няшная сишка) - самый простой и убогий язык из тех, что используются на практике. Более убогий - только брейнфак. Единственное выразительное средство - копипаст, для автоматизации которого есть даже специальный второй язык-препроцессор. Делает решение любой задачи нетривиальным, так что его решение задач с его помощью может требовать высокой квалификации. Тем не менее, типичная няшаблядь ничего не знает и не умеет. Даже дибиловатый обгвидок знает, помимо гвидопыха, еще и сишку, но сишкаблядь не знает ничего кроме нее. Языком владеют почти все, но только няшаблядь этим знанием гордится, остальные стыдливо скрывают. Также няшаблядь может ошибочно считать что знает C++ или несуществующий язык C/C++. Благодаря C компьютерные программы - самое ненадежное из всего созданного человеком.
Аноним 21/07/15 Втр 21:41:49 #9 №518728 
14375041098860.png
>>518720
> Благодаря C компьютерные программы - самое ненадежное из всего созданного человеком.
Аноним 21/07/15 Втр 21:44:56 #10 №518731 
>>518712
Да что не так с жтк? Мне хоть один кутепидор может уже прояснить или нет?
Аноним 21/07/15 Втр 21:49:55 #11 №518732 
>>518731
Gtk - самый лучший оконный фреймворк для C.
Потому что других нет.
Аноним 21/07/15 Втр 21:51:06 #12 №518734 
>>518731
> Да что не так с жтк?
Оно не написано на смолтоке.
Аноним 21/07/15 Втр 21:57:24 #13 №518740 
Указывать сиблядям на проблемы языка бесполезно. Кроме сишки сиблядь нихуя не знает и не умеет, а на любое обвинение у сибляди есть универсальный ответ - "криворукость". Этим сиблядь как-бы намекает, что что все вокруг криворуки - т.е. сотрудники микрософта и интеля, пишущие кривые драйвера и библиотеки, прыщебляди, пишущие дырявое ведро своей системы вот уже не первый десяток лет, просто другие сибляди из соседнего подвала полусвовковой шаражки, в которой сиблядь работает. А вот сама сиблядь - сука граф Шарль Ожье де Бац де Кастельмор д’Артаньян среди педерастов, владеющий техникой левитации, предсказания будущего и написания небыдлокода на сишке. К сожалению, простым смертным едва ли не удастся увидеть творения сенсея, так и будут они работать с глючным говном криворуких интелевских и микросовтовских инжеренов, внезапно падающим от какого-нибудь buffer overflow, несмотря на зиллионы человекочасов, проёбанных на его тестирование и отладку.
Аноним 21/07/15 Втр 22:00:30 #14 №518744 
14375052307930.jpg
Идут года, сохнут глотки евангелистов, но на настоящий день не существует языка, который позволяет быстро писать быстрые и портабельные программы, за исключением няшной сишки. Без RTL-то ниосиливается.

У крестов был шанс, но шиза строструпа, мэнглинг и RTL-то все равно есть, а значит ее надо портировать. Это может быть и ок, быстрые программы писать можно, но быстро их писать уже нельзя.
Аноним 21/07/15 Втр 22:11:04 #15 №518754 
14375058647600.jpg
14375058647611.png
14375058647612.jpg
>>518744
> Идут года, сохнут глотки евангелистов, но на настоящий день не существует языка, который позволяет быстро писать быстрые и портабельные программы, за исключением няшной сишки

> Кроме сишки сиблядь нихуя не знает и не умеет
Аноним 21/07/15 Втр 22:14:03 #16 №518756 
14375060437220.jpg
Ну и Фортран еще, хотя это и говно мамонта.
[ALLOU] Аноним 21/07/15 Втр 22:18:52 #17 №518760 
14375063322570.jpg
>>518754
> 1. forth
> сейчас сейчас, еще неделю, я форт-систему уже почти совсем дописал
> 2. виртоговно
> сейчас сейчас, еще недельку, я собиратель мусора на стеке допишу
> 3. петухан-куриханыч
этот язык пока да, не знаю и не умею. У него есть библиотека времени выполнения
Аноним 21/07/15 Втр 22:21:29 #18 №518762 
>>518760
> У него есть библиотека времени выполнения
Надо полагать, сишные printf и malloc являются инструкциями процессора?
[ALLOU] Аноним 21/07/15 Втр 22:21:32 #19 №518763 
http://www.reddit.com/r/rust/comments/2lfbk3/help_me_understand_why_rust_binaries_are_so_large/
Собственно, хит эрат демонстрандум. Roost не смог стать еще толще и вытек из треда.
[ALLOU] Аноним 21/07/15 Втр 22:22:46 #20 №518765 
>>518762
> Надо полагать, сишные printf и malloc являются инструкциями процессора?
Это СТАНДАРТНАЯ БИБЛИОТЕКА языка Си, но не библиотека времени выполнения. Программу без стандартной библиотеки написать на языке программирования можно, без RTL нет.
Аноним 21/07/15 Втр 22:24:14 #21 №518767 
>>518763
> 2015
> считать размер бинарника
Аноним 21/07/15 Втр 22:25:14 #22 №518768 
>>518767
>2015
>Хеллоуворлд на мегабайт
[ALLOU] Аноним 21/07/15 Втр 22:25:42 #23 №518769 
>>518763
ОСТАНОВКА
Петухан таки в деле, даже как-то удивительно.
http://www.reddit.com/r/rust/comments/2iwtjh/151byte_static_binary_for_x8664_linux_in_rust/
Кстати где-то там еще годебилы на хабре были, правда они изящнее поступили и просто не стали писать сборщик мусора, объявив его НЕ НУЖНЫМ.
Аноним 21/07/15 Втр 22:26:44 #24 №518770 
>>518765
> CRT (C Runtime Library)
> не библиотека времени выполнения
[ALLOU] Аноним 21/07/15 Втр 22:28:36 #25 №518771 
>>518770
Ах ты гад, так это ты как раз та самая мифическая сиблядь, которая погрузила братюню в пучины отчаяния, заставив высрать очередную копипасту?
Аноним 21/07/15 Втр 22:33:43 #26 №518775 
>>518771
Я шарпогосподин.
[ALLOU] Аноним 21/07/15 Втр 22:50:49 #27 №518787 
14375082493970.png
>>518775
Тогда не знаю, поймешь ты или нет, но вот. Видишь, нет библиотеки времени выполнения, маллоков и принтфов.
Аноним 21/07/15 Втр 23:19:48 #28 №518830 
>>518731
>Да что не так с жтк?
Третья версия, например.
Аноним 21/07/15 Втр 23:27:17 #29 №518831 
>>518744
>мэнглинг и RTL-то все равно есть
Мэнглинг не мешает, а без стдлибы вполне можно обойтись, так очень многие делают. На самом деле и без libc вполне можно жить - все равно обычно или при инициализации память берешь сколько нужно, или постраничными кусками. Так что без разницы, маллок дергать или сисколл. Работа с файлами через простенькую обертку, а больше ничего и не нужно по большому счету.
Аноним 21/07/15 Втр 23:31:03 #30 №518836 
>>518830
Тебе не нравится цифра три?
Аноним 21/07/15 Втр 23:33:32 #31 №518840 
>>518831
Удвою этого господина
>при инициализации память берешь сколько нужно, или постраничными кусками
На рубеже нулевых делали некий проект под freebsd
Быстро выяснилось, что стандартный malloc не использовал повторно освобожденные блоки
Короче в итоге так и обошлись - при старте делали sbrk на сконфигурированное значение, а управление кучей свое
Аноним 21/07/15 Втр 23:33:36 #32 №518841 
>>518836
Мне не нравится, что гтк теперь практически гномолиба.
Аноним 22/07/15 Срд 00:39:55 #33 №518896 
>>518841
Понятно. Очередные религиозные прыщефобии.
Аноним 22/07/15 Срд 11:51:52 #34 №519018 
Почему в /зк всегда тонут (или же вообще не создаются) треды о языках программирования, которые мне интересны? Хочу чтоб был C-тред, Ada-тред и, может быть, Rust-тред. Ведь такой тип языков – это самые охуенные языки программирования же.
Аноним 22/07/15 Срд 12:12:24 #35 №519025 
>>519018
> самые охуенные языки программирования
> байтоебское дерьмецо, осваиваемое за 2 дня
Посмотри го-тред к примеру. Обсуждать тупую элементарную парашу смысла нет, поэтому обсуждают Илюшу.
Аноним 22/07/15 Срд 12:20:55 #36 №519027 
>>519025
> осваиваемое за 2 дня
> подразумевая, что хаскель осваивать дольше
Аноним 22/07/15 Срд 12:40:25 #37 №519033 
>>519025
Ada - элементарный язык? Ты ебанулся? Можно придумать и посложнее, конечно, но элементарным я бы не назвал.
Что касается C, то тут я тоже не согласен. Сам язык минимален, но для того, чтобы научиться писать на C надежный и легко поддерживаемый код, нужно времени побольше, чем 2 дня. И если в C нет "поддержки" ООП или ещё каких-то там возможностей в виде ключевых слов, то это не значит, что всего этого нет совсем, тебе точно также, как и с другими языками, нужно разобраться как на C правильно реализуются дженерики, рантайм полиморфизм и прочее. Зато простота и минималистичность самого языка дает преимущество в том плане, что сишный код всегда однозначно понятен, что сильно упрощает изучение чужого исходного кода.
Аноним 22/07/15 Срд 13:18:57 #38 №519048 
>чтобы научиться писать на C надежный и легко поддерживаемый код, нужно времени побольше, чем 2 дня
Ясен хуй - он ведь для этого не предназначен. Можно и ложкой бассейн вычерпать больше чем за 2 дня.
>как на C правильно реализуются дженерики, рантайм полиморфизм и прочее
Через нечитаемые костыли. Плавали - знаем.
>сишный код всегда однозначно понятен
Троллинг_ор_джаст_ступид.жпг
Аноним 22/07/15 Срд 14:07:11 #39 №519066 
>>519048
>Ясен хуй - он ведь для этого не предназначен. Можно и ложкой бассейн вычерпать больше чем за 2 дня.
Суть в том, что на C научиться писать надежный и поддерживаемый код таки можно (см. успешные ОС), а такой же производительный на каком-нибудь хачкелле – нет.

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

>>сишный код всегда однозначно понятен
>Троллинг_ор_джаст_ступид.жпг
Что не так?
Аноним 22/07/15 Срд 14:36:40 #40 №519074 
>>519066
> слишком толстый слой абстракций, которого там не должно быть
В самом деле, зачем нужны абстракции? Копипаст наше всё.
Аноним 22/07/15 Срд 14:49:56 #41 №519081 
>>519074
Это как посмотреть. В C копипаст, так или иначе, всегда делает какую-то реальную работу, и при этом его в большинстве случаев возможно заменить на функции/макросы, или как-то ещё переструктурировать код, избавившись от большинства повторений; в то время как в какой-нибудь джаве, например, "абстрактная" иерархия классов там, где это не нужно, вполне может оказаться кодом, по сути вообще ничего полезного не делающим.
Аноним 22/07/15 Срд 16:13:28 #42 №519122 
>>519066
> надежный и поддерживаемый код
> и не более многословно
Этот поехал уже в своем манямирке, уносите.
Аноним 22/07/15 Срд 16:19:23 #43 №519126 
>>519122
Сравнивая с джавой. Там обработка исключений точно также занимает немалую часть кода.
Аноним 22/07/15 Срд 16:22:15 #44 №519127 
>>519126
http://ivansorokin.livejournal.com/58626.html
Аноним 22/07/15 Срд 17:00:36 #45 №519135 
>>519126
> Сравнивая с джавой
С какой парашей еще сравним, м?
Аноним 22/07/15 Срд 19:53:16 #46 №519226 
>>519127
Для такого есть goto.
Аноним 22/07/15 Срд 22:07:24 #47 №519276 
>>519226
Для такого есть функции и в них циклы.
Открываешь все файлы, передаёт их на обработку, закрываешь — всего три функции.
Вызываются они внутри ещё одной функции.
Файлы будут закрыты в любом случае, т.к. в Сишке нет исключений, так что выполнение в любом случае приползёт к последней функции, закрывающей их.
Данный товарисч конечно же OCHE UMNY VIIYNOSHA но к сожалению он мудак.
Пiчальбида.
Аноним 22/07/15 Срд 22:33:43 #48 №519284 
>>519276
А если надо подгружать файлы в рантайме, ммм?
Аноним 23/07/15 Чтв 01:56:52 #49 №519350 
>>519033
>правильно реализуются дженерики
мм, а как? я токо два варианта могу - на макросах запилить, тогда будет типизация работать по итогу, но отладка отвалитца
или на void*, тогда типизации не будет
Аноним 23/07/15 Чтв 03:07:01 #50 №519360 
>>519350
C11 дает тебе еще один путь: делаешь копипастой сколько надо функций, а потом макрос с _Generic, который по типам аргументов выбирает нужное говно.
Правда нахуй это говно нужно кроме как "преобразовать в строку для печати" в толк не возьму. Ну да, есть еще трюки с "дефолтными аргументами", но это все настолько ненужно, что я прям даже не знаю.
Аноним 23/07/15 Чтв 08:01:28 #51 №519387 
>>519360
Нет. _Generic это про другое. Суть дженериков же как раз заключается в избегании копипасты. А _Generic+макрос ближе к оверлоаду (правда толку от него все равно нет).

>>519350
На макросах типа #define GENERIC_SORT(name, type, comp_func) самый лучший вариант я считаю. С отладкой проблем нет, т.к. тот же clang, выдавая ошибку, показывает не только на строчку с инстанциированием, но и кусок раскрытого макроса с ошибкой. Плюс всегда есть ключ -E, позволяющий целиком увидеть во что раскрывается макрос.
Аноним 23/07/15 Чтв 08:06:53 #52 №519389 
>>518562
Там тебе надо общий пррнцип понять, на примере каких-нибудь 8 ми битных микроконтроллеров.
RTOS не всегда нужна, для начала разберись как раьотает периферия.
Аноним 23/07/15 Чтв 08:09:05 #53 №519390 
>>518704
Полно заказов на разраьотку по под процы, только мало кто умеет.
Одна из реальных задач: FSK модем на msp430.
Аноним 23/07/15 Чтв 09:39:16 #54 №519413 
>>519387
> #define GENERIC_SORT(name, type, comp_func)
Ох уж эти костыли-костылики. Не говоря уже о том, что нет ничего более уёбищного, чем макросы на основе переписывания строк.
Аноним 23/07/15 Чтв 10:09:44 #55 №519431 
>>519413
Плюс в том, что в этом случает ты используешь их только тогда, когда это действительно нужно, в отличие от крестов, что положительно влияет на скорость компиляции и размер кода.
Аноним 23/07/15 Чтв 15:31:53 #56 №519557 
>>519431
То есть те же шаблоны ты можешь использовать непреднамеренно?
Аноним 23/07/15 Чтв 15:41:58 #57 №519569 
>>519557
В С++ ты делаешь весь класс темплейтным, хотя часто можно обойтись парой методов, а все тяжелое убрать из хедера. В си ты десять раз подумаешь, надо ли использовать дженерик на макросах.
Аноним 23/07/15 Чтв 19:45:54 #58 №519676 
вкачусь в тред и скажу, что си после джавы действительно кажется Б-гоподобным.
Си Аноним 23/07/15 Чтв 19:51:35 #59 №519678 
Сишечка рулит, остальное - УГ
Аноним 23/07/15 Чтв 20:11:35 #60 №519682 
>>519676
Согласен. Веет чем-то настоящим. Но Java тоже пойдёт.
Аноним 23/07/15 Чтв 20:15:33 #61 №519683 
>>519033
> нужно разобраться как на C правильно реализуются дженерики, рантайм полиморфизм и прочее.
Няшная - это низкоуровневый язык, который нужен чтобы возить байтики в тележках. И точка.
Аноним 23/07/15 Чтв 20:27:57 #62 №519685 
>>519683
Хотя нет, это было когда-то там. Сейчас спецификации на всякие там кристаллы разрослись, одно Intel HD Audio чего стоит. Из-за этого начинают криво писаться драйвера, код плохо реюзается, каждому приходится разбираться заново. Так что эти ваши полиморфизмы с субтипами начинают быть все более нужными, даже в няшной.
Аноним 23/07/15 Чтв 20:32:09 #63 №519691 
>>519685
>Так что эти ваши полиморфизмы с субтипами начинают быть все более нужными, даже в няшной.
No thanks. У нас уже есть эталон кривизны - драйвера ATI (хотя и Nvidia не отстает), нового не надо.
Аноним 23/07/15 Чтв 20:39:59 #64 №519695 
>>519691
Эталон кривизны - это что-то из средневековья, этакое демонстративное устрашение темного люда.

Надо искать эталон прямизны, и, найдя его, пользоваться на здоровье и рассказывать другим.
Аноним 23/07/15 Чтв 20:46:44 #65 №519697 
>>519695
>Надо искать эталон прямизны, и, найдя его, пользоваться на здоровье и рассказывать другим.
Абсолютно согласен, но где ж его найдешь?
Даже люди, проектирующие процессоры (невероятно ответственная работа), до сих пор не могут найти золотую середину в вопросе обратной совместимости, да так, что у одних дескриптор сегмента по всем восьми байтам распидорасило, а другие вешают новые команды на опкоды старых с префиксом.
Аноним 23/07/15 Чтв 20:51:49 #66 №519700 
Вот, как раз поясните: с развитием новых стандартов теперь есть ли возможность:
1) задать разрядность signed/unsigned в битах/байтах?
2) обрушить программу при переполнении целого?
Вопрос про стандарты самого языка, однако, про gcc отдельно тоже интересно.
Аноним 23/07/15 Чтв 20:55:29 #67 №519703 
>>519683
>который нужен чтобы возить байтики в тележках. И точка.
И правильно - ведь компьютеры и предназначены для перевозки байтиков. Бойлерплейт из абстракций не нужен, особенно сейчас, когда закон Мура закончился.
Аноним 23/07/15 Чтв 20:56:49 #68 №519705 
>>519700
http://www.cplusplus.com/reference/cstdint/
https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html
Аноним 23/07/15 Чтв 20:57:36 #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
Аноним 23/07/15 Чтв 20:59:18 #70 №519707 
>>519706
Обосрался, не inttypes, а stdint.
Аноним 23/07/15 Чтв 21:11:09 #71 №519713 
>>519705
>>519706
Огромное спасибо. Про ассемблер знаю, жалко, что по-прежнему нет универсального способа.
Аноним 23/07/15 Чтв 21:25:45 #72 №519719 
>>519683
Не пойми неправильно, дженерики на макросах и динамик диспатчинг бывают нужны в сишке в первую очередь как средство достижения максимальной эффективности программы, но никак не ради абстракций или облегчения кодинга. Например дженерик сортировка в виде макроса + инлайн функция сравнения = ноль оверхэда, в отличие от того же qsort из стандартной библиотеки. Также иногда бывает необходимо работать через общий интерфейс с массивом указателей на разные объкты - соответственно прицепляем к структурам vtable'ы или просто указатели на функции, т.к. это тупо самый быстрый способ выбора реализации функции когда конкретный тип объекта заранее не известен.
Вообще я имел ввиду то, что изучить сишку (как и любой язык) - это ведь не только запомнить синтаксис, который действительно можно за 2 дня выучить. Многое, для чего в большинстве других языков имеется какая-то специальная фича, в C возможно сделать кучей разных способов, и нужно не так уж мало времени потратить, чтобы выработать самые годные техники для всех ситуаций.
Алсо да, сорт оф RAII при помощи goto (как тут выше заметили) - жизненно важная штука. Также всем советую еще всегда возвращать из функции код ошибки, а результат - через переданный параметром указатель, тогда можно делать
if (((rc = func1(...)) != 0) ||
((rc = func2(...)) != 0) ||
((rc = func3(...)) != 0)) {
switch (rc) {
//обрабатываем ошибки
}
}
это самый компактный способ выполнить ряд операций, которые могут зафейлиться и, в случае чего, обработать ошибки.
Всё это очень простые вещи конечно, но таки тоже требуют уделить им внимание при изучении языка.
Аноним 23/07/15 Чтв 21:35:36 #73 №519728 
Посоны, позвольте разбавить ваши интеллектуальные беседы своим дибильным вопросом.
Тоже байтоебствую с stm32, компилятор gcc.
Передаю данные на индикатор функцией, которая на вход получает указатель на строку. Соответственно надо знать когда строки кончаются. Функция strlen из string.h успешно работает. Но она порождает слишком много ассемблерного кода - НИНУЖНА.
Непонятно как вообще может быть определена длинна строки, если передается только указатель? Нуль-терминатор? Но оно же токо в плюсах?
Попытался найти код функции strlen, нифига не нашел. Но если проект собирается, очевидно она есть. Где её можно взять?
Аноним 23/07/15 Чтв 21:40:10 #74 №519731 
>>519728
Нуль-терминированные строки есть не только в плюсах, они появились задолго до появления языков высокого уровня, лол.
Я вижу два варианта:
1) Можешь сам написать аналог strlen,там ничего сложного.
2) Если не хочешь использовать нуль-терминированные строки, запили строки кортежем длина строки + сама строка.
Для байтоебства первый вариант предпочтительней.
Аноним 23/07/15 Чтв 21:47:54 #75 №519735 
>>519728
В K&R вроде была strlen. Там же код тривиальный типа while(звезда str++)++len;
Аноним 23/07/15 Чтв 21:53:25 #76 №519737 
>>519719
>ноль оверхэда
Указатели на функции, определение которых доступно компилятору, почти всегда инлайнятся. Разницы по скорости с темплейтом не будет.
Аноним 23/07/15 Чтв 21:56:46 #77 №519739 
>>519728
char stroka[] = "tekst stroki";
size_t dlina_stroki = sizeof( stroka );
Аноним 23/07/15 Чтв 21:58:10 #78 №519741 
>>519739
- 1
Аноним 23/07/15 Чтв 21:59:49 #79 №519742 
>>519737
Т.е. компилятор не будет вызывать библиотечный qsort, а сгенерит для меня специальную версию qsort'а с заинлайненым сравнением, так что ли?
Аноним 23/07/15 Чтв 22:05:18 #80 №519744 
>>519742
Только если компилятору будет доступно определение qsort. Если бы qsort была объявлена в хидере, как и функция сравнения, то вызов бы заинлайнился.
Аноним 23/07/15 Чтв 22:06:14 #81 №519745 
>>519741
Что тебе не нравится?
Аноним 23/07/15 Чтв 22:12:38 #82 №519747 
>>519744
От это да, потом нужно будет самому проверить. Я что-то всегда думал, что он инлайнит только вызовы по имени функции, а тут получается, что отслеживает значение в указателе и тоже инлайнит. Все ж таки действительно немало тонкостей в няшной.
Аноним 23/07/15 Чтв 22:20:49 #83 №519750 
>>519731
>>519735
Действительно в K&R описывается нуль-терминатор.
Так и сделаю.
>>519745
Скорее всего потому, что если инициализировать строку как "текст", будет добавлен "\0", а если как массив {char1, char2, char3...} не будет.
Аноним 23/07/15 Чтв 22:25:14 #84 №519752 
>>519750
Если инициализировать массив string literal'ом, при этом указав размер массива равный количеству букв, то '\0' в конец строки не добавится.
Напр. char str[4] = "test"; - нуль-терминатор добавлен не будет.
Аноним 23/07/15 Чтв 22:25:38 #85 №519753 
>>519731
> Для байтоебства первый вариант предпочтительней.
Но почему, ведь второй вариант эффективнее, длина вычисляется за О(1)?
Аноним 23/07/15 Чтв 22:26:12 #86 №519754 
>>519739
А вот это не работает с указателем. Так сразу попробовал.
Попробуй передай &stroka[0], ничего хорошего не получишь.
Аноним 23/07/15 Чтв 22:27:36 #87 №519755 
>>519753
Байтоебство байтоебству рознь. Где-то нужно оптимизировать по памяти (вариант с кортежем отпадает), где-то по скорости.
Аноним 23/07/15 Чтв 22:40:10 #88 №519765 
>>519753
Все равно в индикатор выталкиваю символы по 1ному. Да и строки короткие (1-5 символов).
Аноним 23/07/15 Чтв 22:41:28 #89 №519766 
>>519754
Зато strlen вызывать не нужно - компилятор уже все посчитал.
Аноним 23/07/15 Чтв 23:22:45 #90 №519792 
>>519744
А LTO это не про эти оптимизации?
Аноним 24/07/15 Птн 01:10:58 #91 №519835 
14376894583440.jpg
Зачем картинку испортил, пидор?
Аноним 24/07/15 Птн 03:46:23 #92 №519883 
>>518562
Если для себя то не еби мозги себе и покупай Ардуину. Если хочешь действительно байтоебить то идешь на сайт easyelectronics и там проходишь учебный курс по AVR там все начинается с тру байтоебства ассемблера, но написано очень годно. Ну а по Си Кериган и Ричи классика.
Аноним 24/07/15 Птн 03:51:20 #93 №519884 
>>518704
че за плата на пике? Какую годноту посоветуешь почитать для того что бы впердоливать во всякие ARM Unix'ы?
Аноним 24/07/15 Птн 03:52:18 #94 №519885 
>>519884
а все в глаза долблюсь увидел что за плата.
Аноним 24/07/15 Птн 07:44:48 #95 №519899 
>>519792
LTO по идее должна и в объектном файле инлайнить. А из хидера должно и без LTO инлайнится.
Аноним 24/07/15 Птн 17:42:53 #96 №520068 
Сегодня при конвертировании строки из utf8 в cp1251 с помощью функции iconv, в качестве параметров указателей in и out буферов (в хэдэре объявлены с restrict) передал указатели с одинаковым значением (т.е. использовал один буфер). Все отлично работает, но вот думаю, может быть все же стоит использовать два буфера? Или в данной ситуации ничего плохого произойти не может?
Аноним 24/07/15 Птн 18:07:34 #97 №520078 
>>518562
1. Искусство программирования Unix.
2. Справочник по сям.
3. Хуилиарды кода на сях в СПО.

Опционально: собор и базар.
Аноним 25/07/15 Суб 01:44:52 #98 №520286 
>>520068
Зависит от операционной системы. Если что-то переносимое, то лучше два буфера, а если работает и так...
Аноним 25/07/15 Суб 21:27:40 #99 №520796 
>>520078
>собор и базар.
говно без идей
Аноним 25/07/15 Суб 21:31:47 #100 №520799 
>>519728
>Но оно же токо в плюсах?
ох лол блять... совсем молодёжь охуела
Аноним 28/07/15 Втр 23:31:00 #101 №522433 
Отличаются ли чем-нибудь (кроме наличия/отсутствия деструктора) thread_local поинтер и thread specific storage (функции tss_… в c11 и thread_key_… в posix)? Что лучше использовать в c11?
Аноним 29/07/15 Срд 11:28:58 #102 №522586 
Почему этот тред такой мёртвый? :(
Аноним 29/07/15 Срд 11:35:24 #103 №522587 
>>522586
Потому что мало кто из двачеров жалует няшную
бамп годному треду
Аноним 29/07/15 Срд 11:37:49 #104 №522588 
>>522587
Если знаешь, ответь на >>522433 вопрос позязя. Просто я не очень понимаю необхогдимость добавлять в стандарт tss_ набор функций, если есть thread_local. Может быть есть какое-то отличие, которое я не понимаю?

Аноним 29/07/15 Срд 21:06:04 #105 №523029 
>>518562
Тебе сюда, коллега

>>522265
Аноним 29/07/15 Срд 21:22:06 #106 №523043 
>>519739
>size_t dlina_stoki = sizeof(stroki) - 1

поправил, не благодари
Аноним 02/08/15 Вск 17:50:30 #107 №524583 
14385270303660.png
Запилил тут себе poor man's деструкторы в качестве упражнения. Как вам?

Алсо, почему C тред опять тонет?!
Аноним 02/08/15 Вск 18:31:35 #108 №524599 
14385294950620.jpg
>>524583
> NULL
> printf
> голые указатели
> Си строки
Аноним 02/08/15 Вск 18:43:46 #109 №524604 
>>524599
Ну а что ты ожидал увидеть? Это же C тред в конце концов.
Аноним 02/08/15 Вск 19:14:50 #110 №524610 
>>524604
Мб как свифт-обезьяна переменную именует не буковками а смайликами.
Аноним 02/08/15 Вск 19:35:28 #111 №524614 
>>524583
Сорцы будут?
Аноним 02/08/15 Вск 19:53:20 #112 №524621 
>>524614
Если допилю до вменяемого состояния, то будут конечно, правда там смотреть особо не на что. Просто в начале automatic блока создается объект – стэк, в который потом записываются указатели на объекты и указатели на деструкторы, в конце блока это всё в цикле вызывается и уничтожается. Сейчас мне надо придумать как лучше сделать обработку ошибок. Вообще, таких велосипедов уже написано > 9000, мне просто свой сделать захотелось.
Аноним 02/08/15 Вск 22:41:37 #113 №524689 
14385444977990.png
>>524614
В общем вот, если нужно:
http://rghost.net/download/6YFd4XFfB/cd85f1cdc7210c06eb4fda7ec6a15e654c36a32c/c_raii.zip
Аноним 03/08/15 Пнд 03:08:48 #114 №524795 
>>524689
А теперь то же самое через подмену адреса возврата, чтобы с return работало, а не только с break.
Аноним 03/08/15 Пнд 08:42:24 #115 №524826 
>>524795
>через подмену адреса возврата
Будет не портабельно же. Если там добавить глобальную переменную const struct deinit_stack deinit_stack и потом сделать #define return auto_deinit(&deinit_stack); return, то будет тоже работать с return по идее. Алсо, в любом случае это всё хуита, ни один нормальный человек не станет всерьёз использовать что-то такое.
sageАноним 06/08/15 Чтв 08:57:25 #116 №526256 
>>524689
поясните за ключевые слова automatic и release, в гугле ничего не нашел. Это точно чистый Си?
Аноним 06/08/15 Чтв 10:07:54 #117 №526273 
>>526256
Это макросы, блядь.
sageАноним 07/08/15 Птн 10:16:23 #118 №526747 
>>526273
а где они определены?
sageАноним 07/08/15 Птн 10:25:16 #119 №526748 
>>526747
а все понял
Аноним 09/08/15 Вск 01:44:33 #120 №527369 
>>526273
>макросы
>не капсом
>#define if else
>#define true false
Аноним 09/08/15 Вск 10:47:43 #121 №527401 
>>527369
>впервые увидел как меняют синтаксис сишки макросами
Ни в коем случае не заходи на http://libcello.org/, вообще охуеешь.
Аноним 10/08/15 Пнд 01:50:48 #122 №527685 
>>524583
Стоп, а разве в pure c запрещены {}-блоки без костылей типа do-while (0)? Может быть, я что-то не понимаю, но разве вместо autovar нельзя просто объявить переменные внутри блока, чтобы они автоматическими были? Или у меня мозги поражены крестами, лол.
Аноним 10/08/15 Пнд 01:53:23 #123 №527687 
>>527685
Из простого блока ты не выйдешь break-ом.
Аноним 10/08/15 Пнд 02:10:15 #124 №527692 
>>527687
То есть у тебя break'и используются в блоках как "исключения для бедных", лол? Я бы на твоем месте сделал для такого обычные блоки и отдельный макрос, который делает goto за закрывающую скобку. Вроде был инструмент для генерации уникальных меток, но я запамятовал. Гулять так гулять, а по производительности это будет лучше, чем циклы, которые выполняются один раз.
Аноним 10/08/15 Пнд 02:11:32 #125 №527693 
>>527692
Я мимокрокодил вообще. Я ему предлагал >>524795 непортабельный, но красивый вариант.
sageАноним 10/08/15 Пнд 02:16:40 #126 №527695 
>>527692
Алсо, цикл выкидывается, даже если без оптимизаций собирать - этой идиоме больше лет, чем тебе.
Аноним 10/08/15 Пнд 02:22:07 #127 №527699 
Поясните, как си хранит double ? Я так понял там под мантису 52+1 бита. Максимальное число, которое помещается в мантису 2^53=9007199254740992, выходит можно хранить 15-16 разрядов, но если написать
double a = 123.45678901234567;
printf("%.14lf\n", a);
выводит 123.45678901234567, как он умещает 17-й разряд?
Аноним 10/08/15 Пнд 02:29:25 #128 №527701 
>>527699
Вот здесь поиграйся http://babbage.cs.qc.edu/courses/cs341/IEEE-754.html
Аноним 10/08/15 Пнд 03:03:00 #129 №527702 
>>527701
можно по подробнее я правильно понимаю, что иногда, когда в экспоненте хватает места, часть мантисы он может переложить в экспоненту? В мантисе храниться 1.9290123283179010, а не 1.2345678901234567, как я думал. Или где тогда она?
Аноним 10/08/15 Пнд 03:04:02 #130 №527703 
>>527695
Да похуй, зачем пессимизировать преждевременно? А еще - отдельный макрос на выход с деинициализацией будет няшнее, чем break, выглядит, как отдельная команда.
Аноним 10/08/15 Пнд 21:36:14 #131 №527998 
>>527401
Они там совсем ебанулись, добавили лишних знаков и конструкций и пишут про повышение уровня си. Лучше бы библиотеку стандартную расширяли.
Аноним 11/08/15 Втр 01:00:27 #132 №528111 
>>527998
Кстати, почему для сей нет человеческой библиотеки коллекций? Даже обосранный резиновый стэк самому приходится писать.
Аноним 11/08/15 Втр 22:00:46 #133 №528610 
>>528111
https://ru.wikipedia.org/wiki/GLib
Аноним 11/08/15 Втр 22:33:22 #134 №528636 
>>528610
Беда в том, что эта либа гнутая.
Аноним 12/08/15 Срд 11:19:02 #135 №528797 
>>527685
http://ideone.com/SYTigT
http://ideone.com/NrdRSN
Сечёшь?
Аноним 12/08/15 Срд 11:23:35 #136 №528803 
>>528797
В чем подвох? Одинаково же будет, не?
Аноним 12/08/15 Срд 11:24:52 #137 №528804 
>>528803
А, понял. Охуеть просто, вообще пушка.
Аноним 12/08/15 Срд 11:25:42 #138 №528806 
>>528804
Энджой ер сишечка.
Аноним 13/08/15 Чтв 05:10:18 #139 №529279 
>>528804
Убери точку с запятой после вызова макроса и все.
Аноним 13/08/15 Чтв 05:15:17 #140 №529282 
>>529279
Поясни. Почему нужен тот костыль и почему нельзя дочку с запятой?
мимопроходил
Аноним 13/08/15 Чтв 05:42:30 #141 №529292 
>>529282
Потому что после блока {} не должно быть точки с запятой, если ожидается else.
Аноним 13/08/15 Чтв 05:53:54 #142 №529293 
>>529292
А в крестах надо?
Аноним 13/08/15 Чтв 06:13:09 #143 №529294 
>>529293
Во всех языках с сишным синтаксисом после if и else надо statement. Или это expression statement (выражение, которое на ; заканчивается) или это statement с ключевым словом (ну тот же do или вложенный if), или это compound statement ({ такая хуйня в фигурных скобочках }).

Если ты написал if (expr) {y}; else ..., то после (expr) у тебя уже ДВА statement (compound в { скобочках } и пустое выражение с ;). Компилятор после второго statement уже не ожидает никакого else, поэтому и охуевает, внезапно его встретив.
Аноним 13/08/15 Чтв 06:19:22 #144 №529296 
>>529294
Нихуя не понял. Но спасибо за ответ. Потом ещё раз прочитаю.
Аноним 13/08/15 Чтв 06:25:54 #145 №529297 
>>529296
Ок. В крестах точно такое же поведение }; нельзя. И в JavaScript. И в PHP. И в Java.
Аноним 13/08/15 Чтв 06:56:55 #146 №529302 
Php
Аноним 13/08/15 Чтв 16:23:16 #147 №529490 
>>529292
А если просто писать HUI (hui), без точки с запятой? Тогда ведь можно обойтись блоком, его можно будет вставить везде.
Аноним 15/08/15 Суб 21:15:10 #148 №530740 
Посоветуйте по С книг для начинающих.
Аноним 16/08/15 Вск 00:48:44 #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/
А не то.
Аноним 16/08/15 Вск 01:57:48 #150 №530868 
>>530845
> fprog.ru/2009/issue1/eugene-kirpichov-fighting-mutable-state/
Хуета какая-то от неосилятора.
sageАноним 16/08/15 Вск 02:03:06 #151 №530871 
>>530868
А ну да, у тебя ж еще и MISRA в списке. Тогда понятно: ты перечисляешь способы скатить мощь сишечки до своей любимой функциональнойпарашинейм.
Аноним 16/08/15 Вск 02:12:21 #152 №530873 
>>530845
>Rob Pike: «Notes on Programming in C»
Где можно скачать полностью? На первой странице в гугле только маленький кусок.
Аноним 16/08/15 Вск 02:16:41 #153 №530874 
>>530873
есть особый гугл: ebdb.ru
Аноним 16/08/15 Вск 11:02:08 #154 №530948 
Спасибо, няшки, за книжки.
Аноним 17/08/15 Пнд 21:20:48 #155 №531713 
14398356480820.gif
Сап, сишники-ананасы, посоветуйте хороший компилятор для чистого С. Пробовал искать сторонние - такого говна поел, что пиздец. Первые два вообще не ставятся, третий закрывает программу при попытке ввода данных, четвертый пытается отличить if от IF и так далее.
Аноним 17/08/15 Пнд 21:40:17 #156 №531722 
>>531713
gcc/MinGW.
Аноним 17/08/15 Пнд 22:42:31 #157 №531750 
Привет, сишники, объясните, пожалуйста, отличие main() от int main()
Вроде бы одно и то же, но в Кернигане и Ритчи int не объявляют, а в интернетике во всех кодах его ставят. Зачем?
Аноним 17/08/15 Пнд 22:51:33 #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).
Аноним 17/08/15 Пнд 23:06:21 #159 №531760 
>>531753
>вижуал студия 2015
Где можно скачать ломаную, а не с таблеткой на один год?
Аноним 17/08/15 Пнд 23:09:32 #160 №531762 
>>531760
Бери Community Edition, она бесплатная: входишь в аккаунт Microsoft, она сама активируется, опционально выходишь и удаляешь аккаунт Microsoft.
Аноним 17/08/15 Пнд 23:41:01 #161 №531784 
>>531753
Спасибо! Может, есть новое издание, попробую поискать.
А вот int main(void), кстати, ни разу не видел. Везде в скобках ничего нет. Это тоже уже устаревшая версия записи?
Аноним 18/08/15 Втр 00:00:27 #162 №531793 
>>531784
Пустые скобки в C в отличие от C++, где они эквивалентны (void) означают неизвестное число параметров. Например:
[code lang="c"]
int foo (); //declaration
//...
foo (1); //call
//...
int foo (int input) //definition
{
//...
}
[/code]
Аноним 18/08/15 Втр 00:12:09 #163 №531799 
Смотри, анон.
#include <stdio.h>
#include <string.h>

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

Почему так? Ведь без инклуда string.h этот код просто не должен компилироваться. Должна быть ошибка "такой функции нет".
Аноним 18/08/15 Втр 00:21:59 #164 №531805 
>>531799
Ты упоминаешь ее, и тем самым неявно объявляешь. Компилироваться должно, компоноваться нет.
Аноним 18/08/15 Втр 00:26:21 #165 №531808 
>>531793
А теперь и пустые скобки нельзя. Для функций с переменным числом аргументов надо как минимум один аргумент и ..., а для остальных нужно явно указывать аргументы.

>>531799
Компилятор "знает" такую функцию, чтобы в определенных режимах (с оптимизацией) заменять ее вызов на эквивалентный код. Это "знание" не на уровне языка (не декларация), а на уровне компилятора. Так как функция при вызове неявно >>531753 объявляется как int strlen(), а компилятору известно о другом, он ругается.
Аноним 18/08/15 Втр 10:23:01 #166 №531942 
>>531793
Кстати, вот ещё вопрос: в программах в интернетике в конце описания функции main ставят действие "return 0;". Обязательно ли его вставлять?
Аноним 18/08/15 Втр 11:11:23 #167 №531950 
>>531942
Нет, для main (и только для нее!) есть исключение: если выполнение доходит до конца функции, неявно возвращается 0.
Аноним 18/08/15 Втр 11:11:45 #168 №531952 
>>531942
0 - код успешного завершения программы. передаётся выше в ОС. любой не 0 = в ходе выполнения была ошибка.
Аноним 18/08/15 Втр 11:14:57 #169 №531954 
>>531952
В стандарте весело, кстати. Есть 0, EXIT_SUCCESS (может совпадать, и таки совпадает с 0) и EXIT_FAILURE, а остальные коды возврата - implementation defined. На деле, конечно, так, как ты сказал.
Аноним 20/08/15 Чтв 11:48:38 #170 №532900 
Эй! Сишники! Насколько сложно сейчас найти работу, где требуются знания Си?
Аноним 20/08/15 Чтв 11:49:10 #171 №532901 
Поясните про inline? Для чего он нужен?
Аноним 20/08/15 Чтв 12:42:37 #172 №532921 
>>532901
Это тоже хинт, как register, restrict и const. Если register предлагает компилятору ускорить доступ к переменной, то inline предлагает ему ускорить вызов функции. И, в отличие от register, компиляторы хоть и не всегда, но все же часто обращают на это внимание, подставляя тело inline-функции в месте ее вызова (что позволяет потом оптимизировать код еще больше). Современные компиляторы, опять же, и сами инлайнить умеют очень хорошо, но если функция несложная, маленькая, то inline можно указать а если ты уверен, что так точно будет лучше, то иногда даже какой-нибудь нестандартный __forceinline/__attribute__((always_inline)), т.е., "инлайни и ниебёт" можно воткнуть. Обычно в пример оправданного инлайна приводят какую-нибудь векторную арифметику - несколько выражений без ветвлений будут развернуты в десяток-два инструкций в месте вызова и отработают гораздо быстрее, без затрат времени на передачу аргументов, не сбрасывая конвейер процессора и т.п.
Аноним 20/08/15 Чтв 13:05:22 #173 №532928 
>>532921
Постой. const - это хинт? Разве?
Аноним 20/08/15 Чтв 15:17:13 #174 №532980 
>>532928
This, поэтому константы объявляются с помощью #define
Аноним 20/08/15 Чтв 17:55:44 #175 №533089 
>>528636
LGPL же. Можно линковать со своими проектами.
Аноним 20/08/15 Чтв 22:41:17 #176 №533333 
>>518562 (OP)
Это могила Берроуза?
Аноним 20/08/15 Чтв 23:11:12 #177 №533366 
>>533333
лал
Аноним 20/08/15 Чтв 23:42:03 #178 №533386 
>>532980
Да, const по сути просто хинт. Но ты-то, как и с другими хинтами, в любом случае обязан соблюдать ограничения, которые спецификатор накладывает.
Аноним 21/08/15 Птн 17:24:54 #179 №533578 
>>533333
Юрия Петухова.
Аноним 21/08/15 Птн 18:23:31 #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
sageАноним 22/08/15 Суб 01:35:29 #181 №533697 
>>533620
Без сорсов, очевидно, нужны заголовочные файлы и либа.
С сорсами, очевидно, тоже нужны заголовочные файлы и... лучше собрать либу.

CMake поставить не пробовал? Хочешь руками?
Возьми на http://luadist.org/ уже собранные либы lua (тебе нужны оттуда include/.h и lib/.a? ну и .dll потом), укажи пути в команде компилятору (gcc -Iпуть-к-папке-с-h srlua.c полный-путь-к-liblua.dll.a)
Аноним 23/08/15 Вск 14:44:56 #182 №533873 
>>533620
>скомпилить srlua через mingw компилятор
Зачем? Есть же vagrant + virtualbox
Аноним 23/08/15 Вск 17:30:38 #183 №533994 
Здравствуйте. Я хотел бы спросить по поводу преобразования типов. Допустим у нас есть три переменные: short a, short b и int c. Нужно ли мне выполнять явное преобразование, если я хочу вычислить: c = a b? То есть надо ли мне записывать это так: c = (int) a b или c = (int) (a * b)?
Аноним 23/08/15 Вск 17:54:13 #184 №534005 
>>533994
ЕМНИП, не нужно. Но компилятор ругнётся, что выполняется неявное преобразование.
Аноним 23/08/15 Вск 17:57:27 #185 №534007 
14403418474980.png
14403418474981.png
>>534005
Хуй тебе. Нужно преобразовывать иначе пикрил. Хотя возможно, это зависит от компилятора.
Аноним 23/08/15 Вск 18:09:13 #186 №534010 
>>534007
Что у тебя за компилятор?
Аноним 23/08/15 Вск 18:10:58 #187 №534012 
>>534010
GCC 4.9.2. На скрине же видно!
Аноним 23/08/15 Вск 18:23:45 #188 №534018 
>>534012
И что у тебя не работает?
Аноним 23/08/15 Вск 18:26:21 #189 №534019 
>>534018
Все работает. Я просто показал >>534005, что компилятор может молчать и не преобразовывать тип самостоятельно.
Аноним 23/08/15 Вск 18:33:02 #190 №534022 
>>534019
Таки всё в сях есть int или указатель на int, не забывай об этом.
Аноним 23/08/15 Вск 18:34:56 #191 №534024 
>>534022
Ты к чему это? Я тебя не совсем понял.
Аноним 23/08/15 Вск 18:37:45 #192 №534026 
>>534024
То, что ты написал long, а по факту там хитровыебанный int, потому и не ругается. Ты могу бы вообще char написать.
Аноним 23/08/15 Вск 18:45:23 #193 №534031 
14403447237040.png
>>534026
Пикрелейтед. Ничего, что MinGW?
Аноним 23/08/15 Вск 18:49:08 #194 №534033 
14403449483870.png
14403449483881.png
14403449483892.png
>>534026
Даже если из float в long или даже в char. Компилятору плевать на это.
Аноним 23/08/15 Вск 18:49:44 #195 №534034 
>>534033
->
>>534022
Аноним 23/08/15 Вск 18:54:46 #196 №534040 
>>534034
Ну по поводу float, все немного по-другому... А вообще, почему мы спорим? Я говорю, кто-то написал, что компилятор выдаст ошибку, я говорю что компилятор не выдает ошибки, ты говоришь почему так, я и так знал почему и мы спорим не из-за чего.
Аноним 23/08/15 Вск 18:57:25 #197 №534041 
>>534040
Это я написал, что компилятор выдаст предупреждение. По-хорошему, вот если так по-честному, то должен бы.
Аноним 23/08/15 Вск 19:18:31 #198 №534055 
А какой есть компилятор Си, который может в c99, и в ассемблерные вставки на синтаксисе intel?
Аноним 23/08/15 Вск 19:31:19 #199 №534063 
>>534055
Watcom.
Аноним 23/08/15 Вск 19:38:47 #200 №534068 
>>534055
GCC
Аноним 24/08/15 Пнд 09:07:32 #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/08/15 Пнд 11:19:38 #202 №534388 
Поясните за fscanf. Допустим у меня есть строка: key: value.
Как мне это скормить fscanf, чтобы он считал эту запись в соответствующие переменные?
Аноним 24/08/15 Пнд 11:20:09 #203 №534390 
Поясните за fscanf. Допустим у меня есть строка: key: value.
Как мне это скормить fscanf, чтобы он считал эту запись в соответствующие переменные?
Аноним 24/08/15 Пнд 11:48:22 #204 №534409 
>>534390
>>534388
Как же раздражает гуглокапча.
Пока нашел только способ, в котором надо считать одну строку и вычленить из нее елементы. Но я полагаю, должен же быть способ, как-нибудь считать два значения из одной строки? Пока делал так: fscanf ("%s[^:]%d", key, &value);
Аноним 24/08/15 Пнд 11:56:07 #205 №534414 
>>534390
fscanf - хуета для одноразового кода, парси вручную (strtok, strtol, strtod, все дела).

> fscanf ("%s[^:]%d", key, &value)
Да, примерно так оно и делается. Только у тебя размер буфера не указан (что будет, если введешь больше, чем размер key?). Надо:
"%размер[^:]: %d"
Аноним 24/08/15 Пнд 12:00:57 #206 №534418 
>>534055
Все могут в той или иной мере. Но код на асме лучше вынести в отдельные файлы, и с ними линковаться.

>>534041
Что за цирк вы тут устроили? -Wconversion
Аноним 24/08/15 Пнд 12:41:26 #207 №534423 
Как правильней писать в main: return 0 или exit (EXIT_SUCCESS)?
Аноним 24/08/15 Пнд 12:43:51 #208 №534424 
>>534418
>-Wconversion
В примере >>534007 это не сработает, потому что там присваивается произведение переменных с типом int переменной с типом long. int может быть преобразован в long без потери информации, значит неявное преобразование не может испортить значение, т.е. предупреждение не выведется. Значение портит переполнение вызванное произведением переменных типа int. Чтобы этого не было, нужно один из операндов преобразовать в long.
Аноним 24/08/15 Пнд 12:44:42 #209 №534425 
>>534423
>exit (EXIT_SUCCESS)
this
Аноним 24/08/15 Пнд 12:47:31 #210 №534426 
>>534423
Если это единственный return, то лучше ничего не писать. А вообще, exit для других функций оставь, а в main лучше return (вопрос вкуса, реальной разницы нет).
Аноним 24/08/15 Пнд 12:48:19 #211 №534427 
14404096990300.png
Подтверждаю слова этого.
Аноним 24/08/15 Пнд 12:50:17 #212 №534429 
14404098174580.png
>>534427
>>534424
Аноним 24/08/15 Пнд 12:50:45 #213 №534430 
>>534424
А, вы о таких вещах. Ну это да.
Аноним 24/08/15 Пнд 13:28:24 #214 №534444 
Хочу педальку для вима https://github.com/alevchuk/vim-clutch
Аноним 24/08/15 Пнд 13:29:10 #215 №534445 
Если я хочу выделить память для хранения строки, безопасней ли использовать calloc, в случае, если я могу как-нибудь пропустить '\0'? Или все равно, что использовать?
Аноним 24/08/15 Пнд 13:45:36 #216 №534450 
>>534445
Если ты можешь пропустить где-то \0, то и решай эту проблему - напиши раз и навсегда себе модуль для работы со строками, ну и внимательнее будь. А так, да, calloc может немного подстраховать. Но ты с таким же успехом можешь в длине на 1 ошибиться и затереть самый последний \0.
Аноним 24/08/15 Пнд 14:12:35 #217 №534461 
>>534423
А ты посмотри что происходит после return 0 - например, в gcc после этого вызывается exit(return_value)
Аноним 24/08/15 Пнд 21:51:32 #218 №534641 
Есть ли какие-нибудь статьи или что-то вроде того о threads.h? Многопоточностью я еще не увлекался, а вот сейчас решил научится работать с ними. Даже не знаю с чего начать.
Аноним 24/08/15 Пнд 21:56:21 #219 №534644 
>>534641
Зачем оно тебе? С поддержкой очень безрадостно пока. Почитай лучше про pthreads/Windows processes and threads, будет намного полезнее.
Аноним 25/08/15 Втр 00:11:01 #220 №534696 
Что в си означает выражение &&addr? Это не логическая операция.
Аноним 25/08/15 Втр 00:17:34 #221 №534697 
>>534696
Дай-ка фрагмент кода, где ты это откопал.
Аноним 25/08/15 Втр 00:26:55 #222 №534703 
14404516159430.jpg
>>534697
Тот кусок уже не нашел, но вот аналогичный. Это из мануалов по обфускации кода и приемам антиотладки.
Аноним 25/08/15 Втр 00:36:32 #223 №534707 
>>534703
Теперь я понял, почему мой компилятор жаловался на метки. Честно говоря, никогда не сталкивался с такой штукой и могу предположить только, что это. Надо будет и самому почитать про это. Интересно же.
Аноним 25/08/15 Втр 00:42:10 #224 №534710 
>>534707
Да, это вообще охуенно. И материалы классные. Там надо знать не только си на высоком уровне, но еще и теорию чисел.
Аноним 25/08/15 Втр 01:42:30 #225 №534733 
>>534710
Брось ты это дело. Нет лома против иды, деобфускатора типа миазмы, и маленькой тележки знаний наподобие http://pferrie.host22.com/papers/antidebug.pdf
Аноним 25/08/15 Втр 01:48:28 #226 №534734 
>>534696
в с++11 rvalue сылка
Аноним 25/08/15 Втр 02:07:06 #227 №534738 
>>534734
Еще походу в Си && используется для взятия адреса метки(label). Вот хуй знает где это в стандарте, мож кто подкинет
Аноним 25/08/15 Втр 02:09:15 #228 №534739 
>>534738
Вот че в инетах нашел
Note: In GNU C the operator '&&' may also be used as unary operator for taking addresses of labels.
Аноним 25/08/15 Втр 12:00:37 #229 №534758 
Почему этот код нормально отработал на идеоне, а у меня на компе происходит ошибка при выполнении? Компилирую в DevCpp.

https://ideone.com/abSF9g
Аноним 25/08/15 Втр 12:11:48 #230 №534761 
>>534738
http://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Labels-as-Values.html#Labels-as-Values
Аноним 25/08/15 Втр 12:59:17 #231 №534780 
>>534761
Как все сложно то...
Аноним 25/08/15 Втр 13:01:10 #232 №534781 
Посоветуйте годной литературы по Си, кроме K&R.
Аноним 25/08/15 Втр 14:23:17 #233 №534820 
>>534758
Ну видимо ты не можешь редактировать .text секцию просто так. Не знаю как на винде, на линухе надо вызвать mprotect.
Аноним 25/08/15 Втр 14:59:18 #234 №534833 
14405039587150.png
>>534758
Потому что ideone компилирует с gcc -O2, так что твой самомодифицирующийся код нихуя не делает.
Аноним 25/08/15 Втр 15:07:52 #235 №534836 
>>534833
Что надо сделать, чтобы этот код работал?
Аноним 25/08/15 Втр 15:10:38 #236 №534839 
>>534836
Ничего. Он не может работать. Память с кодом всегда read-only, сделать ее read-write тебе ос не позволит, да и вообще нахуя ты собрался опкоды на бред менять? Даже если ты их поменяешь, скорее всего получишь undefined instruction.
Аноним 25/08/15 Втр 15:17:39 #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
Аноним 25/08/15 Втр 15:22:50 #238 №534841 
>>534840
Есть djvu этой книжки?
Аноним 25/08/15 Втр 15:26:30 #239 №534842 
Пиздец, там в makeCodeWritable используется mprotect. Это значит, что на винде все это не заработает? Есть способы то же самое повторить на винде?
Аноним 25/08/15 Втр 15:26:55 #240 №534844 
>>534841
гуглить надо, у меня нет. Гугли VirtualProtect для винды и mprotect для линухи. Вроде так
Аноним 25/08/15 Втр 23:30:57 #241 №535047 
У меня тут вопрос возник. Есть у меня есть два указателя. Первый указывает на строку а второй на произвольный участок(не инициализирован). Я могу сразу вызывать memcpy, чтобы скопировать строку в участок, на который указывает второй указатель? Или мне необходимо для нечала выделить память с помощью malloc?
Аноним 26/08/15 Срд 01:18:28 #242 №535084 
>>535047
Либо malloc(), либо занять область на стеке:
char string[MAXNAME] = "";
Аноним 26/08/15 Срд 01:33:39 #243 №535090 
https://ideone.com/yNK4rv
Что не так в этой сортировки? Почему она работает слишком медленно. Даже 256 элементов, занимает почти секунду.
Аноним 26/08/15 Срд 01:36:05 #244 №535093 
>>535090
Все. Вопрос закрыт. Я кретин. Прошу прощения за то, что потревожил. Дело было в строке: 7.
Аноним 26/08/15 Срд 01:49:54 #245 №535107 
>>518562 (OP)
>может я пиздоглазый
Ты русский? Значит - пиздоглазый!
Аноним 26/08/15 Срд 02:09:49 #246 №535113 
>>535107
>пиздоглазый
"штсдгву БсзшвщкфяЮ
Х
ОСТ_ифде, не?
Ъ
Аноним 26/08/15 Срд 02:24:39 #247 №535126 
>>535113
оПХБЕР, ЕЯРЭ БНОПНЯ
Зачем вы срете в нашем уютном тредике?
Аноним 26/08/15 Срд 02:53:08 #248 №535136 
>>535126
OST_BALT{}y - pizdoglazyie
Аноним 27/08/15 Чтв 06:06:25 #249 №535359 
Как заинлайнить функцию из стандартной библиотеки?

Она у меня тупо вызывается через call, а я хочу чтоб компилятор ее на место вызова вставил.
Аноним 27/08/15 Чтв 08:52:49 #250 №535393 
>>535359
Скопируй исходник функции себе в проект и делай с ним, что угодно. По-другому никак.
Аноним 27/08/15 Чтв 09:58:34 #251 №535411 
>>535359
собрать статически, не?
Аноним 02/09/15 Срд 17:47:56 #252 №538504 
Умею делать циклы и функции. Как с помощью этого можно сделать какое-то практическое приложение? Чего нужно еще знать?
Аноним 02/09/15 Срд 21:09:05 #253 №538586 
>>538504
системные вызовы
Аноним 02/09/15 Срд 21:16:22 #254 №538592 
>>538504
Вызывай функцию в цикле, устраивай цикл внутри функции, запускай в цикле функции, которые выполняют внутри себя цикл, внутри которого вызываются функции.
Аноним 02/09/15 Срд 22:35:13 #255 №538636 
>>538504
Научись в fopen/fgetc/fputc и напиши упаковщик методом RLE.
Аноним 02/09/15 Срд 23:12:29 #256 №538646 
>>538504
Структуры, ссылки, указатели. Напиши наследование структур с виртуальной таблицей методов.
Аноним 04/09/15 Птн 12:56:21 #257 №539475 
Дорогие байтоебы, вопрос по рынку (глобальному). Как за последние годы, по ощущениям, изменилось число вакансий, конкуренция? Когда Сишка пойдет ко дну, и пойдет ли вообще?
Аноним 04/09/15 Птн 22:20:05 #258 №539924 
>>539475
Она ко дну никогда не пойдёт, но востребована в очень узком секторе.
Аноним 05/09/15 Суб 09:35:34 #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 / # 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?
Аноним 05/09/15 Суб 10:20:34 #260 №540107 
>>540099
Разве NAME_MAX тут это не максимальный возможный размер? А sizeof(struct inotify_event) + NAME_MAX + 1 его всегда будет превышать. Хотя это не важно.

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

А присваивать так значение массиву нельзя, только при инициализации можно.
Аноним 05/09/15 Суб 10:28:04 #261 №540109 
>>540099
Нельзя в Си делать массивы переменной длины, насколько я помню.
Аноним 05/09/15 Суб 10:35:25 #262 №540112 
>>540109
Можно же, их просто инициализировать нельзя.
int ar[n];
int i =0;
for (i=0; i<n; i++){
    ar = i;
}
Аноним 05/09/15 Суб 10:36:14 #263 №540113 
>>540112
хм, там ar[и] внутри лупа, конечно же.
Аноним 05/09/15 Суб 11:10:48 #264 №540125 
>>540107
>Разве NAME_MAX тут это не максимальный возможный размер?
NAME_MAX - максимально возможный размер имени файла, а та структура состоит из имени файла и прочей лабуды

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

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

Нельзя.
Аноним 05/09/15 Суб 11:27:19 #265 №540135 
>>540099
#define kMaxEvent sizeof(struct inotify_event) + NAME_MAX + 1;
Энджой ер сишечка, в которой const - нихуя не конст и может меняться в рантайме.
Аноним 05/09/15 Суб 13:37:39 #266 №540221 
Анон, что здесь происходит во второй строчке? Что означают эти две звездочки в данном контексте и какая вообще логика там реализуется? До указателей в K&R пока не дошел.

https://ideone.com/6owLDE

struct list root = NULL;
struct list
*tmp = &root;
Аноним 05/09/15 Суб 16:44:00 #267 №540223 
>>538504
Можешь забыть про циклы и хуярить лямбда-исчислением, чисто на функциях.
Аноним 08/09/15 Втр 18:41:21 #268 №540285 
>>540223
хуя ты извращенец
Аноним 08/09/15 Втр 18:47:15 #269 №540293 
>>540221
ну если одна звёздочка - это указатель, то две - это указатель на указатель
Аноним 08/09/15 Втр 19:17:37 #270 №540302 
Си сам по себе не сложен по синтаксису. Так что дрочи практику, ну и пролистай пару книжек по алгоритмам, типа Дасгупты или Кормена.
Аноним 08/09/15 Втр 23:18:09 #271 №540495 
>>534841
>>534844
Прошу тебя, не надо это писать. Хотя книгу поверхностно почитать может и полезно будет.

Лучше изучай LLVM http://habrahabr.ru/company/abbyy/blog/265871/
Аноним 16/09/15 Срд 17:17:52 #272 №543906 
Тред не читал.

Господа, посоветуйте годный учебник для дебилов, где были бы изложены все нюансы С11.
sageАноним 16/09/15 Срд 17:46:26 #273 №543929 
>>543906
Берёшь документацию и читаешь.
http://www.iso.org/iso/ru/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=57853
Ах да, ты же дебил. Ну извини, годной инфы для дебилов не завезли, это тебе в детсаду надо спросить.
Аноним 16/09/15 Срд 17:49:34 #274 №543930 
>>543929
Спасибо, капитан.
Аноним 16/09/15 Срд 18:11:20 #275 №543943 
>>543930
Но он прав. Разве что покупать стандарт не обязательно. Ты ведь не разработчик компилятора, а хуй простой, так что последнего черновика (N1570) тебе вполне достаточно. Есть "21st Century C", её тут иногда советуют, но книжка на троечку. Если ты только учишь язык, найди книгу по C99, их дохуя, а потом просто посмотри список нововведений в С11.
Аноним 17/09/15 Чтв 10:47:10 #276 №544339 
>>543943
Ок, так и сделаю. Наверну K&R, потом уже по стандартам отдельно посмотрю.
Аноним 17/09/15 Чтв 10:50:35 #277 №544341 
>>544339
Только не забывай, что код в K&R - адов говнокод по современным меркам, а в режиме С99/C11 некоторые примеры даже не скомпилируются.
Аноним 17/09/15 Чтв 11:56:25 #278 №544375 
>>544341
>адов говнокод
А как этот говнокод задетектить?
Аноним 17/09/15 Чтв 12:48:13 #279 №544403 
>>544341
Приведи пример говнокода из K&R. Именно говнокода, а не кода, который не удовлетворяет современным стандартам.
Аноним 17/09/15 Чтв 13:29:30 #280 №544421 
>>544403
Абзац про goto. Хотя там так и сказано, что так делают только черви-пидоры, хуже которых нет.
Аноним 17/09/15 Чтв 13:51:48 #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); } при каждой ошибке.
Аноним 17/09/15 Чтв 14:04:54 #282 №544433 
>>544427
>Так код, который не удовлетворяет стандартам - он говнокод и есть.
Довольно странное определение. Если говорить о времени, когда была написана K&R, то код удовлетворял стандартам, а значит - не был говнокодом. Со временем стандарты поменялись, код остался тем же, но стал говнокодом. Выходит, что результат проверки, является ли код говнокодом, не постоянен во времени и зависит не от самого кода, а от того, какие на данный момент актуальны стандарты в языке.
Аноним 17/09/15 Чтв 14:23:48 #283 №544449 
>>544427
>Пример для вложенного for адекватен
Не совсем, если fastjump ведёт не на завершение метода, а после него что-то ещё делается кроме очистки, это уже говнокод, а не fastjump.
Аноним 17/09/15 Чтв 14:45:41 #284 №544461 
>>544433
Ну вот у нас тут goto-срач намечается. Были времена, когда можно было себе позволить писать на бейсике лапшу из GOTO, приправляя её POKE с магическими числами, и это было нормально пока один теорехтетик не вскукарекнул про considered harmful. Теперь это однозначный говнокод.

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

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

ладно, не обращайте внимания, я упорот
Аноним 17/09/15 Чтв 15:18:35 #285 №544485 
>>544461
Нульчую этого упорыша.

школьник-кун
Аноним 17/09/15 Чтв 15:40:40 #286 №544497 
>>544461
>Ну вот у нас тут goto-срач намечается ... Теперь это однозначный говнокод.
В низкоуровневом программировании на С оператор goto активно используется, это уже вроде 100500 раз перетирали.
>компиляторы стали умные и делают то, что разрешено стандартом, а не то, что ожидает человек, прочитавший K&R
Я не утверждаю, что код из K&R актуальный. Тот, кто изучает C по K&R, должен обязательно учитывать, что язык сильно поменялся с того времени. Но, извини, я всё ещё не могу считать исключительно по этой причине код, предложенный в той книге, говнокодом.
Аноним 17/09/15 Чтв 17:59:14 #287 №544554 
Тред не читал
Для того, чтобы перевестись в другой универ, нужно за полгода хоть на каком-то уровне выучить С абсолютно очевидно потому, что у них этот курс есть, а у нас - нет.

Скачал Dev C++, но он пока не может обработать даже банальный хеллоуволд. Гугл говорит, это потому, что у меня windows 8.1, слишком новая система для MinGW. Я подозреваю, это ещё и потому, что система не простая, а 64-разрядная. Соответственно, вопрос - есть какие-то ещё среды работы с Pure C под 8.1, или стоит ебаться с Dev C++? Или вообще готовиться к анальной ебле с каким-нибудь древним Turbo C?
Аноним 17/09/15 Чтв 18:07:13 #288 №544558 
>>544554
Ставь CodeLite + TDN-MinGW 64 (можно и х86, но зачем?). Работает везде, на 10-ке в том числе. А вообще под винду удобнее в Visual Studio писать.
Аноним 17/09/15 Чтв 18:15:30 #289 №544563 
>>544554
Алсо проверь правильность PATH.
Аноним 17/09/15 Чтв 18:24:14 #290 №544566 
>>544554
>>544558
Вот двачую вижуал студию. Они в 2015 допилили поддержку современной сишечки до приемлемого уровня. Пару галочек уберёшь на тему ололо-safer-функций, и для новичка будет ок. Особенно если ты не смог MinGW поставить почему-то.

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

> Я не утверждаю, что код из K&R актуальный.
> Тот, кто изучает C по K&R, должен обязательно учитывать
Тот, кто изучает K&R не может этого учитывать. Он не знает, как правильно. Он не может делать скидку на возраст книги. Он язык только учит, он не может пока различать, хороший код тогда и хороший код сейчас. И после K&R ему приходится... ну не переучиваться, но ломать некоторые плохие привычки. Я не утверждаю, что K&R нужно выкинуть. Ее нужно почитать (задачки там, вся хуйня), но лучше бы, чтобы она не была первой книгой.
Аноним 17/09/15 Чтв 18:41:37 #291 №544585 
>>544566
>Ты код на бейсике, про который я говорю, не застал или забыл?
Мы вроде о C говорим, не? Я лично с бейсиком вообще не сталкивался и особо не стремился.
>Тот, кто изучает K&R не может этого учитывать. Он не знает, как правильно. Он не может делать скидку на возраст книги. Он язык только учит, он не может пока различать, хороший код тогда и хороший код сейчас.
Ты крайне плохо думаешь о новичках. Я читал эту книгу, и я это всё учитывал.
>но лучше бы, чтобы она не была первой книгой
Поправлю, она не должна быть единственным источником информации о языке C. Но первой книгой может быть вполне, какой и была в моём случае.
Аноним 17/09/15 Чтв 19:07:10 #292 №544621 
>>544558
>>544558
>>544566

Благодарю.
>>544566
>не смог MinGW
ну на этой версии Dev C++ уже стояла сравнительно новая версия, поэтому нужно было разбираться больше. Отсюда и вопрос - стоит ли ебаться
Аноним 17/09/15 Чтв 19:13:30 #293 №544623 
>>544566
>но лучше бы, чтобы она не была первой книгой
Стиль кодирования от автора, мелкие буквы, где стоят знаки подчёркивания, пробелы и т.д. все дела.
Аноним 17/09/15 Чтв 19:25:40 #294 №544630 
>>544621
>ну на этой версии Dev C++ уже стояла сравнительно новая версия, поэтому нужно было разбираться больше. Отсюда и вопрос - стоит ли ебаться
Если тебе принципиально нужно работать в кроссплатформенной IDE, то поебаться стоит. В итоге у тебя на разных машинах будет одинаковая среда разработки, что очень удобно. На винде 99% проблем с MinGW - это кривая переменная среды PATH. Dev C++ просто не видит компилятора или инклюды. Почитай внимательнее ошибки.
Но если линукс не нужен, но ставь VS и просто забудь про эту еблю с MinGW.
Аноним 18/09/15 Птн 05:04:38 #295 №544870 
>>544497
>>544566
Посоны, изучаю С по K&R. Планирую после обмазаться Linux Kernel Style Guide. Этого будет достаточно?

>>544585
>она не должна быть единственным источником информации о языке C
Получается, что ты либо читаешь еще одну книгу параллельно/после (зачем тогда K&R? время не резиновое), либо гуглишь статьи и вопросы на SO - но, чтобы их гуглить, нужно уже знать, что ты хочешь найти.
Аноним 18/09/15 Птн 06:51:40 #296 №544885 
14425483004120.png
Можно этот тред будет нубских вопросов о C?

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

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

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

2. Как написать 10^10 но так, чтобы программа calculated это значение? А то приходится писать как 1 000 000 0000 чтобы работало и калькулировала.
Аноним 18/09/15 Птн 07:42:40 #297 №544896 
>>544870
>зачем тогда K&R?
Вот меня этот вопрос тоже волнует. Перекатываюсь на си и кресты с шарпа, и сразу встала проблема с литературой. Ну то есть хотелось бы найти некий относительно современный толмуд, куда можно было бы обращаться по необходимости, а не только SO шкурить. В шарпе это решается очень просто - кнопкой F1 плюс хелп постоянно обновляется, следуя за новыми фишками языка и это не говоря уже про StyleCop и Resharper. По крестам книг просто вагон, С++14 уже нормально расписан, поэтому тоже вопросов особо не возникает.
А с си как-то всё печально. Не, у меня, конечно есть книга 1995 года,. но это как-то несерьёзно по-моему.
Аноним 18/09/15 Птн 07:50:54 #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. Вроде в С нету такого оператора.
Аноним 18/09/15 Птн 08:00:51 #299 №544900 
>>544885
1. Да забей ты на её местоположение, нахуя тебе знать, где она лежит?
2. Если компилятор не вычисляет, то либо функцию используй, либо вычисляй заранее.
Аноним 18/09/15 Птн 08:18:07 #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. Хочу нормальный последовательный подход.
Аноним 18/09/15 Птн 08:21:33 #301 №544903 
>>544901
Сорян, звездочки проебал, там a это указатель, и (a + i) берется по адресу.
Аноним 18/09/15 Птн 11:20:04 #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.
Аноним 18/09/15 Птн 13:22:32 #303 №545020 
>>544952
>Можешь сделать readelf -l и/или info proc mem и т. п. в gdb.
Спасибо, readelf мне показался трудночитаемым, да выше дата сегмента ничего нет, а вот (gdb) info proc mappingspmap) - это находка.
Аноним 18/09/15 Птн 14:31:03 #304 №545072 
>>544870
>зачем тогда K&R? время не резиновое
Затем, что классика. Но, согласен, если ты хочешь побыстрей всё выучить и начать зарабатывать деньги, то да, можешь не читать. Эта книга больше интересна тем, кто любит язык C и хотел бы узнать о нём, как можно больше.
>гуглишь статьи и вопросы на SO
Тащемто есть ещё man, если ты работаешь в UNIX-like ОС. Для меня это достаточно исчерпывающий источник информации. Под виндой, по идее, тоже должен быть аналог.
Аноним 18/09/15 Птн 15:21:33 #305 №545109 
>>544898
>Declaration - это дать знать компилятору о новой сущности, чтобы он мог искать ошибки с ее использованием
ты делаешь declaration переменной, расположенной в другой единице трансляции, чтобы сделать возможной ее использование в этой единице трансляции
компилятор же обрабатыват каждую единицу трансляции (по сути .c файл с кодом) по отдельности, формируя объектные obj файлы, далее линковщик все это собирает в исполняемый файл
другое дело, что правила declaration разные, для переменных нужно дописывать extern, для функций пишешь прототипы, свои заморочки есть для структур - тут разрабы языка поступили, как и в других случаях - строгость, формальность языка была приведена в жертву удобству и краткости
Аноним 18/09/15 Птн 15:45:01 #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 нет, но это почему то работает. Не отвечай. Мы-то с тобой знаем, где здесь что, как работает, и какие тут проблемы. Но дай анонам самим подумать.
Аноним 18/09/15 Птн 16:24:52 #307 №545196 
>>545125
> Не отвечай. Мы-то с тобой знаем, где здесь что, как работает, и какие тут проблемы. Но дай анонам самим подумать.
ох ебать, ну что за выебоны
Аноним 18/09/15 Птн 17:14:21 #308 №545258 
>>545125
>выносящий мозг
Ну и что в нём выносящего?
Алсо С++ компилятор пошлёт тебя в жопу с твоими int foo[16384]. Пример говнокода as is.
Аноним 18/09/15 Птн 17:14:56 #309 №545259 
>>545072
>Но, согласен, если ты хочешь побыстрей всё выучить и начать зарабатывать деньги, то да, можешь не читать.
За живое задел. Я изучаю С УЖЕ отрезав время от других, более перспективных в отношении денег, вещей. И переутомление подсказывает, что совмещение всего мне пора заканчивать. С - самое интересное и, увы, самое низкоприоритетное из моих занятий, а время и силы в следующий раз где-то через год будут.
Аноним 18/09/15 Птн 17:37:42 #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).
Аноним 18/09/15 Птн 19:05:43 #311 №545303 
>>545109
>>545125
Тут следукт понимать, что кроме стандарта есть и реализация, произвольная. Например, IAR такой код проглатывает, но не проверяет сигнатуру функций.

А от extern функций тоже бывает польза. Вот я в текущем проекте ими реализовал своего рода интерфейс модуля расширения, и проверка его корректности съехала, таким образом, на линковщик.
Аноним 18/09/15 Птн 19:19:01 #312 №545311 
Что за хуйню я читаю!? Это же пиздец ребята, я на Си не первый год сижу и никогда не заморачивался даже в самом битоёбском деле о такой хуйне, которая тут обсуждается. Впечатление такое, что здесь не Си изучается, а некая абстрактная хуета способная заглядывать в будущее. Зачем, зачем блядь заморачиваться над проблемой неоднозначно поставленой школьником для решения ведомых только ему, неформальных задач.
Аноним 18/09/15 Птн 19:53:39 #313 №545319 
>>545311
А хуле ещё обсуждать? Не инжекты в процессы же, лол. Зато сверху вон привели классический пример, из-за которого Си люто ненавидим. Любой, сука, зстет может превратить код в нечитаемое и несопровождаемое говно. Что в мэйнстримных языках сделать несколько сложнее.
Аноним 18/09/15 Птн 19:55:12 #314 №545320 
>>545274
Я и не говорил, что это хороший код. Я говорил, что этот код работает.
> J.5.11
Фактически, про UB там написано потому, что в одном translation unit может быть int, а в другом float, и тогда это, конечно же, UB. Одинакового размера. А механизм, позволяющий код типа >>545125 был введен в свое время не потому что >>545109
> строгость, формальность языка была приведена в жертву удобству и краткости
а потому что весь механизм заимствован и поддерживался для линковки с Fortran. И оно будет работать, потому что это де-факто стандарт и еще из-за того, что линкеру на стандарт сишечки похуй, что бы там комитет по этому поводу не думал. Хотя это и не повод так писать в наши дни.

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

>>545303
Не совсем понял, о чём ты. Функции и так extern. Их можно сделать static, но по умолчанию они extern.
Аноним 18/09/15 Птн 20:06:51 #315 №545324 
14425960110600.jpg
прошлый тонет тут https://2ch.hk/pr/res/544175.html

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

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

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

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

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

ну на тебе задачку решиш моя помосчь тебе наврятле больше понадобится.
Аноним 18/09/15 Птн 20:27:23 #316 №545334 
>>545320
>Я и не говорил, что это хороший код. Я говорил, что этот код работает.
В твоём конкретном случае работает. У кого-то это уже может не завестись. Для этого и существует понятие "неопределённое поведение". Например, если ты в 1.c сделаешь инициализацию

int foo[1] = { 1 };

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

>весь механизм заимствован и поддерживался для линковки с Fortran. И оно будет работать, потому что это де-факто стандарт и еще из-за того, что линкеру на стандарт сишечки похуй, что бы там комитет по этому поводу не думал.
Было бы ещё интересней, если бы ты какие-нибудь ссылки приложил к своему заявлению, где о подобном говорится.
Аноним 18/09/15 Птн 20:33:40 #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;
}
Аноним 18/09/15 Птн 20:37:45 #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;
}
Аноним 18/09/15 Птн 20:40:44 #319 №545342 
>>545339
Однако для её правильной работы нужно колесо двинуть туда-сюда, чтобы условие начало выполняться.
Аноним 18/09/15 Птн 21:15:15 #320 №545372 
>>545334
> какие-нибудь ссылки приложил к своему заявлению
Ну, например: http://www.lurklurk.org/linkers/linkers.html#dups
Аноним 19/09/15 Суб 01:14:57 #321 №545489 
Пожалуй нубский вопрос, не обессудьте: аргументы командной строки можно раздобыть где-то вне main? Про GetCommandLine знаю, однако ж требуется универсальность. Спасибо.
Аноним 19/09/15 Суб 01:24:35 #322 №545492 
>>545489
нет
Аноним 19/09/15 Суб 14:26:08 #323 №545677 
>>545489
>аргументы командной строки можно раздобыть где-то вне main
Можно. Хуяришь глобальную переменную и оттуда ковыряешь данные по необходимости.
Аноним 19/09/15 Суб 19:29:13 #324 №545845 
>>545677
Я думаю, это и так было очевидно. Можно и как аргументы передавать другим функциям. Но в каждом случае тебе нужно сделать какие-то манипуляции в main() для этого.
Аноним 19/09/15 Суб 19:42:41 #325 №545854 
>>545845
Если у тебя нет контроля над main(), в чем проблема написать GetCommandLine и аналоги под каждую следующую платформу, которую необходимо поддерживать?
Аноним 19/09/15 Суб 20:13:24 #326 №545867 
Как на маке намутить gcc? Есть ли команда в терминале как в линуксе?
Аноним 19/09/15 Суб 20:13:50 #327 №545869 
>>545854
Доступ к комстроке вне main есть не на всех платформах.
Аноним 19/09/15 Суб 20:43:13 #328 №545898 
>>545489
обычно делают так: описывают структуру с полями где перечислены возможные аргументы, заводят глобальную переменную (зачастую сразу делают безымянную структуру), пишут функцию разбора - в нее прямо передается argc, argv, в этой функции происходит разбор и заполнение глобальной структуры
таким образом, main не засоряется - функция разбора вызывается один раз в самом начале
дальше уже пользуются данными из глобальной структуры, ну либо еще дописывают функции доступа и вызывают уже их, а не напрямую читают из структуры
Аноним 19/09/15 Суб 21:29:08 #329 №545940 
>>545869
Примеры будут?
Аноним 19/09/15 Суб 21:36:32 #330 №545949 
14426877920850.png
>>545940
Аноним 19/09/15 Суб 22:21:41 #331 №545986 
>>545867
Анон, ответь
Аноним 19/09/15 Суб 22:28:09 #332 №545991 
>>545986
XCode, homebrew
Аноним 19/09/15 Суб 22:28:20 #333 №545992 
>>545986
http://www.dmoz.org/Computers/Software/Operating_Systems/Mac_OS/Mac_OS_X/
Аноним 19/09/15 Суб 22:36:54 #334 №546003 
Ардуиноблядь в треде, посоветуйте книжку для ардуинобляди, чтобы ардуиноблядь смогла выйти за рамки ритмичного помигивания светодиодом.
Аноним 19/09/15 Суб 22:39:17 #335 №546005 
>>545992
чёт яннп
Аноним 19/09/15 Суб 22:40:08 #336 №546006 
>>546003
1) MISRA-C:2004 Language Guidelines
2) http://fprog.ru/2009/issue1/eugene-kirpichov-fighting-mutable-state/
Аноним 19/09/15 Суб 22:41:25 #337 №546008 
>>546005
Типа коллекцiя закладок, собираемых сообществом.
Аноним 19/09/15 Суб 22:45:24 #338 №546012 
>>546008
А эти компиляторы не кривые? А то не хочу как на виндоусе со всякими ошибками в стиле "вы взяли scanf, а не scanf_s".
Аноним 19/09/15 Суб 22:51:40 #339 №546017 
>>546012
Спокойно, там внутри Darwin.
Аноним 19/09/15 Суб 22:56:05 #340 №546021 
>>546017
А можно поподробнее? Я в Си меньше недели, про все ништяки еще не знаю. Что за Дарвин?
Аноним 19/09/15 Суб 23:09:20 #341 №546026 
14426933601580.jpg
>>546021
Ну я это, я.
Аноним 19/09/15 Суб 23:14:14 #342 №546031 
>>546006
О, привет. Тебя все еще не заебало таскать с собой это говно?

>>546012
> на виндоусе
-D_CRT_SECURE_NO_WARNINGS / -D__STDC_WANT_SECURE_LIB__=0
Аноним 19/09/15 Суб 23:31:57 #343 №546039 
>>546031
Что это?
>>546026
Нет, ну серьезно
Аноним 19/09/15 Суб 23:43:44 #344 №546051 
>>546039
Это магия, избавляющая майкрософтовый компилер от пропаганды _s, очевидно же.
Аноним 20/09/15 Вск 00:07:48 #345 №546065 
>>546051
Отлично. А по той ссылке что можешь порекомендовать взять?
Аноним 20/09/15 Вск 06:33:56 #346 №546185 
14427200369700.jpg
>>544952
Вот спс!
>Либо ты пишешь снаружи функции
Ну по идее для базовых кодов, все всегда пишется внутри int main(), не? Я так и не совсем понял почему это так обязательно, тот же "printf("Hello, World!\n");" засовывать в main, почему без него то не работает?
>Поясни поподробнее. Может, тебе показывали код на асме для доступа к автоматической и статической переменной?
Ну наверное, это было на слайде, и там колонка была, типа программа резервирует память в этом месте и.т.д.
Аноним 20/09/15 Вск 08:07:06 #347 №546194 
>>546185
> Ну по идее для базовых кодов, все всегда пишется внутри int main()
Код да. А переменные можно делать глобальными (в пределах программы или только одного файла, причем последнее предпочтительнее). Ну, когда ты уверен, что это необходимо.

> засовывать в main, почему без него то не работает?
Так задумано. Код программы описывается функциями, выполнение программы начинается с функции main() и заканчивается после выхода из неё. Код вне функций никому не нужен, но можешь подумать, что было бы, если бы тебе разрешили так писать: ты линкуешь программу из двух файлов, в обоих код вне функций, какой из двух файлов должен выполниться первым? В плюсах есть такая проблема. Там у глобальных объектов конструкторы вызываются до main(). В случайном порядке.
Аноним 20/09/15 Вск 10:49:59 #348 №546237 
>>546065
Ананасы, нид совет, я вообще ничего не понял по той ссылке
Аноним 20/09/15 Вск 11:00:49 #349 №546239 
>>545492
>>545677
>>545898
Спасибо всем. Доступа к main нет от слова совсем просто. Странно что полно дряни типа errno, а argv, которые актуальны на всём протяжении работы, для любого потока в переменную не вынесены. Ну да и черт с ним.
Аноним 20/09/15 Вск 13:18:45 #350 №546278 
>>546239
>Странно что полно дряни типа errno, а argv, которые актуальны на всём протяжении работы, для любого потока в переменную не вынесены.
Я думаю, это связано с тем, что размер argv непредсказуем.
Аноним 20/09/15 Вск 13:46:48 #351 №546292 
>>546278
Хотя я сейчас подумал, что если учитывать, что argv, argc будут лежать на стеке main() на протяжении всей работы программы, то фактически не нужно их куда-то копировать в кучу. Тащемто действительно странно, что не продумали глобальный доступ к ним by design. Может, кто из местных анонов пояснит, почему так сделали.
Аноним 20/09/15 Вск 14:34:23 #352 №546304 
>>546278
Ну так-то в некоторых компиляторах (не будем показывать пальцем на Microsoft) есть __argc, __argv и даже __wargv.
Аноним 20/09/15 Вск 16:03:29 #353 №546343 
>>546292
>argv, argc будут лежать на стеке main
Лежать будут указатели на них.
А вообще командная строка хранится в process environment block (PEB) которые создается системой при старте нового процесса. PEB кладется куда-то в адресное пространство процесса, в отличие от остальных структур процесса, что прячутся в адресное пространство системы. Это для винды, под юниксами делается как-то похоже скорей всего.
Забирать агрументы командной строки можно еще и функцией GetCommandLine.
Но тебе это знать не нужно, тк ты слишком маленький еще.
Аноним 20/09/15 Вск 16:10:44 #354 №546347 
>>546343
> Забирать агрументы командной строки можно еще и функцией GetCommandLine.
> Но тебе это знать не нужно, тк ты слишком маленький еще.
Откуда в треде столько ЧСВшных уёбков? Про GetCommandLine ещё было сказано в сообщении, с которого началось обсуждение этой проблемы >>545489
Аноним 20/09/15 Вск 16:52:38 #355 №546371 
>>546343
> Лежать будут указатели на них.
Почему это? Будут лежать именно argc и argv. На x86 на любой ос их даже найти там можно без проблем (если main не модифицировала).

> А вообще командная строка хранится в process environment block
Скорее в _PEB.ProcessParameters, но тебе это знать не нужно, тк ты слишком маленький еще.
Аноним 20/09/15 Вск 16:54:35 #356 №546372 
>>546347
Не обращай внимания, у нас тут байтоебский чатик. А ты бы лучше рассказал поподробнее, зачем это тебе понадобилось?
Аноним 20/09/15 Вск 17:21:37 #357 №546385 
>>546372
>зачем это тебе понадобилось?
Я не тот анон, которому нужен доступ к argv вне main() из коробки. Я просто участвовал в обсуждении.
Аноним 20/09/15 Вск 17:58:13 #358 №546398 
>>546347
>>546371
Сосите хуй, в общем. Я элита, вы говно. На этом постить прекращаю.
Аноним 20/09/15 Вск 17:59:00 #359 №546399 
>>546398
Наконецто.
Аноним 20/09/15 Вск 18:42:46 #360 №546411 
14427637660760.jpg
14427637660801.jpg
тред скоро пизданеца о бамп лимит
над пилить перекат.

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

первая электроника второй код а третий дружба как у поней мать их так.
Аноним 20/09/15 Вск 18:55:30 #361 №546419 
>>546411
да дети да я пишу код еще под архитектуру ебаных конца восьмидесятых.
мне предлогает атмел я его нахуй шлю с его удобностью и сраными 3-5 мегагерцами.
тупым подсчетом реакции на прерывание мы видим что нас жестоко хотят наебать.
да проще да ненужен програматор да архитектура "ЗАТОЧЕННА ПОД С"
НО я на своем разогнаном ВИЖУ на порядок больше чем ты на сваих сраных 10 мегагерцах.
а если ты код неумееш писать кто тебе в этом виноват?.
мы имеем тоже что и вы да у нас нет встроенной флеши но кто мешает ее подключить?
написать код - размять сваи мазги
поиграть в угодайку погуглить даташиты всю хуйню.
Аноним 20/09/15 Вск 19:04:25 #362 №546420 
кстати электронщики не стоит использувать ету поебалу китайскую жидкай силикон для конечных устройств.
как правило все идет на скрутках или на пайке.
эта смола меня раз пиздец как подъхебла
смантировал ну и думаю пачистю пайку бянзинчиком ОГА - ЭТА ХУЙНЯ РАСТВОРЯЕТСЯ в бянзинчиге.
и термоусадка в гавно превратилась... плак плак.
девайс надо переделывать(

Аноним 20/09/15 Вск 23:32:29 #363 №546538 
>>546372
То не я, уже пояснили.
Мне-то просто знать наверняка надо было.
Я фана ради конпелятор теперь уже транслятор осилить пытаюсь, вот и использую в качестве "универсального ассемблера". Собственно и думал, не используя волшебных имён, подобно питону совместить тело програмы с блоком инициализации верхнего модуля и вынеся аргументы и прочее в отдельный модуль. Вобщем-то и так можно проинициализировать их из main, однако лишь для полностью подконтрольного приложения, не библиотеки например.
Аноним 21/09/15 Пнд 02:40:59 #364 №546584 
>>546538
Библиотеке аргументы должны либо скармливаться явно, либо она вообще не должна о них знать.
sageАноним 23/09/15 Срд 02:01:49 #365 №547721 
Окей, сосоны. Поясните мне за такую хуйню. Я не буду говорить о том, что может я дебил, скажу так. Я дебил и не понимаю, какого хуя, чтобы изучить стандарт С11, на котором считается, что я должен писать, я должен платить бабки блядь? Какого хуя? Это такая же хуйня как JPEG 2000. Они тоже требуют бабки за спецификации. Какого хуя? Что за на хуй хуйня? Как изучать С11 при таком раскладе? Может K&R новое издание вышло с изменениями. Просто это вообще пиздос полнейший. Я бы вообще не возникал, если бы сейчас на венде сидел, там меня масм устраивал, но бля... На прыщах нужно как-то адаптироваться к новым стандартам и все такое. Или не надо?
sageАноним 23/09/15 Срд 02:05:01 #366 №547722 
>>518732
Го свой напишем? Ну типа WxWidgets только для сишки и более аккуратный/интуитивно понятный. Сделаем кашерный ученик по нему и плюсофаги соснут хуйца, т.к. весь мир перейдет на сишку, кек.
sageАноним 23/09/15 Срд 02:28:44 #367 №547725 
>>518787
Ебать уебищен этот синтаксис AT&T. У интела няша
Аноним 23/09/15 Срд 09:18:23 #368 №547779 
>>547725
сорта говна
Аноним 23/09/15 Срд 09:21:26 #369 №547781 
>>547721
Ну вроде я находил бесплатные версии в тырнете.
Аноним 23/09/15 Срд 11:34:43 #370 №547829 
>>547721
препринты
Аноним 23/09/15 Срд 18:37:15 #371 №547998 
>>547721
Есть TR, там всё то же, но бесплатно. Тебе хватит. Если у тебя какие-то проблемы с этим, можешь на K&R/C89 писать - многие так и делают, фанатично искореняя всякие C99измы, какой уж тут C11.
sageАноним 23/09/15 Срд 18:45:46 #372 №548001 
>>547998
>TR
?
Аноним 23/09/15 Срд 18:54:22 #373 №548004 
>>548001
Драфты же.
http://chimera.roma1.infn.it/SP/COMMON/iso-iec-9899-1990.pdf
Аноним 23/09/15 Срд 19:31:24 #374 №548019 
>>548004
700 страниц, ебал я в рот
Аноним 23/09/15 Срд 19:51:43 #375 №548025 
>>548019
А ты вычти введение про environment (там, в основном для разработчиков ОС и компиляторов), описание стандартной библиотеки (если уже учил Си, там не так много функций добавилось), приложения (проглядеть по диагонали или вообще не читать), и из 700 останется 150 страниц про язык. Хотя учить язык по спеке - это максимум мазохизм, конечно.
Аноним 25/09/15 Птн 14:14:38 #376 №548866 
Байтоёбы, поясните ньюфагу, нахуя знать тыщщщу архитектур и кичиться этим? Какая нахуй разница: ARM, AVR, MIPS, x86? Ну кроме разрядности шины? Ведь сишному коду всё едино?
Аноним 25/09/15 Птн 14:18:15 #377 №548871 
>>548866
Если байтоёбишь просто потому что ты дохуя 1337, то чтоб выебнуться. Если для performance, то а как ещё-то? Конпелятор же не знает, какие у тебя данные, как они поступают и т.д. Да и в общем случае не всегда оптимально оптимизирует.
Аноним 25/09/15 Птн 16:13:41 #378 №548932 
14431868219300.jpg
>>548866
Как ты без ассемблера напишешь полностью ядро ОС???
Нет у меня конечно получилось 1 раз, но это было только благодаря создателям тулчейна, которые сделали так, что все само сохранялось и восстанавливалось, и предоставили интринсики для работы с указателем стека...
Аноним 25/09/15 Птн 18:16:40 #379 №548986 
>>548866
Для общего развития, лол.
1) Сложный дебаг, дебаг чужого блоба, реверсинг.
2) Понимание, в какие примерно инструкции соберется код, помогает понять, как делать не надо (например, почему на этой конкретной системе исключения пиздец медленные, на этой часто можно пренебречь выравниванием, вот в той big-endian, и если ты хочешь совместимости, изволь ебать байтики, а вот та - вообще DSP с 24-битными словами, иди ищи пидараса, который к размеру int привязался).
3) Ну, и если у тебя сколько-нибудь критичный к скорости код, то ты рано или поздно придешь к Intel VTune Amplifier (или аналогу), а там без знания архитектуры никуда.
Аноним 25/09/15 Птн 23:29:52 #380 №549127 
>>548866
>нахуя знать тыщщщу архитектур
Я не думаю, что кто-то реально шарит в большом количестве архитектур. Обычно на какой-то одной специализируются, разве нет?
>Какая нахуй разница: ARM, AVR, MIPS, x86?
DA TI OHUEL

мимо-работающий-со-SPARC'ом
Аноним 29/09/15 Втр 01:10:26 #381 №550558 
>>548986
> на этой часто можно пренебречь выравниванием
Ты блять внатуре уебок чтоли? А ну пошел на хуй отседова на зассаные кресты, там тебе и место
Аноним 29/09/15 Втр 02:02:21 #382 №550565 
>>550558
Ну умеет x86 alignment fault проглатывать, ну пользуются этим часто. Оттого, что ты тут порвался, ничего не изменится ведь.
Аноним 29/09/15 Втр 15:48:23 #383 №550757 
14435309036660.jpg
>>550558
На stm8 выравнивание не нужно, например...
Аноним 03/10/15 Суб 11:40:07 #384 №552567 
14438616080390.png
Си-нуб(Недавно закончил чтение C&R) просит помощи. Есть ли возможность реализовать в маздайной консольке цвитные строки, так, чтобы без особых костылей и надстроек над самой консолькой?
Аноним 03/10/15 Суб 11:45:45 #385 №552571 
>>552567
Консолька винды 8.1 шлёт нахуй управляющие последовательности ANSI.
Выручай анон.
Аноним 03/10/15 Суб 14:04:30 #386 №552635 
Накидайте что ли гитхабовских проектов на С, что бы можно было поковырять, да набраться уму-разуму. Желательно не что то крупное в котором можно утонуть.
Аноним 03/10/15 Суб 20:49:27 #387 №552845 
>>552635

ну зайди на мой, у меня там си-карнавал просто - https://github.com/artnavsegda/artnavsegda
Аноним 03/10/15 Суб 21:28:08 #388 №552870 
>>552635
sqlite почитай для начала.
Аноним 04/10/15 Вск 10:20:57 #389 №553007 
Подскажите API винды для получения информации о железе. Хочу посмотреть, получится ли так определить, что мы находимся под эмулятором.
Аноним 04/10/15 Вск 10:23:42 #390 №553008 
>>553007
Нагуглировал такую штуку.
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms724958%28v=vs.85%29.aspx

Из той структуры, похоже, мало интересного можно узнать. Только о процессоре и архитектуре.
Аноним 04/10/15 Вск 10:41:05 #391 №553010 
>>552571
WinAPI
Аноним 04/10/15 Вск 15:20:55 #392 №553146 
14439612556560.jpg
>>552635
Вот мое поделие.
https://github.com/shkolnick-kun/bugurtos
Аноним 04/10/15 Вск 16:45:30 #393 №553198 
>>553146
Ебать ты крут
Аноним 04/10/15 Вск 18:40:52 #394 №553293 
>>553007
Тебе нужно WMI + реестр на предмет всяких VirtualBox Additions.
Аноним 05/10/15 Пнд 11:27:15 #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
Аноним 05/10/15 Пнд 12:37:05 #396 №553784 
14440378259080.jpg
>>553765
А чем тебе не нравится рандомное число?
Аноним 05/10/15 Пнд 12:48:48 #397 №553788 
14440385285870.jpg
>>553765
Вот тут пример, как работать с шаред мемори.
https://www.cs.cf.ac.uk/Dave/C/node27.html
Базарю, ID знать не надо, надо знать key.
Аноним 05/10/15 Пнд 19:25:59 #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 не существует, т.е. его надо как-то создать.
Аноним 05/10/15 Пнд 19:30:32 #399 №554022 
>>554019
Да, пробовал IDA на этих утилитах, но постиг неудачу: архитектура MIPS, а для нее нет hex-rays decompiler, и вообще многих штук, которые бы повысили читаемость кода до того уровня, чтобы я осилил листинг.
Аноним 05/10/15 Пнд 20:33:37 #400 №554084 
>>554019
Ка грустно быть тобой!
Начнем с того, что стандарт posix определяет только api, соответственно нет переносимого надежного способа заставить shmget сгенерировать тебе сегмент памяти с id из определенного диапазона.
То есть в этой твоей пипиетарщине используют грязный хак с системными вызовами в обход uclibc.
И самое хуевое, что после обновления Ядра может перестать работать сама пипиетарщина.
Аноним 05/10/15 Пнд 21:10:22 #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,
third, void , ptr, void , fifth)
Аноним 05/10/15 Пнд 21:33:21 #402 №554127 
Анон, подскажи, как на Си намутить безопасный массив. Гугл завален гайдами на С++, а на Си ничего нет.
Аноним 05/10/15 Пнд 22:35:14 #403 №554156 
>>554127
А безопасный - это как? Границы проверять при доступе? Ну так сделай Array_Get, Array_Put и проверяй.
Аноним 05/10/15 Пнд 23:24:50 #404 №554177 
>>554156
Да, границы от перезаполнения
Аноним 05/10/15 Пнд 23:26:28 #405 №554178 
>>554156
Можешь рассказать поподробнее про эти две функции? Я первую неделю на Си
Аноним 05/10/15 Пнд 23:34:29 #406 №554181 
>>554178
Не могу, я их выдумал. Если тебе нужно проверять границы - проверяй их при каждом доступе. Чтобы не забыть о проверке случайно, оберни доступ к массиву в функцию.
Аноним 05/10/15 Пнд 23:53:40 #407 №554185 
>>554181
А как это реализовать? Ассертом?
Аноним 06/10/15 Втр 01:36:50 #408 №554242 
>>554110
Не обязательно, может там просто задана определенная конфигурация при которой может быть всего 16 сегментов, х.з короче.
Аноним 06/10/15 Втр 02:18:54 #409 №554247 
14440871345200.jpg
>>554110
Обрати внимание на два крайних аргумента, что будет, если они будут не нулевыми?
Аноним 06/10/15 Втр 06:32:50 #410 №554264 
>>554247
они похоже, зарезервированы для совместимости, дальше вызов имеет вид:

case SHMGET:
return sys_shmget(first, second, third);

Проблема только одна: не могу найти код самого sys_shmget, может я настолько туп? Ищу в исходниках ядра, и не нахожу конкретики.
Аноним 06/10/15 Втр 06:34:15 #411 №554265 
>>554242
Не, их можно создавать через shmget с номерами явно большими, я проверял.
Аноним 06/10/15 Втр 08:06:51 #412 №554277 
>>554127
запили функцию, которой будешь контролировать все свои опасности и работай с массивом только через неё.
Аноним 06/10/15 Втр 10:01:39 #413 №554316 
>>518732
Ты забыл про Windows API.
Аноним 06/10/15 Втр 13:04:21 #414 №554369 
14441258616260.jpg
>>554264

http://lxr.free-electrons.com/ident?i=sys_shmget
Надо в гугле искать, а не самому исходники рыть, она платформеннозависима, соответственно ты и не можешь её найти п кроссиплатформенном коде.
Аноним 06/10/15 Втр 13:10:27 #415 №554371 
14441262278950.jpg
>>554264
А нет, она вполне себе кросс....
http://lxr.free-electrons.com/ident?v=2.4.37;i=sys_shmget
Аноним 06/10/15 Втр 13:22:53 #416 №554374 
Аноны, помогите начинающему. Есть допустим stdio.h, там прописана декларация функций и прочая-прочая. Остальное где? Откуда сами функции берутся? Как это всё происходит?
Аноним 06/10/15 Втр 14:37:09 #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
и начинаем греть голову, как бы это все вызвать в реальном коде. Пока идей нет.
Аноним 06/10/15 Втр 14:54:01 #418 №554397 
>>554392
А вот тут - ахтунг!
Этот файл из linux 2.4.х!
У тебя какая версия ядра?
Аноним 06/10/15 Втр 15:10:24 #419 №554401 
>>554397
У линуса на гитхабе это все тоже есть.
И да smid <= 16 это колдунство то еще,
такое впечатление, что эти куски памяти создаются в самом начале работы ядра.

А то, что программа как-то использует именно их - это все быдлокодерство и грязные хаки...
Аноним 06/10/15 Втр 15:59:05 #420 №554424 
>>554397
Да, там 2.6.30, я естественно с оглядкой на это ядро делаю.

>>554401
Да, сейчас попробовал: если не создано вообще ни одного shm-сегмента, то shmid первым создает сегмент 0, а вот уже второй сегмент создается с большим ID.
Теперь пытаюсь выяснить: то ли сегменты <16 все-таки можно создать, то ли создатели этого дела ебанутые, и остальные 15 никогда там не работали и не проверялись.
Аноним 06/10/15 Втр 16:10:06 #421 №554427 
>>554424
Короче, аноны, докопался:
http://lxr.free-electrons.com/source/ipc/util.h#L158

Получается, создать их все-таки можно, но не в текущем ядре, на котором крутится система.
т.к. по дефолту SEQ_MULTIPLIER = 32768, и соответственно, создаются сегменты с 32768*номер сегмента + id сегмента.
Итого, единственные вариант, где номера сегментов будут нужные: SEQ_MULTIPLIER = [0-15].
Теперь ищу в ядре, где это значение записано, и поменяю бинарно (а ядро тоже блобом, патчей, который накатил создатель этого дерьма - также нет).
Аноним 06/10/15 Втр 16:22:23 #422 №554432 
14441377437120.gif
>>554427
>SEQ_MULTIPLIER
http://lxr.free-electrons.com/source/include/linux/ipc.h#L8
Вот оно, держи.
школьник кун
Аноним 06/10/15 Втр 16:24:33 #423 №554433 
14441378735170.jpg
>>554432
точнее так:
ать: http://lxr.free-electrons.com/source/ipc/util.h#L16
два: http://lxr.free-electrons.com/source/include/linux/ipc.h#L8
Аноним 06/10/15 Втр 16:31:05 #424 №554438 
14441382659480.jpg
>>554427
Я бы не стал так менять, ибо можно жестко наколоться!
Кто знает, что там еще поменяно???
школьник-кун
Аноним 06/10/15 Втр 16:39:28 #425 №554443 
>>554438
Ты так говоришь, как-будто у меня есть выбор!
Аноним 06/10/15 Втр 16:41:44 #426 №554446 
14441389044780.jpg
>>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???
Аноним 06/10/15 Втр 16:51:24 #427 №554450 
14441394847750.jpg
>>554443
seq - это номер версии,

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

Походу, твои быдлокодеры считают, что сегменты создаются в самом начале работы...
Аноним 06/10/15 Втр 16:52:09 #428 №554452 
>>554446
Вообще, возвращает оно то, что надо, так что скорее всего id = key, new->id = shmid или что-то подобное.
Аноним 06/10/15 Втр 16:53:49 #429 №554453 
14441396291000.jpg
>>554450
Ядро патчить не надо, попробуй передать вместо настоящего shmid вот такое значение:
shmid%SEQ_MULTIPLIER,
вдруг сработает???
Аноним 06/10/15 Втр 16:55:25 #430 №554454 
>>554450
Могу только сказать, что оно никогда не освобождается при работе, там даже перезапуск сервисов не предусмотрен.
Возможно этот юзерспейс писался для какого-нибдуь старого ядра, или для ядра с таким патчем:
http://www.programdoc.com/1272_129170_1.htm
Но я проверил, патч в ядро не брали, и в том ядрес, на котором все это работает, такого нет.
Аноним 06/10/15 Втр 16:59:06 #431 №554456 
>>554454
Вот это
>>554453
должно сработать, ибо похоже, для сегментов история не проверяется в ядре...
Аноним 06/10/15 Втр 17:00:56 #432 №554457 
>>554374
Нельзя тупые вопросы задавать, да?
Аноним 06/10/15 Втр 17:04:45 #433 №554460 
>>554456
> должно сработать, ибо похоже, для сегментов история не проверяется в ядре...

Не сработало: если таким образом модифицировать key, то id выдается тот же самый, ничего не меняется.
Если модифицировать id, то shmat (dst): Identifier removed
Т.е. зааттачиться к сегменту не выходит.
Аноним 06/10/15 Втр 17:06:43 #434 №554461 
>>554460
Значит ШМАТ проверяет версию сегмента, жаль.
Аноним 06/10/15 Втр 17:15:42 #435 №554462 
>>554460
>shmat (dst): Identifier removed
Ну тогда придется патчить ядро,
проследи все зависимости от SEQ_MULTIPLIER, и поправь их так, чтобы не было зависимости от версии.
Аноним 06/10/15 Втр 17:57:34 #436 №554473 
>>554374
А сами функции линкер берет из библиотек (.a, .lib) - там хранится набор уже скомпилированных в объектные файлы функций (статическая библиотека) или указания, в какую .so/.dll обратиться за этими функциями при запуске (динамическая библиотека). Одна из библиотек называется CRT (C runtime library) и цепляется автоматически, поэтому от тебя никаких телодвижений не требуется.
Аноним 06/10/15 Втр 18:07:08 #437 №554477 
>>554473
Спасибо, анон! А откуда линкер знает, к какой библиотеке это относится? Я просто пытаюсь разобраться в механизмах всего этого.
Аноним 06/10/15 Втр 18:24:11 #438 №554488 
>>554477
Вот я включаю заголовок либы в свой файл, по скобкам или кавычкам определяется локальный заголовок или нет. Потом что происходит? В заголовке не прописано ничего, только определение функций в данном случае.
Аноним 06/10/15 Втр 18:57:04 #439 №554512 
>>554488
Дальше у линковщика есть список дефолтных путей, в которых он ищет функции в библиотеках,которые там лежат, если нашел - добавил функцию в экзешник, если не нашел - будет ошибка.
Аноним 06/10/15 Втр 19:38:16 #440 №554531 
>>554477
> Вот я включаю заголовок либы в свой файл, по скобкам или кавычкам определяется локальный заголовок или нет.
Никакой разницы, системный это заголовок или твой. И даже заголовок ли это вообще (ты с тем же успехом можешь декларировать функции сам). Когда ты декларируешь, но не определяешь функцию или глобальную переменную, компилятор помещает в объектный файл имя (символ), помеченное как extern. Типы либо кодируются прямо в это имя (в С++, гугли name mangling), либо теряются (в С в лучшем случае в символ попадает общий размер аргументов функции).
На этом работа компилятора заканчивается, и в дело вступает линкер. У него перечислены объектные файлы (то, во что скомпилировалась программа), а затем библиотеки (дефолтная, плюс указанные тобой).
Линкер пытается для кажого extern (не определённого, внешнего) символа найти объектный файл, где определён символ с таким же именем (public символ). Т.е., он связывает, допустим, обращение к fopen из твоего объектного файла с тем объектным файлом, где лежит fopen. Поэтому он и называется линкер ("редактор связей" в старой русскоязычной литературе).
Если символ не был найден в объектных файлах, линкер идёт по списку библиотек (в том порядке, в котором они указаны). Когда он находит символ в одной из библиотек, он "достаёт" из библиотеки соответствующий объектный файл и добавляет его к списку объектных файлов, участвующих в сборке. Этот процесс повторяется, пока линкер не разрешит все extern-символы, или пока не закончатся библиотеки в списке. В первом случае линкер пойдёт компоновать исполняемый файл, а во втором он скажет "undefined reference to _some_name".
Аноним 06/10/15 Втр 19:48:36 #441 №554544 
>>554531
Блин, даже не знаю, как тебе благодарность выразить, настолько четко и ясно объяснил. Ебану вискаря за твое здоровье. Спасибо огроменное! Двач-помогач!
Аноним 06/10/15 Втр 20:02:17 #442 №554558 
помогите нульку, господа.
почему я получаю Segmentation fault(core dumped)?

http://pastebin.com/znRAfFhZ
Аноним 06/10/15 Втр 20:47:32 #443 №554605 
>>554558
Ты объявил указатель s в main, но: ты не инициализировал этот указатель, и в результате getchars пишет введённый текст в случайное место памяти (чаще всего в стеке). Поэтому программа падает.
Чтобы прочитать строку, тебе нужно выделить под неё буфер. Например, так: char s[MAXLINE]; или ты можешь использовать malloc().
Аноним 06/10/15 Втр 21:01:44 #444 №554610 
>>554605
спасибо!
Аноним 06/10/15 Втр 22:13:59 #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
Аноним 06/10/15 Втр 22:56:02 #446 №554673 
>>554646
Ты вконец охуел. Хотя бы вопрос сюда скопировал!

> Как узнать, сколько вордов занимает функция
Никак это не проделать в общем случае. Ты можешь пропарсить объектники или отладочную информацию, отсортировать и посчитать размеры но по ссылке совершенно справедливо пояснили за инлайн. Или можешь собирать без оптимизаций или с оптимизациями, но контролируя каждый билд дизассемблером и надеяться на то, что компилятор не меняет порядок функций. Но проще всего вынести всё необходимое тебе в .dll и посчитать хэш сразу всей кодовой секции.
sageАноним 06/10/15 Втр 22:58:59 #447 №554676 
>>554673
Алсо, добавлю, что Visual Studio уже достаточно давно увлекается неполным склеиванием функций, превращая код в страшную лапшу, когда адрес конца функции меньше адреса её начала. Так что нужно очень внимательно смотреть за оптимизациями и прочим LTCG.
Аноним 06/10/15 Втр 22:59:47 #448 №554677 
>>554673
Пиздец, нахуя тогда в той книге этот пример с хешированием по вордам функции?
Аноним 06/10/15 Втр 23:01:30 #449 №554680 
>>554677
Книгу покажи. Алсо, по стандарту Си ты вообще не можешь никак читать код функций (нельзя конвертировать указатель на функцию в указатель на данные любого типа, даже в указатель на void и то нельзя).
Аноним 06/10/15 Втр 23:04:20 #450 №554685 
>>554680
>Книгу покажи
www.cs.arizona.edu/~collberg/.../lecture1.pdf
Аноним 06/10/15 Втр 23:05:00 #451 №554686 
>>554680
Блджад, вот.
http://www.cs.arizona.edu/~collberg/Teaching/mgu/2015/
Аноним 06/10/15 Втр 23:19:52 #452 №554696 
>>554686
А. Ну смотри, раз ты в это лезешь, ты должен быть готов мириться со всем этим говном.
В книге гцц, в гцц можно брать адреса меток lecture1.pdf, страница 31, например - разница между двумя адресами даст тебе приблизительный размер функции. Иногда, лол. Когда-нибудь ты будешь делать "правильно", а пока просто собирай с -O0
Аноним 10/10/15 Суб 06:22:20 #453 №555803 
14444473409470.jpg
>>518562 (OP)
Есть задача. Программу написанную на Си нужно переписать на ассемблер. Есть .ехе и .с файлы. Программа небольшая. Анон, помоги.
Аноним 10/10/15 Суб 11:00:18 #454 №555849 
Посоны, как работать с memmem? (_GNU_SOURCE)

можете привести пример рекурсивного вызова? (надо найти все позиции, которые создержат искомые бинарные данные)

просто когда я засовываю memmem в while() оно ловит segmentation fault, а если хоть 100 раз подряд написать без while - работает нормально.

Аноним 10/10/15 Суб 11:50:27 #455 №555871 
>>555803
А почему не хочешь, чтобы компилятор тебе ее на ассемблер переписал?
у GCC есть:
gcc -S hello.c
у других скорее всего аналогично.

Аноним 10/10/15 Суб 22:59:13 #456 №556090 
>>555849
> просто когда я засовываю memmem в while() оно ловит segmentation fault,
Покажи, как засовываешь.
Аноним 10/10/15 Суб 23:36:30 #457 №556101 
>>554696
Пиздец, нахуй тогда нужна такая защита, которая работает только иногда? Там еще дальше показывается, как шифруется секция кода от метки до метки, и выходит, что точно так же метки дадут только приблизительные границы шифруемого кода? Ебаное говно, нахуй это нужно вообще?
Аноним 11/10/15 Вск 00:01:09 #458 №556114 
>>556101
Если ты будешь делать в реальности что-то защищать, ты можешь, например, взять свой объектный файл с защищаемым кодом и посмотреть/посчитать в дизассемблере точную длину функции. Или пропарсить объектный файл, отсортировать символы и считать функцией все байты до следующего символа.
Если же ты шифруешь секцию целиком, ты можешь просто распарсить заголовки исполняемого файла, там будут точные размеры и офсеты секций - их загрузчик использует.
Ещё протекторы делают макросы для программиста с _emit (http://stackoverflow.com/questions/731428/what-is-the-equivalent-of-emit-on-linux) последовательностей магических байтов в нужных местах функции, протектор их ищет в бинарнике и заменяет эти последовательности и код между ними на шифрованный эквивалент. Например, https://www.google.com/search?q=макросы%20themida
Аноним 11/10/15 Вск 11:49:00 #459 №556275 
>>556114
Насколько сложно самому написать парсер объектных файлов и как это можно сделать? Ничего не нагуглил об этом.
Аноним 11/10/15 Вск 20:36:28 #460 №556587 
http://pastebin.com/LiMhctkb
Анончик, почему сишка - неортогональное говно?
Аноним 11/10/15 Вск 20:42:32 #461 №556593 
>>556587
Потому что переменные любого типа приводятся к int.
Аноним 11/10/15 Вск 22:20:45 #462 №556669 
14445912451210.jpg
А где можно посмотреть на различные коды написанные на C?
Есть ли сайт где можно сортировать списки кодов по просмотрам, фаворитам, дате?
Мне было бы интересно полюбоваться различными интересными кодами (с комментариями естественно), ну например код в котором все слова переводятся в верхний регистр (uppercase).

И кстати, может кто-нить подсказать, где все программеры тусуются? Ну на каком сайте/irc канале? русскоязычный/англоязычный
а то я только про канал #C на freenodes знаю
Аноним 11/10/15 Вск 22:23:06 #463 №556672 
>>556669
>А где можно посмотреть на различные коды написанные на C?
Скачай бубунту, там их дохуищща.

>Есть ли сайт где можно сортировать списки кодов по просмотрам, фаворитам, дате?
нет.

>И кстати, может кто-нить подсказать, где все программеры тусуются?
Да ты ебанулся, программеры не тусуются, это противоречит их естеству.
Аноним 11/10/15 Вск 23:23:02 #464 №556710 
>>556114
(MS) COFF - очень просто, ELF чуть сложнее. Можно готовые либы найти. А вообще, гугли форматы. Можешь википедию для начала почитать.

>>556669
На гитхабе есть поиск по языку, тебе мало? Ну иди на ideone, pastebin, govnokod.
Аноним 11/10/15 Вск 23:52:50 #465 №556729 
>>554680
Что то мне кажется ты немножечко пиздишь. Хоть я и не пытался прочесть из оперативной памяти код программы, но точно знаю, что имея указатель, любые данные на которые он указывает, можно обрабатывать как данные того типа, в котором ты хочешь их видеть. В конце концов, стандарт Си распространяется скорее всего только на компилятор, что не мешает присвоить адрес функции указателю на данные так же легко, как присвоить значение переменной. Совсем другое дело, если ограничения ОС по работе с оперативной памятью будут мешать прочесть данные по указателю, но даже чисто теоретически - функция в одном процессе с программой, а значит должна быть в одном адресном пространстве и может быть как минимум прочтена, а как максимум скопирована куда нибудь и исполнена.
Аноним 12/10/15 Пнд 00:11:19 #466 №556742 
>>556729
Я не знаю, как устроены ограничения по работе с оперативкой, однако если их нет по отношению к изучаемой функции, то есть уйма способов вытянуть адреса начала и конца функции и самый простой - найти сигнатуру соответствующую команде jmp на адрес команды исполняемой после вызывающей функции.
Аноним 12/10/15 Пнд 00:12:18 #467 №556745 
>>556742
>функцией
функцию

фикс
Аноним 12/10/15 Пнд 00:14:23 #468 №556746 
>>556729
> Что то мне кажется ты немножечко пиздишь
Я говорил ПО СТАНДАРТУ (преобразование указателей на данные в указатели на функции упоминается в Common Extensions, но это не портабельно).

На x86 ты можешь читать код. Но не ограничивайся x86, ознакомься, например, с https://ru.wikipedia.org/wiki/Гарвардская_архитектура

>>556742
>найти сигнатуру соответствующую команде jmp
Существует как минимум три способа вернуть управление на x86 и ещё десяток других на других архитектурах. При этом они все могут применяться в одной и той же функции, т.к., return может быть несколько, да и компилятор может парочку своих воткнуть.
Аноним 12/10/15 Пнд 07:59:11 #469 №556836 
>>556746
>При этом они все могут применяться в одной и той же функции, т.к., return может быть несколько, да и компилятор может парочку своих воткнуть.

ааа, внатуре
Аноним 12/10/15 Пнд 14:27:05 #470 №556967 
>>556275
в потрохах бекэндов яп очевидно же
Аноним 15/10/15 Чтв 12:19:52 #471 №558872 
Ананасы, недавно решил начать учить Си самостоятельно, но чую, что не хватает практики с алгоритмами. Посоветуйте какую-нибудь книжку, где упор делается именно на составление красивых алгоритмов.
[САЖА] Аноним 15/10/15 Чтв 21:31:16 #472 №559214 
>>558872
http://drakon.su/
Тут есть всё, что тебе нужно знать об алгоритмах и их красивом оформлении.
[САЖА] Аноним 15/10/15 Чтв 21:32:57 #473 №559216 
>>559214
Чтоб не блукал по ссылкам
http://drakon.su/biblioteka/start
sageАноним 16/10/15 Птн 02:03:58 #474 №559389 
>>559214
Ты опять выходишь на связь?
Аноним 16/10/15 Птн 03:18:21 #475 №559428 
14449547019980.png
мб кто подскажет почему в кусочке этого кода оба массива заполняются одними и теми же элементам хотя должо быть наоборот



Аноним 16/10/15 Птн 06:48:42 #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) Перепиши это говно.
prime number Аноним 16/10/15 Птн 10:11:49 #477 №559535 
14449795095790.png
Пытаюсь найти наименьший prime number greater than the inputted value (наименьшее простое число, которое больше чем введенный номер).

Допустим, юзер ввел 8, а программа должна найти следующее простое число (prime number) = 11.
https://ideone.com/uKcWmo

Кстати, как мне "дебугнуть" мой код? А то он чето не пашет сейчас. У меня есть встроенный lldb, который работает как gdb debugger.

Я ввел в него скомпилированный код test.out
а дальше попытался дебугнуть этот код, не получилось.
Аноним 16/10/15 Птн 10:37:10 #478 №559554 
>>559535
Ты документацию к lldb читал? Так иди читай.
http://lldb.llvm.org/tutorial.html
http://lldb.llvm.org/lldb-gdb.html
Файл ил консоли lldb грузится командой "file test.out".
Аноним 16/10/15 Птн 22:36:03 #479 №559927 
>>559535
У тебя в программе нет ни генератора простых чисел, ни проверки делимости (кроме 2 и 3).
Аноним 20/10/15 Втр 15:20:36 #480 №562156 
Хочу попросить помощи для студента-первокурсника, чтобы добрые аноны помогли разобраться в постейших лабараторных на си.
Хочу очень во всем этом разобраться.
Мои контакты: [email protected]
Аноним 20/10/15 Втр 15:27:57 #481 №562158 
>>562156
А напиши их сюда, мне вот оче интересно что за лабораторные,
мимобезвышки
Аноним 20/10/15 Втр 15:40:39 #482 №562169 
14453448392560.jpg
14453448392931.jpg
>>562158
Очень простые. Но я хотел бы именно позадавать вопросы, понять.
Задание номер 10
Аноним 20/10/15 Втр 16:59:20 #483 №562227 
Среда monodevelop, Ubuntu 14.04, math.h добавлен, в параметрах компиляции прописано -lm -lSDL -lGL -lc -lgcc

Error: undefined reference to `sinf' (5555)

Какого хуя, а?
Аноним 20/10/15 Втр 17:01:24 #484 №562233 
>>562227
А, и компилятор GCC.
Аноним 21/10/15 Срд 04:09:37 #485 №562754 
>>562227
Покажи финальную командную строку линкера.
Аноним 22/10/15 Чтв 17:33:37 #486 №563795 
14455244170310.png
Привет, погроммач, я тоже первокур, который мало чего понимает.
Помогите мне, пожалуйста, разобраться с самым простым.
Нужно разобраться, как работают циклы (особенно те, што считают суммы квадратов чисел, считают всякую тригонометрию) и массивы; и как, сопсно, обозначать и правильно использовать переменные, как подбирать нужные к ним действия.
Лучше по скайпику линк: "gnwoerk", штобы тут не засорять.
Надеюсь на доброту анона.
Аноним 22/10/15 Чтв 18:49:54 #487 №563836 
>>518562 (OP)
Приветствую вас. Ни у кого случайно не завалялась реализация фибонначиевых куч на си? Был бы ультра благодарен за подгон. lonelypath[at]yandex.ru если что. Всем счастья.
Аноним 22/10/15 Чтв 19:55:36 #488 №563873 
>>563795
>>563836
Что за хуесосы в православном треде?
Аноним 23/10/15 Птн 13:27:49 #489 №564224 
>>563873
А што, собствинна, не так? Мммм?
Аноним 31/10/15 Суб 16:41:36 #490 №570112 
Анон, какая есть функция в СИ, чтобы округлить дробную часть числа до определенного десятка. Например, число 2.982001 до 2.982000
Аноним 31/10/15 Суб 16:48:42 #491 №570130 
>>570112
До тысячных?
floor(2.982001*1000) / 1000, но имей в виду, что не все числа могут быть точно представлены в виде float или double.
Аноним 31/10/15 Суб 16:50:35 #492 №570133 
>>570130
Спасибо, надеюсь сработает
Аноним 31/10/15 Суб 16:54:18 #493 №570139 
>>570133
Если тебе жизненно необходимо точное представление, изобрети свой fixed-point и храни тысячные в целочисленной переменной (т.е., например, не метры с плавающей точкой, а миллиметры без нее).
Аноним 31/10/15 Суб 16:55:14 #494 №570142 
>>570130
Ты можешь объяснить почему это так работает?
Я знаю что такое флор, но вот именно как ты сделал до тысячных, а если мне надо до 10000сячных?
Аноним 31/10/15 Суб 17:03:28 #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 и умножаешь/делишь. Это арифметика школьная, куда точку поставить.
Аноним 31/10/15 Суб 17:05:05 #496 №570186 
>>570179
Спасибо большое, так и думал
Аноним 02/11/15 Пнд 13:58:13 #497 №571325 
Есть живые?
Объясните нубу как пользоваться pipe. Вот есть у меня легендарный процесс A и его дочерний популярный процесс B, я ввожу некие данные в A, но мне нужно передать их в B, обработать их там и вернуть результат в A, как это провернуть?
Аноним 03/11/15 Втр 00:32:09 #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
Аноним 03/11/15 Втр 11:47:32 #499 №572109 
14465404521750.jpg
>>571867
Спасибо, буду мозг ебать пытаясь зрозумить.
Аноним 03/11/15 Втр 20:07:18 #500 №572379 
>>571325
Методов на самом деле дохуя,
выбор зависит от задачи...

У тебя процессы, или так, потоки?
Если процессы, то они крутятся на одной машине, или могут быть на разных?
Аноним 03/11/15 Втр 20:21:49 #501 №572391 
Спрошу в тонущем треде, дабы не засорять раздел.

>>572109
>зрозумить
Одни хохлы, блядь. И под кроватью хохлы. Вы всегда были или набижали после скачек? Не замечал вас до 2013 года в русскоязычном сегменте интернета. Даже вконтакте вас особо заметно не было.
Аноним 03/11/15 Втр 21:13:35 #502 №572426 
>>572391
Скоро сам забалакаешь на ихней мове.
Аноним 03/11/15 Втр 23:02:29 #503 №572534 
>>572379
Ну я просто учусь пока, процессов 2 (про дочерний я напутал чутка): запускаю процесс (программу), ввожу туда пачку значений (пускай будет 2, не суть важно наверное), запускается второй процесс через execl, который по pipe должен получить эти значения, обсчитать и вывести результат. Находятся они на одной машине, до сетей пока еще не дошел.
>>572391
Мань, заспокойся, руssкий я, руssкий.
Аноним 04/11/15 Срд 16:44:51 #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, " ") );
>}
Как этот кусок(удаляет лишние пробелы между словами) переписать на Си, посоны? Желательно объяснение для моего уровня дцп-кодера.
Аноним 04/11/15 Срд 18:44:41 #505 №573136 
>>572994
Это кресты? Ну и пиздец же
Аноним 04/11/15 Срд 18:47:33 #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++) {
if (input == ' ') {
while (input[++i] == ' ') {}
result[j++] = ' ';
}
result[j] = input;
}
printf("%s\n", result);
Аноним 04/11/15 Срд 18:55:44 #507 №573145 
>>573140
http://pastebin.com/00bCJT7N
Аноним 04/11/15 Срд 19:16:14 #508 №573167 
>>573136
Ага, они самые.
>>573145
Не работает. Когда запускаю ничего в консоли не выводит и потом закрывается. В кодблокс компилировал если что.
Аноним 04/11/15 Срд 19:17:40 #509 №573169 
>>573167
Лол, в Дев спп работает, но после выполнения есть строка >щ@
Аноним 04/11/15 Срд 19:18:39 #510 №573172 
>>573169
А если по одному символу вводить, то нет этой строки.
Аноним 04/11/15 Срд 19:21:53 #511 №573177 
Всё, заработало. Спасиб :3
Аноним 04/11/15 Срд 20:20:43 #512 №573247 
Вернемся к вопросу по pipe, издание второе уточненное и дополненное: как положить данные в pipe в процессе А, а потом забрать их оттуда в процессе B?
Аноним 05/11/15 Чтв 02:41:17 #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;
}

помогите, какого хуя программа не завершается. просто запускается и нихуя не происходит. из дебага нихуя не понятно
Аноним 05/11/15 Чтв 08:22:19 #514 №573638 
>>573595
Бесконечный цыкол
Аноним 05/11/15 Чтв 18:17:13 #515 №574063 
>>573247
Сам разобрался.
Аноним 09/11/15 Пнд 01:10:40 #516 №576540 
Пора перекат пилить. Кто решиться стать опом?
Аноним 13/11/15 Птн 03:04:40 #517 №579551 
>>518562 (OP)

Запилил перекат.
Все у кого есть глаза, приглашаются сюда >>579550 (OP)
Аноним 13/11/15 Птн 15:02:04 #518 №579760 
>>573595
как верно заметил >>573638 , у тебя бесконечный цикл.
При каждой итерации ты присваиваешь k = 0
[CODE]
while (k<=n)
{
k=0;
[/CODE]
comments powered by Disqus

Отзывы и предложения