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


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

<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
500 45 177

C Programming Language #35 /clang/ Аноним # OP 31/10/18 Срд 08:10:14 12873781
C Programming L[...].png (78Кб, 792x1023)
792x1023
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

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

Что читать:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- №32: https://arhivach.tk/thread/375538/
- №33: https://arhivach.tk/thread/383767/
- №34: https://arhivach.tk/thread/398890/
Аноним 31/10/18 Срд 08:18:28 12873802
Аноним 31/10/18 Срд 15:51:57 12875503
ПравоСССССССССлавный перекот.
Аноним 31/10/18 Срд 16:28:31 12875654
1537902533781.jpg (806Кб, 1280x720)
1280x720
Вкатился и упал на спинку..
Аноним 31/10/18 Срд 19:45:08 12877225
Стоит ли ставить линукс, если собираюсь всерьез заняться сями?
Аноним 31/10/18 Срд 19:51:38 12877236
Аноним 31/10/18 Срд 19:53:54 12877287
Аноним 31/10/18 Срд 19:54:11 12877298
Аноним 31/10/18 Срд 19:55:28 12877319
>>1287728
Он не дырявый как венда. Да и с такими вопросами пиздуй в /s.
Аноним 31/10/18 Срд 20:10:44 128774110
>>1287731
Там не пояснят зачем это нужно как программисту, там в /pr отправят.
Аноним 31/10/18 Срд 20:14:38 128774311
>>1287741
Ну, как программисту это тебе нужно для ручной автоматизации сборки скриптиками на баше или мейком. Хотя это можно и в сигвине вроде делать. Пожалуй на этом вроде заканчивается. Дальше идут особенности операционки: меньше вирусов, меньше тормозов, но зато ебля с драйверами и пердолинг с конфигами. Хотя против венды ещё скажу, что очень много языков поставляется из коробки в большинстве основных дистров.
Аноним 31/10/18 Срд 20:17:23 128774612
>>1287743
Ну я с cmake и make и на винде могу работать. меня больше волновал вопрос нужности знания лигукс апи.
Аноним 31/10/18 Срд 20:19:30 128775013
>>1287746
Но если ты на винде в студии пишешь, то ты говно, а не сишник, если что. ИМХО
Аноним 31/10/18 Срд 20:20:05 128775214
>>1287743
В линуксе удобно ставить языки и либы через apt install или pacman -S и т.п. Это вот точно удобно.
Аноним 31/10/18 Срд 20:22:07 128775515
>>1287750
Пишу на mingw через vscode или clion. Довольно удобно. И не занимает 30 гигов как студия.
Аноним 31/10/18 Срд 20:22:48 128775716
>>1287746
Линукс АПИ? Дак, это вроде Си использует винАПИ. Потому что для линуксов си - родной язык, на котором ядро в общем-то пишется.
Аноним 31/10/18 Срд 20:24:01 128775817
>>1287757
Ну как это назвать, системные вызовы вроде.
У самого какой дистр стоит?
Аноним 31/10/18 Срд 20:25:17 128776018
>>1287758
Убунту. Самый лучший для переката с венды.
Аноним 31/10/18 Срд 20:25:47 128776219
Поясните за звездочку перед названием функции.
Это значит, что функция возвращает массив?
Аноним 31/10/18 Срд 20:26:39 128776420
>>1287760
Kubuntu, xubuntu или чисто бубуха?
Аноним 31/10/18 Срд 20:27:21 128776621
>>1287762
Привели пример кода, я тебя не понял.
Аноним 31/10/18 Срд 20:30:41 128777022
Снимок.PNG (27Кб, 492x806)
492x806
>>1287766
Вот.
Кстати оно почему то не выводит массив, который я прошу
Аноним 31/10/18 Срд 20:35:23 128777923
>>1287770
Это звездочка не перед названием функции по сути, это звездочка относится к типу возвращаемого значения. Ты можешь писать
int✡ func
int ✡func
int ✡ func
Разницы это не имеет. Просто главное что ты возвращаешь указатель на тип данных int. Если ты не знаешь что такое указатель - то прошу читать книжки и статьи, ибо рассказывать это здесь нет смысла - все и так разжевано.
Аноним 31/10/18 Срд 20:38:32 128778324
>>1287779
Нет я в курсе.
Просто получается если не ставить звездочку возле функции. То компилятор будет думать, что возвращает не массив , а просто int единицу?
Аноним 31/10/18 Срд 20:42:22 128778725
15397158126450.jpg (13Кб, 200x200)
200x200
Аноним 31/10/18 Срд 20:42:45 128778926
>>1287783
Да. Но желательно пойми суть указателей.
Например arr[3] это равнозначно *(arr+3). Потому что стандартный массив это указатель вроде на первый элемент, и написывая [3] ты указываешь на то, что надо отчитать 3 блока памяти размером с тип данных указателя и взять оттуда блок памяти размером с тип указателя.
Аноним 31/10/18 Срд 20:44:48 128779027
>>1287787
Хохму отмочил.
Двумерный жидомассив:
int✡ ✡ shekeli = (int✡ ✡ )malloc(YOUR_MUM_MONEY);
Аноним 31/10/18 Срд 20:46:15 128779128
Ой-вей. Обожаю наёбывать гоев на байтекели.
Аноним 31/10/18 Срд 21:11:12 128780829
>>1287750
> Но если ты на винде в студии пишешь
Если ты не умеешь в современные IDE, то ты говно, а не программист. Иди дальше sed-ом рефакторь, а less-ом логи gprof листай.
Аноним 31/10/18 Срд 21:38:23 128782530
>>1287808
Студия как по мне слишком громоздка. Продукты от jetbrains лаконичней, имхо.
Аноним 31/10/18 Срд 22:42:56 128785631
>>1287743
На винде тоже есть шелл-скриптинг и ее автоматизациияведь билл всегда следит за юникс системами и пиздит оттуда идеи
Аноним 31/10/18 Срд 22:57:29 128786232
>>1287856
Неоднозначная ситуация. С одной стороны вонючая командная строка, с другой стороны, чтобы переехать на повершелл у всех сборка из коммандной строки и никто ни за что в повершелл не переедет, продолжая жрать говно из комнадной строки. В пинусе же баш в основном как шел используется в терминале. С этим тут всё более однозначно, хотя выбора никто не лишён. Хотя есть кое-какая проблема у баша. Он не поддерживает работу с плавающей точкой. Повершелл поддеживает. Может можно как-то исправить, не велосепидируя собственных утилит?
Аноним 31/10/18 Срд 23:21:20 128787033
>>1287862
В винде есть батники, есть mingw со всеми линуксовыми утилитами, в том числе и с bash. А повершелл - это высер, превращающий командную строку в какие-то тормозные заклинания. Ненужен.
01/11/18 Чтв 00:44:26 128789634
15109422445800.jpg (29Кб, 345x336)
345x336
> 2018
> не интерпретация

Аноним 01/11/18 Чтв 00:53:28 128790335
15393459148760.jpg (17Кб, 400x214)
400x214
Аноним 01/11/18 Чтв 03:11:54 128793136
1289809101053s.jpg (15Кб, 184x200)
184x200
>>1287896
>2018
>долбят говно Си когда есть элегантный и такой же быстрый Crystal
Аноним 01/11/18 Чтв 03:26:46 128793637
15402349419760.jpg (9Кб, 200x200)
200x200
>>1287931
Ну ка расскажи, насколько у этого новоиспеченного языка большая библиотека? Насколько большое комьюнити? Все ли протестено и возможно?
Аноним 01/11/18 Чтв 04:04:17 128794138
1281001764197s.jpg (14Кб, 151x200)
151x200
>>1287936
Да, экосистема маленькая, но все же лучше чем пердолиться с Си который застрял в 2005.

У Кристала как минимум пакетный менеджер есть. И есть уже компании которые его в проде используют. Дело лишь за популяризацией.
Аноним 01/11/18 Чтв 04:14:59 128794739
>>1287941
Еще один хипсторский мертворожденый язычок, ясно.
Аноним 01/11/18 Чтв 10:17:42 128800840
>>1287941
Лучше бы про божественный interop с сишным кодом сказал.
Аноним 01/11/18 Чтв 10:19:18 128800941
>>1287764
Ты это, ещё три DE забыл перечислить. Различия между ними только в DE.
В чём «чистота» «чистой убунту»?
Есть даже all-in-one дистрибутив
Аноним 01/11/18 Чтв 10:21:32 128801142
>>1287862
> Может можно как-то исправить, не велосепидируя собственных утилит?
Да, попробуй программу bc.
Аноним 01/11/18 Чтв 10:24:49 128801243
14782817458820.jpg (14Кб, 472x464)
472x464
Аноним 01/11/18 Чтв 10:56:17 128802244
>>1287931
>Crystal
Очередной ноунеймЯП уровня йопта-скрипта с сишным синтаксисом. Причём это среднестатистическое описание любого языка младше 2000 года. Я не глядел описание, честно. Давай просто сравним количество гаедов к обоим ЯП. Всё, отсыхай.
Аноним 01/11/18 Чтв 11:09:37 128803645
>>1288022
>с сишным синтаксисом
Не, там какое то говно между Паскалем и Питухоном

class Object
def has_instance_var?(name) : Bool
{{ @type.instance_vars.map &.name.stringify }}.includes? name
end
end
Аноним 01/11/18 Чтв 11:15:27 128803746
Аноним 01/11/18 Чтв 11:30:36 128804147
>>1287931
О, а вот и сойбойчик подъехал, всю сою слизал?
Аноним 01/11/18 Чтв 12:23:48 128806048
Аноним 01/11/18 Чтв 12:30:28 128806449
>>1288060
>руби
говноед, уходи пожалуйста
Аноним 01/11/18 Чтв 13:41:00 128810650
>>1288022
>сишный синтаксис
>я не глядел
Оно и видно, что не глядел. Там Рубишный (то есть самый идеальный) синтаксис.
Аноним 01/11/18 Чтв 13:47:33 128811151
>>1288106
Как же вы заебали набеги устраивать. Треды нужны не для ЯП срачей, дауны.
Аноним 01/11/18 Чтв 15:45:57 128816352
Нахуя в си тип unsigned? Типа почему бы блять тупо функцией принтф не указывать способ вывода: %u или %d имея лишь тип int. Или я чего то недопонимаю
Аноним 01/11/18 Чтв 16:05:48 128817953
>>1288106
>Рубишный (то есть самый идеальный) синтаксис
Турецкое говно не нужно.
Аноним 01/11/18 Чтв 16:14:20 128818954
>>1288163
unsigned поддерживает битоебство, добавляет бит в диапазон значений, для него определено поведение при overflow/underflow
а ещё пачка возможных багов при сравнениях signed-unsigned и вообще при неосторожном использовании unsigned
карочи, нужен ровно в тех местах, где надо битоёбствовать, в остальных местах лучше использовать int
Аноним 01/11/18 Чтв 16:54:06 128821155
>>1288189
Я так и понял, а на переносимость это может повлиять?хотя какая нахуй переносимость че я блять несу, о какой блять переносимости может идти речь если уже давным давно есть языки-конструкторы вроде питона, мда ну пиздос
Аноним 01/11/18 Чтв 17:05:57 128821556
Аноним 01/11/18 Чтв 17:31:23 128822457
>>1288064
Он просто указал с чего взят синтаксис у Crystal. Что ты петушишь? Неадекват что ли?
>>1287936
>насколько у этого новоиспеченного языка большая библиотека?
Вроде либа поддерживает либы с Ruby, так что с этим почти нет проблем.
>>1287931
>такой же быстрый Crystal
Ты хотя бы тесты сам проделай прежде чем вбросы делать.>>1287896
>> 2018
>> не интерпретация
Поинтерпретируй ты мне тут в лоу левел программировании, петушок.
>>1287862
>и никто ни за что в повершелл не переедет, продолжая жрать говно из комнадной строки
Powershell как по мне то еще говно. Все равно у юниксов пизже
Аноним 01/11/18 Чтв 18:54:53 128829158
>>1287941
Ну вот как популяризуете свой язычок, так и приходите (через лет 15)
Аноним 01/11/18 Чтв 18:59:39 128829559
15402349419760.jpg (9Кб, 200x200)
200x200
>>1288224
>насколько у этого новоиспеченного языка большая библиотека?
Вроде либа поддерживает либы с Ruby, так что с этим почти нет проблем.

>вроде
Аноним 01/11/18 Чтв 19:37:59 128834060
Аноним 01/11/18 Чтв 20:31:27 128838461
>>1288340
>C не нужен
>мы используем C либы
>Ой, а вот этого нет, сишники, когда новая либа?
>C не нужен
Аноним 01/11/18 Чтв 20:38:58 128838962
>>1288163
> Типа почему бы блять тупо функцией принтф не указывать способ вывода
Это работало бы, если бы у тебя было только сложение и вычитание. А вот реализации деления и умножения разные для signed/unsigned.

Аноним 02/11/18 Птн 11:54:59 128870163
Какие части программы целесообразно переписывать на Си? Городить абстракции гораздо удобнее на С++, так ещё и неймспейсы помогают писать менее громоздко, что приятно видеть в проектах чуть больше хелоуворда, но что в проекте точно должно быть на Си?
Аноним 02/11/18 Птн 11:56:28 128870264
>>1288701
>в проекте
Коком проекте?
Аноним 02/11/18 Птн 12:30:11 128871765
Аноним 02/11/18 Птн 14:25:11 128878566
Аноним 02/11/18 Птн 23:12:48 128905667
Степан Прата молодца, хорошо зделали
Аноним 02/11/18 Птн 23:14:38 128905968
K&R - больше справочник, от шарящих шарящим. Для, собстенно, обучения не подходит.
Аноним 02/11/18 Птн 23:16:06 128906169
прохожу его. и искренне охуеваю от заданий уровня "Напишите операционную систему" на первой главе.
Аноним 02/11/18 Птн 23:16:40 128906270
Аноним 02/11/18 Птн 23:17:52 128906471
>>1289061
>прохожу его. и искренне охуеваю от заданий уровня "Напишите операционную систему" на первой главе.
Ты о чем, уважаемый? Я седьмую закончил, нет там такого.
Аноним 02/11/18 Птн 23:19:11 128906672
>>1289062
А, ясно.
Непонятно почему KR советуют новичкам везде.
Аноним 02/11/18 Птн 23:22:12 128906873
>>1289064
Упражнение 1.24. Напишите программу, проверяющую Си-программы на элементарные синтаксические
ошибки вроде несбалансированности скобок всех видов. Не забудьте о кавычках (одиночных и двойных),
эскейп-последовательностях (\...) и комментариях. (Это сложная программа, если писать ее для общего
случая.)
Последняя задачка первой главы. Вроде как самая челленджная. Предыдущая немногим проще. Даже ковыряя Си один год. Это всё равно становится нетривиальной задачей даже для человека, знакомого с языком.
Аноним 02/11/18 Птн 23:24:59 128907174
3334.PNG (21Кб, 688x719)
688x719
У меня два вопроса, можно ли так много использовать if else в цикле while?
И 2) Как переносить текст в printf, а то слишком длинный в право
алсо че то нихуя не печатается
Аноним 02/11/18 Птн 23:29:17 128907575
>>1289071
погугли switch(variable) case of RANGE:
С ним и красивее будет и компилятор более конкретный ассемблерный код сгенерирует, что немного время исполнения сократит.
А в printf() можно переносить, если в конце строки поставить бэкслэш. И писать в новой строке.
Аноним 02/11/18 Птн 23:34:05 128907876
345.PNG (3Кб, 446x117)
446x117
>>1289075
Спасибо.
А что можешь сказать на счет такого вывода?
с этой функции
Аноним 02/11/18 Птн 23:38:42 128908077
>>1289078
Бля... У тебя же в коде типо юникод... А в винде в консольке какая-то особая кодировка. Попробуй перед printf() написать такую хуйню
system("chcp 1251");
для этого нужно stdio.h подключить
потом после printf() вернуть кодировку на стандартную
sytem("chcp 866");
И тогда вроде лучше напишет. Вообще вся эта тягомоть с локалями и кодировкой мне самому покоя не даёт, нужно либу себе велосепедировать для этого. Либо вообще откажись от русских букв в выводе printf(). Что в лучшую сторону повлияет на твою культуру кода.
Аноним 02/11/18 Птн 23:39:31 128908178
>>1289080
>stdio.h подключить
пизжу. Нужно stdlib.h подключить.
Аноним 02/11/18 Птн 23:50:59 128908579
>>1289080
>А в винде в консольке какая-то особая кодировка.
Бляяя, нахуя они так делают?
>system("chcp 1251");
Вставил в начало функции. Что-то не работает.
Может в main надо пихать?
Вообщем переписал все на инглишь.
Аноним 03/11/18 Суб 00:06:05 128909380
Почему
unsigned long long num = 1 << 32;
Выдает ошибку shift count >= width of type [-Wshift-count-overflow]?
Аноним 03/11/18 Суб 00:17:38 128909681
>>1289078
-fexec-charset=866 -finput-charset=utf-8

>>1289093
Потому что 1 влезает в int, значит 1 - int. Пиши 1ULL << 32.
Аноним 03/11/18 Суб 00:20:10 128909782
>>1289071
Боже. Если ты все равно уже умеешь в массивы, какого хуя у тебя по переменной на каждую цифру? Сделай массив и сократи все это до трех строк. Алсо, <= kol там наверняка ошибка, и ты хотел < kol.
Аноним 03/11/18 Суб 00:24:30 128909883
image.png (8Кб, 428x75)
428x75
>>1289097
Ахаха, да я просто делал на быструю руку. В красоту думал в конце привести. И знаешь так и вышло, один хуй прога не работает.
Вот к примеру блядский scanf тупо не читает число.
Запускаю прогу, просит ввести что-то. Ввожу к примеру 3489,
Он пишет vi brosili 0 kibikov podryad.
Блять я уже все перебрал спецификаторы!!!
Аноним 03/11/18 Суб 00:42:32 128910184
>>1289096
>1ULL << 32.

Теперь работает. Спасибо.
Аноним 03/11/18 Суб 00:44:56 128910285
>>1289098
Потому что тебе нужно убрать все из scanf и оставить только "%d"
Аноним 03/11/18 Суб 00:45:09 128910386
>>1289098
> Вот к примеру блядский scanf тупо не читает число.
Ты не просил у него число. Ты просил фразу вида vvedi klv broskov 3489. Вот и вводи ее. Целиком со словами. scanf() принимает параметром не сообщение с просьбой что-то ввести, а спецификатор.
Аноним 03/11/18 Суб 00:45:58 128910587
Аноним 03/11/18 Суб 00:47:56 128910688
>>1289066
Учить С по KR это как учить оптику по трудам Ньютона.
Аноним 03/11/18 Суб 00:53:15 128910789
>>1289068
Мне кажется, что это вообще троллинг когда советуют K&R для полных нубов, для нубов есть Кочан, Прата и т.д. а после можно и K&R почитать.
Аноним 03/11/18 Суб 01:03:35 128911090
>>1289106
>>1289107
учил си на первом курсе по k&r
сквозь боль делал упражнения, перечитывал раз за разом непонятные места, включая и приложения где формально язык описан
хз что с вами не так
у англичан даже что-то вроде поговорки есть, что ты не поймешь по настоящему что написано в книге пока она не начнет разваливаться у тебя в руках
Аноним 03/11/18 Суб 01:09:20 128911191
>>1289110
суука ржу
неудивительно что англичанин придумал линукс
Аноним 03/11/18 Суб 01:10:33 128911292
>>1289107
Я учил Си по K&R первой редакции (другого не было) и по чужим исходникам. Мне было норм, но я пришел с ассемблера. Сейчас я всем рекомендую Прату, но всегда находится кто-нибудь, кто с пеной у рта защищает K&R. Похуй, всегда можно скачать обе и выбрать ту, которая больше понравится.
Аноним 03/11/18 Суб 01:14:22 128911393
image.png (159Кб, 520x566)
520x566
>>1289112
Бля, вот думаю K&R распечатать, не люблю книги с компа читать.
Но у нас распечатка стоит 5 рублей за страницу КАРЛ!.
Это 1700рублей. Интересно сколько выходит рублей у людей,у которых есть принтер и собственная краска печатнуть 350стр?
Аноним 03/11/18 Суб 01:17:19 128911494
>>1289113
Да ты просто купи бэушную на авите. Даже с доставкой будет сильно дешевле штуки.
Аноним 03/11/18 Суб 01:26:13 128911795
>>1289113
k&r всегда в книжных магазинах есть, даже в мухосрансках
имхо, эта так книга которую стоит иметь
Аноним 03/11/18 Суб 01:59:07 128912596
>>1289114
Нету, смотрел
>>1289117
в магазе 1500р

Для меня дорого
Аноним 03/11/18 Суб 02:00:53 128912697
>>1289125
Это ты в своем городе смотрел. Попроси почтой отправить.
Аноним 03/11/18 Суб 02:17:07 128912898
>>1289113
Ты собираешься страницу во весь лист а4 печатать? Нужно печатать по 2 страницы с двух сторон, итого нужно 288/4=72 листа.
Распечатать это может бесплатно любой знакомый офисный работник. На лазерном принтере на котором регулярно перезарпавляют тонер себестоимость печати страницы копеек 50.
А малому бизнесу нужно деньги зарабатывать, вот и получается по 5 рублей.
Аноним 03/11/18 Суб 02:58:38 128913399
>>1289113
Вам шашечки или ехать
Аноним 03/11/18 Суб 09:19:46 1289168100
D95C0F16-A427-4[...].png (277Кб, 1136x640)
1136x640
О каком буфере речь? Разве данные не печатаются в стандартный поток вывода? Или я опять туплю
Аноним 03/11/18 Суб 10:38:32 1289184101
>>1289168
> О каком буфере речь?
Ну на пике же подробно описано. У каждого FILE есть свой буфер (банально массив char) и три режима: нет буферизации (каждый getchar()/putchar() и т. п. летит сразу в ОС), построчная буферизация (ввод читается из ОС до Enter, т.е., построчно, а вывод кладется в буфер и выплевывается, если в буфер больше не помещается или если в буфер прилетела \n) и полная буферизация (буфер читается из ОС, когда полностью пуст, или пишется, когда буфер полностью заполнен). Плюс есть принудительный сброс буфера вне зависимости от режима с помощью flush()/fflush() со stdin не работает. Если хочется, режим и буфер можно задать самостоятельно с помощью setbuf()/setvbuf(). Буферизация сделана потому, что обращение к буферу в тысячи раз быстрее по сравнению с походом в ядро ОС из-за каждого байта.

> Разве данные не печатаются в стандартный поток вывода?
Печатаются, но режим буферизации зависит от реализации стандартной библиотеки. В винде, если я правильно помню, по традиции буферизация у stdout/stderr отключена (и все тормозит!), в линуксе обычно буферизация отключена только у stderr, а вот у stdout включена построчная буферизация.

Т.е., если ты в линуксе сделаешь:
#include <stdio.h>
#include <unistd.h>

int main(void) { printf("Hello, "); sleep(2); printf("world!\nAnd bye!"); sleep(2); }

Оно положит первый "Hello, " в буфер, подождет 2 секунды (ничего выведено не будет), положит в буфер "world!\nAnd bye!", увидит \n в буфере и выведет строку, ты сразу увидишь "Hello, world!", потом оно поспит еще 2 секунды, и уже при завершении программы стандартная библиотека, чтобы ничего не проебать, принудительно очистит буфер с помощью fflush(stdout), и только тогда ты увидишь "And bye!".
Аноним 03/11/18 Суб 10:49:36 1289191102
Как сравниваются числа типа unsigned int и просто int? Допустим имеется 2 переменных с одинаковым расположением битов однако одна из них имеет тип инт а другая Unsigned int, но при сравнении они не равны, вопрос почему? Типа биты же в одинаковой последовательности расположены
Аноним 03/11/18 Суб 10:50:56 1289192103
>>1289168
Каждый тред находится мозгоёб с этим буфером, заметили?
Аноним 03/11/18 Суб 11:09:00 1289194104
>>1289191
> Как сравниваются числа типа unsigned int и просто int?
Гугли integer promotions или даже arithmetic promotions. Вкратце, суть в том, что для любой арифметической операции, в том числе и для сравнения, Си преобразует операнды к одному типу, обычно к более широкому или точному из двух.

> но при сравнении они не равны, вопрос почему?
Потому что ты где-то облажался. Если типы отличаются только наличием знака, то ранг одинаковый, и signed преобразуется в unsigned (на абстрактной машине (unsigned int) -1 = -1 + (UINT_MAX + 1) = 0xffffffff, на реальной оно "само" так будет, потому что представления одинаковы), получаем одинаковое представление, числа равны. Поэтому сравнивать signed/unsigned между собой - это опасное занятие, и если уж очень хочется, стоит скастить signed к более широкому типу.
Аноним 03/11/18 Суб 11:17:23 1289197105
>>1289192
Много лет назад у меня был телефонный справочник, его автор навелосипедил свой парсер DBF, и этот парсер читал базу на десяток метров отдельными вызовами ReadFile побайтово - поиск адски тормозил несколько минут. Так что пусть лучше аноны спрашивают, чем пишут подобное говно.
Аноним 03/11/18 Суб 11:22:58 1289200106
>>1289168
У меня какое-то дежавю, буквально вижу такое сообщение уже не один тред, с одной и той же картинкой и все спрашивают, что за буфер.
памагити
Аноним 03/11/18 Суб 11:28:38 1289202107
>>1289200
В прошлый раз было про сканф и про макос.
Аноним 03/11/18 Суб 20:54:36 1289392108
>>1289078
Среда какая? Пердоль кодировку файла с сырцами или найди уже наконец setlocale(LC_ALL, "rus").
Аноним 03/11/18 Суб 20:56:02 1289393109
>>1289184
С stdin вроде же неопределенное поведение, у меня буфер вполне себе очищается.
Аноним 03/11/18 Суб 20:58:14 1289396110
Реквестирую какую-нибудь программу на голом Си, с открытыми исходниками, где реализовано ГУИ. Хочу на C + SDL2 игрушку наваять, и тут маленько завис, пытаясь сделать меню.
Аноним 03/11/18 Суб 21:00:29 1289398111
Аноним 03/11/18 Суб 21:15:14 1289401112
>>1289398
Ну, это наверное не совсем то. Мне бы принципы подсмотреть, а то пока под каждую менюшку отдельная функция в цикле крутится, что, наверное, не очень хорошее решение.
Аноним 03/11/18 Суб 22:16:42 1289419113
>>1289401
> а то пока под каждую менюшку отдельная функция в цикле крутится
Если менюшки полноэкранные, то тебе нужны сцены: структурка с необходимыми данными и указателями на функции Update (обработка пользовательского ввода и всякая анимация), Render и, если нужно, Activate/Deactivate. Делаешь в разное время разные сцены текущими, а единый главный цикл дергает у текущей сцены Update/Render.
Аноним 03/11/18 Суб 22:22:46 1289423114
55.PNG (3Кб, 356x154)
356x154
Сап синоны,
Почему данный цикл генерирует лишь одно число в sum? Я же srand тоже положил в цикл, разве он не должен каждый раз обновляться.
Или данный алгоритм возможен лишь в рекурсии?
Аноним 03/11/18 Суб 22:23:29 1289425115
>>1289423
То есть получается огромный массив и в каждой итерации одно и тоже число, которое было рандомно сгенерировано 1 раз в начале
Аноним 03/11/18 Суб 22:25:00 1289426116
>>1289423
Алгоритм отрабатывает за одну и ту же секунду. Убери нахуй srand из цикла, поставь перед while.
Аноним 03/11/18 Суб 22:27:46 1289427117
>>1289426
И как мне тогда провернуть так, что бы сгенерить целый массив рандомов?
Аноним 03/11/18 Суб 22:35:10 1289429118
>>1289427
В смысле? rand() оставь в цикле.
Аноним 03/11/18 Суб 22:42:04 1289432119
>>1289429
Cделал, сработало. А в чем логика то?
Аноним 03/11/18 Суб 22:43:00 1289434120
>>1289429
В цикле же он как бы каждый раз должен был сдвигать начальное число на секунду, а вне цикла нет вроде. Так как сработало то?
Аноним 03/11/18 Суб 22:58:30 1289437121
>>1289419
И у каждой сцены, выходит, свои функции update и render? А если, например, содержимое неоднородно? В одном меню - несколько условных кнопок, в другом - условный текстбокс. Но в любом случае спасибо за направление.
Аноним 03/11/18 Суб 23:15:57 1289445122
>>1287378 (OP)
Что быстрее?

c = a;
a = b;
b = c;

или

a ^= b;
b ^= a;
a ^= b;
Аноним 03/11/18 Суб 23:48:36 1289453123
>>1289445
Прогони в цикле 10000000000 раз. И проставь время перед циклом и после цикла в обоих вариантах. Вообще по идее должно получиться быстрее вторым способом. Но как оно окажется на деле - хз.
Аноним 04/11/18 Вск 00:18:52 1289461124
>>1289432
> Cделал, сработало. А в чем логика то?
Логика в том, что rand() генерирует псевдослучайную последовательность путем каких-то преобразований внутренней переменной (или переменных) seed. При вызове rand() seed изменяется, поэтому каждый новый вызов rand() генерирует новое число, тебе ничего не нужно никуда "сдвигать". srand() нужен не для того, чтобы обновлять состояние генератора или что-то там еще, что ты себе напридумывал вместо чтения документации. Он нужен, чтобы при разных запусках программы rand() выдавал разные последовательности. Т.е., если ты srand() вообще не используешь, то в seed будет что-то по умолчанию (0 или 1, например), а так как результат rand() целиком и полностью зависит от того, что лежало в seed, то без вызова srand(), ты будешь каждый раз получать одну и ту же последовательность, основанную на этих 0 или 1. То же самое происходит, если ты вызываешь srand() в цикле и кормишь его таймером. У time() разрешение - 1 секунда, т.е., велика вероятность, что каждый раз в seed будет попадать все та же константная секунда, в течение которой успевает отработать твой цикл. Одно и то же значение в seed - один и тот же выхлоп. А чтобы все работало правильно, нужно вызывать srand() один раз за все время жизни программы (или потока, если у тебя есть потоки). Лучше всего, где-нибудь в начале main(). И, разумеется, все вышесказанное не касается криптографии, там все иначе, там за использование rand() пинают по лицу.

>>1289437
Общие функции для всех меню, но своя для рендера самой игры. А дальше нужно больше абстракций. Меню - это указатель/индекс активного элемента и массив элементов управления, каждый из них - тип (класс!) и какие-то данные. render() для меню по очереди рисует каждый элемент, update() для меню стрелочками меняет активный элемент, а остальной ввод обрабатывает в зависимости от типа элемента. Можно опять же для каждого типа завести свои render()/update(), и там уже switch-ем выбирать нужный (или сделать в элементе вместо типа сразу указатель на таблицу функций методов этого типа). И потом это все можно обернуть еще дальше, чтобы магия происходила под капотом, и у тебя получится еще один наколеночный GUI-фреймворк.

>>1289445
> Что быстрее?
Первое. Велик шанс, что компилятор положит значения в регистры, а обмен данными между регистрами на современных процессорах скорее всего будет бесплатным (регистры переименуются друг в друга еще при декодировании инструкций). А вот если компилятор не распознает, что xor - это обмен значениями, и не превратит его в первый вариант, то процессору придется на самом деле выполнять три ксора, да еще и с зависимостями.
Аноним 04/11/18 Вск 00:23:43 1289462125
>>1289113
В библиотеку запишись
Аноним 04/11/18 Вск 00:26:18 1289463126
>>1289462
Там по ебанутому, в нашей библиотеке технические кгини даже нельзя забирать домой, лишь только у них на месте читать,лол.
забирать домой можно только худлит
Аноним 04/11/18 Вск 00:32:30 1289464127
rand() srand() и т.д уже давным-давно obsolete и заменен на arc4random() во всех ОС кроме Linux
Аноним 04/11/18 Вск 01:00:16 1289470128
>>1289464
Не путай ОС и стандарт языка.
Аноним 04/11/18 Вск 01:10:41 1289473129
>>1289470
с gets() тоже так было.
Аноним 04/11/18 Вск 01:34:15 1289477130
>>1289473
gets() сломан искоробки, а rand() можно реализовывать как угодно, лишь бы выполнялось требование псевдослучайности (идентичные последовательности для одинаковых seed) и если начальный seed для srand() влезает в unsigned int. Поэтому нет, не выкинут.
Аноним 04/11/18 Вск 02:01:42 1289481131
>>1289477
В том и дело, что из-за srand() уязвимости
Аноним 04/11/18 Вск 05:41:59 1289503132
>>1289463
>в нашей библиотеке технические кгини даже нельзя забирать домой
Это может быть и плюсом.
Например, ты приходишь и читаешь. А не копаешься вкудахте.
Аноним 04/11/18 Вск 16:52:02 1289671133
>>1289419
Поясните в целом за геймдев на си. Знаю только gtk+ GUI для созданий интерфесов, но это не совсем геймдев. А вот анимации и геймплей создавать сложно в целом? Что надо знать, какие то драйвера, директ их или какие то другие теории? Просто для меня это целая непонятная вселенная, знаю что графика есть растровоая ,векторная. но что это? Из каких частей состоит игра?
Аноним 04/11/18 Вск 17:14:23 1289687134
image.png (159Кб, 520x566)
520x566
Аноним 04/11/18 Вск 17:31:42 1289691135
>>1287941
>пакетный менеджер
>один финн чисто для лулзов запилил ядро для пакетных менеджеров для це и называет это ядром ОС, опять же, для лулзов
Аноним 04/11/18 Вск 17:40:23 1289693136
>>1287931
>class Greeter
> def initialize(@name)
> end
> def salute
> "Hello #{@name}!"
> end
>end

>етот донный синтаксис
Аноним 04/11/18 Вск 17:54:33 1289697137
https://ideone.com/wx2mMf
Анон, можешь помочь с интерпретатором shell? В теории работать должно, но пытаюсь понять где оподливился.
Аноним 04/11/18 Вск 18:03:55 1289701138
>>1289697
>https://ideone.com/wx2mMf
argc - int, а не массив
##argv -char. двумерный массив всех параметров шела
вот так должно быть:
int main(int argc, int ##argv)
{
}
##-звездочки
Аноним 04/11/18 Вск 18:04:47 1289702139
Аноним 04/11/18 Вск 23:16:29 1289825140
>>1289701
какие же некошерные звёздочки.
04/11/18 Вск 23:40:18 1289832141
бле народ хэлпаните лоускилл долбоебу первачу с лабой.
крч нужно в двумерном массиве найти столбец в котором нет ни одного элемента равного нулю(Не используя дополнительные методы и указатели)
мне важен сам алгоритм перебора,не могу врубиться как мне найти столбик без нуликов(
Аноним 05/11/18 Пнд 01:17:46 1289884142
15397158126450.jpg (13Кб, 200x200)
200x200
>>1289825
>какие же некошерные звёздочки.
Аноним 05/11/18 Пнд 02:33:46 1289904143
>>1289832
Что имеется введу под словом "столбец" ?
Аноним 05/11/18 Пнд 05:28:19 1289915144
>>1289085
>Бляяя, нахуя они так делают?
Ребята не стоит вскрывать этот код. Вы молодые, хакеры, вам все легко. Это не то. Это не ядро линукс и даже не ГНУ. Сюда лучше не лезть. Серьезно, любой из вас будет жалеть. Лучше закройте компилятор и забудьте что там писалось. Я вполне понимаю что данным сообщением вызову дополнительный интерес, но хочу сразу предостеречь пытливых - стоп. Остальные просто не найдут.
Аноним 05/11/18 Пнд 14:13:06 1290065145
Вопрос про processor cutch(Это же тоже самое что КЭШ?).
Допустим есть массив в котором 0-ой указатель сдвинут впрёд, то-есть можно обращаться к отрицательным элементам.
Передаю в функцию указатель на 0-ой элемент массива, комп подготавливает сразу кусок памяти. Вопрос: он готовит только правую(впереднюю) часть данных? Ну то-есть, обратись я в функции к отрицательному элементу компу придётся подготавливать уже другой кусок памяти и будет промах КЭШа?
Аноним 05/11/18 Пнд 14:14:27 1290067146
>>1290065
Что тебе мешает самому проверить так оно или нет?
Аноним 05/11/18 Пнд 14:22:38 1290076147
>>1290067
Ну я ж у специалистов полюбопытсвовать хотел, к тому результат моей проверки может быть не универсален.
Аноним 05/11/18 Пнд 14:40:18 1290083148
Аноним 05/11/18 Пнд 15:40:48 1290117149
>>1289671
> А вот анимации и геймплей создавать сложно в целом?
В целом просто, на практике сложно.

> директ их
C OpenGL в сишечке приятнее.

>>1289832
> мне важен сам алгоритм перебора
В массиве array[num_rows][num_cols], для каждого столбца c, для каждой строки r: если array[r][c] нолик, ставишь флаг, что столбец зашкварен и выходишь из цикла по r.

>>1290065
> cutch(Это же тоже самое что КЭШ?).
Не знаю такого.

> Передаю в функцию указатель на 0-ой элемент массива, комп подготавливает сразу кусок памяти.
Это немного не так работает. Вряд ли твой компилятор генерирует явный префетч, а сам процессор закэширует кусок массива при первом обращении, а не при передаче параметров. Гугли кэшлайн (cache-line, линейка кэша). На границы массива и указатели процессору насрать. Если какого-то значения нет в кэше, он прочитает из памяти сразу блок размером с кэшлайн (64 байта), выровненный на кэшлайн (т.е., может заодно прочитать память и чуть ниже того адреса, на котором был промах). Соответственно, если массив был выровнен по кэшлайну, то по отрицательному индексу будет промах, а если нет (malloc выравнивает только на 8 байт, например), то промаха может и не быть.
05/11/18 Пнд 16:07:01 1290133150
>>>>1290117
премного благодарю,как у вас тут говорят "цистерну чая этому сударю"
Аноним 05/11/18 Пнд 17:18:00 1290157151
Есть еще какие легкие ИДЕ под винду, кроме как CodeBlocks?
Аноним 05/11/18 Пнд 18:06:47 1290172152
>>1290157
sublime text (надо поднастроить)
notepad++
JetBrains для си++
pelles C
Аноним 05/11/18 Пнд 18:10:41 1290175153
>>1290172
>>1290157
Правда сублим и нотпэд - не компилируют. Это просто Иде
Аноним 05/11/18 Пнд 18:18:50 1290181154
>>1290175
Это не иде, а обычные текстовые редакторы с плагинами. IDE это не просто редактор кода.
Аноним 05/11/18 Пнд 18:19:30 1290182155
>>1290157
Мде... Перевелись нынче байтоёбы. Вот батя мой компилировал в командной строке, а писал на превокартах. Ещё писал порой прямо в оперативке, приатачиваясь к процессам дебагером.
Аноним 05/11/18 Пнд 18:20:13 1290185156
>>1290182
>превокартах
перфокартах* фикс
Аноним 05/11/18 Пнд 18:40:27 1290191157
>>1290172
CLion вот вообще ни разу не легкий.
05/11/18 Пнд 18:50:57 1290198158
внатуре cLion как вижла)
Аноним 05/11/18 Пнд 19:48:24 1290239159
>>1290191
в пизду платные программы
05/11/18 Пнд 22:12:57 1290289160
Аноны, не подскажите с чего начать изучение С?
Аноним 05/11/18 Пнд 22:47:23 1290306161
>>1290182
Я тоже пишу на перфокартах. Хорошие, качественные картонки, не выкидывать же их!
Аноним 05/11/18 Пнд 23:04:16 1290311162
Для чего изучать Си? Подойдёт как первый язык? До какой степени стоит его освоить?

Начал 1,5 месяца назад, для меня это первый язык, идёт очень туго, сейчас с уверенностью могу сказать что понимаю что такое указатели и как ими пользоваться, и вот думаю стоит ли продолжать. Сам никуда не спешу, если анон посоветует дойти до понимания каких-то тем, а потом перекатиться на условно джаву или пхп что бы через 3 года быть уверенным джуном или даже сеньером. Готов принять ваши советы, не смотря на тугость изучения мне нравится то, что я делаю.

Кстати что за тема со звёздочками?
*
Аноним 06/11/18 Втр 01:42:14 1290450163
>>1290311
Тож жду ответа на твой пост.
Алсо, сам не так давно начал Си изучать.
Ну думаю , что все так да. Раз уж начал, то доводи до конца. Хотя бы ознакомится со всеми возможностями и синтаксисом точно надо, не думаю, что это долго.
Долго - это изучать всякие библиотеки и писать что-то серьезное.
Аноним 06/11/18 Втр 04:10:01 1290481164
>>1290311
>с уверенностью могу сказать что понимаю что такое указатели и как ими пользоваться
как относятся друг с другом указатели и массивы
зачем возвращать из функции указатель на указатель?
как работать с указателями на функции и зачем это надо?
особенности работы с нетипизированным указателем и зачем он нужен?
вангую, что ты еще ни одной сложносвязанной структуры данных не запилил, не говоря уж про хоть какое-то подобие библиотеки решающей часть своего функционала через каллбеки, например
ну или ничего не писал, что читает из бинарного файла или из сети в банарном формате

Аноним 06/11/18 Втр 13:08:29 1290578165
>>1290481
Правильно вангуешь про структуры и прочее, на первые 3 вопроса я могу дать ответ без Гугла, что такое "нетипизированный" могу только догадываться.
интересно кто-нибудь писал сложные структуры и то что написано в том посте всего через 1,5 месяца изучения Си
Аноним 06/11/18 Втр 13:55:20 1290594166
>>1290311
макаба фейлит текст с несколькими звездочками техст
Аноним 06/11/18 Втр 15:45:03 1290634167
51STEFXY9ML.SX3[...].jpg (29Кб, 358x474)
358x474
Приветствую уважаемые. Стремящийся репортинг ин.
Никак не могу найти пикрелейтед. Несмотря на год выпуска, у сего труда очень хорошие отзывы, даже с 2018 года.
Да и как такие авторы могут написать некошерную книгу?

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

Вообщем, прошу помощи.

Благодарю.
Аноним 06/11/18 Втр 17:47:23 1290703168
>>1290634
на либгене нет электронной копии, есть data structures using pascal тех же авторов
на амазоне можно купить не новую за 1.5 бакса
Аноним 06/11/18 Втр 17:49:05 1290706169
>>1290578
нетипизированный указатель это void
но речь не о том чтобы знать что он существует, а о особенностях работы с ним и зачем вообще применять
..
Аноним 06/11/18 Втр 18:23:41 1290733170
>>1290703
>data structures using pascal
Не, спасибо, уж очень олдскул.
Аноним 06/11/18 Втр 18:47:46 1290750171
Почему я могу сделать так:
char s;
s="abc"; (это кстати расширение gcc что ли?(присваивание строки после инициализации))
Но не могу так:
int
i ={1,2,3};
В чём принципиальная разница? И где находиться та строка, на стеке?
Аноним 06/11/18 Втр 18:49:05 1290752172
>>1290634
Поддвачну.
Есть вообще хорошиая книга про Data Structures в С?
<spoiler>Как введение в алгоритмы, например.</spoiler>
Аноним 06/11/18 Втр 18:49:30 1290753173
>>1290750З
Блин звёзды испарились, char(звезда) int(звезда).
Аноним 06/11/18 Втр 18:51:44 1290755174
>>1290750
> s="abc"
А почему бы и нет? У тебя указатель, у строкового литерала есть адрес.

> Но не могу так:
> int i ={1,2,3};
Давно уже можешь. Тип укажи только. int ∗i = (int[]) {1,2,3}
Аноним 06/11/18 Втр 19:00:58 1290760175
>>1290755
Офигеть, сколько про С ни читаю в интернете "int ∗i = (int[]) {1,2,3}" такого не встречал, спасибо.
Аноним 06/11/18 Втр 20:48:10 1290825176
>>1290481
Кто-нибудь итт сможет ответить на эти вопросы?
Аноним 06/11/18 Втр 21:00:15 1290829177
>>1290825
>Кто-нибудь итт сможет ответить на эти вопросы?
все могут
Аноним 06/11/18 Втр 21:17:42 1290849178
>>1290481
>как относятся друг с другом указатели и массивы
Массив это и есть указатель, только он указывает на начало связных блоков памяти.
>зачем возвращать из функции указатель на указатель?
Тем самым мы возвращаем двумерный массив.
>как работать с указателями на функции и зачем это надо?
Я хз, пусть другие дополнят
>особенности работы с нетипизированным указателем и зачем он нужен?
Что бы принять данные которые нам не известны (их тип нам не известен)
Аноним 06/11/18 Втр 21:18:38 1290851179
Аноним 06/11/18 Втр 21:21:32 1290856180
>>1290755
>у строкового литерала есть адрес.
А у нестрокового нету что ли адреса? Че за фигня..
Аноним 06/11/18 Втр 21:26:00 1290863181
>>1290849
>Я хз, пусть другие дополнят
Чтобы передавать другие функции как аргументы для функций, но я про это только читал, сам не делал. Ещё такая хрень нужна, чтобы организовать функциональное программирование, но что это значит я тоже не знаю. Там на педивикии написано, что высшие функции - это те функции, которые принимают в качестве аргументов другие функции.
Аноним 06/11/18 Втр 21:41:47 1290877182
>>1290849
>Массив это и есть указатель
неверно
>зачем возвращать из функции указатель на указатель?
>Тем самым мы возвращаем двумерный массив
неверно


Аноним 06/11/18 Втр 21:43:55 1290880183
>>1290863
> Чтобы передавать другие функции как аргументы для функций
Тогда вопрос с подвохом: почему это компилируется и работает (нет, макаба не сожрала звездочки)?
static void hello(void) { puts("Hello, world!\n"); }
static void invoker(void func(void)) { func(); }
int main(void) { invoker(hello); }

>>1290877
Второе с некоторой натяжкой верно. Можно организовать двумерный массив как массив указателей на одномерные.
Аноним 06/11/18 Втр 21:46:19 1290881184
>>1290863
указатели на функции в си используются для более банальных, но практичных вещей, чем попытки симитировать пункции первого порядка и высшие функции из фп

Аноним 06/11/18 Втр 21:48:08 1290883185
>>1290877
тогда свои ответы давай, если так крут
Аноним 06/11/18 Втр 22:23:55 1290924186
>>1290880
Потому что они заинлайнятся?
мимо
Аноним 06/11/18 Втр 22:24:41 1290925187
>>1290881
Буквальные колбеки для имитации полиморфизма.
Аноним 06/11/18 Втр 22:35:51 1290931188
>>1290925
>полиморфизма
Нинужен, ООП для пидоров
Аноним 06/11/18 Втр 22:41:32 1290933189
>>1290931
>ООП для пидоров
Поясни за гон
Аноним 06/11/18 Втр 22:43:19 1290934190
>>1290931
Структуры как замены классов, а колбеки в виде указателей на функции вместо полиморфизма, хехе.
алсо в ядре линукса такое много где используется
Аноним 06/11/18 Втр 22:46:54 1290935191
>>1290934
> а колбеки в виде указателей на функции вместо полиморфизма
Как будто в этих ваших крестах не так. Ой, они называются по-другому.
Аноним 06/11/18 Втр 23:22:51 1290955192
>>1290934
И чо бля? Причем тут ООП парадигма?
Аноним 07/11/18 Срд 00:29:49 1290996193
>>1290851
Хм. Нет.
Спасибо, доберусь до компа поищу.
Аноним 07/11/18 Срд 01:18:04 1291011194
>>1290996
Через тор, а то он в рф забанен
Аноним 07/11/18 Срд 02:26:16 1291041195
>>1291011
Rutracker.org?
У меня все работает.
Но я не в РФ.
Аноним 07/11/18 Срд 02:29:06 1291043196
>>1290851
Нету :(((
Проблема усугубляется тем, что книгу под абсолютно тем же названием написал индус, и именно она вылазит изо всех дыр.
Аноним 07/11/18 Срд 09:29:04 1291088197
>>1287758
вызовы ядра тебе не нужны. из юзерспейса у тебя есть набор библиотек предоставляющих тебе какие-то стандарты.

например gnu c lib:

> This section discusses the various standards and other sources that the GNU C Library is based upon. These sources include the ISO C and POSIX standards, and the System V and Berkeley Unix implementations.

> • ISO C: The international standard for the C programming language.
> • POSIX: The ISO/IEC 9945 (aka IEEE 1003) standards for operating systems.
> • Berkeley Unix: BSD and SunOS.
> • SVID: The System V Interface Description.
> • XPG: The X/Open Portability Guide.

наверно, если говорить за аналогию винапи, то это posix для линя. хз кстати, можно ли бсд расширения использовать в лунтике, конкретно через эту библиотеку.
Аноним 07/11/18 Срд 09:35:41 1291090198
>>1288011
советую qalc (command line version of Qalculate)
Аноним 07/11/18 Срд 09:57:16 1291098199
засрали всё, говно жрут.

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

#ifdef ULLONG_MAX
#define LLONG_T long long
#else
#define LLONG_T char
#endif

#ifdef LDBL_DIG
#define LDOUBLE_T long double
#else
#define LDOUBLE_T_T char
#endif

#define ALIGNOF(T) offsetof(struct { char c; T member; }, member)

#define ALIGN_MAX ALIGNOF(union { char a; sint b; int c; long d; LLONG_T e;\
void@ f; float g; double h; LDOUBLE_T i;})

Аноним 07/11/18 Срд 12:16:02 1291142200
>>1291098
Почему дефайны вместо тайпдефов?

> offsetof(struct { char c; T member; }
Куча невнятного говна в отладочной информации из-за тестовых анонимных структур. Чем тебя stdalign.h не устраивает, зачем велосипеды?

> ALIGN_MAX
У различных SIMD-типов выравнивание может быть от 16 до 32 (в зависимости от компилятора и платформы). alignof(long double) не спасает, в 32-битном коде на винде оно даже меньше, чем alignof(double).
Аноним 07/11/18 Срд 13:42:58 1291165201
>>1291142
>Чем тебя stdalign.h не устраивает, зачем велосипеды?
тем что он есть только в с11. мне поебать на отладочную информацию, я отлаживаю принтами и gdb когда падает.

> alignof(long double) не спасает, в 32-битном коде на винде оно даже меньше, чем alignof(double).
какая разница, если я их всех перечислил?

> Почему дефайны вместо тайпдефов?
и нахуя мне тейпдефами засирать пространство имён? я в этом же файле undef сделаю и всё.
Аноним 07/11/18 Срд 18:53:03 1291325202
Приветствую уважаемые эксперты.
Вот тут описывается создание битового массива:
http://www.mathcs.emory.edu/~cheung/Courses/255/Syllabus/1-C-intro/bit-array.html

Этот кусок показался мне странным:
https://pastebin.com/mhykVexw

Это нормально такие трюки проводить между int и unsigned int?
Не лучше ли использовать только unsigned int в таком случае?
Аноним 07/11/18 Срд 18:55:03 1291327203
>>1291325
Не понял почему пейсбин не высрался.
Вот код:
int A[100]; // A = 0 means false, A = 1 means true

int i = k/32; // i = array index (use: A)
int pos = k%32; // pos = bit position in A

unsigned int flag = 1; // flag = 0000.....00001
flag = flag << pos; // flag = 0000...010...000 (shifted k positions)

A = A | flag; // Set the bit at the k-th position in A
Аноним 07/11/18 Срд 20:20:03 1291370204
>>1290935
>ваших
Я пишу на си, расслабься.
>>1290955
Да, действительно, причём.
Аноним 07/11/18 Срд 20:23:37 1291371205
>>1291327
А что такого собственно?
Что именно тебя смущает?
Аноним 07/11/18 Срд 21:33:23 1291397206
>>1291325
> Это нормально такие трюки проводить между int и unsigned int?
Более или менее. Но бессмысленно, потому что

> Не лучше ли использовать только unsigned int в таком случае?
Лучше. Я еще лучше uint32_t, а то в инте не обязательно 32 бита.

> pro version
Фууу. x[index >> 5] |= 1u << (index & 0x1f)
Аноним 07/11/18 Срд 22:30:38 1291445207
>>1291371
>int A[100];
>unsigned int flag = 1;
>A = A | flag;

int | unsigned int меня смущает
Аноним 07/11/18 Срд 22:31:41 1291449208
>>1291397
>еще лучше uint32_t, а то в инте не обязательно 32 бита.
Хотел спросить кстати, но подумал что наверное вообще нубский вопрос, стыдно
Аноним 07/11/18 Срд 22:33:32 1291450209
>>1291397
>Фууу. x[index >> 5] |= 1u << (index & 0x1f)
не понил
Аноним 07/11/18 Срд 23:42:58 1291508210
>>1291445
Ну у тебя к инту идёт битовое или, так что норм, если бы было наоборот могли бы возникнуть проблемы из-за знакового бита, а так вполне все норм, тут же unsigned просто как бит используется.
Но вообще странно, что так сделано, т.к. если вдруг будет 1 << 31, то возникнет сюрприз.
Аноним 07/11/18 Срд 23:53:42 1291515211
>>1291449
uint32_t макрос кроссплатформенный, который гарантирует тебе беззнаковую 32-битную переменную.
>>1291450
Это не проверсия, это нечитаемое говно, не пытайся это понять, это не сложно, но такой говнокод понимать а уж тем более писать не стоит.
если коротко index >> 5, тоже самое, что index / 32, 1u << это беззнаковая единица, а нужное для неё место даёт index & 0x1f, 0x1f это 32 в хексе, соответственно index & 0x1f тоже самое, что index % 32, думаю соответствие с кодом, который ты скинул сам найдёшь
Аноним 07/11/18 Срд 23:55:48 1291517212
>>1291515
Добавлю, размер инта не управляется стандартом и зависит от платформыкомпилятора
А ещё я там опечатался, 0x1f это 31 в хексе, но % 32 это верно.
Аноним 08/11/18 Чтв 00:10:15 1291522213
>>1291515
> это нечитаемое говно
Вот деление и остаток - нечитаемое говно. А тут сразу ясно, какие биты индекса за что ответственны. И это практически идиоматичный код, он такой везде. Ты либо понимаешь побитовые операторы, либо выбираешь другой язык.
Аноним 08/11/18 Чтв 01:12:25 1291543214
Привет, аноны.
В коде:
char a, b;
scanf("%c", &a);
scanf("%c", &b);

Столкнулся с проблемой переноса line feed (\n) в буфер stdin и последующей инициализацией переменной b при вызове scanf этим символом \n. Погуглив, нашел это
https://stackoverflow.com/questions/7898215/how-to-clear-input-buffer-in-c
Тред мне очень помог, я понял, почему возникает такое поведение, и как от этой "проблемы" избавляться.
После этого решил немного аналогично поиграться, но уже с массивами char'ов. Написал простенький код, чтобы увидеть line feed в массиве.
#include <stdio.h>

int main () {
char a[10];
char b[10];
scanf ("%s", a);
scanf("%s", b);
for (int i = 0; i < 10; i++) {
printf("%d\n", a);
}
printf("new\n");
for (int i = 0; i < 10; i++) {
printf("%d\n", b);
}
return 0;
}
Вводные данные:
Hello
World
Что я ожидаю увидеть:
72
101
108
108
111
0
10 //аски-код \n
мусор
мусор
мусор
new
87
111
114
108
100
0
мусор
мусор
мусор
мусор
Что я вижу на самом деле:
72
101
108
108
111
0
мусор
мусор
мусор
мусор
new
87
111
114
108
100
0
мусор
мусор
мусор
мусор
Где код line feed символа?
Аноним 08/11/18 Чтв 01:15:27 1291545215
>>1291543
быстрофикс
в "что я ожидаю увидеть" у World тоже должен быть код \n, т.е.
...
new
87
111
114
108
100
0
10 //аски-код \n
мусор
мусор
мусор
Аноним 08/11/18 Чтв 03:13:57 1291558216
Прочел седня такой пост на форуме:

"самое главное понять самую важную вещь. в С++ многомерные массивы - не настоящие. они все равно представляют собой одномерный массив.
например int [2][2][2]; все равно будет как int [8] в памяти лежать, а первая запись лишь языковая форма вводящая новый тип. поняв это ты придешь к простой истине, что имея указатель на 0-й элемент любого массива ты получаешь начало массива любой размерности.

поэтому int #p = &mass [0][3][5][8]; - будет показывать на определенную точку в этом многомерном массиве а int
#p = &mass [0][0][0][0]; гарантирует тебе его начало. а далее игра смещений

иначе будешь использовать синтаксис монстров int (#a)[4][4]
---- # = звездочки
Вопрос, в Сишке так же?
Аноним 08/11/18 Чтв 04:10:50 1291563217
>>1291558
в си и с++ нет многомерных массивов на уровне языка
все
очень легко
как и, например, нет строк
нет подсистемы ввода-вывода


Аноним 08/11/18 Чтв 05:56:47 1291572218
>>1291558
>многомерные массивы - не настоящие. они все равно представляют собой одномерный массив
У тебя память одномерная, какие "настоящие" многомерные массивы вообще могут быть? Пиши свои типы на псевдо-ООП чтобы они тебе их имитировали.
Аноним 08/11/18 Чтв 11:43:25 1291659219
>>1291522
Новичкам сложно читать битовые операции и понимать, что они делаютнекоторые даже не представляют, как выглядит число в бинарной записи, о каких битовых операциях идёт речь
А судя по его вопросу он как раз новичок.
Аноним 08/11/18 Чтв 11:49:40 1291663220
0.png (10Кб, 499x651)
499x651
ПОЧЕМУ??
Аноним 08/11/18 Чтв 11:58:57 1291668221
>>1291663
Компилятор понял, что значение б ты не меняешь, а т.к. это не указатель, то и адрес ты не поменяешь, и он скорее всего, чтобы лучше понять чекни асм просто выкинул твой вызов, не создавал переменную б, а тупо распечатал 3 как строковый литерал.
Аноним 08/11/18 Чтв 12:00:42 1291669222
>>1291668
И правда кстати посмотри код на асме, может въедешь, что случилось.
Аноним 08/11/18 Чтв 12:02:11 1291671223
>>1291663
А вообще ты сделал какую-то хрень.
Ты взял адрес переменной и пытался присвоить этому адресу другой адрес.
Аноним 08/11/18 Чтв 12:04:34 1291672224
Аноним 08/11/18 Чтв 12:04:59 1291674225
>>1291671
Чтобы было понятнее.
Если ты хочешь поменять значение переменной, то передавай её адрес, если ты хочешь поменять адрес, то тебе нужен указатель, который содержит в себе именно адрес, который ты можешь поменять, короче сделай б указателем на инт и передавай в функцию без амперсанда, должно сработать.
Аноним 08/11/18 Чтв 12:05:50 1291675226
>>1291672
Насколько я понял он хочет не значение, а адрес подменить.
Аноним 08/11/18 Чтв 12:32:11 1291689227
>myClass& my func(x,y,z...).
Зачем из функции передавать ссылкой, а не копированием?
Аноним 08/11/18 Чтв 13:40:29 1291714228
>>1291689
Чтобы словить segmentaion fault
Аноним 08/11/18 Чтв 15:39:49 1291763229
>>1291543
> Где код line feed символа?
Продолжу повторять итт, что scanf - нелогичное, неюзабельное говно. scanf перед чтением очередного значения пропускает из входного потока все isspace() (т.е., и \n тоже), кроме случаев с charset-ом %[], потому что он может содержать пробелы и %с, потому что пробелы - тоже символы. А %s, как все остальные спецификаторы, сначала пропускает все пробелы, а потом читает до первого пробела.

>>1291558
> в С++ многомерные массивы - не настоящие
Бред. Любой массив настоящий, если с ним можно работать, как с массивом. Без разницы, как он там реализован - как массив массивов или как массив указателей на массивы. А так, да, в сишке так же, оно из сишки в кресты и пришло.

>>1291663
> ПОЧЕМУ
Аргументы функций полностью аналогичны локальным переменным (кроме того факта, что их инициализирует вызывающая функция). Ты изменил локальную переменную a, это ни на что не повлияло.
Аноним 08/11/18 Чтв 17:31:32 1291803230
>>1291763
>Любой массив настоящий, если с ним можно работать, как с массивом.

в си есть производный тип - одномерный массив, задается через соответствующий описатель, семантика оператора индексирования определена так что позволяет работать с массивом посредство арифметики указателей, не более того
точка
Аноним 08/11/18 Чтв 18:00:57 1291813231
>>1291803
Это никак не доказывает, что многомерных массивов нет, а лишь говорит о том, что можно красиво делать многомерные массивы из одномерных, и для этого нахуй не нужны запятые в квадратных скобках.
Аноним 08/11/18 Чтв 18:07:59 1291818232
>>1291813
>>1291813
в системе типов си нет многомерных массивов
Аноним 08/11/18 Чтв 18:13:42 1291821233
>>1291689
Если тебе нужно поле класса передать в другую функцию не член класса и там изменить, например.
Аноним 08/11/18 Чтв 18:25:11 1291823234
5459430.jpg (39Кб, 640x480)
640x480
>>1291813
>Это никак не доказывает, что многомерных массивов нет,
Уносите
Аноним 08/11/18 Чтв 18:30:56 1291828235
>>1291813
>Это никак не доказывает, что многомерных массивов нет
Ну как бы я согласен, что если что-то выглядит и ведет себя как утка, то это утка, но по факту же это одномерный массив указателей.
Аноним 08/11/18 Чтв 18:32:19 1291830236
Аноним 08/11/18 Чтв 23:03:38 1291999237
>>1291558
Да, в C тоже. Связано с тем что указатель на начало статического массива в памяти процесса нигде не лежит.
type arr[size];
Понятно что:
(&arr)[m][n] == (&arr + m)[n] == arr[msizeof(arr) + n]
Можно создать динамическое подобие &arr, которая будет работать аналогично. Перемешивать обыкновенные указатели и массивы нельзя:
if ((void
) &arr == (void*) arr) printf("Wtf\n");
Аноним 08/11/18 Чтв 23:06:27 1292001238
>>1291999
>(&arr + m)[n]
Звездочку забыл
Аноним 09/11/18 Птн 00:25:26 1292030239
а что значит настоящий многомерный массив? это когда указатели хранятся или когда размер каждого измерения?
Аноним 09/11/18 Птн 00:53:01 1292037240
>>1292030
это когда в языке есть тип данных "многомерный массив"
например, как в фортране
Аноним 09/11/18 Птн 02:03:40 1292064241
Аноним 09/11/18 Птн 03:25:21 1292082242
Какие есть фичи и особенности с, которых нет в с++?
Аноним 09/11/18 Птн 03:52:12 1292086243
Аноним 09/11/18 Птн 04:44:42 1292090244
(67Кб, 700x466)
700x466
Аноним 09/11/18 Птн 15:52:25 1292317245
>>1291823
Скажем так, они для наших глаз есть. Но просто хранятся в фиической памяти по другому. А так все есть
Аноним 09/11/18 Птн 16:37:49 1292367246
>>1292317
> Но просто хранятся в фиической памяти по другому
Давай, неси пример из языка с многомерными массивами и показывай, чем в практическом смысле они отличаются от сишных, какая разница в генерируемом коде и как именно они по-другому хранятся.
Аноним 09/11/18 Птн 17:01:35 1292380247
Больше всего меня раздражают операторы * и & для разыменования, и взятия указателя. Надо было выбрать что-то другое.
Аноним 09/11/18 Птн 17:08:53 1292386248
>>1292380
Какие твои предложения?

>взятия указателя
Не знаю такой операции.
Аноним 09/11/18 Птн 19:29:21 1292478249
Аноним 09/11/18 Птн 19:31:47 1292481250
>>1291669
> посмотри код на асме
Это где?
Аноним 09/11/18 Птн 20:02:25 1292501251
>>1292478
Vusial Studio, если глаз не обманывает
Аноним 09/11/18 Птн 20:08:43 1292510252
>>1292367
А хуйнаны шпаны не показать ?
Аноним 09/11/18 Птн 21:07:18 1292536253
>>1292481
Тебе неправильно ответили.

Ты взял указатель и передал его в функцию.
В той функции ты изменил значение ЛОКАЛЬНОЙ переменной a на некоторое другое значение, потом вышел. При этом в main ничего не поменялось.

а - локальная переменная в функции. Действия с ее значением без на main никак не влияют. Тебе нужно чем-то выстрелить по этому указателю.
Например:
a = 4. Или a = c.

В asm смотреть за этим не нужно.

И еще, ты просто так не сможешь сделать так, чтобы b в main ссылалась на какое-то другое место в памяти. Можно только пошатать значение.
Аноним 09/11/18 Птн 21:10:20 1292539254
Аноним 09/11/18 Птн 22:03:43 1292557255
Подскажите сортировку для 5000000 элементов, надо только название, код сам напишу. Время очень критично. Массив целочисленный.
Аноним 09/11/18 Птн 22:08:11 1292559256
Аноним 10/11/18 Суб 11:32:53 1292719257
>>1292090
Какой пиздец. Эталонный говнокод. Прям образец для, рамки не хватает, как программировать нельзя.
Аноним 10/11/18 Суб 14:25:57 1292817258
>>1292719
или ты просто хейтерок, завидующий моему глубинному пониманию вопроса.
Аноним 10/11/18 Суб 14:33:20 1292826259
15366035789020.png (75Кб, 224x225)
224x225
>>1292817
>наговнокодил
>глубинное понимание
Аноним 10/11/18 Суб 14:53:18 1292837260
(84Кб, 605x807)
605x807
Аноним 10/11/18 Суб 15:32:10 1292870261
>>1292817
Я конечно понимаю, что юношеский максимализм помноженный на сексуальную неудовлетворённость дурманит твой мозг, но переменные вида pmss/vd, вложенные циклы и прочие «алгоритмы» это фиаско.
Аноним 10/11/18 Суб 15:57:35 1292900262
>>1292870
претензии как обычно. потому и не спрашиваю. несчастные люди.
Аноним 10/11/18 Суб 16:00:02 1292905263
зато оно работает, защищено от переполнений, от выхода за границы индексов. но важно же приебаться к вложенным циклам в тесте.
Аноним 10/11/18 Суб 16:53:46 1292932264
>>1287378 (OP)
Здравствуйте, мне нужна помощь, суть такова. У меня есть динамический массив, сделанный через realloc. Мне необходимо иметь указатель на один из элементов данного массива. Всё бы хорошо, но у меня есть ещё и второй динамический массив тоже сделанный через realloc и когда я увеличиваю размерность этого второго динамического массива, то указатель уже указывает не на один из элементов первого массива, а на непонятно на что. Олды, подскажите как быть?
Аноним 10/11/18 Суб 17:19:02 1292947265
>>1292932
Храни индексы, а не готовый указатели, очевидно же.
Аноним 10/11/18 Суб 17:27:58 1292953266
>>1292947
Мне нужен именно указатель.
Аноним 10/11/18 Суб 17:30:52 1292955267
>>1292953
Сочувствую, но указатели на элементы и realloc несовместимы.
Аноним 10/11/18 Суб 17:37:00 1292959268
>>1292955
Тогда как динамически выделить память под второй массив?
Аноним 10/11/18 Суб 21:55:33 1293185269
>>1292959
Еще раз. У тебя так: ты хранишь указатель на массив, хранишь указатель на элемент внутри массива, realloc() перемещает массив в новое место памяти, и указатель на элемент начинает указывать на мусор (возможно, не после первого же realloc, а возможно, как у тебя, после realloc другого массива - это все зависит от реализации менеджера памяти). Но можно так: хранишь указатель на массив, хранишь индекс элемента (смещение внутри массива), можешь хоть смещение в байтах хранить, если у тебя элементы разного размера - похуй. Больше данных ты от этого хранить не станешь, но доступ становится сложнее на целую одну операцию. Там, где ты писал ∗elem_ptr или elem_ptr[0], ты будешь писать ∗(array_ptr + index) или array_ptr[index]. Если тебя это чем-то не устраивает, покажи кусок кода с примером того, что ты пытаешься сделать.
Аноним 11/11/18 Вск 14:07:35 1293521270
image.jpg (67Кб, 488x576)
488x576
>>1293185
Да это понятно, я сначала так и хотел делать, но дело в том, что мой массив - это массив структур, у которых поля - это указатели на элементы этой же структуры (по сути сеть). И если я хочу перейти от одного узла сети к другому, мне необходимо менять указатель на текущий элемент, который я возьму из поля текущего элемента. Я не могу взять индекс массива следующего узла сети, потому что в формате элемента он отсутсвует, понимаешь?
Аноним 11/11/18 Вск 14:30:15 1293538271
>>1293521
Ты что-то делаешь очень неправильно.

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

> потому что в формате элемента он отсутсвует, понимаешь?
Понимаю. Отсутствует - добавь.

Но если уж очень хочется, есть другой вариант. Храни массив кусочками. Выделяешь массив под свои структуры с запасом (ну там сколько не жалко, допустим, сразу пару сотен элементов), хранишь количество заполненных элементов или помечаешь неиспользованные как-нибудь - похуй. Когда этот кусок полностью заполнится, вместо того, чтобы realloc()-ом менять его размер, выделяй другой, новый кусок malloc()-ом и начинай заполнять его. Естественно, тебе придется хранить указатели на все куски твоего массива, хотя бы для того, чтобы потом все это освободить правильно. Тебе придется поддерживать какой-нибудь free-list для удаленных элементов, чтобы можно было втыкать поверх них новые элементы. Т.е., фактически придется написать небольшой кастомный аллокатор. К тому же, из-за того, что массив перестанет быть непрерывным, тебе будет сложнее его обходить. Но третьего варианта тут нет.
Аноним 11/11/18 Вск 14:39:18 1293543272
>>1293538
>Отсутствует - добавь
Добавил ещё вчера, вроде нормально. Просто не хотелось поначалу засорять структуру, вот и пришёл сюда в поисках более элегантного решения, но раз такого нет, то придётся оставить как есть. Спасибо.
Аноним 11/11/18 Вск 15:33:48 1293573273
>>1293543
Если тебе о нем не сказали, не значит, что его нет.
80% проблем идут от хренового дизайна, уверен, если ты года через два попробуешь сделать тоже самое, ты найдёшь намного более интересный подход
Аноним 11/11/18 Вск 17:15:14 1293648274
Что происходит, когда пытаешься сложить/вычесть строки
"1345" - "1345", "1345" + 1 и т.д.
Аноним 11/11/18 Вск 17:57:31 1293669275
>>1293648
Просто вспомни, что "строка" - это массив char с неявным \0 на конце. Когда ты используешь массив в выражениях, он кастится к указателю. Вот и твои вопросы сводятся к тому, что будет, если вычесть один указатель из другого или прибавить что-то к указателю.

> "1345" - "1345"
ptrdiff_t x = адрес одной строки - адрес другой строки. Разница между адресами строк в штуках char (т.к. строка - массив char). Но вообще тут undefined behavior: одна из возможных проблем в том, что если компилятор схлопнет эти два одинаковых литерала в один, разница будет 0, а если не схлопнет - какое-то число. Поэтому вычитание указателей работает правильно только когда указатели указывают на разные части одного и того же объекта.

> "1345" + 1
(адрес "1345") + 1, т.е., указатель, указывающий на "1345" + 1 = указатель на "345".
11/11/18 Вск 22:07:55 1293828276
Двач,выручай!
Выделить под массив динамически память.
Обращаться к элементам массива необходимо используя указатель.


1. В одномерном массиве, состоящем из n вещественных элементов, вычислить: - сумму отрицательных элементов массива;
- произведение элементов массива, расположенных между максимальным и минимальным элементами
Аноним 11/11/18 Вск 22:22:59 1293837277
>>1293828
double array = malloc(N sizeof(double));
Аноним 12/11/18 Пнд 00:46:34 1293915278
Как начать писать маленькие проекты если никогда ничего серьёзного не писал кроме задач на 3 функции максимум. Что почитать, посмотреть?
Аноним 12/11/18 Пнд 02:36:05 1293951279
Антон, посоветуй показ книжку по логике, необязательно компьютерной. Чтобы я прочитал и понял что нелогично было спрашивать такое у анона
Аноним 12/11/18 Пнд 08:10:56 1293989280
Аноним 12/11/18 Пнд 11:16:57 1294040281
Аноним 12/11/18 Пнд 12:10:47 1294074282
>>1292932
Запили свой динамический массив, который использует не realloc, а выделяет память чанками некоторого размера. Перегрузи всякие операции типа ++ и будет тебе счастье.
Аноним 12/11/18 Пнд 12:13:23 1294075283
12/11/18 Пнд 13:11:36 1294103284
>>1294075
премного благодарен
Аноним 12/11/18 Пнд 13:13:15 1294105285
>>1294075
Полный бред. Числа не вещественные ни разу, какие-то промежуточные копирования массива, хотя ты его и так не модифицируешь, задание не прочитал - произведение не то. Реально задача решается максимум двумя циклами.
12/11/18 Пнд 13:18:35 1294110286
>>1293828
по-моему этот код лучше

/ Задание 1: Написать программу в соответствии с вариантом, выделив под массив динамически память.
Обращаться к элементам массива необходимо используя указатель.

1. В одномерном массиве, состоящем из n вещественных элементов, вычислить: - сумму отрицательных элементов массива;
- произведение элементов массива, расположенных между максимальным и минимальным элементами.
/

#include <stdio.h>
#include <conio.h>
void main ()
{
int i,n,tmp1=0,tmp2=0;
int proizv=1,sum=0, max, min;

//vvod massiva
do{
printf("Vvedite kol-vo elementov massiva (<30)\n");
scanf("%d",&n);
}
while (n>=30);

float b[n];
for (i=0;i<n;i++)
{
printf("Vvedite element [%d]\n", i+1);
scanf("%f",b+i);
}

for (i=0;i<n;i++){
if ((b+i)<0){
sum+=
(b+i);
printf("Summa otriz elementov matrici = %d\n", sum);
}
}

//max
max=b;

for (i=0;i<n;i++)
{
if (
(b+i)>max)
{
max=(b+i);
tmp2=i;
}}
printf("Max element matrici = %d\n", max);

//min
min=
(b+1);
for (i=0;i<n;i++)
{
if ((b+i)<min)
{
min=
(b+i);
tmp1=i;
}}
printf("Min element matrici = %d\n", min);

for (i=tmp1+1;i<tmp2;i++)
{
proizv=proizv(b+i);
}
printf("proizv mezhdu min i max :%d",proizv);
}



Аноним 12/11/18 Пнд 13:36:00 1294128287
>>1294110
А если индекс максимального элемента меньше, чем индекс минимального? И вообще, кто-нибудь здесь способен решить ОДНИМ циклом >>1293828 ?
Аноним 12/11/18 Пнд 14:26:38 1294165288
Аноним 12/11/18 Пнд 14:47:17 1294185289
>>1294165
Ну, C17 - это мелкие фиксы, никаких фич. И гораздо хуже, что Pelle дропнул поддержку 32-битных ОС. Компилятор, который не только не кроссплатформенный, но даже на собственной платформе не везде работает - это эталонное нинужно.
Аноним 12/11/18 Пнд 14:57:18 1294196290
>>1294128
Поиск минимального и максимального элемента это уже два цикла, чисто в теории можно объединить в один, но нахуя? Есть такое условие в задаче?
Аноним 12/11/18 Пнд 15:02:27 1294203291
>>1294196
За один можно управиться. А вот найти сумму между ними - уже второй.
Аноним 12/11/18 Пнд 15:13:42 1294212292
>>1294196
> чисто в теории можно объединить в один, но нахуя?
Потому что гонять два цикла для такой простой вещи - идиотизм даже в нашем современном мире.

> Есть такое условие в задаче?
Нет. Но быть макакой стыдно.
Аноним 12/11/18 Пнд 16:03:39 1294263293
Есть какой-нибудь источник в котором описаны сокращение типа if (!str) или while (str) и подобные. Часто читая код натыкаюсь на подобные сокращения и по пол часа ищу их в гугле
Аноним 12/11/18 Пнд 16:04:58 1294264294
>>1294075
Кстати, никто не мешает написать так
for (int j = 0; j < size; j++)
{
if (numbers[j] < min)
min = numbers[j];
if (numbers[j] > max)
max = numbers[j];
}
и не нужно создавать кучу циклов
Аноним 12/11/18 Пнд 16:17:50 1294270295
>>1294263
> сокращение типа if (!str)
Глава про операторы в твоей книжке про Си.
Аноним 12/11/18 Пнд 17:57:29 1294362296
12/11/18 Пнд 19:29:25 1294411297
двачик,выручай
Двумерный массив, содержащий равное число строк и столбцов, называется магическим квадратом, если суммы чисел, записанных в каждой строке, каждом столбце и каждой из двух больших диагоналей, равны одному и тому же числу. Определить, является ли данный массив А из n строк и n столбцов магическим квадратом.(размерность с клавиатуры+это должно быть решено чере указатели и должна быть выделена память через ,malloc)
если западло не пишите код,мне бы просто логику усвоить ,я делал аналогичную хрень без указателей ,но с ними ничего не выходит
Аноним 12/11/18 Пнд 19:42:09 1294418298
>>1294411
В обычном массиве a[n][n] ты адресуешь элемент как a[y][x]. В динамическом массиве a[n ∗ n] ты адресуешь элемент как a[y ∗ n + x]. Суммы циклом посчитаешь, ничего сложного там нет.
Аноним 12/11/18 Пнд 19:51:03 1294426299
Снимок экрана о[...].png (1272Кб, 1920x1080)
1920x1080
Почему нихуя не выводит, двач? Почему отрицательная обыкновенная дробь, меньшая единицы по модули, в СИ не меньше 0? Т.е. -6/6 СИ понимает что она меньше нуля, а вот -5/6 и т.д не понимает?
Аноним 12/11/18 Пнд 20:03:22 1294435300
Аноним 12/11/18 Пнд 20:21:27 1294442301
Аноним 12/11/18 Пнд 20:59:37 1294468302
Господа. Не так давно узнал, что все (или во всяком случае те, что используются большинством) операционных систем, используют для адресации виртуальной памяти лишь 48 бит из 64 битного указателя (на 64 битных архитектурах, само собой). Что означает, что старшие 16 бит фактически можно использовать для данных. Так же слышал, что это используется для реализации tagged pointers.

Собственно вопрос, каковы подводные камни и стоит ли этим пользоваться (для реализации тех же виртуальных машин, например). Пока вижу единственный недостаток в том, что перед тем, ка использовать указатель, как указатель, если в его старших 16 битах что-то лежит, надо эти 16 бит обнулять (тут кстати неясно, почему ОС просто не игнорирует их, тогда бы не пришлось этого делать).
Аноним 12/11/18 Пнд 21:39:43 1294503303
>>1294468
> почему ОС просто не игнорирует их
Потому что ОС их как раз игнорирует, а вот процессор очень обижается, если адрес не в канонической форме.

> надо эти 16 бит обнулять
Если бы. Туда надо дублировать 47-ой бит. Две лишних инструкции вместо одной.

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

Алсо, если тебе нужно меньше бит (например, флаг какой-нибудь указателю поставить), лучше используй выровненные указатели, они портабельнее, и их фиксить проще: например, обычный malloc() без дополнительных телодвижений выравнивает на alignof(double) == 8 (обычно), и 3 младших бита - твои.
Аноним 13/11/18 Втр 02:41:22 1294649304
Хвощ, ковыряю Си, запрашиваю объяснение сего. Если я правильно понимаю, s содержит адрес первого элемента массива. Функция печатает элемент массива, затем меняет адрес, хранящийся в s, на адрес следующего элемента массива.

Но загадкой для меня является сочетание while (s).
Что это значит? Адрес, который s содержит, рано или поздно выйдет за границы массива. Если он пустой, то указателю присвоится значение 0 и цикл прервется. Но что если по этому адресу хранится какое-нибудь значение?

int puts (const char
s)
{
while (s) putchar (s++);
return 1;
}

Аноним 13/11/18 Втр 02:44:09 1294650305
Elon Musk smoki[...].gif (109Кб, 516x472)
516x472
image.png (4Кб, 258x110)
258x110
>>1294649
Блять сложно. Почему звездочки не ставятся то

Аноним 13/11/18 Втр 02:52:25 1294651306
>>1294650
>>1294649

Ай блять, вспомнил, нуль терминатор в конце же
Аноним 13/11/18 Втр 03:00:36 1294655307
>>1294651
>терминатор
Как же я обожаю это название нулевого символа.
мимо
Аноним 13/11/18 Втр 12:48:22 1294793308
TY0LvQaLpKk.jpg (39Кб, 700x448)
700x448
Аноним 13/11/18 Втр 16:23:32 1294893309
Screenshot from[...].png (6Кб, 640x21)
640x21
Как правильно понять эту строку?
Если строка "пустая" ИЛИ выделено ноль памяти?
Аноним 13/11/18 Втр 16:59:52 1294924310
6723482098623.jpg (612Кб, 1280x921)
1280x921
>>1294893

Если строка пустая или неуспех при выделение затребованной памяти.

А вообще это весьма неправильный способ проектирования программы, так как память можно выделять поблочно, а в представленном случае можно лишь сказать, что автор данной строки либо лиственник, либо конченный долбоёб.
Аноним 13/11/18 Втр 17:07:54 1294935311
>>1294924
>автор данной строки либо лиственник, либо конченный долбоёб.
Хуйня, норм код доя смузихлебов. Если по хардкору, то в чанк можно побайтово и копировать, без подсчета длины строки, если не додумался хранить длину в переменной.
Аноним 14/11/18 Срд 02:44:49 1295216312
##mas;
А когда мы очищаем двойной массив с помошью функции free(mas), то массивы внутри этого двойного массива тоже автоматом чистятся ?:)
Аноним 14/11/18 Срд 11:34:24 1295310313
>>1295216
Нет, это сишка, ничего автоматом не чистится.
Аноним 14/11/18 Срд 18:05:31 1295507314
15414452045720.png (309Кб, 700x462)
700x462
Карьера байтоеба в российских реалиях Аноним 14/11/18 Срд 19:37:44 1295541315
Реально ли вкатиться в байтоебство и найти работу в России?
Собираюсь через переехать в спб из своей мухосрани, но есть еще 1-2 года в запасе, которые можно будет потратить на изучение разных штук и технологий. Я понял, что успешный байтоеб в 2019 году должен уметь: в C, C++, Linux, Linux Kernel и какой-нибудь скриптовый язык вроде питона и систему контроля версий, а также алгоритмы и структуры данных для собеседования.
Стоит ли игра свеч? Или лучше оставить байтоебство как хобби, а работать где-нибудь в вебе или энтерпрайзе?
Аноним 15/11/18 Чтв 01:35:35 1295657316
>>1295541
>энтерпрайзе
ЧТо это такое кстати?
Аноним 15/11/18 Чтв 01:41:00 1295660317
union {
int i; short b;
}

Как сделать union у которого бы b выводило старшую, а не младшую половину? Что-то типа

union {
int i; struct { short a, b } b;
}

Но только чтобы обращаться к старшей половине можно было бы не union.b.b, а просто union.b?
Аноним 15/11/18 Чтв 09:47:25 1295754318
>>1295660
чем тебя так не устраивает?
union {
int i; short a; short b;
}
Аноним 15/11/18 Чтв 09:48:50 1295755319
Аноним 15/11/18 Чтв 10:00:54 1295760320
>>1295660
вот так, если компилятор поддерживает анонимные структуры
union {
int i; struct { short a, b };
}
Аноним 15/11/18 Чтв 10:55:36 1295772321
>>1287378 (OP)
ой код
#include <stdio.h>
#include <limits.h>
int main(void)
{
int a=1000,c,b;
stop:
scanf("vvedite cteneh:%d",&c);
for(b=0;b!=INT_MAX;b++)
{
a=a>>b;
if(b==c)
{
break;

}
printf("%d\n",a);
}
goto stop;
}
Аноним 15/11/18 Чтв 13:16:06 1295831322
>>1295660
Сделай это битовой операцией, хули ты. Обращаешься в твоём случае к i, и делаешь (i & (0xFFFF << 16))
Аноним 15/11/18 Чтв 13:26:01 1295837323
>>1295831
Это если инт 32 битовый.
Естественно.
Аноним 15/11/18 Чтв 13:27:08 1295838324
15412603393460.jpg (26Кб, 403x497)
403x497
>>1295831
Но лучше не используй инт, используй unsigned int, а то после такого сдвига настанет пиздец знаковому биту.
Аноним 15/11/18 Чтв 13:32:03 1295842325
>>1295760
Алсо можно ещё так.
union { int i}
Что-то-там = i & 0s //старшие биты I
Если хочешь получить старшие биты как просто биты, то ещё можешь сдвинутьно бля не двигай знаковые переменные, иначе тебя бог накажет
>>1295831-кун
Аноним 16/11/18 Птн 02:19:09 1296103326
>>1287378 (OP)
Аноны, может кто нибудь знает как найти параметры функции в памяти? И как они вообще расположены?
Возможно есть статейки на эту тему.
Аноним 16/11/18 Птн 02:31:39 1296104327
Например есть функция
int sum (int n, ...)
Как найти адрес в памяти остальных параметров?
Аноним 16/11/18 Птн 05:11:31 1296119328
чотко.jpg (63Кб, 534x438)
534x438
>>1290634
В последний раз попрошу анона помочь найти в оцифрованном виде и больше не буду вскрывать эту тему.
Аноним 16/11/18 Птн 05:34:55 1296120329
>>1291515
>index & 0x1f тоже самое, что index % 32,
Я реально сейчас в катарсисе. Почему я не знал об этом? Это же гениально.
Что быстрее вычисляется, остаток или AND, я думаю вопрос риторический.

Хотя:
Optimizing compilers may recognize expressions of the form expression % constant where constant is a power of two and automatically implement them as expression & (constant-1). This can allow writing clearer code without compromising performance.
16/11/18 Птн 14:19:16 1296216330
>>1296120
> Optimizing compilers may recognize expressions
Да. Каждый первый компилятор умеет в умножение через lea и/или сдвиги, деление через сдвиги и остаток через &. И еще умеют деление умножением заменять. Но

> This can allow writing clearer code
это хуйня полная. В варианте с & сразу видно, что оно маскирует биты, видно, сколько битов и все такое. А с % надо об этом думать. Традиционно, для улучшения понимания происходящего, даже после того, как компиляторы научились оптимизировать, если дело касается битоебли, используют сдвиги и логические операторы, а если не касается - нормальные умножение, деление и остаток.
Аноним 16/11/18 Птн 18:26:23 1296331331
>>1296104
Ну в памяти оно лежит в все подряд, тебе только нужно определиться что за тип данных, колличество и порядок элементов передающихся в такую функцию, выцеплять можно через указатель, например. Просто добавить к нему 1 и получишь следующий после адреса "n" адрес.

https://rsdn.org/forum/cpp/418970.1
Первая же ссылка в Гугле, можешь ещё по теме поискать.
Аноним 16/11/18 Птн 18:34:46 1296340332
154226357717738[...].jpg (171Кб, 700x703)
700x703
>>1287378 (OP)
Анончи, можно ли на Си создать двумерный массив, второй элемент которого является массивом переменной длины:

[
...
[0, [1, 2, 3, 4, 5]],
[1, [1, 2]],
[2, 0]
...
]
Аноним 16/11/18 Птн 18:48:45 1296363333
>>1296340
как вариант массив структур с указателем на массив
struct s
{
int a;
int *pt;
}
Аноним 16/11/18 Птн 19:37:13 1296392334
>>1296363
А как это все инициализировать в хедер? Мне нужно статически.
Аноним 16/11/18 Птн 19:58:58 1296404335
>>1296331
> Ну в памяти оно лежит в все подряд
> выцеплять можно через указатель
Ни в коем случае нельзя так делать. Это работало с 32-битным __cdecl в x86. В современном мире параметры могут лежать и в SIMD-регистрах, и в обычных, и в стеке, в зависимости от их типа и ABI в целом (т.е., va_arg(ap, int) и va_arg(ap, float) могут читать из разных мест). Поэтому #include <stdarg.h> va_list, va_start, va_arg, вот это все.

>>1296392
Статически - красиво никак нельзя не заставить компилятор сгенерить безымянные вложенные массивы, и это очень огорчает, когда тебе нужно задавать статически всевозможные древовидные структуры в Си, но можно сделать это явно, по частям, как макака: https://ideone.com/P0qbBE
Аноним 16/11/18 Птн 21:19:38 1296433336
Аноним 16/11/18 Птн 21:22:34 1296434337
Аноним 16/11/18 Птн 22:33:05 1296454338
>>1296434
А чего вам не нравится? Про руки я пошутил, для ленивых есть кодогенерация. У меня в одном из проектов килобайт этак 60 таких вот массивов, разве что слегка сложнее: там список типов сущностей, списки их свойств и дочерних сущностей, ну и методы всякие, для манипуляции и (де)сериализации. Нужно было такое на крестах писать, но когда я это осознал, было уже поздно.
Аноним 16/11/18 Птн 22:56:42 1296459339
>>1296103
Есть соглашения о передаче аргументов в функцию.
Для amd64 Linux, System V ABI:
Первые аргументы в регистрах rdi, rsi, rdx, rcx, r8, r9, иногда еще xmm.
Остальные лежат в стеке задом наперед.
Аноним 16/11/18 Птн 22:58:11 1296461340
>>1296454
>есть кодогенерация
Это понятно. Я еще вариант придумал, хранить data в сплошном бинарном массиве, а в инициализации указывать ссылку на этот массив и смещение. Какой вот стул выбрать, пока не ясно. И тут вопрос, не распидарасит ли конпелятор мой бинарный массив, похеря смещения.
Аноним 17/11/18 Суб 01:14:24 1296511341
Аноним 17/11/18 Суб 14:02:12 1296679342
Сколько (максимум) строк кода должно быть в одном си-файле, чтобы упростить читаемость?
Аноним 17/11/18 Суб 14:17:03 1296681343
>>1296511
Бля. Ты прав. Я вспоминал об этом варианте, но когда-то раньше у меня с ним были какие-то проблемы, и я даже не удосужился затестить, когда отвечал тут >>1296433. Кстати, можно обернуть инициализатор в макрос, тогда и нуль-терминатор не понадобится.

>>1296679
Сам посчитай: https://www.sqlite.org/2018/sqlite-amalgamation-3250300.zip Похуй, сколько строк в файле. Программу разбивают на модули по смыслу, и чтобы не пересобирать и не линковать лишнее из-за мелких изменений. А к читаемости это никак не относится. Ну, разве что ты пользуешься модными "редакторами" на электроне, но в таком случае ты сам выбрал страдания.
Аноним 17/11/18 Суб 14:25:28 1296689344
south-park-wow-[...].jpg (46Кб, 704x396)
704x396
>>1296681
>Кстати, можно обернуть инициализатор в макрос
Оставить поле длины и подсчитывать макросом? Кокой же вариант выбрать, хм...
Аноним 17/11/18 Суб 17:43:47 1296784345
>>1287378 (OP)
Есть ли гайды как запилить свой memory pool?
Аноним 17/11/18 Суб 19:12:28 1296823346
Аноним 18/11/18 Вск 16:47:31 1297246347
>>1287378 (OP)
Может кто-нибудь посоветовать какую-нибудь литературу по ipc/параллельному программированию в POSIX и System V? Не по основам, с безопасными реализациями алгоритмов.
Аноним 19/11/18 Пнд 12:37:40 1297600348
main()
{
func1();
func2();
pthread_create();
}

Тут все функции выполнятся строго по порядку, или компилятор может сделать так, что pthread_create() начнёт выполняться раньше?
Аноним 19/11/18 Пнд 13:45:26 1297625349
>>1297600
С чего бы им не по порядку запускаться?
Аноним 19/11/18 Пнд 14:00:11 1297630350
>>1287378 (OP)

решил я тут пдставить очко под этот ваш си, ебать, че там скачивать нужно, нотпад хуе мое?

стремящаяся-умственно-отсталая-веб-обезьянка
Аноним 19/11/18 Пнд 14:44:26 1297663351
Анончики хэлп.
Create a function ft_count_if which will return the number of elements of the array that return 1, passed to the function f.
The array will be delimited by 0.

Нужно создать ф-цию которая возрвращает число эл-ов массива который возвращает 1? Или как более точно перевести. Не пойму что требуется в этом задание
Аноним 19/11/18 Пнд 15:10:46 1297678352
>>1297663
Нужно создать функцию, которая считает элементы массива которые подходят определенному условию, соответственно тебе нужно сделать так чтобы она принимала сам массив, количество элементов в нем и какой-либо предикат. Вот вроде функции remove_if в этой статье - https://ru.cppreference.com/w/cpp/algorithm/remove
Аноним 19/11/18 Пнд 15:20:58 1297680353
>>1297625
Где-то читал, что функция создания потока может стартануть раньше, но раз это не так, то ок.
Аноним 19/11/18 Пнд 15:24:36 1297682354
>>1287378 (OP)
Есть ли библиотеки для написания простеньких игр на Си?
Аноним 19/11/18 Пнд 15:52:49 1297690355
Аноним 19/11/18 Пнд 16:12:32 1297697356
Все тянет начать писать игру, но никак не могу придумать, как бы накостылить на SDL2 гуишку для нее.
Аноним 19/11/18 Пнд 16:19:05 1297699357
>>1297690
>CSFML
Пробовал установить пару лет назад, ох и поебался я с ней тогда.
Аноним 19/11/18 Пнд 17:08:08 1297726358
Аноним 19/11/18 Пнд 17:09:42 1297727359
>>1297726
Не совсем то, мне внутриигровое гуи, надо, но спасибо, потыкаю.
Аноним 19/11/18 Пнд 19:50:12 1297809360
>>1297726
>>1297727
Хм, придется руками прикручивать SDL_Renderer. Попробую лучше сделать свое, как нужно конкретно мне. Осталось только придумать, как адекватно коллбэки на кнопках обрабатывать - не хочу городить кучу глобальных переменных, чтобы менять сцены или там текст в текстбоксах обновлять.
Аноним 19/11/18 Пнд 22:09:19 1297862361
Аноны, а где можно почитать про буферы и буферизацию? Рассказывается ли об этом в K&R или у Прата? Конечно, чтобы понять, что такое fully buffered, line buffered, unbuffered i/o мне хватило парочки тем на stackoverflow. Однако я не понял, почему при буферизации чтения и записи идет выигрыш в производительности. Есть некое абстрактное представление, но хочется конкретики, да и в этой абстрактности я не уверен. Хочется полных и точных объяснений, особенно, когда имеешь дело с Си. Например, мы имеем файл с записью "Hello". Мы fscanf'им его в массив. Так вот, зачем функция помещает эту запись сначала в буфер, а лишь затем - в массив? Ведь буфер - это и есть тот же самый масив. Зачем лишние действия?
Другой пример:
int main () {
printf("Hello");
sleep(3);
system("clear");
printf("World\n");
}
Здесь мы получаем HelloWorld, очевидно, т.к. printf - line buffered
Так же в коде
int main () {
printf("HelloWorld");
while (1) {
}
}
Сообщение HelloWorld никогда не будет выведено на экран.
Однако при
int main () {
printf("HelloWorld");
return 0;
}
сообщение HelloWorld все-таки выводится на экран. Как я понимаю, это происходит на этапе завершения программы, т.е. после return 0 (или при/до return 0?) программа видит, что data, предназначенная для stdout, не была доставлена и все еще висит в буфере, поэтому программа самостоятельно принудительно флашит stdout ("выплескивает" данные из буфера в stdout). Правильно я это понимаю?
Ну и тут снова тот же вопрос, что и с scanf'ом - зачем нам вообще нужно line-буферить printf? Почему бы сразу не кидать все в stdout?
Помимо этого, интересно, какая размерность у буфера?
Можно ли отключить буферизацию?
19/11/18 Пнд 22:25:32 1297868362
двачик,родной ,выручай

Составить функцию для слияния двух упорядоченных по возрастанию массивов целых чисел.(используя функцию вне мэйна)
под слиянием имеется ввиду не сложение соответствующих элементов,типа 0-й из 1-го массива+0-й из 2-го массива=0-й в новом массиве,а именно запись их в ряд по возрастанию
не знаю шо робiтi(
Аноним 19/11/18 Пнд 22:53:34 1297891363
>>1297868
Почитай, про сортировку слиянием.
Аноним 19/11/18 Пнд 22:54:00 1297893364
>>1297891
Нахуя, я, поставил, там, запятую?
Аноним 20/11/18 Втр 00:31:00 1297934365
>>1297862
> Однако я не понял, почему при буферизации чтения и записи идет выигрыш в производительности
В этом же самом треде: >>1289184

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

> Как я понимаю, это происходит на этапе завершения программы
Выход из main = exit(кодвозврата), exit = fclose всех файлов, fclose = fflush перед закрытием.
Аноним 20/11/18 Втр 11:35:07 1298082366
Новый ньюфаг вкатывается в итт тренд.
Поясните про задачку с getchar, что почти в самом начале. Почему выводится все, что я ввел, а не только первый символ? Как работает цикл в данном случае, он получается прогоняет getchar до того момента, когда брать больше нечего, или как? Тупой вопрос наверное, но лучше уж сразу в таких основах разобраться основательно.
Аноним 20/11/18 Втр 12:59:43 1298130367
>>1298082
>Поясните про задачку с getchar, что почти в самом начале.
Что за задачка?
Аноним 20/11/18 Втр 15:27:08 1298208368
изображение.png (20Кб, 798x567)
798x567
Почему это код не работает на ideone?
#include <stdio.h>

int main()
{
int i = 1, x = 5, n = 5;
scanf_s("%i %i", &x, &n);

while (n > 0) {
i = i * x;
n = n - 1;
}

printf("%i", i);
return 0;
}
Аноним 20/11/18 Втр 15:40:43 1298210369
>>1298208
Потому что майкрософтоговно ненужно. Используй scanf, а всем, кто будет возникать, говори #define _CRT_SECURE_NO_WARNINGS "Fuck you"
Аноним 20/11/18 Втр 16:17:38 1298231370
>>1298130
1.5.1. Копирование файла
При наличии функций getchar и putchar, ничего больше не зная о вводе-выводе, можно написать
удивительно много полезных программ. Простейший пример — это программа, копирующая по одному
символу с входного потока в выходной поток:
чтение символа
while (символ не является признаком конца файла)
вывод только что прочитанного символа
чтение символа
Оформляя ее в виде программы на Си, получим
#include <stdio.h>

/ копирование ввода на вывод; 1-я версия /
main()
{
int с;
с = getchar();
while (с != EOF) {
putchar (c);
с = getchar();
}
}
Аноним 20/11/18 Втр 16:43:52 1298248371
>>1298210
Почему говно и почему ненужно?
Аноним 20/11/18 Втр 17:12:12 1298261372
>>1298248
Потому-что это жирнота.
Аноним 20/11/18 Втр 19:27:30 1298319373
>>1298261
Конкретизируй. Если просто говорить новичку в какой-то области "это говно, а вот это не говно", то он никогда ничему у тебя не научится. Надо объяснять почему это говно.
Аноним 20/11/18 Втр 19:55:25 1298345374
>>1298319
>Надо объяснять
Какие охуевшие дети пошли, да...
Аноним 20/11/18 Втр 21:00:57 1298393375
>>1298345
Не можешь аргументировать == ты пидор
Аноним 20/11/18 Втр 21:21:45 1298405376
>>1298393
пидор - это когда провели хуем по губам
Аноним 20/11/18 Втр 22:05:35 1298443377
Подгоните годное пособие по прогингу микроконтроллеров на С
Желательно AVR, но по факту похуй - надо на чем-то будет набить руку. Знаю азы Си, но хотелось бы погонять его там где он чаще и применяется (плюс у меня специальность радиотехника, с МК часто приходилось иметь дело, но вот сам я их не прогал)
Аноним 21/11/18 Срд 00:07:01 1298528378
Аноним 21/11/18 Срд 00:23:22 1298531379
>>1298528
В хуяпку. Пошел нахуй со своими школьниками.
Аноним 21/11/18 Срд 01:31:20 1298574380
Потому что под маской всевозможных сканфов/принтфов скрываются системные вызовы read/write. Системный вызов - достаточно дорогая операция, в этом вы можете убедиться, к примеру, написав программу копирования содержимого одного файла в другой с помощью read/write (по 1 символу) и различных функций ввода/вывода из stdio, при это посмотрите время работы обоих программ. Разница будет коллосальна. Решение является буферизация содержимого. То есть вы складываете ваши символы в буффер и изредко его записываете с помощью write. То есть пишете не 1000 раз по 1 символу, а 1 раз 1000 символов, тем самым обращение к ядру, которое является столь долгим, происходит редко.
Аноним 21/11/18 Срд 03:40:30 1298642381
>>1298528
заебись, после просмотра я закодил и теперь получаю 100к мес
Аноним 21/11/18 Срд 03:50:53 1298643382
>>1287378 (OP)
Есть ли что нибудь встроенное чтобы проверить содержит ли string букву или слог? в идеале что-то вида:
s.contains("xy") -> Boolean
Аноним 21/11/18 Срд 07:00:24 1298668383
Приветствую, эксперты.
Параллельно с Пратой, начал изучать Тененбаума (ОС).
Пришла в голову дикая мысль - а что если купить 486 старый комп как полигон для написания разного софта по книге? Домашний ноут стремно трогать, я же нуб криворукий, сломаю еще что-то.
Совсем дебильная идея, или стоит все-таки?
Собираюсь ковыряться близко к железу.
Аноним 21/11/18 Срд 07:19:43 1298670384
>>1298668
>Собираюсь ковыряться близко к железу.
VirtualBox
Аноним 21/11/18 Срд 07:23:30 1298671385
>>1298668
Пошарься по вк, типа отдам даром. Я б в своём городе отдал пару системников без жд, но ты не в моей мухосрани же. Другое дело, что тебе это может быстро надоесть и лучше потренироваться на эмуляторах.
Аноним 21/11/18 Срд 07:42:32 1298672386
>>1298668
Лучше виртуалку, там можно настраивать пека твой, хочешь 2гб памяти, а хочешь 8 мб, процессор, частота, сетевая карта, мышка, все что нужно.
Аноним 21/11/18 Срд 08:00:03 1298674387
>>1298248
Потому что не добавляет безопасности, несмотря на громкий заголовок, зато добавляет ебли, потому что создает проблемы с библиотеками, потому что необязательное расширение стандарта, которое почти никто не реализует.

>>1298643
strchr(), strstr(), != NULL

>>1298670
>>1298672
Двачую этих.


Аноним 21/11/18 Срд 09:07:42 1298688388
>>1298574
а зачем делать буферизацию руками то? ну ты че
ввод-вывод стандартной библиотеки сишной буферизированный по умолчанию, причем более-менее оптимизированный под текущую платформу где рантайм сишный скомпилен, плюс есть функции записи буферизированных данных, функциии управления буферизацией
ребята, которые пилят основной сервис - почту на майлру, к примеру, пользуются стандартным вводом-выводом, им хватает по производительности.. просто в нужных местах в коде сбрасывают буфер и все.. когда надо..
Аноним 21/11/18 Срд 11:03:59 1298779389
>>1298231
Too slowly! Should be use chunk of bytes for hasteful code, honey!
Аноним 21/11/18 Срд 12:10:44 1298829390
>>1298574
>Потому что под маской всевозможных сканфов/принтфов скрываются системные вызовы read/write. Системный вызов - достаточно дорогая операция, в этом вы можете убедиться, к примеру, написав программу копирования содержимого одного файла в другой с помощью read/write (по 1 символу) и различных функций ввода/вывода из stdio, при это посмотрите время работы обоих программ. Разница будет коллосальна. Решение является буферизация содержимого. То есть вы складываете ваши символы в буффер и изредко его записываете с помощью write. То есть пишете не 1000 раз по 1 символу, а 1 раз 1000 символов, тем самым обращение к ядру, которое является столь долгим, происходит редко.

Ну, начнем с того, что это давно уже не так и там давно уже применяется mmap/MapViewOfFile, работающих напрямую со страничным механизмом OS.
Аноним 21/11/18 Срд 12:28:06 1298845391
>>1298829
> mmap/MapViewOfFile
Это когда у тебя программа сегфолтится при вытаскивании флешки, с которой был открыт файл? Хороший механизм.

> что это давно уже не так и там давно уже применяется
Где там?
Аноним 21/11/18 Срд 15:07:24 1298981392
Аноним 21/11/18 Срд 15:27:09 1299008393
>>1298393
Что аргументировать, тебя анон жирно протроллил, я в этом посте на это указал - >>1298261

Дальше отвечал уже не я. Суть в том что те функции которые ты используешь добавлены мелкомягкими чтобы предотвратить гуляние по памяти в случае отсутствия в конце строки нуль-терминатора, по сути они эквивалентны обычным, только в функциях с "_s" в конце ты так же указываешь предел на котором функция должна остановиться в случае отсутствия нуль-терминатора. В IDE под linux и MAC, и на сайте ideone таких функций нет, потому-что они выпускаются не мелкомягкими.
Аноним 21/11/18 Срд 15:49:58 1299022394
awesome.jpg (11Кб, 214x229)
214x229
>>1298670
>>1298671
>>1298672

Спасибо большое, поставить виртуалку как-то даже и в голову не пришло.
Аноним 21/11/18 Срд 19:04:13 1299167395
>>1299022
>как-то даже и в голову не пришло
Ты точно хочешь быть погромистом?
Аноним 21/11/18 Срд 20:11:45 1299216396
>>1299008
> тебя анон жирно протроллил
Где я его потроллил? Предложение задепрекейтить Annex K в С21 как бесполезный и неиспользуемый уже обсуждалось рабочей группой. Хуй знает, правда, приняли или нет, но дело к тому шло.

> чтобы предотвратить гуляние по памяти в случае отсутствия в конце строки нуль-терминатора
Не только. Там есть и другой контроль границ. Например, когда строка не влезла в буфер целиком, в Си она обрезается, а у Microsoft возникает constraint violation. В любом случае, все, что есть в Annex K без возможности выбора, нормальными людьми реализуется по необходимости максимум двумя дополнительными строками кода. Просто майкрософт считает, что это круто, когда нужно повторять повторять размер буфера для memcpy_s().
Аноним 21/11/18 Срд 22:59:53 1299291397
JN9wk8OgfRg.jpg (73Кб, 740x740)
740x740
Привет всем С господинам! Остальные лесом>>>

Подскажите, видел кто в открытом доступе эту книгу, хочу с ней познакомиться!
Аноним 22/11/18 Чтв 01:24:18 1299363398
>>1299291
на рутреке только по плюсам, джаве, шарпе..
Аноним 22/11/18 Чтв 05:26:51 1299393399
Аноним 22/11/18 Чтв 07:51:24 1299407400
>>1299393
#include <stdio.h>
#include "Fuck_your_mather.h"

void fuck_mather(){
FUNC_FUCK_YOUR_MATHER == TRUE;
}

void main(int argc, char *arhv[]){
while(TRUE){
(FUNC_FUCK_YOUR_MATHER == TRUE) ? printf("Suck me dick bitch!/n") : void fuck_mather();
}
}
Аноним 22/11/18 Чтв 08:06:01 1299409401
Анончик, где есть интересные задания по Си? Недавно выучил синтаксис, хочу поделать что-то.
Хочется что-то интересное и полезное
Аноним 22/11/18 Чтв 08:18:12 1299412402
>>1299409
>интересное и полезное
пиши малварь
Аноним 22/11/18 Чтв 08:57:14 1299417403
Аноним 22/11/18 Чтв 09:11:46 1299419404
>>1299409
вливайтся в опенсорс, епт
не шучу
не на гитхаб иди
у того же гнома сотни проектов, систем и программ которые надо доделывать и дорабатывать
https://developer.gnome.org/
Аноним 22/11/18 Чтв 17:12:06 1299660405
>>1287378 (OP)

Деды, не бейте, лучше обоссыте, но ответьте на вопрос! Нужна библиотека простой 2d графики для сишки. Ну грубо говоря чтобы там можно было визуализировать всякие простые физические процессы например молекула отскочила от стенки сосуда лол, какие-нибудь аналоговые часики сделать, солнечную систему, такого вида Что посоветуете?

Обязательно должно работать в линупсе и желательно, чтобы это была для него родная библиотека.
Аноним 22/11/18 Чтв 18:18:31 1299688406
>>1299660
>Что посоветуете?
Ешь кашу и слушайся родителей
Аноним 22/11/18 Чтв 18:57:26 1299715407
Аноним 22/11/18 Чтв 18:59:05 1299718408
>>1299715

Мне кажется это через чур сложная штука для моих задач. Я думал может взять какое-нибудь GTK+, там же есть вроде виджеты, в которых можно рисовать? Но что-то литературы по gtk3 вообще нет, все по gtk2.
Аноним 22/11/18 Чтв 23:34:27 1299851409
Сергей Серпухин[...].jpg (11Кб, 274x184)
274x184
Меня притягивает С, но отпугивает то, что в какой-то момент я неизбежно столкнусь с СПО.
Но проблема в том, что СПО на 99,9% состоит из говна (на самом деле на 100%, но не будем категоричны).
Аноним 22/11/18 Чтв 23:38:17 1299855410
>>1299851
Из моего опыта следует, что ты не прав.
Аноним 22/11/18 Чтв 23:44:39 1299858411
>>1299851
Из 100 не СПО, СПО где-то 98,7%
Аноним 23/11/18 Птн 01:20:01 1299930412
blob (4Кб, 639x143)
639x143
друзья, помогите пожалуйста. учусь в школке и делаю какие-то тупые задачи (c99), но столкнулся вот с некоторой проблемой. задача - считать n строк, как-то там обработать, вывести. при этом использовать динамическую память. проблема внезапно на этапе считывания, причем понять в какой строчке происходит краш не могу. код -- hastebin.com/ibuwucoqif.cpp. при вводе корректных данных типа 4 принтит err1, но не принтит err2. если добавляю в аргумент ф-и scanf_string что-то типа (+ printf("err3\n") - printf("err4\n")), то указатель я как бы не двигаю, но эти строчки прога принтит (т.е. аргумент высчитывается без краша, так ведь?). тогда где вообще может краш произойти, если сразу по вызову ф-и scanf_string должна напечатать err2? короче идейно не понимаю в чем проблема и надеюсь на помощь от богов-профессионалов
Аноним 23/11/18 Птн 01:41:39 1299943413
Аноним 23/11/18 Птн 01:44:37 1299944414
>>1299930
Охуительный у тебя враппер конечно
Аноним 23/11/18 Птн 01:49:41 1299949415
>>1299930
Аллоцировать 9000001 байт на каждом вызове функции это гениально.
Аноним 23/11/18 Птн 12:35:18 1300080416
>>1299949
Хихикнул.
посоветуйте ему, что поменять, мне его жалко
Аноним 23/11/18 Птн 17:37:50 1300211417
>>1299855
Все знают про тысячи полуграмотных индусов, пишуших платное ПО неземного качества?
Так вот СПО пишут те же индусы, только в свободное время, бесплатно и с результатом, за который никто не отвечает.
Все лучшее СПО (те самые 0,01%) суть бывшее платное, чуть допиленное сообществом (кроме GIT). Либо крякнутое. Крякнутое платное ПО - лучшее по качеству, не знаю почему так получается.
Например, некоторые упоротые сравнивают LibreOffice и MS Office.
Казалось бы, как можно сравнивать? Вообще разные весовые категории. Но не стесняются и сравнивают.
Аноним 23/11/18 Птн 17:38:49 1300212418
>>1299930
scanf умеет динамически аллоцировать память и возвращает указатель, потом нужно юзать free на поинтер
делой man scanf примерно в конце было даже с примером
Аноним 23/11/18 Птн 17:40:49 1300214419
>>1300212
char *p;
int n;
errno = 0;
n = scanf("%m[a-z]", &p);
if (n == 1) {
printf("read: %s\n", p);
free(p);
} else if (errno != 0) {
perror("scanf");
} else {
fprintf(stderr, "No matching characters\n");
}
Аноним 23/11/18 Птн 17:41:09 1300215420
>>1300211

Ты вообще не разбираешься в вопросе.

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

СПО в основном пишут богатые белые представители загнивающего запада, у которых есть свободное время на хобби и не стоит вопрос сдохнуть с голода.
Аноним 23/11/18 Птн 17:43:53 1300217421
>>1300215
>СПО в основном пишут богатые белые представители загнивающего запада
Да ну?? Почитай любые вопрос-ответ треды, каждый первый ответ - ДИНЕШ и РАДЖЕШ
Но.. Если ты прав.. Пиздец. Все гораздо хуже чем я думал.
Аноним 23/11/18 Птн 17:51:33 1300219422
>>1300217

Раджешам семью кормить надо, какое им спо?
Аноним 23/11/18 Птн 19:12:47 1300258423
Prisoncopycopyc[...].jpg (60Кб, 500x376)
500x376
>>1300219
Какая семья в 13 лет??
Аноним 23/11/18 Птн 19:47:08 1300269424
>>1300211
индусы очень мало делают вклада в спо
даже русских там больше чем их
основной вклад - белые европейцы и сша, мужчины
черные, желтые и бабы вообще мало кода пишут, это реальность
Аноним 23/11/18 Птн 19:48:17 1300270425
>>1300269
хотя насчет желтых погорячился, китайцы и японцы ебашат спо тоже чутка
Аноним 23/11/18 Птн 22:25:45 1300348426
Аноним 23/11/18 Птн 22:26:59 1300349427
Аноним 23/11/18 Птн 23:33:27 1300366428
Аноним 24/11/18 Суб 03:55:22 1300392429
Ребят, а что за debuger во всех компиляторах, если в двух словах?
Еще видел онлайн компилятор, который код C показывает в ассемблер виде, но уже не нахожу ссылку
Аноним 24/11/18 Суб 04:10:05 1300394430
Аноним 24/11/18 Суб 09:58:49 1300416431
Аноним 24/11/18 Суб 10:13:16 1300420432
image.jpeg (206Кб, 640x633)
640x633
>>1300394
> godbolt

Божественный хуй, ну и имя доя домена кек
Аноним 24/11/18 Суб 10:23:53 1300424433
15384124032890.jpg (121Кб, 500x504)
500x504
Аноним 24/11/18 Суб 11:59:07 1300448434
>>1300420
а представь, как мужику живется с такой фамилией
Аноним 24/11/18 Суб 18:24:05 1300564435
>>1299167
Ты охуеешь наверное, но мне на днях ещё и 40 исполнилось. Имею твердое желание выкатиться в embedded джуном.
Аноним 24/11/18 Суб 18:40:05 1300571436
>>1300564
Ну тогда начинать с x86 - только время терять.
Аноним 24/11/18 Суб 19:38:13 1300587437
>>1300571
Сишечка - она везде сишечка, какая разница.
Аноним 24/11/18 Суб 19:59:24 1300594438
>>1300571
Господин Тененбаум?! Как вас сюда занесло?
Аноним 24/11/18 Суб 20:11:14 1300604439
>>1300587
Ну он же написал:
> Собираюсь ковыряться близко к железу.
> Имею твердое желание выкатиться в embedded
Одной лишь сишечкой в embedded не обойтись, всегда будут всякие специфичные для платформы вещи, да и саму платформу понимать стоит, если цель - не хелловорды не только светодиодами мигать. А что касается x86, то железо, используемое там, либо очень сложно программировать для начинающего (современное), либо давно устарело и с embedded не пересекается вообще. Лучше сразу взять какую-нибудь малинку, стмку или даже аврку на худой конец, чем разбираться в давно никому не нужных тонкостях работы 8272A.
Аноним 24/11/18 Суб 21:32:20 1300639440
>>1300604
Спасибо за ответ!
Это я спрашивал.
То есть ты даже 286 не советуешь?
А с чего начать? У меня есть такое ощущение, что начинать с Малинки вместо контроллера, это как вместо С учить сразу С#.
Аноним 24/11/18 Суб 22:16:19 1300663441
>>1300639
> что начинать с Малинки вместо контроллера, это как вместо С учить сразу С#
Можно дрова в линуксе писать, а можно экономить байты. Эмбеддед - это не только микроконтроллеры с килобайтом рамы.

Си лучше учить на своей пеке, а не ебаться с кросскомпиляторами и удаленной отладкой. А поиграться со знаниями, почерпнутыми из Танненбаума, можно на qemu-system-xxx, реальная железка не нужна, особенно поначалу.

> То есть ты даже 286 не советуешь?
Можно, конечно, листать пыльного Джордейна, писать демосцены 16-битным кодом, но зачем? Что ты с этими знаниями делать собираешься? Ну ладно в российских вузиках мсдос в студентов пихают, потому что преподы ничего другого не знают. Студенты сдали и забыли, а самостоятельно-то зачем в это вляпываться?
Аноним 24/11/18 Суб 23:10:08 1300703442
>>1300663
Здоровья и счастья тебе.
Аноним 25/11/18 Вск 03:51:45 1300774443
Пытался написать программу, которая находит вводимое число в водимом массиве и указывает позицию элемента в массиве, но непонятно откуда перед итоговыми числами появляются нули. Кто-нибудь, объясните откуда нули там незначащие нули.
#include <stdio.h>

int main()
{
int M[100000], n, i = 0, x;
int a=0;

scanf_s("%i %i", &n, &x);

while (i < n) {
i=i+1;
scanf_s("%i", &M);
}
i = 0;
while (i < n) {
i = i + 1;
if (x == M) { a = a + 1; printf("%i", i); }
if (a == 0) printf("%i", a);
}
scanf_s("%i %i", &n, &x);
return 0;
}
Проблема проявляется только когда я пытаюсь добавить в программу проверку на отсутствие числа в массиве, чтобы выводился 0.

Программа работает так: вводишь размер массива, через пробел вводишь искомое число. Далее через энтер заполняешь позиции в массиве, в одной из которых может быть или не быть искомое число. Если число есть, выводится позиция числа в массиве, если числа нету - 0.
Аноним 25/11/18 Вск 04:12:24 1300778444
>>1300774
Ладно, я сам нашёл ошибку. Тема закрыта.
Аноним 25/11/18 Вск 14:30:31 1300902445
Хотел написать простенький mymallok(), пишу под Windows, включил <stdlib.h>, <stdio.h>, <stdint.h>, <stdbool.h>, <assert.h>, sys/types.h>, <unistd.h>, <string.h>, <windows.h, но компилятор так и не видит декларацию brk(), sbrk(), mmap(). Что я` не так?
Аноним 25/11/18 Вск 16:01:29 1300955446
>>1300902
Ты unix'овые вызовы пытаешься использовать. Лучше поставь linux-виртуалку и там же и пиши.
Аноним 25/11/18 Вск 16:06:42 1300959447
>>1300902
Под Windows у тебя есть VirtualAlloc()/VirtualFree(), их и используй. Ну и еще Pelles C поддерживает _mmap(), в аллокаторе можно им одним обойтись.
Аноним 25/11/18 Вск 16:16:28 1300962448
>>1300955
>>1300959
Ясно, спасибо. Я думал это стандартные функции Си.
Аноним 26/11/18 Пнд 18:35:08 1301473449
Мой план на ближайшие 9 месяцев:
(В примерно хронологическом порядке)

C Primer Plus -- Stephen Prata
Data Structures Using C -- Langsam, Augenstein, Tenenbaum
Algorithms in C -- Robert Sedgewick
Structured Computer Organization -- Andrew Tanenbaum
Modern Operating Systems -- Andrew Tanenbaum
Computer Networks -- Andrew Tanenbaum

Что потом - не знаю, надеюсь там будет видно.
Цель - эмбеддед/гейм/.... То есть поближе к железу, плюс физика, механика, матрички, вот это вот все.
Аноним 26/11/18 Пнд 18:39:32 1301474450
image.png (765Кб, 600x600)
600x600
Аноним 26/11/18 Пнд 18:47:16 1301480451
>>1301473

Если ты со всем этим будешь разбираться, а не просто ЧИТАТЬ, то это минимум года на 2.
Аноним 26/11/18 Пнд 19:50:37 1301497452
>>1301480
У меня уже есть вышка, я инженер-механик. Мне уже много лет.
Аноним 26/11/18 Пнд 20:25:58 1301514453
Аноним 26/11/18 Пнд 20:31:38 1301519454
>>1301497
> У меня уже есть вышка, я инженер-механик. Мне уже много лет.

Ну это типа не в плюс, а в минус при обучении. Потому что если ты собрался учить сишку с нуля, очевидно в вузике ты совсем не погроммировал.
Аноним 26/11/18 Пнд 20:38:00 1301523455
>>1301514
После вдумчивого изучения направлений и доступных материалов для самостоятельной работы, а так же подобных универститетских и колледжских програм, пришел к данному списку.
Это минимум, база, после которой можно, собственно, думать о вкатывании.
Я ориентируюсь на где-то год. Но если возьмет 2 то так тому и быть. К сожалению, я не вижу других вариантов.

С благодарностью приму поправки и советы от бывалых.
Аноним 26/11/18 Пнд 20:41:25 1301526456
>>1301523

Ну тащемта для вкатывания гораздо важнее практический опыт, чем какие-то теоретические знания. Если ты не знаешь и трети, что написано в этих книгах, но имеешь какой-то более-менее полезный пет-прожект, для работодателя ты будешь на порядок интересней теоретика, прочитавшего тонны книжек, но не имеющего никакого опыта.
Аноним 26/11/18 Пнд 20:43:16 1301527457
>>1301519
Ну почему же. Я программировал, но больше функции для вычислений. Использовал С как продвинутый калькулятор так сказать.
Ну и MatLab в основном.
Я довольно быстро (как мне кажется) схватываю материал, единственное препятствие для меня сейчас - нехватка свободного времени.
Скачал лекции про ОС, слушаю пока еду на работку.
Аноним 26/11/18 Пнд 20:47:38 1301528458
>>1301526
>для вкатывания гораздо важнее практический опыт
Абсолютно согласен, через год будет понятно как подступиться к прожекту, тем более идейки у меня есть.
Аноним 26/11/18 Пнд 20:55:15 1301530459
>>1301523
к&r читани корка от корки, все упражнения сделай, не игнорируй приложение, медитируй над ним, это нужно
по структурам и алгоритмам ебани пару курсов, хотя бы на том же спепике, плюс заебашь 200-250 (больше нахуй не надо) алгоритмических задач хотя бы на том же hackerrank или на любом подобном, десятки их щас
дальше уже ходи по собесам, вкатывайся за еду бля
а так ты скорее с голоду сдохнешь читая весь тот лольный список что ты себе составил
Аноним 26/11/18 Пнд 21:01:13 1301538460
>>1301530
>по структурам и алгоритмам ебани пару курсов
Я реально быстрее учусь по книгам. Если бы было время смотреть курсы, я бы за это время уже закончил свой лольный список.
Аноним 26/11/18 Пнд 21:01:56 1301540461
Аноним 26/11/18 Пнд 21:02:35 1301541462
хотя вкатываться в 40 лет в геймдев
о хо хо
Аноним 26/11/18 Пнд 21:04:16 1301544463
>>1301538
>
я не про видеоуроки от васянов на ютубе
я про курсы где есть упражнения и задания, где надо делать кодинг и где есть проверяющая система
от того что ты там че то читаешь или смотришь в голове остаешься 0
Аноним 26/11/18 Пнд 21:06:38 1301545464
>>1301540
вы, кстати, чутка неправильно оборот используете
"пет прожект" это вообще то когда сформировавшийся кодер у которого есть уже основная работа по выходным ебашит что-то приятное ему вдобавок
это как у линукса есть собственно операционка, и пет-прожект это он на qt (лол) пилит какую-то приложуху для учета статистики дайвинга
Аноним 27/11/18 Втр 01:54:58 1301649465
В тред призываются опытные системные прогромизды.
Какие вилки у мидлов-сеньеров системных программистов в ДС? Интересуют крупные компании типо Яндекса, мейла, касперского и тд.
Аноним 27/11/18 Втр 05:43:05 1301671466
Аноним 27/11/18 Втр 06:29:49 1301672467
>>1301649
120-250к
и, вообще то есть глассдор, всегда можешь глянуть там
Аноним 27/11/18 Втр 17:07:09 1302037468
>>1300604
А вот такой вопрос.
Микропроцессор или микроконтреллер? С чего лучше начинать?
Аноним 27/11/18 Втр 21:15:32 1302183469
Привет байтовелители, хочу вкатиться в сириоз девелопмент.
Хочу читать этот список >>1301473, но вместо этого решил читать /pr.
Какие подводные?
Аноним 28/11/18 Срд 00:36:54 1302267470
>>1301672
О, спс, не знал про этот сайт. Просто недавно апнули с джуна до мидла, спрашивали сколько я хочу (получилось 130к чистыми, 150 gross), теперь думаю не продешевил ли.
Аноним 28/11/18 Срд 21:36:47 1302656471
Посоветуйте годные блоги, где публикуются статьи о программировании на Си (желательно англоязычные). Можно даже заброшенные блоги, но с доступным архивом для чтения.
Аноним 28/11/18 Срд 21:38:36 1302658472
Аноним 28/11/18 Срд 23:36:40 1302713473
>>1301523
Хуйня, не ссы главное сиди днями занимайся этим и перерывы делай. Хотя кому я пизжу, сам сижу каждый день марафоню.

Не... Нужно отвлекаться все же, на изучение самой системы, использования Сишки для упрощения жизни на Шлинуксе или там, ради себя ебни бсдшку и поизучай параллельно. Этот мир не только об одном языке, заебешься. Его нужно использовать, тебе тот же Прата скажет тоже самое, что развитием нужно заниматься используя язык.

Я угараю еще как многие на шлинукс приходят и игнорируют баш скрипты.
Аноним 28/11/18 Срд 23:37:47 1302714474
>>1302713
Еще на Гитах сидеть код разбирать. Не надо одни книжки читать, ебаш форумы. Ну я говорю просто как я делал.

Алсо туториалы - Нахуй. Чем ты отличаешься от других тогда, если ебашишь одно и тоже?
Аноним 28/11/18 Срд 23:38:43 1302715475
С туторов можно спиздить что-то, но туторы должны быть бесплатные, иначе это просто способ навариться на ванаби и кста код у этих УЧИТЕЛЕЙ ЕБАНЫХ говнище такое позорное.
Аноним 28/11/18 Срд 23:39:10 1302717476
Но над быть осторожным, чтобы не кончить как Терри Дейвис...
Аноним 28/11/18 Срд 23:40:36 1302719477
Аноним 29/11/18 Чтв 11:46:18 1302978478
>>1302713
>>1302714
>>1302715
А ты сам всё ещё учишь или может уже успешный и на работу таки устроился?
мимо
Аноним 30/11/18 Птн 04:05:18 1303432479
Аноны, а помогите найти что-нибудь прочитать про кросс-компиляцию с x86_64 в ARM. Вот у меня есть gcc и есть телефон, нак который я могу скинуть какой-нибудь код. Как компилировать?
Аноним 30/11/18 Птн 05:26:27 1303437480
>>1302978
Я поехавший ванаби который каждый день пишет на Си и мечтает в будущем переехать на ассемблер, планирую в сфере хакинга использовать.

Щас тема интересная, где типа вирусы можно писать на уровне железа.
Аноним 30/11/18 Птн 09:37:11 1303469481
>>1303437
Это конечно здорово, но ты деньги уже начал зарабатывать?
Аноним 30/11/18 Птн 19:42:26 1303837482
>>1303432
> Вот у меня есть gcc
Кросскомпилятор для AArch64 или обычный для x86-64? Если обычный, то тебе нужен кросскомпилятор. Качаешь http://releases.linaro.org/components/toolchain/binaries/ распаковываешь, компилируешь. А еще лучше качаешь NDK: https://developer.android.com/ndk/downloads/, распаковываешь (компиль в папке toolchains, сисрут внезапно в sysroot), компилируешь.

> Как компилировать?
Точно так же, как обычно, только с правильным --sysroot.
Аноним 30/11/18 Птн 22:37:30 1304023483
Аноним 01/12/18 Суб 04:10:02 1304128484
Аноним 01/12/18 Суб 11:13:43 1304184485
>>1304023
Понятно.ничего удивительного
Аноним 01/12/18 Суб 13:14:35 1304240486
>>1304184
А хуль понятного то? Найди мне работу. Я уже заебался на гите и гитлабешнике сидеть.
Аноним 01/12/18 Суб 14:26:56 1304272487
>>1304240
Хуй знает, попробуй сам найди, я вообще дрочил полгода плюсы, а потом устроился на работу, сейчас ебашу драйвер на си.
Аноним 01/12/18 Суб 19:50:53 1304399488
Почему ничего не выводит?
wchar_t wtext[] = L"строка";
wprintf(L"%s\n", wtext);
Аноним 01/12/18 Суб 20:13:38 1304411489
Аноним 01/12/18 Суб 20:26:59 1304421490
Аноним 01/12/18 Суб 21:03:15 1304459491
>>1304421
Вызывал перед этим обычный printf? Покажи полный код.
Аноним 01/12/18 Суб 21:08:50 1304464492
>>1304459
Нет, это полный код.
Аноним 01/12/18 Суб 21:52:03 1304502493
>>1304464
Винда, MSVC или MinGW, которые линкуются к сломанной майкрософтом CRT, которая хочет %S? Больше идей нет.
Аноним 01/12/18 Суб 21:53:45 1304503494
Аноним 01/12/18 Суб 22:05:31 1304508495
>>1304503
У тебя вообще ничего не печатало? Локаль выставлял?
#include <wchar.h>
#include <locale.h>

int main(void)
{
setlocale(LC_CTYPE, "ru_RU.UTF-8");
wchar_t wtext[] = L"строка";
wprintf(L"%ls\n", wtext);
}
Аноним 01/12/18 Суб 22:28:52 1304520496
>>1304508
setlocale помогло.
Почему к стати если вставить обычный printf, то перестает работать?
Аноним 01/12/18 Суб 22:52:16 1304530497
>>1304520
Потому что у потока есть ориентация, и если ты однажды пишешь в него wide, ты больше не можешь mbcs. И наоборот. Можно только явно менять ориентацию с помощью fwide. Связано это с особенностями многобайтовых кодировок, в том числе и UTF-8, но особенно всяких Shift-JIS.
Аноним 02/12/18 Вск 02:49:51 1304608498
Сап аноны. Помогите найти ключ gcc, который отключает препроцессор. То есть я отдельно вызываю препроцессор, а только потом хочу попытаться вызвать gcc, но он всегда первым делом снова прогоняет препроцессор, а мне это не надо.
Аноним 02/12/18 Вск 03:14:05 1304610499
>>1304608
> То есть я отдельно вызываю препроцессор
Генерируй .i, а не .c.

> Помогите найти ключ gcc, который отключает препроцессор
-x cpp-output, но вариант с расширением правильнее.
Аноним 02/12/18 Вск 03:32:54 1304614500
>>1304610
Тону чая тебе, антош.
ПЕРЕКАТ Аноним # OP 03/12/18 Пнд 05:56:33 1305159501

Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Топ тредов
Избранное