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

Check this out!


<<
Назад | Вниз | Обновить тред | Автообновление
502 | 23 | 175

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

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

Что читать:

- Классика от Отцов: 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 помогает читать сложные сишные декларации.

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

- №28: https://arhivach.cf/thread/339326/
- №29: https://arhivach.cf/thread/347271/
- №30: https://arhivach.cf/thread/366174/
Аноним 09/06/18 Суб 20:37:09  1206640
Посоны, в сишечке есть дефолтный пакет для разреженных матриц?
"Дефолтный" в смысле как лапак для обычных. То есть любой человек, занимающийся матричными вычислениями, почти наверняка будет использовать его и блас.
Аноним 09/06/18 Суб 23:01:18  1206746
>>1206640
https://people.sc.fsu.edu/~jburkardt/c_src/csparse/csparse.html
Как тебе?
Аноним 12/06/18 Втр 12:21:21  1208264
тритийнах
Го в смузийную.
Аноним 12/06/18 Втр 12:55:25  1208281
У меня есть драйвер, я хочу его на виртуалке запустить.
Я скачал DbgView и KmdManager.
Поставил на виртуалке Windows 7, загрузился через F8 отключил проверку цифровой подписи.
Использую WDK 7.1, получаю .sys файл, открываю DbgView->Capture Cernel messages, открываю KmdManager делаю Register (succes), делаю Run
Дальше KmdManager пишет succes, но DbgView при этом молчит (а должен напечатать "Hello World"), а через секунда появляется окно, в котором Windows ругается на отсутствие цифровой подписи.

Что я делаю не так?
Аноним 12/06/18 Втр 13:13:49  1208292
>>1208281
Бля,
сейчас на Windows 7 - 32 запустил драйвер (до этого была 64), DbgView все равно молчит, но зато хоть сообщение об ошибке не появлется.
Сука, ничего не понимаю.
Аноним 12/06/18 Втр 13:25:45  1208294
>>1208292
>>1208281
И на 32 и на 64 DbgView перестал молчать после установки галочки "Enable Verbose Kernel Output" (понятия не имею что это значит)

Но мне все равно не понятно, почему в 64 версии он ругается, что "Системе Windows требуется драйвер с цифровой подписью", а в 32 - нет.
Кто-нибудь может объяснить?
Аноним 12/06/18 Втр 15:56:30  1208396
Я худею с MSVC. В общем - играюсь ключами компилятора cl.exe и смотрю сгенерированный компилятором ассемблерный код. Использую набор небольших самописных тестовых программ. Добил меня ключ /Ox - максимальная оптимизация. Смысл в том, что компилятор свернул одну из тестовых программ до двух ассемлерных строк -
mov eax, -2
ret 0

Господи, что происходит? Компилятор нашёл все неизменяемые переменные, прогнал их через код и заоптимизировал всё нафиг. Полностью! Ну как так жить?

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

if( myvar-- < 0)
break;

К слову сказать - с выключенной оптимизацией компилятор такую чушь городит - заводит лишнюю переменную на стеке и реализует эту операцию очень неоптимально.
Аноним 12/06/18 Втр 21:05:38  1208610
>>1208396
> с выключенной оптимизацией компилятор такую чушь городит
> заводит лишнюю переменную
В смысле, кладет в стек, а потом снова достает, выполняет операцию и кладет обратно? Это чтобы source-level отладчику было удобнее.
Аноним 13/06/18 Срд 15:39:07  1209066
Привет анон, подскажи возможно ли в языке си создание указателя указывающего на указатель? Иными слова я могу создать указатель на int - int p или на float - float p но могу ли я создать переменную указывающую на указатель?
Аноним 13/06/18 Срд 15:40:37  1209067
>>1209066
Блять звездочки не указываются, суко
Аноним 13/06/18 Срд 15:48:35  1209073
>>1209066
да, джве звездочки
Аноним 13/06/18 Срд 19:14:41  1209236
>>1209066

int var = 3;
int pvar = &var;
int
*ppvar = &pvar;
Аноним 13/06/18 Срд 19:15:56  1209239
>>1209236
Блин, звездочки скушаны. :(
Аноним 13/06/18 Срд 20:11:34  1209290
Как определить какая платформа у пользователя?
Аноним 13/06/18 Срд 20:15:06  1209294
>>1209290
#ifdef какая-нибудь специфическая платформенная херня
Аноним 13/06/18 Срд 20:16:15  1209295
>>1209294
Спасибо.
Аноним 13/06/18 Срд 20:24:54  1209300
>>1209294
Считается true сделать один вариант программы и по надобности компилировать под нужную платформу или делать изменения в программе и компилировать?
Аноним 13/06/18 Срд 20:32:43  1209307
>>1209300
Платформенно-зависимые вещи выносишь в отдельные файлы (или даже модули), остальное единое для всей программы. Грубо говоря:
cc foo.c bar.c windows_feature.c
cc foo.c bar.c linux_feature.c
(а feature.h один для всех поддерживаемых платформ). Так не всегда получается, но желательно к этому стремиться.
Аноним 13/06/18 Срд 20:48:53  1209311
>>1209307
Спасибо. В GTK это все автоматом устроено, там все функции GUI кроссплатформенны?
Аноним 13/06/18 Срд 21:09:22  1209330
>>1209311
Да, посмотри в https://github.com/GNOME/gtk/tree/master/gdk/ - там как раз отдельные папочки под конкретные платформы.
Аноним 13/06/18 Срд 21:42:51  1209355
Есть ли смысл использовать типы данных меньше int?
Аноним 13/06/18 Срд 21:43:32  1209356
>>1209355
char, например)0000)
Аноним 13/06/18 Срд 21:45:22  1209358
>>1209356
Ну засунули мы его в регистр, да? И там дохуя свободного места, битов.
Аноним 13/06/18 Срд 21:48:18  1209360
>>1209355
Для сетевых задач например да. Если данные, передаваемые по сети, можно сериализовать, то их сериализовывать следует в отличие от данных которые никуда с машины не уходят и их нужно обрабатывать без геморроя.
Аноним 13/06/18 Срд 21:50:29  1209364
>>1209360
То есть даже при упаковке структур лучше просто int делать?
Аноним 13/06/18 Срд 21:52:50  1209367
>>1209364
Если ты работаешь на локальной машине, никаких упаковок делать не надо. Если упаковываешь, то все выравнивания идут по пизде, и в упакованных данных можно оперировать типами меньшими чем машинное слово, не боясь растерять скорость которой и так нет.
Аноним 13/06/18 Срд 21:58:02  1209371
>>1209367
Спасибо. Тогда можно сейчас кодировать символы в 8 байтов?
Аноним 13/06/18 Срд 22:00:19  1209375
>>1209358
Читаемость.
Аноним 13/06/18 Срд 22:02:42  1209379
>>1209375
#define char int
Шах и мат.
Аноним 13/06/18 Срд 22:04:08  1209381
>>1209379
> define
> шах и мать читаемости
Действительно.
Аноним 13/06/18 Срд 22:08:07  1209386
>>1209381
Плюсоблять, вали отсюда.
Аноним 13/06/18 Срд 22:08:30  1209387
>>1209386
Как ты узнал, что я хочу учить плюсы?
Аноним 13/06/18 Срд 22:09:20  1209390
>>1209387
Я таких как ты за версту чувствую.
Аноним 13/06/18 Срд 22:11:16  1209393
>>1209371
Что делать?
Аноним 13/06/18 Срд 22:11:18  1209394
>>1209390
Я ещё ногтем к крестам не прикасался.
Дефайны хреначу через строку.
В каждой функции, прямо между аргументами.
Иногда забываю, что пишу, начинаю рекурсивно один в один заворачивать, пока все *.c файлы до пары макросов не сожму.
Экспанд у меня длится больше компиляции на порядки.
Аноним 13/06/18 Срд 22:13:55  1209396
>>1209394
Но ты душой крестовик.
Только не читай о inline в плюсах
Аноним 13/06/18 Срд 22:17:14  1209400
>>1209393
На налима пойти наконец, весь год решаюсь.
Аноним 13/06/18 Срд 22:17:16  1209401
>>1209396
Я если начну в скором времени кресты, буду их главаря читать.
Бьерн Страуструп типа
Программирование. Принципы и практика использования C++. Это же типа как у нас K&R?
2016, вроде свежий, главное, чтобы >2011, да?
Аноним 13/06/18 Срд 22:19:41  1209402
>>1209401
Ну, как сказать. Читай только выборку, у него там воды на два косаря страниц унылого текста с размазанной сутью.
Я вообще с плюсов для самоваров начинал.
Аноним 13/06/18 Срд 22:20:43  1209404
>>1209402
Мне главное, чтобы наиболее полное изложение языка сразу в одной книге было.
Я думаю, уж создатель языка асилил.
Аноним 13/06/18 Срд 22:23:45  1209406
>>1209404
Вот у тебя нервы. Если дочитаешь, то через месяцов 4 отпишись, хочу посмотреть, что с тобой станет.
Аноним 13/06/18 Срд 22:26:48  1209410
Нет в стандартной либе потоков?
Аноним 13/06/18 Срд 22:28:30  1209412
>>1209410
Нинужны, оставь это для ОС
Аноним 13/06/18 Срд 22:30:15  1209413
>>1209410
Есть, опциональные. Поэтому почти все забили на их реализацию.

Есть pthreads.
Аноним 13/06/18 Срд 22:30:21  1209414
>>1209412
Сделать что ли несколько процессов средствами ОС API?
Аноним 14/06/18 Чтв 21:23:38  1209985
fopen("/home/username/file.conf", "w"); возвращает NULL, в errno лежит no such file or directory, нагуглить я не смог нихуя, загуглите за меня пожалуйста
Аноним 14/06/18 Чтв 21:44:13  1210001
>>1209985
Ты не поверишь!
Аноним 14/06/18 Чтв 22:07:12  1210023
>>1210001
Не выдавай!
Аноним 14/06/18 Чтв 22:13:23  1210028
image.png (9Кб, 807x59)
>>1210001
файла точно нет, но вот это написано в man, чяднт?
Аноним 14/06/18 Чтв 22:23:37  1210036
>>1210028
fopen может вернуть твой ENOENT в наследие от open().
open возвращает ENOENT по след. причинам:
> O_CREAT is not set and the named file does not exist. Or, a directory component in pathname does not exist or is a
dangling symbolic link.
> pathname refers to a nonexistent directory, O_TMPFILE and one
of O_WRONLY or O_RDWR were specified in flags, but this kernel
version does not provide the O_TMPFILE functionality.
Отметаем из этого либопроблемы (на уровне stdio) и остаётся:
A directory component in pathname does not exist or is a dangling symbolic link. Pathname refers to a nonexistent directory


Аноним 14/06/18 Чтв 22:38:39  1210048
>>1209066
Да
Указатель на указатель на указатель, указатель на массив указателей, массив указателей на указатели массовов указателей... В общем, можешь задрочить MMU и мозг как пожелаешь.
Аноним 14/06/18 Чтв 22:45:52  1210054
>>1209985
> no such file or directory
Ты тралль?
Аноним 15/06/18 Птн 17:48:12  1210520
В винде есть по умолчанию стандартная библиотека С? Или мне статически собирать?
Аноним 15/06/18 Птн 17:57:32  1210522
дейтел хорош
Аноним 15/06/18 Птн 17:57:44  1210523
>>1210520
Ты немного объебался.
Аноним 15/06/18 Птн 18:31:47  1210544
>>1210520
Что с тобой?
Аноним 15/06/18 Птн 18:37:08  1210552
>>1210520
НУ ЯДРО ВИНДЫ ЖЕ НА СИ ЗНАЧИТ ЕСТЬ))))))))))))))))))))))
Аноним 15/06/18 Птн 19:23:55  1210579
Почему работает функция system без подключения библиотеки stdlib.h? В исходнике из хедеров только stdio.h. Пишу в VS 2017.
И есть какая-то замена system("cls") в си? Не хочется передавать управление. clrscr() - ф-я плюсов
Аноним 15/06/18 Птн 19:25:57  1210580
>>1210579
Ты не поверишь

> system("clear")

Аноним 15/06/18 Птн 19:34:14  1210585
>>1210580
И зачем ты мне написал, как надо чистить консоль в линуксе? Я имел в виду, есть ли какая-то функция, аналогичная clrscr() в си. system не нравится тем, что юзает командный процессор, соответственно, стандартная очистки консоли нет.
Также
>Почему работает функция system без подключения библиотеки stdlib.h? В исходнике из хедеров только stdio.h. Пишу в VS 2017.
?
Аноним 15/06/18 Птн 19:34:57  1210586
>>1210585
>стандартная
стандарта
быстрофикс
Аноним 15/06/18 Птн 20:18:48  1210603
Аноны,кто-то работал с lsusb? мне нужна помощь с этой либой.Не бесплатно,отпишите в телеге @mikuhann
Аноним 15/06/18 Птн 20:54:53  1210613
шалом
Аноним 15/06/18 Птн 21:37:10  1210618
>>1210520
Смотря чем собираешь. MinGW линкуется к MSVCRT.DLL, которая есть по умолчанию, плюс втыкает статически то, чего в MSVCRT нет (семейство printf, умеющее в C99-спецификаторы, например). Студия линкуется к поддерживаемой ей CRT, и если только это не Visual Studio 6.0, нужные рантаймы придется таскать с собой или устанавливать.

>>1210579
> Почему работает функция system без подключения
Каждый тред одни и те же вопросы. >>1200083

> И есть какая-то замена system("cls") в си?
Нет. В Си нет понятия терминала, не то что консоли. В винде можешь проверить, что ввод-вывод не редиректнули, получить хэндл консоли и сделать FillConsoleOutputAttribute.

>>1210603
Ты тредом ошибся. Но раз уж ты спросил, с lsusb работать очень просто:
lsusb -vvv
Аноним 16/06/18 Суб 10:49:47  1210819
1505926351672.gif (917Кб, 962x582)
gcc or clang?
Аноним 16/06/18 Суб 10:57:04  1210827
>>1210819
Clang
Аноним 16/06/18 Суб 12:12:35  1210875
>>1210827
почему?
Аноним 16/06/18 Суб 12:55:43  1210902
>>1210819
Тот, который используется в качестве системного компилятора.
Linux - gcc
FreeBSD/OSX - clang
Для совместимости с системными C++ библиотеками (включая runtime компилятора)
Аноним 16/06/18 Суб 13:23:03  1210918
>>1210875

> почему?

Хуй в кроличью нору. Быстрее, оптимизированнее и т.п.
Аноним 16/06/18 Суб 13:37:42  1210922
>>1210918
Ведь GCC генерирует лучший код, нет? В том же godbolt программы с аналогичными уровнями оптимизации в GCC выдают меньше ассемблерных строчек.
Аноним 16/06/18 Суб 14:22:19  1210941
>>1210922
Синтетику отличаешь от реальных проектов?
Аноним 16/06/18 Суб 14:22:44  1210942
>>1210922
Число ассемблерных строк довольно посредственно связаны с быстродействием.
Аноним 16/06/18 Суб 14:32:00  1210943
>>1210942
Ну не скажи. Меньше строк = меньше итераций ЦП. Меньше времени на выполнение инструкций = меньге энергопотребление и тепловыделение.

Я утрирую конечно же, но в целом оно в общем-то так. Но когда речь идет о наборе из миллиарда из струкций и спор о <5 строках, то конечно это разговор в пользу бедных. Впрочем, минимизация даже на 0,00000001% тоже оптимизация.
Аноним 16/06/18 Суб 14:33:58  1210945
>>1210943
Некоторые инструкции x86 жырные-жырные, они могут требовать очень разное время выполнения, особенно с учётом времени доступа к памяти.
Аноним 16/06/18 Суб 14:35:36  1210946
>>1210945
Ну ет ты в дебри полез, я конечно согласен, но давай не будем про отдельно взятые инструкции. Их уместнее сравнивать в контексте обработки шлангом и гцц. Я и еб ввиду какой они выхлоп дадут
Аноним 16/06/18 Суб 14:40:42  1210950
>>1210946
Ты далеко очень полез, для того, чтобы малость понимать, что он там оптимизирует, тебе надо знать алгоритмы и реализацию одной из сотни-другой оптимизаций https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html, чтобы осознавать возможность её применения.
Вот как раз доскональное знание асма тебе здесь не очень-то и нужно.
Аноним 16/06/18 Суб 15:29:18  1210985
Как можно прятать каретку в стандартном виндовском окне?
Подключил windows.h, объявил HWND mycaret = NULL, вл main вызываю
if (HideCaret(mycaret)) {
printf("HIDED");
}
Однако каретка не прячется, ф-ия вовзаращает нулевое значение, и, соотвественно, сообщение тоже не печатается.
mycaret ининицализирую NULL'ом, т.к. в документации майков сказано: "
Type: HWND
A handle to the window that owns the caret. If this parameter is NULL, HideCaret searches the current task for the window that owns the caret".
И про работу HideCare:
"HideCaret hides the caret only if the specified window owns the caret. If the specified window does not own the caret, HideCaret does nothing and returns FALSE".
Аноним 16/06/18 Суб 15:30:27  1210987
>>1210985
Извиняюсь за опечатки, было неудобно писать
Аноним 16/06/18 Суб 20:32:43  1211272
>>1210985
А ты уверен, что в твоем приложении есть окно с кареткой?
Аноним 16/06/18 Суб 20:50:57  1211295
>>1211272
ConsoleApplication же
Аноним 16/06/18 Суб 20:57:09  1211304
>>1211295
Лол. Каретка - это такая мигающая вертикальная палочка в GUI приложении. В консольном окне - курсор. GetConsoleCursorInfo, CONSOLE_CURSOR_INFO.bVisible = FALSE, SetConsoleCursorInfo.
Аноним 16/06/18 Суб 22:13:12  1211354
>>1211304
Хм, путаница какая-то.
Когда вы в программе набираете текст, обычно маленький символ подчеркивания или маленький четырехугольник показывает вам место, где следующий набираемый вами символ появится на экране. Вы можете считать, что это курсор (cursor), но, если вы программируете для Windows, необходимо отказаться от такого представления. В Windows это называется "каретка" (caret). Слово же "курсор" относится к битовому образу, отражающему положение мыши на экране.
>Каретка - это такая мигающая вертикальная палочка в GUI приложении.
А где про это все можно прочитать? У меня обычно гуглится хуйня типа того, что написал выше
Аноним 16/06/18 Суб 22:14:36  1211358
>>1211354
Алсо
Каретка — это обычно горизонтальная черточка или прямоугольник, имеющие размер символа, или вертикальная черточка
Аноним 16/06/18 Суб 22:30:53  1211374
>>1211354
> А где про это все можно прочитать?
В MSDN. В разделе Carets про гуевые, в разделе Character-mode applications про консольный курсор.

Насчет терминологии, да, там путаница. Я в Windows API вещи принято называть именно так: консольный курсор, курсор мыши и каретка. Алсо, консольный курсор курсором называли еще во времена CGA, когда мышь если и была, то только у избранных.
Аноним 16/06/18 Суб 22:35:07  1211378
>>1209406
Фу нафиг, он и правда такой водовоз, я лучше Прату почитаю.
C++ Primer Plus. Sixth Edition
Аноним 16/06/18 Суб 22:46:32  1211386
>>1211378
Проиграл, сколько страниц осилил?
Лафоре пишет вроде неплохо, можешь его, но весь из себя такой объектно-ориентированный.
Аноним 16/06/18 Суб 22:50:56  1211390
>>1211386
Не больше 50.
Не подряд, естесна, я пытался выбраться из этого болота.
Аноним 16/06/18 Суб 22:54:36  1211392
>>1211390
Там вроде только вступление на страниц 80. Из-за этой книги я долгое время думал, что плюсы - большая жопа. Ну на деле они все равно жопа, но не большая, а такая средняя.
Аноним 16/06/18 Суб 23:29:32  1211422
>>1211392
Даже Си - большая жопа, если пытаться писать на нем правильно, а не как получится. А кресты - жопа не просто большая, а просто необъятная. Просто осознание наличия этой самой жопы в обоих языках приходит через несколько лет, по мере накопления опыта. И вообще, шли бы вы с крестами в крестотред.
Аноним 16/06/18 Суб 23:32:16  1211425
>>1211422
Говорить, что С - жопа, потому, что тебе попалось какое-нибудь API с попоболью в придачу это как-то глупо.
C гибкий, не навязывающий парадигму, не перегружен синтаксисом, ну какая же эта жопа.
Максимум попка
Аноним 16/06/18 Суб 23:48:57  1211432
>>1211425
Через десять лет, если не перестанешь писать на Си, ты обо мне вспомнишь. Дело не в каком-то там API, дело в недостаткках абстрактной машины, заданной стандартом - в избыточных абстракциях в одних местах, в излишней свободе в других, в огромном количестве UB.
https://bash.im/quote/119233
Аноним 17/06/18 Вск 00:09:12  1211441
Не осилил си и ушел на питон. То ли я даун, то ли книга по си была слишком нудная.
Аноним 17/06/18 Вск 00:15:44  1211443
>>1211422
А какой ЯП не жопа? Непопулярные тоже можно.
Аноним 17/06/18 Вск 00:21:19  1211446
>>1211443
Я не могу аргументированно говорить за другие, потому что в основном пишу на Си и крестах.
Аноним 17/06/18 Вск 08:47:44  1211557
>>1211443
Rust
Аноним 17/06/18 Вск 11:06:25  1211584
>>1211443
>А какой ЯП не жопа
Ассемблер.
Аноним 17/06/18 Вск 11:09:46  1211585
>>1211441
Так а как ты будешь питуну учиться? Книг нормальных тонет. То ли язык быстро развивается, то ли это принципиально "нам лень писать программы, книги писать нам тоже лень, поэтому мы выбираем питун".
Аноним 17/06/18 Вск 11:10:42  1211586
>>1211557
Этот язык опередил C# в своей нише, разве что платформой ошиблись
Аноним 17/06/18 Вск 13:10:13  1211648
>>1211586
>платформой
Не понял
Аноним 17/06/18 Вск 15:57:00  1211768
>>1211557
Простые вещи мы делаем сложно, а сложные через unsafe.
Аноним 17/06/18 Вск 22:33:59  1212059
Сапую ананасам. Объясните полному днищу(мне) что такое библиотеки в языках с/с++. Как можно проще. А также почему я не могу взглянуть на код(определение) таких функций как printf, scanf и тд, почему он уже изначально скомпилирован и при компиляции программы он вставляется автоматически компилятором. Может потому что все эти функции нельзя написать на языке си и они написаны на ассемблере? Нихуя не понимаю. А также не понимаю принцип работы компилятора блять, хелпуйте двачеры.
Аноним 17/06/18 Вск 22:40:52  1212063
>>1212059
Можно написать на С, на асме может выйти эффективней.
> не могу взглянуть
Можеш, тебе не понравится.
https://sourceware.org/git/?p=glibc.git;a=blob;f=stdio-common/vfprintf.c
Аноним 17/06/18 Вск 22:41:38  1212064
>>1212063
> Можешь
Не удержался
Аноним 17/06/18 Вск 23:23:42  1212083
>>1212059
> почему он уже изначально скомпилирован
Потому что код библиотек относительно редко меняется, зачем тогда ее исходники копировать из проекта в проект, зачем возиться с особенностями сборки, зачем пересобирать весь мир каждый раз, если можно один раз скомпилировать в машинный код, положить в либу и потом уже подлинковывать по необходимости?

> что такое библиотеки в языках с/с++
Когда ты делаешь cc -c file.c, компилятор делает объектный файл, содержащий скомпилированные в машинный код функции и данные. Библиотека - архив с такими файлами (как .zip, только без сжатия), и еще там есть индекс, чтобы можно было быстро узнать, что есть в библиотеке и в каком конкретно объектном файле оно лежит.

> Может потому что все эти функции нельзя написать на языке си и они написаны на ассемблере?
Отдельные части, где нужна скорость (memcpy, strcmp и т.п.) или те части, которые невозможно написать на Си (setjmp, например) могут быть написаны на ассемблере.

Исходники чаще всего где-нибудь есть. В линуксах в принципе опенсорс, в винде при установке той же Visual Studio можно установить заодно и исходники (U)CRT.
Аноним 17/06/18 Вск 23:42:00  1212090
>>1211584
Довен, это не язык.
Аноним 18/06/18 Пнд 09:24:16  1212214
>>1210922
>В том же godbolt программы с аналогичными уровнями оптимизации в GCC выдают меньше ассемблерных строчек

Это уже 20 лет как не актуально. В современных CPU встроен out-of-order приборчик и транзисторный-компилятор-в-risc-микрокод приборчик, поэтому в наше время компилятор ублажает именно эти приборчики и все эти ужимки из доприборчиковых 80х-90х неактуальны.
Аноним 18/06/18 Пнд 09:27:26  1212215
>>1212090
>Довен, это не язык.

Кстати, для довнов:

Ассемблер - это компилятор языка ассемблера. Не та хуйня, на котороый вы пишете, а конкретно файлы masm.exe, tasm.exe - вот это вот все ассемблеры

Язык ассемблера - это хуйня на которой буковками пишут.
Аноним 18/06/18 Пнд 12:49:20  1212316
>>1212090
MASM, тогда. А вообще ты за формулировки доебываешься, гуманитарий байтоебящий.
Аноним 18/06/18 Пнд 12:50:01  1212317
image.png (341Кб, 1920x1080)
Что за ошибка выдается компилятором на SetPixel?
Аноним 18/06/18 Пнд 13:00:23  1212323
>>1212317
> Что за ошибка выдается компилятором на SetPixel?

Вангую, Gdi32.lib подключить в настройке проекта/Cmakelists забыл.
Аноним 18/06/18 Пнд 13:00:57  1212324
>>1212323
Я без него собираю, просто через g++.
Аноним 18/06/18 Пнд 13:15:31  1212341
>>1212324
Засунул в компилятор маек и заработало.
Аноним 18/06/18 Пнд 13:30:40  1212358
>>1211443
Ocaml.
Аноним 18/06/18 Пнд 16:40:36  1212554
>>1211648
C# -> Win
Аноним 18/06/18 Пнд 18:03:33  1212623
>>1211443
Modula-2
Аноним 18/06/18 Пнд 18:58:46  1212649
Подскажите, какие крупные проекты на сишке появились за последние 10 лет?

Я, к своему стыду, только один такой проект вспомнил.
Аноним 18/06/18 Пнд 19:10:23  1212659
>>1212649
Залезь на соурсфорсе и поищи по языку
Аноним 18/06/18 Пнд 19:21:30  1212668
есть ли смысл читать K & G несишнику? в качестве саморазвития
Там какой уровень и чё объясняется?
Аноним 18/06/18 Пнд 19:23:39  1212669
>>1212668
Нормально, упражнения поделой
Аноним 18/06/18 Пнд 19:43:30  1212683
>>1212668
В качестве саморазвития почитай про ОС и язык ассемблера
Аноним 18/06/18 Пнд 19:45:36  1212686
>>1212659
Там только старьё вылазит.
Аноним 18/06/18 Пнд 20:33:13  1212728
Поясните за байндинги, пожалуйста. Что за магия происходит, когда из Python вызывается Cи-функции? CPython получается умеет динамически вызывать сишные функции. Ну я когда сишку ковырял для себя, читал там про указатели на функции, но это же чё-то не то по идее. Как это работает вообще?
Аноним 18/06/18 Пнд 23:06:38  1212867
>>1212683
>почитай про ОС и язык ассемблера
Ты, видимо, не представляешь как это всё взаимосвязано с Си.
Аноним 18/06/18 Пнд 23:06:49  1212869
>>1212728
> CPython получается умеет динамически вызывать сишные функции
ctypes/ffi.

> читал там про указатели на функции, но это же чё-то не то по идее
Почему не то? Аргументы преобразуются во что-то удобоваримое для сишной функции. Где-то берется адрес функции, и она вызывается. Только не напрямую, как ты бы сделал для обычного указателя на функцию, а через ассемблерную обвязку, потому что в Си нет синтаксиса, позволяющего вызывать одну и ту же функцию с разным количеством аргументов. Ну, точнее, можно switch (nargs) { case 0: return foo(); case 1: return foo(args[0]); case 2: return foo(args[0], args[1]); ... }, но это дикий костыль, который, к тому же, далеко не всегда применим (например, __stdcall/__fastcall так не вызовешь).
Аноним 18/06/18 Пнд 23:13:40  1212873
>>1212316
Довен, безграмотность и незнание элементарных терминов говорит о твоём уровне образования и понимания предмета беседы.
>MASM, тогда.
Это вообще комбо.
Слушай и внемли, что говорят умные дядьки: >>1212215
Аноним 18/06/18 Пнд 23:17:17  1212876
>>1212873
> Довен
Коверкает слова, путает название синдрома с именем его исследователя, а сам подгорает из-за "ассемблера". С этим ребенком все ясно.
Аноним 18/06/18 Пнд 23:18:54  1212880
>>1212668
>есть ли смысл читать K & G несишнику?
Откровенно говоря, эту книгу стоит читать людям далёким от профессионального программирования для изучения истории развития языка. К&R давно уже бесполезная ерунда для парочки ностальгирующих олтфаков.
Аноним 18/06/18 Пнд 23:21:01  1212884
>>1212876
Петя, ты чё несёшь? Какой синдром, какой исследователь? И где ты пожар увидел, на своём пердаке?
Аноним 18/06/18 Пнд 23:22:06  1212885
>>1212867
Не, я все прекрасно знаю, просто не так понял человека
подумал что он хочет си для саморазвития учить,
а оказалось, что хочет для саморазвития почитать классику от дедов
Аноним 18/06/18 Пнд 23:36:53  1212901
>>1212214
бля, чувак, ты слишком эрудированный
вангую что получаешь <60 если ты в мухосрани и <90 если в дс
потому что люди обладающие сакральными знаниями, должны уничножатся ибо нехуй шатать систему и стабильность
Аноним 18/06/18 Пнд 23:42:25  1212909
>>1212880
А что тогда не "бесполезное говно"?
Аноним 18/06/18 Пнд 23:59:08  1212920
Можно ли установить абсолютный приоритет потока в вытесняющих многозадачных системах (winnt, *nix)?
В том смысле, если такой поток захватил на очередном тике кванта проц, то он его уже не отдаст другим юзермодным потокам, пока не завершится (ядро, прерывания могут забрать, естественно). Похуй если все остальное при этом повиснет, если проц в системе один. Я подозреваю в что nt такой трюк не провернуть, а в nix? Модификацией и перекомпиляцией ядра, например? Хуй его знает зачем я тут это спрашиваю, но сишники должны быть прошарены в этой теме.
Аноним 19/06/18 Втр 00:05:49  1212926
>>1212920
>Модификацией и перекомпиляцией ядра, например?
Да, можно. Есть же ртос RTLinux. Можешь сам погуглить или жди ответа отцов.
Аноним 19/06/18 Втр 00:11:59  1212933
>>1212901
>ты слишком эрудированный
Скорее старый. RISC всех нагнул ещё в 90-х, это сейчас уже не слышно той волны хайпа. Т.е почти все современные процессоры, в т.ч. CISC, на самом деле RISC с "приборчиками" и прочими микропрограммами.
Аноним 19/06/18 Втр 08:50:14  1213036
14594499144220.png (123Кб, 289x359)
>>1212909
Javascript
Аноним 19/06/18 Втр 17:43:37  1213266
image.png (1035Кб, 1280x720)
Как записать значение в eax через Windows-driver, если драйвера ебучей винды начиная с x64 не поддерживают inline-assembler и ебучую ассемблерную вставку не сделаешь.

Что делать????????
Аноним 19/06/18 Втр 19:23:07  1213324
>>1212869
Спасибо большое!
>Где-то берется адрес функции, и она вызывается
Вот как раз этот механизм интересен. Получается, что определяется адрес функции в памяти по её имени. Ничего не нагуглил по этой теме.
Аноним 19/06/18 Втр 20:11:49  1213365
>>1213266
>В eax
int set_eax() {
return newEaxValue;
}
Аноним 19/06/18 Втр 20:24:30  1213376
>>1213266
Зачем? Это не ты там все еще в msr пишешь? Юзай интринсики. Если не ты, то ты всегда можешь написать интересующую тебя функцию в отдельном .asm-файле - в общем-то, так стоит делать даже в том случае, когда инлайн-асм поддерживается.

>>1213324
> определяется адрес функции в памяти по её имени
Для этого где-нибудь в каком-нибудь виде хранятся символы (имена с адресами). Например, для .so и .dll ты можешь пропарсить эти данные и получить адреса экспортируемых функций с помощью dlopen/dlsym и LoadLibrary/GetProcAddress соответственно. Неэкспортируемые функции по имени вызвать нельзя, но можно делать колбеки - ты кому-то аргументом передаешь адрес (или адреса) функций, а этот кто-то в нужный момент их вызывает.

> Ничего не нагуглил по этой теме.
Можешь полистать Linkers and loaders как минимум. Ну или википедию на худой конец.
Аноним 20/06/18 Срд 17:32:29  1213812
>>1206626 (OP)
Покажите, пожалуйста, пример аккуратного и простого мейкфайла, чтобы я мог посмотреть на него, сразу разобраться что к чему, и потом по его образу и подобию лепить свои поделки.

Главу про мейкфайлы из книжки хороших примеров прочитал, но там целикового файла сложнее, чем из одного .с в один .out нет да и кое-где там всё довольно странно для хорошего стиля
Аноним 21/06/18 Чтв 00:50:38  1214251
>>1213812
> аккуратного и простого мейкфайла
SOURCES=foo.c bar.c baz.c
LIBS=-lsomething -lanother
appname: $(SOURCES)
$(CC) $(CFLAGS) -o $@ $(SOURCES) $(LIBS)
Аноним 22/06/18 Птн 01:09:01  1214949
>>1213812
https://git.suckless.org/dwm/tree/
Аноним 23/06/18 Суб 23:30:53  1216059
Двачик помоги, учу Си по книге Стивена Прата, не могу понять что да как.
Вот код:
int main (void){

int arr [] = {0,1,2,3,4,5,6,7,8,9};

printf ("%p = %p\n",&arr[0], arr);
printf ("sizeof arr = %ld\n", sizeof arr);
printf ("sizeof arr[0] = %ld\n", sizeof arr[0]);
printf ("Elements = %d ", sizeof arr/ sizeof arr[0]);

return 0;
}

Вот вывод:
0061FF08 = 0061FF08
sizeof arr = 40
sizeof arr[0] = 4
Elements = 10

Вопрос: В книге пишут, что arr и arr[0] по сути то же самое и по этому они имеют одинаковй адрес. Но почему тогда размер arr 40 бит а arr[0] - 4 бита?

Аноним 23/06/18 Суб 23:57:40  1216075
>>1216059
Эти две штуки указывают на один адрес памяти, но подразумевают разные типы данных - массив и первый элемент массива. Посему этот код делит размер всего массива на размер элемента массива, таким образом вычисляется количество элементов в массиве.

Приём интересный, но если не понимаешь что делаешь, лучше объявил размерность массива дефайном и используй его. Иначе можешь наступить на грабли с указателем вместо массива - код скомпилится, но работать будет не так как ожидаешь.

Аноним 24/06/18 Вск 00:00:15  1216078
>>1216059
Это не одно и тоже, arr имя массива, поэтому сайзоф его равен количеству байт, которые он занимает, а arr[0] это первый элемент массива и у него соотв сайзоф будет равен размера именно елемента.
Насчёт одно и тоже, просто arr и arr[0] имеют одинаковый адрес, поэтому в плане доступа к первому элементу нет разницы, что ты напишешь звездочкаarr = 1, что arr[0] = 1, второе раскроется в звездочка(arr+0) = 1.
Аноним 24/06/18 Вск 00:03:48  1216082
>>1216059
И да sizeof не в битах возвращает, а байтах..

Хотя не в байтах, а фактически в char. Обычно это байт, но на некоторых микроконтроллерах char является 16-бит.
Т.ч. если хочешь писать действительно портабельный код, имей это в виду char не всегда байт.
Аноним 24/06/18 Вск 01:12:31  1216105
>>1216082
> Т.ч. если хочешь писать действительно портабельный код
#include <limits.h>
#ifdef CHAR_BIT != 8
#error "Уходи."
#endif
Чаще всего это наиболее верное решение.
Аноним 24/06/18 Вск 01:13:18  1216106
>>1216105
#if CHAR_BIT != 8, ну вы понели
Аноним 24/06/18 Вск 01:14:57  1216108
>>1216075
>>1216078
>>1216082

Спасибо, теперь разобрался.
Аноним 24/06/18 Вск 15:46:51  1216403
image.png (82Кб, 1747x640)
вкатываюсь с тредик с тупыми вопросами:

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


ну и вообще объективно какие плюсы у С ? лол, чому весь линепс на сишке и хаскеле, наследие саянтистов, лень или какая то объективная йоба причина?
Аноним 24/06/18 Вск 17:10:28  1216460
>>1216403
Скорость. И не забывай, что из Питония в сишечку данные переложить — это тоже не бесплатно.
Аноним 24/06/18 Вск 17:15:35  1216465
>>1216403
Создатели Юнити тоже думали "можно писать на решетках и жабаскрипте, а плюсики трогать только при необходимости", в итоге эта "необходимость" - бутылочное горлышко 95% программ (в т.ч. игр) на сабже.
Аноним 24/06/18 Вск 17:26:59  1216477
>>1216460
>Скорость
Надежность.

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

а что до скорости, так она нужна не везде же, а если на глаз не видно разницы, то зачем платить больше?

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

так что пример неудачный
Аноним 24/06/18 Вск 18:14:31  1216533
>>1216477
> один лягушатник линупсовое ядро на расте переписал
Работы тут на качественную ВКР. Отличие абстрактного ядра от ядра Линукса в количестве драйверов. У лягушатника их нет, говно лягушатника потому никому и не нужно.
Аноним 24/06/18 Вск 18:16:23  1216537
>>1216533
> > Работы тут на качественную ВКР
Какой же всё-таки двачь жёсткий и умный)0
Нет
Аноним 24/06/18 Вск 18:52:04  1216567
Screenshot20180[...].png (16Кб, 640x107)
>>1216537
Если ты вдруг решил не проверять, он написал 120 КБ кода. Это действительно уровень ВКР, за которую не стыдно.
Аноним 24/06/18 Вск 18:55:28  1216575
>>1216567
Это даже не исходники, там просто описание концепта с обрывками кода.

самофикс
Аноним 24/06/18 Вск 18:57:09  1216579
>>1216567
я тебя не понимаю, ты про проверку чего?
Гже линк, что проверять?
Аноним 24/06/18 Вск 18:58:20  1216582
>>1216579
https://dominuscarnufex.github.io/cours/rs-kernel/en.html
Аноним 25/06/18 Пнд 03:28:27  1216927
>>1216403
C реально крут и удобен, когда теме надо на низком уровне с данными работать, упаковывать их куда-то в какие-то пакеты, работать с указателями и т.п. Есть вещи, которые ты на Си сделаешь парой строк, а на питоне в разы больше будет и кривее, не говоря уже про скорость.

А стыковать Си и Питон то ещё удовольствие.
Аноним 25/06/18 Пнд 03:34:29  1216928
>>1216403
и ещё объективный момент, что просто удобнее запускать. Ты ведь запускаешь всегда что-то скомпилированное. А если пишешь на питоне, то надо запускать интерпретатор тяжеловесный, а под ним уже саму программу. Накладно. У тебя на компе ведь реально десятки-сотни сервисов одновременно работают
Аноним 25/06/18 Пнд 03:57:46  1216930
>>1206626 (OP)
Могут ли опытные господа тут объяснить, зачем потребовался такой в высшей степени уёбищный костыль, как CMake?
Сейчас работаю с ним, и эта хуйня зачем-то генерит абсолютные пути к проекту, в результате его не скопируешь в соседнюю папку без геморроя.
Аноним 25/06/18 Пнд 07:08:37  1216972
>>1216930
Задаюсь этим вопросом все время, пока он существует. Почему-то из всего существующего говна именно это стало модным. Хуй с ними, с путями. Каждый раз при сборке тысячей мелких тестов проверяются очевидные вещи, которые нормальные люди делают целую одну строку #if __STDC_VERSION__ >= 201112 и уже не задаются вопросом, есть ли у компилятора size_t. CMake не может задетектить доступный в path компилятор, я могу сделать cc file.c, а эта охуительная система сборки - нет. Не может увидеть даже слегка нестандартно установленный компилятор, особенно под виндой - установлена студия, в path cl.exe, нет, надо полезть в реестр, полезть в Program Files, нихуя не найти и ничего не скомпилировать. Добавление поддержки какой-то кастомной утилиты или неподдерживаемого компилера - это пиздец вообще - макроязык и документация к нему за пределами добра и зла.
Аноним 25/06/18 Пнд 08:04:03  1216988
image.png (870Кб, 1672x1056)
>>1216927
>когда теме надо на низком уровне с данными работать, упаковывать их куда-то в какие-то пакеты, работать с указателями
ну да вот я так себе и представляю, что есть нормальная программа с абстракциями всей хуйней, а есть самая низость, которую вася из барнаула за 35к пишет, походу откушивая горькую, вся его жизнь боль

>А стыковать Си и Питон то ещё удовольствие.
чому?

>>1216928
>надо запускать интерпретатор тяжеловесный, а под ним уже саму программу. Накладно. У тебя на компе ведь реально десятки
питонических софтин работают, ну может не десятки, но с пяток точно

придет день и питоний будет в ядре в браузере даже в аллахе, вот тогда заживем ммм
Аноним 25/06/18 Пнд 08:16:21  1216994
>>1216930
>Могут ли опытные господа тут объяснить, зачем потребовался такой в высшей степени уёбищный костыль, как CMake?

Просто для C/C++ нет нормальных систем сборки вообще (не считать же кнопку F5 в проприетарных IDE?). Или ты пишешь нечитаемые баш-скрипты руками на прыщах штульмана, или ты пишешь нечитаемые баш-скрипты руками с применением разных велосипедов (autotools и прочие). Или пишешь код на питоне.

Собственно, CMake и выстрелила тем что не нужно заниматься программированием на других языках чтобы просто собрать проект
Аноним 25/06/18 Пнд 08:27:10  1217001
>>1216988
GNY/pynux
pynit
pyutils
Аноним 25/06/18 Пнд 08:32:55  1217002
image.png (504Кб, 1388x770)
>>1217001
кек

все ежедневноюзаемые утилиты на питончике
Аноним 25/06/18 Пнд 09:33:17  1217028
>>1217002
>yay
Аноним 25/06/18 Пнд 09:36:02  1217030
>>1216403
>и хаскеле

Что, где?
Аноним 25/06/18 Пнд 09:43:22  1217031
image.png (40Кб, 466x679)
>>1217030
обосрался, с самого начала выглядело подозрительно..
Аноним 25/06/18 Пнд 13:26:56  1217123
>>1216403
Как же ты заебал уже. Пацаны, этот пидорас и в линукс-треде мозги всем ебёт.
Аноним 25/06/18 Пнд 13:28:07  1217124
>>1217123
Пусть Haskell, раз сил много. Отпадёт желание делать что-либо вообще.
Аноним 25/06/18 Пнд 14:33:20  1217171
image.png (213Кб, 1874x1120)
>>1217124
>Отпадёт желание делать что-либо вообще
чому?

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


>>1217123
а ты наверное тот самый тупой уебок которого я с другими питоняшами обоссал?
Аноним 25/06/18 Пнд 14:40:32  1217176
>>1216403
>если можно писать скриптули на питонии, и трогать железки через сишечку только при необходимости?

Потому что это маняфантазии и на практике код более менее сложнее хелоуворлда безбожно тормозит. Тот же джанго уже давно в среде системных интеграторов стал мемасиком - под него топовые сервера только в путь уходят. А заводчики облаков с джангоебов лопатами бабло за топовые конфигурации гребут.

Аноним 25/06/18 Пнд 14:43:15  1217177
>>1216403

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

А ты скрипты интерпретируемые пердолить предлагаешь. Тут вот годот в соседней доске про геймдев собирается переходить на CLR, потмоу что собственный велосипедный фреймворк безбожно тормозит, а ты скрипты пердолить интерпретатором. Одумайся.

Аноним 25/06/18 Пнд 15:17:11  1217197
>>1217176
>джанго
все включено хуле

>с джангоебов лопатами бабло
поделом


>>1217177
>история с микроядрами
ты про хурд? ну так там просто всем лень же

завязывайте мне про говно-движки затирать, упити гогод - даунская параша

уеч на лапше == около-крестовая производительность после нативизации, вот как надо
Аноним 25/06/18 Пнд 15:24:50  1217202
>>1217197
>ты про хурд? ну так там просто всем лень же

После хурда еще стопицот попыток было, вспомнить то же семейство l4 из которого самое успешное применение - модуль анальной DRM защиты гипервайзером к операционке (точнее параллельно в trustzone, насколько я помню).
Аноним 25/06/18 Пнд 15:25:35  1217203
>>1217197
>около-крестовая производительность после нативизации

Поржал. В уече и крестовая то не але, без перепиливания ванильного рендера и ядра.
Аноним 25/06/18 Пнд 17:25:52  1217225
>>1217203
ой всё, байтоёб раздухарился))
Аноним 25/06/18 Пнд 18:48:37  1217241
>>1206626 (OP)
Пишу ядро ос. Как создавать дескрипторы файлов на таком низком уровне? Например, дескриптор, при помощи которого можно писать в видеобуфер в сегмент B8000.
Аноним 25/06/18 Пнд 19:42:24  1217274
>>1217241
С помощью драйвера файловой системы, который ты уже написал.
Но при чем тут видео буфер? Мапишь его куда тебе надо и работаешь с ним.
Аноним 25/06/18 Пнд 23:09:43  1217427
>>1216994
> не нужно заниматься программированием на других языках
Как не нужно? Если что-то сложное собирать, приходится писать на макроязыке CMake. А если что-то простое, то СMake не нужен, и мейкфайлы отлично заходят.

>>1217274
> Но при чем тут видео буфер?
У него "все есть файл" протекает.

>>1217241
Юзермодный дескриптор - индекс структуры в списке дескрипторов в ядре, в структуре описание девайса и всякие дополнительные данные, у девайса драйвер, у драйвера структурка, содержащая его собственные обработчики для read/write/seek/ioctl. Вот и реализуй в драйвере чтение-запись в видеобуфер.
Аноним 26/06/18 Втр 19:42:07  1217792
О, Великие, поведайте простому смерному о том какую именно информацию сообщают программе заголовочные файлы наподобие stdio.h.
Аноним 26/06/18 Втр 19:46:51  1217798
>>1217792
Вставляет целиком и полностью запрашиваемый файл в оный файл.
Аноним 27/06/18 Срд 07:48:44  1218104
Что-то я залип совсем. Вот таблица истинности для двух переменных:
0|0 -> 0
0|1 -> 0
1|0 ->1
1|1 -> 0
Вот как мне подобное провернуть для всех битов числа? Прошу подсобите.
Аноним 27/06/18 Срд 08:29:20  1218108
>>1218104
a & ~b
Аноним 27/06/18 Срд 08:44:37  1218110
>>1218108
Благодарю.
Аноним 27/06/18 Срд 10:22:37  1218144
Пацаны, хочу написать совсем маленький и простой диспетчер задач, на атмеге8.
Но что-то моих знаний явно не достаточно. Кто-нибудь такое делал?
Можете поделится опытом, книги, сайты где это разжевано нормально.
Аноним 27/06/18 Срд 10:39:54  1218155
>>1218144
Изучай
https://en.wikibooks.org/wiki/Embedded_Systems/Atmel_AVR/Operating_systems_and_task_managers
Аноним 27/06/18 Срд 10:51:40  1218160
>>1218155
Там даже намека на мелкость и простоту нет.
Не говоря уже о пояснениях принципов работы.
Аноним 27/06/18 Срд 10:57:55  1218164
>>1218160
Вот самый примитивный функционал. Даже с пояснениями.
http://blog.vinu.co.in/2012/03/multitasking-in-avr-atmega32.html#more
Аноним 27/06/18 Срд 11:01:23  1218167
>>1218164
Бля, ассамблер.
Аноним 27/06/18 Срд 11:02:16  1218169
>>1218167
И?
Аноним 27/06/18 Срд 11:03:59  1218171
>>1218169
> C Programming Language #31 /clang/
Аноним 27/06/18 Срд 11:08:58  1218173
>>1218160
> Не говоря уже о пояснениях принципов работы
Городишь систему таймеров, хотя можно обойтись и без нее. Основа - очередь с приоритетом, в которую ты заносишь следующее запланированное срабатывание каждого таймера (гуглишь фибоначчиеву кучу, чтобы сделать очередь с приоритетом), добавляешь туда же таймаут переключения задач (если нужно), програмируешь таймер на ближайшее срабатывание из очереди и ждешь.

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

>>1218167
> Бля, ассамблер.
Кусок кода для манипуляций с регистрами все равно придется писать на ассемблере, хотя можно извратиться с setjmp/longjmp. Остальное вполне можно написать на Си.
Аноним 27/06/18 Срд 11:10:11  1218174
>>1218167
Так у avr он очень простой. Главное алгоритм понять.
На гитхабе поищи еще, может там уже говнокодил кто
Аноним 27/06/18 Срд 11:14:02  1218177
>>1218144
Есть же готовые rtos для этого.
Аноним 27/06/18 Срд 11:16:05  1218178
>>1218177
Он хочет изобрести велосипед, тащемто ничего плохого в этом нет.
Аноним 27/06/18 Срд 11:28:35  1218188
>>1218174
Я находил простой, вот:
https://pastebin.com/YDCjSzKb
https://pastebin.com/2a7eePqc

Все вроде расписано. Но я не очень умный, и у меня почему-то не работате
Аноним 27/06/18 Срд 17:55:52  1218400
05598541985151.jpg (7Кб, 244x207)
Подскажите по такому моменту.

Допустим, есть функция

uint8_t testf(float var1, float var2) {
...
static float var3 = 0;
...

...
var3 = var4;

return out;
}

Я правильно понимаю, что при каждом вызове функции var3 будет равно нулю, хоть что в неё присваивай далее по ходу функции?

Вообще, даже если объявить static var3; , то там будет чёртов нуль и после var3 = var4; будет тот же нуль?
Аноним 27/06/18 Срд 21:17:13  1218506
>>1218400
static-переменная внутри функции полностью аналогична static-переменной вне функции, за исключением того, что область видимости ограничена функцией, а не текущим модулем. Такая переменная будет инициализирована однократно, на этапе компиляции, обязательно константой, а если ты забыл ее инициализировать, то там гарантированно будет ноль. Когда ты впервые вызовешь функцию, в переменной будет то значение, которым ты ее инициализировал, а если ты потом запишешь туда что-то другое, это новое значение там и останется.
Аноним 29/06/18 Птн 22:22:56  1219862
Анон, поясни , полный справочник по С Шилдта читать или в топку?
Аноним 29/06/18 Птн 22:25:02  1219864
>>1219862
> справочник
Заглядывай в него при необходимости.
Аноним 29/06/18 Птн 22:28:32  1219871
>>1219864
Не, ну там подробно и последовательно вроде расписано, я хз почему он справочник, это единственное что я выцепил в библиотеке, а то в электронном виде мне что-то не читается. Прост если например я Пратта почитаю, я сразу поумнею или шило на мыло?
Аноним 29/06/18 Птн 22:29:05  1219874
>>1219871
После Праты определённо поумнеешь
Аноним 29/06/18 Птн 22:33:03  1219879
>>1219874
справочник точно дропать?
Аноним 29/06/18 Птн 22:34:30  1219881
>>1219879
Вузик дропай
Аноним 29/06/18 Птн 23:06:57  1219907
>>1219879
>справочник точно дропать?
Ты хоть пробовал вдумываться в это словосочетание?
Аноним 29/06/18 Птн 23:34:21  1219922
>>1219907
что не так, поясни
Аноним 30/06/18 Суб 04:36:54  1219971
Антош, есть линух 3.4 на стареньком покет-пк, памяти примерно 170 метров. И есть прога https://github.com/vyshend/tg-cli, которая требует дохуя памяти при запуске. Как наебать прогу при запросе virt-памяти на реальное количество оперативной памяти, доступной на машине? При нехватке пространства virt-памяти прога падает.
А если нет, то на какие функции следует обратить внимание и похацкать перед сборкой, чтобы запрашиваемое количество памяти при старте было минимально?
Аноним 30/06/18 Суб 06:39:42  1219976
>>1219971
Но ведь часть страниц просто будет храниться на жёстком диске периодически заменяя другие, подгружаясь в рам.
Аноним 30/06/18 Суб 09:04:50  1219989
>>1219976
Почему-то так тоже не работает, прога все равно киллает саму себя при любом размере подключенного файла подкачки
Аноним 30/06/18 Суб 11:09:18  1220016
>>1212901
Это не сакральные знания, это даже на стэковерфлоу можно прочитать. Впечатляет не эрудиция, а как он пишет красиво.
Аноним 30/06/18 Суб 11:10:26  1220018
>>1220016
>даже на стэковерфлоу
Лучше, конечно, посмотреть Таненбаума.
Аноним 30/06/18 Суб 21:46:04  1220361
Есть где полновесный гайд по фичам C99 c FP-операциями?
Читаю вики
> FENV_ACCESS ON
> pragma
> isnan
Ничерта не понимаю. Мне нужно нормально реализовать матешу, контроли переполнений и делений на ноль.
Аноним 30/06/18 Суб 21:47:50  1220362
>>1220361
>контроли переполнений
Проверяй постоянно на НаН.
>делений на ноль.
Лови.
Аноним 30/06/18 Суб 21:49:05  1220364
>>1220362
Я даже не могу найти инфу, что переполнение вызывает NaN.
Там ещё как-то макросами можно точность вычислений менять по возможности, тоже хотеть.
Аноним 30/06/18 Суб 21:53:37  1220368
>>1220364
>вызывает NaN.
Строго говоря - в том числе при переполнении вместо результата нани.
>макросами можно точность вычислений менять
Полная хуйня, точнее дабла стандартных нет - а делать точность меньше это явно не твой случай.
Аноним 30/06/18 Суб 21:55:20  1220371
>>1220368
Ясно.
Иду учить питун
Аноним 30/06/18 Суб 21:56:49  1220374
>>1220371
>питун
Ну там бигнумы есть и более-менее ок.
Аноним 30/06/18 Суб 21:59:07  1220375
>>1220374
И графики на ходу.
У меня, правда, лагают писец эти графики
%%А ещё, грёбаный в рот, я уже придумал, как это дело параллелить, но сложнее тут распарсить и обработать исключения*/
Аноним 30/06/18 Суб 22:01:25  1220377
>>1220361
> Есть где полновесный гайд по фичам C99 c FP-операциями?
Черновик стандарта в шапке, IEEE 754. Начинать с https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ (чуть ниже начала статьи есть оглавление).

>>1220368
> Полная хуйня
Про -ffast-math слышал?

> точнее дабла стандартных нет
long double.
Аноним 30/06/18 Суб 22:03:45  1220379
>>1220377
> >макросами можно точность вычислений менять
>-ffast-math
Ебать дебил.
>long double
== double, дурачок.
Аноним 30/06/18 Суб 22:06:57  1220381
>>1220379
>long double == double, дурачок.
не, разное эт у мя лонг дабл 12 байт, дабл 8
Аноним 30/06/18 Суб 22:10:00  1220384
>>1220381
>лонг дабл 12 байт
Это не х86.
Аноним 30/06/18 Суб 22:15:29  1220389
>>1220384
На x86 еще с тех времен, когда FPU был отдельным чипом, поддерживаются 80-битные флоаты.
Аноним 30/06/18 Суб 22:16:33  1220391
>>1220389
Ложь, пиздеж и провокация, при этом ещё ничем не подтверждённая.
Аноним 30/06/18 Суб 22:18:09  1220393
>>1220391
> The x87 provides single precision, double precision and 80-bit double-extended precision binary floating-point arithmetic as per the IEEE 754-1985 standard.
Только не говори, что x87!=x86
Аноним 30/06/18 Суб 22:18:15  1220394
>>1220389
>12 байт
>80-битные
Пиздец дебилы.
Аноним 30/06/18 Суб 22:18:38  1220395
>>1220394
Ты не то прочитал, глаза протри
Аноним 30/06/18 Суб 22:21:15  1220396
>>1220395
Восстановим диалог:
>>1220384
> >лонг дабл 12 байт
>Это не х86.
>>1220389
>На x86
>поддерживаются 80-битные флоаты.
 
Но это ничего, легкая умственная отсталость тебе даже идет.
Аноним 30/06/18 Суб 22:23:43  1220397
>>1220394
Про выравнивание слышал? Процессору неудобно читать 80-битные числа, поэтому они хранятся в 96 битах (3 дворда), но фактически вычисления идут в 80 битах. Признай уже, что ты уже обосрался, как только мог.
Аноним 30/06/18 Суб 22:33:20  1220399
hqdefault.jpg (26Кб, 480x360)
>>1220397
>Процессору неудобно читать 80-битные числа, поэтому они хранятся в 96 битах (3 дворда)
Аноним 30/06/18 Суб 22:33:56  1220400
>>1220393
> Только не говори, что x87!=x86
А, ну конечно, раз ананас с харкача сказал...
Аноним 30/06/18 Суб 22:37:57  1220402
>>1220400
Анон, не толсти
Аноним 30/06/18 Суб 22:39:18  1220403
>>1220397
>>1220399
>>1220400
>>1220402
Репорт шитпостинга.
Аноним 30/06/18 Суб 22:39:35  1220404
>>1220399
Я тебе покушать принес. https://ideone.com/R2osgB
Аноним 30/06/18 Суб 22:43:50  1220405
>>1220404
>C99 (gcc 6.3)
>sizeof(long double) = 16
гну/питух как всегда.
Забирай свое говно.
Аноним 01/07/18 Вск 00:16:52  1220449
какое IDE ставить на винду? eclipse+mingv или vs? или мб еще что,чтоб вот совсем збс было?
Аноним 01/07/18 Вск 00:28:19  1220453
>>1220449
Смотря что писать. Если это не крупный проект, достаточно любого блокнота, который по интерфейсу нравится (саблайм, vscode). Студия - для тех, кому на самом деле нужны адвансед-фичи. Ты тоже можешь поставить ее поиграться, в ней можно (и удобно) писать код, и отладчик более чем норм, но стоит ли это все тех гигабайтов и тормозов - решать тебе. То же самое касается и CLion.
Аноним 01/07/18 Вск 00:39:38  1220460
>>1220453
ну ок, допустим блокнот, а че там с компиляторами, они там идут в подарок? или брать первый попавшийся из шапки?
Аноним 01/07/18 Вск 00:56:19  1220470
>>1220460
>или брать первый попавшийся из шапки?
Да
Аноним 01/07/18 Вск 01:00:37  1220473
>>1220460
Ну как бы берешь MinGW или через MSYS2 ставишь гцц. Есть еще visual studio build tools от MS, оно немного bloatware, но в принципе норм. Можешь еще tcc взять в подарок, он что-то около 20 метров весит.
Аноним 01/07/18 Вск 06:37:30  1220518
>>1220449
Если просто позапускать че-нить короткое tio.run
Аноним 01/07/18 Вск 18:37:08  1220909
Посоны, от нехуя делать написал задачу N тел на куде и чистом Си.
Все, что она умеет, это выдавать столбики кординат/скоростей каждого тела в каждый момент времени.
Было бы интересно сделать видео с перемещающимися точечками. Идеально -- в реальном времени, то есть чтобы не пришлось сначала 20 минут ждать высчитывания некоторого числа координат, а потом отрисовывать видео.
Это можно сделать на Си? Что проще всего использовать? Не хотелось бы, чтобы отрисовка занимала больше строчек, чем симуляция.

Графика может быть совсем простая. Каждое тело просто точечка. Но хотелось бы, чтобы это былы не совокупность статичных изображений, а полноценное видео, то есть чтобы точечки перемещались.
Аноним 01/07/18 Вск 20:07:10  1220933
Что почитать, чтобы шарить в языках программирования, парадигмах и вот таком вот?
Про всякие полиморфизмы и перегрузки я ещё из теории компиляторов наслышан, но я всё равно не понимаю, когда разговор заходит про всякие монады-хренады.
Есть какая подборка всего это говна с разъяснением? Вики мне явно недостаточно, там зависимостей между статьями много.
Аноним 01/07/18 Вск 20:19:17  1220935
>>1220909
Нихуя не понял, но подозреваю, что ты хочешь что-то типа https://nullprogram.com/blog/2017/11/03/
Аноним 01/07/18 Вск 21:16:16  1220960
>>1220909
Что не так-то, блять? У тебя есть все координаты и скорости в каждый момент времени, ты осилил эту задачу, а теперь спрашиваешь как запилить рисование точек по заданным координатам?
Аноним 01/07/18 Вск 22:53:29  1221028
>>1220960
А что не так в его вопросе?
Он может просто не знать, как делается, что в этом удивительного? Шахматист не должен обыгрывать тебя в покер просто потому, что видит на много ходов вперёд.
Аноним 01/07/18 Вск 22:54:43  1221030
>>1220960
Спрашиваю, как создать видео. Типа такого: https://www.youtube.com/watch?v=DoLe1c-eokI
Внезапно, первый видосик в гугле имеет ссылку на гитхаб, посмотрю там, что за библиотека используется
Аноним 01/07/18 Вск 22:58:44  1221032
>>1220960
Но вообще ты прав, поставленную задачу -- численно решить задачу n тел, -- я решил.
Визуализация полученного решения это новая задача.
Аноним 02/07/18 Пнд 11:09:16  1221149
>>1220909
У тебя в задаче N тел материальные точки или с реальными размерами?
Алсо, метод ньютоновский?
Аноним 02/07/18 Пнд 13:37:50  1221211
Тыкаюсь сейчас в структуры данных ядра линукс, списки там устроены довольно оригинально, может ли кто-то объяснить как это работает?
Т.к. я такому решению смог придумать только такое использование, но это же полное извращение с кастами.
ideone.com/ea2Zag
Аноним 02/07/18 Пнд 14:28:00  1221240
>>1220909
>Это можно сделать на Си? Что проще всего использовать? Не хотелось бы, чтобы отрисовка занимала больше строчек, чем симуляция.

SDL+OpenGL первой версии.
Аноним 02/07/18 Пнд 16:28:15  1221294
>>1221211
> но это же полное извращение с кастами
Это Си. Не нравятся длинные касты - сделай тайпдефы, оберни касты в макросы, оберни обратные касты (из list в содержащую его структуру через offsetof) в макросы, напиши функции для манипуляции списками, и будет норм. А можешь пойти по пути Windows, там используют точно такой же list, но кладут его не в конец структуры, а в начало, что очень сильно упрощает жизнь и адресную арифметику.

> может ли кто-то объяснить как это работает?
Что именно объяснить?
Аноним 02/07/18 Пнд 17:35:00  1221319
>>1221294
Как работает список, ведь в структуре у нас лежит структура с указателями на себя же, а не на первичную структуру, как обычно делают списки.надеюсь понятно написал
Аноним 02/07/18 Пнд 19:20:18  1221413
>>1221319
Ну смотри. Есть макрос, который с помощью вот такого заклинания получает указатель на структуру из указателя на заголовок списка:
#define list_entry(ptr, type, member) \
container_of(ptr, type, member)

Используется так:
my_list ∗item = list_entry(somelist->list->next, my_list, list);

В свою очередь, макрос container_of, если опустить проверку типов, реализован примерно так:
#define container_of(ptr, type, member) \
((type ∗)((char ∗) (ptr) - offsetof(type, member)))

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

offsetof - уже стандартный сишный макрос из stddef.h, практически везде реализован как-то так:
#define offsetof(type, member) \
((size_t) &((type ∗) 0)->member)
Т.е., структура "виртуально" располагается по нулевому адресу, в этом случае адрес нужного поля численно равен его смещению. Автор известного в этой стране статического анализатора утверждает, что так делать нельзя, и хотя дереференса фактически нет, это все равно undefined behavior, и мы все умрем. И хотя никто не умер, никогда не стоит реализовывать этот макрос самостоятельно. Во-первых, потому, что он уже есть в стандартной библиотеке, а во-вторых, на какой-то экзотической платформе все может быть сложнее.

И, в общем, тебе не нужно обязательно помнить все эти детали реализации, просто пользуйся list_entry и прочими функциями и макросами из линуксового list.h, и будет тебе счастье.
Аноним 02/07/18 Пнд 20:57:40  1221467
Ccirno.jpg (44Кб, 637x579)
Как функцией fread читать поток в обратную сторону ?
Делаю костыли через fseek, но они не работают
Аноним 02/07/18 Пнд 21:07:06  1221474
>>1221467
Опиши подробнее задачу, расскажи, что именно не работает, потому что именно через fseek() (ну еще через fgetpos/fsetpos иногда) это и решается. Если поток - именно поток, а не файл, тогда ты не можешь по нему перемещаться, и тогда только кэширование уже прочитанного.
Аноним 02/07/18 Пнд 21:23:31  1221487
>>1221474
Нужно чтобы правая сторона картинки в разрешении bmp была зеркальным отражением левой
Считываю попиксельно через
fread(&rgb, sizeof(rgb), 1, in);
fwrite(&rgb, sizeof(rgb), 1, out);
и когда дохожу до середины ширины изображения нужно читать в обратную сторону для зеркальности
Аноним 02/07/18 Пнд 21:34:40  1221493
>>1221487
Звучит как максимальное извращение. Тебе известна ширина же. Выделяй массив шириной со строку, читай туда строку целиком (а не по байту), пиши строку целиком, потом в памяти изменяй порядок элементов в массиве на обратный, пиши строку целиком. Это будет на порядок быстрее и проще.

Если все же хочешь через жопу, то pos = ftell(in) в конце строки, потом for (i = 0; i < width; i++) { fseek(in, pos - i - 1, SEEK_SET); fread(...); fwrite(...) } но это пиздец как медленно и костыльно.
Аноним 03/07/18 Втр 02:00:01  1221638
Здравствуйте. Я тут впервые, хочу спросить о стратегическом выборе, что мне читать.
Раньше (лет 10+ назад) изучал C по Кернигану-Ритчи, но довольно скоро перешел на C++. Тонкостей работы с памятью, если и учил, то уже не помню. Сейчас хочу освежить знания. Да и язык, вижу, обновился.

Я нашел книжку 21st Century C: C Tips from the New School, но не уверен, подойдет ли она мне. Всякие азы азов уже объяснять не нужно, но вдруг там требуется уверенное владение старыми диалектами C? Так что, может и Кернигана-Ритчи достать перечитать лучше.Что вы мне посоветуете?
Аноним 03/07/18 Втр 08:51:27  1221698
>>1221638
> Что вы мне посоветуете?
Если есть время - Прату.
Аноним 03/07/18 Втр 09:04:00  1221699
>>1221638
> 21st Century C: C Tips from the New School
Бесполезное говно. В одной книге смешаны питоновский апи, гсл, доксиген и еще куча материала, имеющего к сям посредственное отношение.
При том материал не описывается, а рекламируется: "Смарите, какая хуйня -- гсл. Щас диффур решим. О ебать, решили. Если понравилось, качайте документацию и разбирайтесь сами".
Аноним 03/07/18 Втр 10:23:45  1221715
>>1206626 (OP)
Блять, как работает эта ёбаная хуйня? Уже неделю не могу разобраться. Может кто-нибудь объяснить?
#include <stdio.h>
main()
{
int i;
//Проход по числам от 1 до 10
for (i = 1; i <=10; i++)
{
if ((i%2) == 1) //Остаток от деления нечетных чисел = 1
{
printf("От нечетных чисел одни неудобства…\n");
// Перескочить к началу новой итерации цикла
continue;
}
printf("То ли дело четные числа! \n");
}
return 0;
}
Далее приведен результат выполнения данной программы:
От нечетных чисел одни неудобства…
То ли дело четные числа!
От нечетных чисел одни неудобства…
То ли дело четные числа!
От нечетных чисел одни неудобства…
То ли дело четные числа!
От нечетных чисел одни неудобства…
То ли дело четные числа!
От нечетных чисел одни неудобства…
То ли дело четные числа!
Аноним 03/07/18 Втр 10:27:11  1221717
>>1221715
А что тебе тут объяснить? тут всё предельно ясно, даже комменты есть
Аноним 03/07/18 Втр 10:46:16  1221721
>>1221715
тебя continue смущает что ли?
Аноним 03/07/18 Втр 10:47:22  1221722
>>1221717
if ((i%2) == 1)
Не въезжаю в эту строчку. Как её иначе написать?
Аноним 03/07/18 Втр 10:50:10  1221723
>>1221722
Внезапно никак. % это mod в паскале, | в апээле. Означет остаток от деления. Если совсем через жопу это значение последнего разряда при переводе в заданную систему счисления, тут двойка, значит последний бит.
Аноним 03/07/18 Втр 10:52:36  1221725
>>1221722
i-(i/2)*2
Аноним 03/07/18 Втр 10:58:06  1221732
>>1221723
При первой итерации цикла какой здесь получается остаток от деления?
Аноним 03/07/18 Втр 10:58:41  1221733
>>1221732
1
Аноним 03/07/18 Втр 10:58:59  1221734
>>1221723
При первой итерации i=1, остаток тоже 1.
Аноним 03/07/18 Втр 11:07:24  1221740
>>1221734
>>1221733
Всё, я понял.
Аноним 03/07/18 Втр 12:22:07  1221788
>>1221698
А если задача не стать экспертом в C, а просто нормально понимать C, оставаясь в C++? 1000 страниц это явно не для меня уровень подробности.
Есть ли что-то лучше K&R?
Аноним 03/07/18 Втр 12:59:42  1221809
>>1221788
> просто нормально понимать C, оставаясь в C++
Так глобальных-то отличий в общем синтаксисе не так много: навскидку, это отличия в linkage, менее строгая типизация указателей, пространства имен для struct/enum, void для функций с без аргументов. В основном тебе нужно лишь знать, каких крестовых фич в Си нет, а если что-то в Си есть, оно практически всегда есть и в крестах (кроме полутора исключений вроде designated initializers, которые завезут только в C++20 и нахуй не нужного в обоих языках _Generic). Если ты знаешь кресты, ты по умолчанию можешь нормально читать сишный код. Так что хуй знает, что тебе советовать.

> Есть ли что-то лучше K&R?
K&R слегка устарел, там нет C99/C11. С таким же успехом можно читать страуструпа бородатых годов, пролистывая страницы со словом class.
Аноним 03/07/18 Втр 14:08:41  1221849
>>1221809
Я имею в виду подход к решению тех же задач, но средствами языка C. В C++, паче с STL порой бывает достаточно знать, какой заголовок включить и что вызвать, а там уже всё придумано до нас. В C придется как-то проявлять смекалку. Вот в какой литературе есть более-менее подробное описание практики современного С? Работы с памятью, например.
Аноним 03/07/18 Втр 23:33:23  1222177
Играюсь с ООП, вместо абстрактных методов заполняю VMT нулями. Оно брякается с сегфольтом, при попытке вызова, и я в общем доволен. Теперь вопрос: если создать функцию с сигнатурой void fail (), возвращаться из которой не планируется, и которая нужна лишь для вывода в консоль сообщения перед падением, то можно ли её безопасно подсунуть как метод с другим числом аргументов? И для любой ли модели вызова этот способ приемлем, не прыгнет ли оно чёрт знает куда?
Аноним 03/07/18 Втр 23:57:20  1222190
>>1222177
> можно ли её безопасно подсунуть как метод с другим числом аргументов
Тебе в соседний тред в общем-то, но да, можно подсунуть, на x86/x86-64 проблем быть не должно, если возвращаться не планируешь.
Аноним 04/07/18 Срд 00:34:19  1222202
>>1222190
>на x86/x86-64 проблем быть не должно, если возвращаться не планируешь
Спасибо. А на других платформах? Мне не принципиально, но просто интересно.
>Тебе в соседний тред в общем-то
В какой? Если ты про спп, то - нет, я всё предпроцессором руками пока запиливаю.
Аноним 04/07/18 Срд 00:50:07  1222204
>>1222202
> Спасибо. А на других платформах?
Все зависит от того, как ABI требует передавать аргументы, и кто прибирается в стеке, если стек используется и т. д. В целом, сам вызов должен сработать (call - это jmp на стероидах, а jmp сломать сложно). Вот возврат - тут уже все не так просто, даже между компиляторами под одну архитектуру соглашения о thiscall сильно различаются, и если тебе не повезет, все с высокой вероятностью свалится при возврате или вскоре после него.

> В какой?
Нет, не в крестовый, а скорее в ассемблерный >>1221420
Аноним 04/07/18 Срд 00:55:45  1222205
>>1222204
>В целом, сам вызов должен сработать (call - это jmp на стероидах, а jmp сломать сложно).
Вот и ладушки, ты теня успокоил, тут возвращаться точно не требуется. Добра.
Аноним 04/07/18 Срд 08:53:55  1222261
Хочу как в sh, чтобы на нажатие стрелки вверх в ввод вставлялся редактируемый последний ввод. Мне юзать какую-нибудь либу для этого, или я могу накостылять это сам? Как я понял - fseek тут не поможет, но я и не пытался.
Аноним 04/07/18 Срд 10:09:25  1222273
>>1222261
> Мне юзать какую-нибудь либу для этого
Да, гугли readline, не изобретай костылей.
Аноним 04/07/18 Срд 12:51:08  1222343
>>1221849
>Вот в какой литературе есть более-менее подробное описание практики современного С? Работы с памятью, например.

https://github.com/torvalds/linux
Аноним 04/07/18 Срд 12:52:49  1222347
>>1222343
> https://github.com
Fix
Аноним 04/07/18 Срд 15:30:09  1222431
>>1222347
Короче, Кернигана и Ритчи буду читать. Я такой сделал вывод из ваших советов. Спасибо.
Аноним 04/07/18 Срд 16:21:18  1222476
>>1222431
Наслушался советов зелёных и рад.
Читай Прата и Танненбаума в последних редакциях. КР советуют либо дегенраты-хелловодщики, либо васяны, которые детстве увлекались программированием на бейсике, а сейчас въёбывают на заводе ЧПУшниками.
Аноним 04/07/18 Срд 16:51:01  1222520
>>1222476
Прата пугает уже объемом. Я же говорю, мне не нужно знать всё в C, мне нужно понимать те базовые вещи, которые попадаются в примерах, ведь C — язык номер 1 и примеры чаще всего на нем. Я уже знаю C++ и остается понять, как там работают все эти маллоки-каллоки и прочие чисто сишные штуковины. Зачем мне Прата на 1000 страниц.
Таннебаума не нашел — там же об операционных системах. Можно название книги?
Еще в шапке увидел такое Zed A. Shaw "Learn C the Hard Way" и соблазнился надписью «для гуманитариев», что в целом обо мне. Что скажешь об этой книге?
Аноним 04/07/18 Срд 16:55:41  1222528
>>1222520
man malloc
Аноним 04/07/18 Срд 17:23:54  1222559
>>1222520
>я уже знаю с++
>хочу узнать о выделении памяти
Ты ещё наверное думаешь, что то, что написано в популярных книгах это и есть "низкоуровневое программирование на си".
Хехмда, куда мы катимся, господа.
Аноним 04/07/18 Срд 17:24:59  1222561
>>1222559
ЧПУ-шник, отстань от него
Аноним 04/07/18 Срд 17:27:00  1222564
>>1222561
Но ведь я просто пишу драйвера, да и на заводе не работал никогда.
Аноним 04/07/18 Срд 18:11:38  1222584
Код https://pastebin.com/KTLh7mrw
Почему сегфолтится, когда строка с calloc находится в функции new_line, а не в main?
Аноним 04/07/18 Срд 18:38:30  1222614
>>1222584
Ты предупреждения компилятора читал вообще?
Аноним 04/07/18 Срд 19:09:04  1222641
>>1222614
Никаких предупреждений не выдаётся (gcc версия 7.3.0).
Собираю через gcc -Wall -std=c99 -pedantic -g test.c -o test


Аноним 04/07/18 Срд 19:24:30  1222647
>>1222641
Про call-by-value что слышал? А про разыменовывание указателей?
Аноним 04/07/18 Срд 19:25:53  1222648
>>1222559
Я же не сказал, что знаю в совершенстве. Я в курсе, какой заголовок включать и какой шаблон STL юзать, чтобы решить нужные мне задачи. Но вот работу с памятью собираюсь изучить подробнее и думал, что православнее начать с обычного C, раз в куче объяснений от него отталкиваются. Не надо надо мной иронизировать. „Не надо надо“ прикольно звучит.
Просто скажите, в какой из книг это лучше всего объясняют, как новичку, без лишних дебрей.
Аноним 04/07/18 Срд 20:00:03  1222659
>>1222648
K&R C
Только внимательно смотри на такие вещи как массив указателей, указатель на массив. А также адресную арифметику ((ptr + foo) это тоже что и ptr[foo]).
И блять научись именовать переменные уже. line что блять? Это массив указателей? Тогда lines. Или же это линейный буфер? Тогда у него тип корявый.
https://pastebin.com/rnjAzQFT
Аноним 04/07/18 Срд 20:30:06  1222678
>>1222647
До меня дошло, что calloc меняет адрес указателя line, поэтому в функцию нужно передавать указатель на указатель.
Аноним 04/07/18 Срд 20:41:06  1222686
>>1222659
Другому анониму отвечаешь.
>https://pastebin.com/rnjAzQFT
Спс.
Аноним 04/07/18 Срд 20:46:24  1222693
>>1222659
Спасибо, эти кунштюки с array[2] = 2[array] знаю еще из C++.
А вот по части line и какого-то кода на pastebin, ты меня с кем-то путаешь. Я тут только о литературе спрашивал.
Аноним 04/07/18 Срд 21:46:34  1222738
>>1222520
>Прата пугает уже объемом.

А я осилил. Там нет ничего лишнего. Более того, дополнить бы не мешало примерами работы с юникодом, сетью, потоками.
Аноним 04/07/18 Срд 21:47:36  1222739
>>1222738
> сетью,потоками.
ОС-специфик, от Праты не дождёшься.
Аноним 04/07/18 Срд 23:11:32  1222801
Ребята, правильно ли я понимаю, что существует 3 технологии параллельного пограмирования: open mp, MPI, posix threads. Они взаимозаменяемые или нужно знать обе? Если второе, в чем различия?
Хочу вкатиться, но понятия не имею, с чего начать.
Аноним 04/07/18 Срд 23:14:06  1222804
>>1222801
Их существует дохрена, наверн.
Хочешь переносимости и прагм компилятору- учи OpenMP.
Хочешь традиций C и UNIX - учи pthreads.
Они взаимозаменяемы
Аноним 04/07/18 Срд 23:51:04  1222810
>>1222804
> Они взаимозаменяемы
Каким местом? OMP - это параллелизация компилятором на основе аннотаций программиста, pthreads - это полностью ручной пердолинг со всем контролем.

>>1222801
В C11 завезли стандартные потоки, с них и начни. Знать нужно и pthreads, и OMP, если хочешь писать что-то сложнее хелловорлдов.
Аноним 05/07/18 Чтв 01:06:56  1222828
>>1222738
Ну ладно, Прата так Прата.
Как его читать? Подряд, ничего не пропуская, или как справочник по нужным темам?
Аноним 05/07/18 Чтв 08:42:53  1222875
>>1222810
Анон, я понимаю, что разные механизмы.
Я в плане возможности решать на них одни и те же задачи на практике говорил.
Аноним 05/07/18 Чтв 10:08:28  1222904
>>1222828
Я ничего не пропускал и выполнял все упражнения. Потом с K&R проделал то же самое.
Аноним 05/07/18 Чтв 16:09:08  1223073
Как инициализировать нулями массив интов в структуре в хедере?
Аноним 05/07/18 Чтв 16:15:39  1223077
>>1223073
Никак. Не стоит инициализировать что-либо в хедере. В хедере ты делаешь extern struct mystruct foo;, в одном из файлов делаешь struct mystruct foo = { 0 }; и так как это не автоматическая переменная, компилятор сам инициализирует ее нулями.
Аноним 05/07/18 Чтв 17:13:28  1223107
typedef struct test{
ect ec;
int_big x,y,z;
Coord coord;
int_big mX,mY,mZ,mT;
alignas(32) uint64_t data[256];
uint64_t dp;
} test;

То есть мне эту структуру убрать в .c файл? Извини, я немногу тупой.
Аноним 05/07/18 Чтв 17:15:00  1223110
>>1223107
Ты тип объявил, причём тут нули?
Аноним 05/07/18 Чтв 17:17:11  1223112
>>1223110
Хотел заполнять только нужные поля при создании экземпляра (то есть без "конструктора"), а массив чтоб был нулевым по умолчанию без всяких мемсетов. Но, видимо, так не получится. Хотя он и так нулевой, но это в дебаге, а валгринд ругается.
Аноним 05/07/18 Чтв 18:24:39  1223148
>>1223107
>>1223112
Структуру в .h. Если нужны публичные экземпляры, объявление в .h, определение в файл. Если не нужны - не твое собачье дело, как кто будет это инициализировать. А иницилизировать будут так: test x = { 0 }.
Аноним 05/07/18 Чтв 18:44:51  1223153
>>1223148
>А иницилизировать будут так: test x = { 0 }
Воу, а я не знал, что так можно было — без указания полей.
Аноним 05/07/18 Чтв 18:46:01  1223154
>>1223153
А нет, нельзя было.

Conditional jump or move depends on uninitialised value(s)
Аноним 05/07/18 Чтв 18:47:33  1223155
>>1223154
А нет, можно было, это я тупой. А что получается, все поля нулём инициализируются?
Аноним 05/07/18 Чтв 18:50:26  1223156
c11679.png (21Кб, 655x105)
>>1223154
Меньше доверяй всякому говну. Так можно. Указываешь инициализатор первому элементу составного объекта, а все остальные инициализируются своими дефолтовыми значениями (0 для интов, 0.0 для флоатов и т. д.).
Аноним 05/07/18 Чтв 18:52:28  1223157
>>1223156
Понял, благодарю.
Аноним 05/07/18 Чтв 22:17:15  1223257
https://ideone.com/arWihA
Почему вместо единичек и нулей выводит какую-то хуиту? Это он значение из ячейки памяти по адресу берёт что ли? Как заставить его воспринимать единицы и нули как обычное число?
Аноним 05/07/18 Чтв 22:20:40  1223258
>>1223257
Если начинается с 0, то трактует как восьмеричное число.
Если с 1, то как base10.
Двоичный ввод не предусмотрен.
Аноним 05/07/18 Чтв 22:23:10  1223259
>>1223258
Значит, мне нужно к каждому значению добавить единицу в начале? Или может тип на какой-нибудь другой заменить?
Аноним 05/07/18 Чтв 22:26:07  1223264
>>1223259
Ну, тогда он тебе эти числа и выведет в base10. Если это то, чего ты хочешь...
Аноним 05/07/18 Чтв 22:49:23  1223279
>>1223264
Да, это я хочу, спасибо. А в С++ можно ввести двоичное число без всяких бубнов или тоже придётся добавлять единичку в начале?
Аноним 05/07/18 Чтв 22:50:49  1223281
>>1223279
В C нельзя ввести двоичное число явно.
Аноним 05/07/18 Чтв 22:59:57  1223285
>>1223279
>А в С++ можно ввести двоичное число без всяких бубнов
Сейчас, да - 0b10100101, можно с разделителями разрядов 0b1010'01010'0011'1100
А про единицу ты там выше не допер.
Аноним 05/07/18 Чтв 23:01:05  1223288
>>1223285
Это ты ему какое-то GNU-расширение втираешь, или это новый стандарт какой?
Мог бы ещё в макрос обернуть функцию для перевода bin в dec.
Аноним 05/07/18 Чтв 23:03:14  1223292
>>1223288
>это новый стандарт
Да, 14 года
Аноним 05/07/18 Чтв 23:04:14  1223293
>>1223292
Грёбаные крестовики, заполонили тхреад.
Аноним 05/07/18 Чтв 23:05:12  1223294
>>1223288
Асло раньше не макросы с функциями использовали, а шаблоны для преобразования в компайл тайм
Аноним 05/07/18 Чтв 23:05:48  1223296
Есть один трёхмерный массив, и его надо заполнить нулями, какой самый лучший способ это сделать? Сейчас делаю через циклы for, наверняка есть что-то получше.
Аноним 05/07/18 Чтв 23:06:07  1223297
>>1223293
Не нервничай так, брат меньший.
Аноним 05/07/18 Чтв 23:07:21  1223300
>>1223296
memset
Аноним 05/07/18 Чтв 23:07:36  1223301
Господа, позвольте тупой вопрос. Линукс, gcc.
sizeof (int) = 4
sizeof (*ptr) = 8.
Если адрес у меня 8 байт, следовательно машина у меня 64 битная, машинное слово вроде должно быть 8 байт, а int у меня 4.
Или int это не машинное слово?
Аноним 05/07/18 Чтв 23:08:11  1223302
>>1223294
Компилятор с чистой и даже не особо функцией от константного аргумента такое прокрутит ещё в компайл-тайм оптимизации ради, зашатаешься.

Аноним 05/07/18 Чтв 23:09:17  1223304
>>1223301
Как видишь, не машинное.
Аноним 05/07/18 Чтв 23:09:31  1223306
>>1223300
У меня массив статичный же.
Аноним 05/07/18 Чтв 23:09:58  1223307
>>1223306
Ну так он сам заполнится
Аноним 05/07/18 Чтв 23:14:26  1223308
>>1223307
Не понимаю. Вот есть заданный массив int a[4][2][8], как заполнить все ячейки нулями без помощи циклов? Memset не подходит, он просто по указателю заполняет блок памяти без разделения на [4][2][8]
И что это за уебанская капча с постоянно появляющимися картинками, как вернуться на старую?
Аноним 05/07/18 Чтв 23:31:55  1223318
>он просто по указателю заполняет блок памяти
Дурачек, массив это и есть блок в памяти, `a` - это указатель считай. мимобогсишки
Аноним 05/07/18 Чтв 23:32:44  1223320
>>1223308
>>1223318
Send

memset(a, 0, sizeof(a));
Или так
memset(a, 0, sizeof(int) 4 2 * 8);
Аноним 06/07/18 Птн 00:00:41  1223328
>>1223320
Спасибо
Аноним 06/07/18 Птн 05:40:00  1223374
>>1223308
Придется проходиться двойным циклом по a[0...3][0...2] и делать memset a[j][0...8]. С чего ты взял что твой массив располагается в памяти одним куском и его можно зараз мемсетнуть?
Аноним 06/07/18 Птн 08:12:06  1223388
>>1223156
А нельзя ли тогда просто ={}?
Аноним 06/07/18 Птн 08:14:40  1223391
>>1223257
Общепринятый способ − вводить в base16, потому что каждые 4 двоичные цифры это одна буква, и можно в голове переводить.
Аноним 06/07/18 Птн 09:13:13  1223402
http://hentenaar.com/dont-learn-c-the-wrong-way
Что думаете?
Аноним 06/07/18 Птн 09:19:24  1223404
>>1223402
> dont-learn-c
Аноним 06/07/18 Птн 11:19:07  1223477
>>1223374
С того, что массивы в Си лежат одним куском и их можно за раз мемсетить.

>>1223388
Нельзя. Требуется хотя бы один инициализатор.

>>1223402
В первых тредах был срач, хардвей решено было оставить. В статье все правильно говорят, но есть нюанс в виде некоторых гуманитариев, которым только подобного рода книжки и заходят.
Аноним 06/07/18 Птн 13:08:41  1223532
>>1221240
Какими книгами можно обмазаться в сях для opengl 4 версии?
Аноним 06/07/18 Птн 13:35:50  1223549
>>1223532
>Какими книгами можно обмазаться в сях для opengl 4 версии?

Супербиблией, последним изданием.
Аноним 06/07/18 Птн 14:04:19  1223566
image.png (39Кб, 647x437)
>>1223549
>пикрил
>в самом начале пихают крестопарашу и загружают лишними действиями
Аноним 06/07/18 Птн 14:54:33  1223593
>>1223566
Так ты внимания на кресты не обращай.
Аноним 06/07/18 Птн 17:24:51  1223681

Почему у многих байтоёбов бомбит от веб-программирования?
Аноним 06/07/18 Птн 17:31:20  1223689
>>1223681
Пошёл нахуй, «веб-программист».

Интернет написан на Си и крестах, а то что ты выдаешь за программирование — скриптописание и не более того.
Аноним 06/07/18 Птн 17:53:22  1223702
>>1223681
Потому что если бы не титанические усилия байтоёбов, ваш медленный говнокод даже не завелся бы.
Ну и за программиста почти никакую вебмакаку нельзя считать.
Аноним 06/07/18 Птн 17:58:16  1223710
>>1223681
Потому что эти "байтоебы" в основном студентота, только что осилившая компилируемый язык. У взрослых дяденеке бомбит в основном с подходов, а не с технологий (ну там - какими-то костыльными неповоротливыми инструментами качать непонятно откуда библиотеку, которая делает пятьюдесятью строками то, что без нее можно сделать двумя).
Аноним 06/07/18 Птн 18:19:58  1223723
>>1223681
Платят мало
Аноним 06/07/18 Птн 22:04:18  1223846
[code]
make_file_from_tree(search_tree head, char filename)
{
FILE out = fopen(filename, "w");
if(out == NULL){
perror("make_file_from_tree: Can`t open output file.");
}else{
void print_tree_node(FILE
output, search_tree cur)
{
fprintf(f, "%s: %d\n", cur->key, cur->value)
}
visit_recursive(head, print_tree_node);
}
}
[/code]
Вот есть примерно такая залупа. Могу я в print_tree_node передать явно открытый FILE
out, не передавая его в visit_recursive?
Аноним 06/07/18 Птн 22:19:22  1223865
>>1223846
Блять, короче
https://pastebin.com/9uHyAyrg
Аноним 06/07/18 Птн 22:42:44  1223876
>>1223566
А ты не можешь переделать класс в структуру + совокупность функций для работы с ней?
Аноним 06/07/18 Птн 23:23:34  1223896
Анончики, вот у меня есть строка
char str1 = "String one"

char str2 = "String two"

почему со второй строкой я могу сделать так: str2[0] = str2[3] или
(str) = *(str+3) а с перовй нет??
Аноним 07/07/18 Суб 00:11:01  1223916
>>1223896
Ты написал бред. Хрен знает, что ты хотел спросить.
Аноним 07/07/18 Суб 00:59:43  1223934
>>1223846
Ну хуй знает, как у тебя там visit_recursive реализовано, но нет, не можешь, замыкания только в следующем стандарте завезут. Стандартный подход для обхода чего-либо: три параметра, а не два. Второй - колбек, а третий - void *userdata, куда ты можешь передавать хоть черта в ступе.
Алсо, вложенные функции - это расширение гцц, хорошие ребята так не делают.

>>1223896
Запости пример на ideone, но сразу напоминаю, что "строковые литералы" доступны только для чтения, и то, что у тебя почему-либо получается туда писать, не означает, что так делать можно.
Аноним 07/07/18 Суб 19:51:02  1224203
Двачик, локализация у меня вроде включена, первый puts строку выводит без проблем, но если я пытаюсь прочитать строку, а потом её обратно вывести то получаются иероглифы. На английском все работает, а с кириллицей не хочет. Почему так?

Код:

#include <stdio.h>
#include <locale.h>

int main (void)
{
setlocale (LC_ALL, "Rus");
int i;
char string[20];

puts("Вводите строку");
fgets(string, 20, stdin);
fputs(string, stdout);

return 0;
}

Вывод:
Вводите строку
двачик помоги
¤ў зЁЄ ЇRR?Ё
Аноним 07/07/18 Суб 19:51:59  1224205
>>1224203
ОС винда. А компилятор?
Аноним 07/07/18 Суб 20:02:35  1224210
>>1224205
Винда, gcc компилятор.
Аноним 07/07/18 Суб 20:07:27  1224213
>>1224210
Попробуй скажи ему -fexec-charset=866 (очень плохое решение, зато очень простое). Или -fexec-charset=utf-8 и chcp 65001 в консоли. А локаль можешь выкинуть. Вообще, с LC_ALL стоит поаккуратнее, чтобы не появлялось вопросов, почему это 1.23 из файла не читается.
Аноним 07/07/18 Суб 20:22:13  1224225
>>1224213
Спасибо, -fexec-charset=866 помогло
Аноним 07/07/18 Суб 22:07:43  1224271
>>1223934
А как мне тогда реализовать обход узлов дерева с выполнением для каждого узла функции? Чтобы можно было разные функции засовывать?
Аноним 08/07/18 Вск 14:07:36  1224451
Люди, осилившие стандарт, объясните, почему если указатель
ptr_to_jmptable имеет тип char, то, например, байт 8b выглядит как надо при печати, а если тип моей структуры Byte, то печатается b8. Почему? Почему перестановка полей структуры делает все оки-доки?
Дело в порядке бит?
https://pastebin.com/an9SkACR
Аноним 08/07/18 Вск 14:59:21  1224476
Привет, Анонче, как понимать слово переносимость в контексте программирования? Почему язык си более переносим нежели бейсик или фортран, у него что компиляторы лучше или что?
Аноним 08/07/18 Вск 15:00:56  1224478
А также как понимать мощный и гибкий ЯП.
Аноним 08/07/18 Вск 15:05:19  1224481
Стандарт языка программирования это то как должен работать язык? То есть ритчи и томпсон изначально разработали стандарт а потом реализовали его написав компилятор языка си? Иными словами создать ЯП значит просто создать компилер для него?
Аноним 08/07/18 Вск 15:13:51  1224485
>>1224476
> си более переносим
Ну сам посуди:

#include "stdio.h"

int main(void)
{
printf("hello 2ch\n");
return 0;
}

Этот код валиден на юних системах, спермо системах и даже прыщах. Даже на ардуине.
Аноним 08/07/18 Вск 15:29:54  1224490
>>1224485
Продолжай, пока что не дошло
Аноним 08/07/18 Вск 15:31:26  1224491
>>1224490
И не дойдёт пока сам в этот чан с кодом не окунешься.
Аноним 08/07/18 Вск 16:02:32  1224507
>>1224485
> на юних системах
> и даже на прыщах
Аноним 08/07/18 Вск 16:18:26  1224521
>>1224451
Расположение полей в структуре (от старшего бита к младшим или от младшего к старшим) зависит от компилятора.

>>1224476
> язык си более переносим нежели бейсик или фортран
Это распространенное заблуждение. Бейсик более переносим. Любой сколько-нибудь сложный код прибит к платформе пачкой ифдефов. Тогда как код, выполняющийся на виртуальной машине (как бейсик) просто работает везде, где есть эта машина.

>>1224481
> Стандарт языка
Совершенно необязателен. Для Си это нужно по всяким юридическим и техническим причинам.

> Стандарт языка программирования это то как должен работать язык?
Стандарт рассказывает, как должен работать сферический Си в вакууме. Ты можешь реализовывать свой компилятор как угодно. Единственная твоя задача - сделать так, чтобы наблюдаемое пользователем поведение не отличалось от того описанного Си в вакууме. Но если никто не сможет этого увидеть, ты можешь сколько угодно перечить стандарту.

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

>>1224485
Упс, freestanding environment не гарантирует наличие stdio.h на голом железе, как и вообще возможность что-либо куда-либо вывести.
Аноним 08/07/18 Вск 16:25:40  1224531
>>1224507
Linux = linux is not unix, если что. Юнихом я назвал бздю и её производные.
Аноним 08/07/18 Вск 16:33:04  1224540
>>1224531
Хз, Рэймонд так не считает.
Он приводит Линух как пример самой успешной Unix-ветки.
Аноним 08/07/18 Вск 16:37:41  1224543
>>1224540
>Линух как пример самой успешной Unix-ветки.
Че бля? Это архитектурное уебище, хуевая копипаста Миникса зделонная пьяным финсаим оленем, лол
Аноним 08/07/18 Вск 16:38:56  1224545
>>1224543
I'd just like to interject for a moment. What you’re referring to as Linux, is in fact, GNU/Linux, or as I’ve recently taken to calling it, GNU plus Linux. Linux is not an operating system unto itself, but rather another free component of a fully functioning GNU system made useful by the GNU corelibs, shell utilities and vital system components comprising a full OS as defined by POSIX.
Many computer users run a modified version of the GNU system every day, without realizing it. Through a peculiar turn of events, the version of GNU which is widely used today is often called “Linux”, and many of its users are not aware that it is basically the GNU system, developed by the GNU Project. There really is a Linux, and these people are using it, but it is just a part of the system they use.
Linux is the kernel: the program in the system that allocates the machine’s resources to the other programs that you run. The kernel is an essential part of an operating system, but useless by itself; it can only function in the context of a complete operating system. Linux is normally used in combination with the GNU operating system: the whole system is basically GNU with Linux added, or GNU/Linux. All the so-called “Linux” distributions are really distributions of GNU/Linux.
Аноним 08/07/18 Вск 16:41:38  1224548
153097561411112[...].jpg (186Кб, 700x700)
>>1224545
И?
Аноним 08/07/18 Вск 16:42:51  1224551
1515398086307.png (111Кб, 500x527)
>>1224548
Не буду я с тобой спорить, котище.
Ты непробиваемый, я знаю, с кем в треде я сижу.
Аноним 08/07/18 Вск 16:55:01  1224566
>>1224521
Расскажи подробнее про стандарты
Аноним 08/07/18 Вск 16:57:25  1224567
>>1224540
Рэймонд может считать как угодно, но Linux — это рекурсивный акроним, который расшифровывается как линух это не юних.
Аноним 08/07/18 Вск 17:04:32  1224571
>>1224567
Да-да, в APUE случайно мимоходом упомянули про Linux, а не разрабатывали все примеры, фокусируясь на работу в нём.
В вузиках препода UNIX-дисциплин используют Linux из лени и халатности, вот колясочники!
Аноним 08/07/18 Вск 17:40:25  1224595
153000612617527[...].png (321Кб, 400x533)
>>1224571
>UNIX-дисциплин
Это еще что такое?
Аноним 08/07/18 Вск 17:41:54  1224597
>>1224595
Обычное: базы данных, сети, сисадминство.
Но на UNIX-подобных системах.
А я думал, ты поймёшь
Аноним 08/07/18 Вск 17:43:44  1224598
>>1224597
Ты дичь какую то поришь, на каникулах что ли?
Аноним 08/07/18 Вск 17:44:32  1224600
>>1224567
>Linux — это рекурсивный акроним
Впервые слышу такое.
Какая-то новомодная хуйня.
Аноним 08/07/18 Вск 17:45:54  1224602
152913880219804[...].jpg (60Кб, 700x525)
>>1224600
>Какая-то новомодная хуйня.
Аноним 08/07/18 Вск 17:51:33  1224608
>>1224600
Ты сейчас ещё больше охуеешь, возможно, но GNU - GNU's Not UNIX или LAME — LAME Ain't an MP3 Encoder. Такие дела.
Аноним 08/07/18 Вск 17:52:21  1224610
>>1224608
Ага, а Вайн не эмулятор.
Аноним 08/07/18 Вск 17:54:03  1224614
>>1224608
Это, как раз, известные вещи.
А про линукс хотелось бы пруфца.
Аноним 08/07/18 Вск 18:12:46  1224623
>>1224614
Пруфа нет, ибо это народное творчество. Linux искаженная форма имени Линуса. Вроде как самим Линусом и придуманно. А откуда пошло линух не юникс... возможно из-за GNU. GNU/Linux.
Аноним 08/07/18 Вск 18:47:08  1224655
>>1206626 (OP)
здрасте, друзья, рекурсивно обхожу каталог и заполняю массив char именами файлов, возникла проблема с заполнением, наскок я понял она связана с тем, что несколько функций обращается к одному и тому же элементу массива, решил проблему заменив массив структурой из массива и полем int значащее размер элементов в массиве. Все ок но само решение какое-то некрасивое, есть другие варианты?
Аноним 08/07/18 Вск 18:49:46  1224656
Собираюсь вкатываться в программирование с этого языка, есть какие-то то советы бывалых?
Аноним 08/07/18 Вск 18:56:35  1224661
>>1224623
>Пруфа нет, ибо это народное творчество.
Вот и я об этом.
Раньше такой расшифровки не было, придумали (относительно) недавно, скорее всего.

Аноним 08/07/18 Вск 19:16:26  1224678
>>1224661
Не берусь судить. Вполне возможно.
Аноним 08/07/18 Вск 20:35:41  1224716
>>1224655
Можно передавать указатель на указатель на буфер, ну и обновлять его при добавлении имени файла. Можно запилить полноценный список или динамический массив.

>>1224656
Есть. Ставишь себе какой-нибудь блокнот, какой-нибудь компилятор и читаешь Прату.
Аноним 08/07/18 Вск 21:26:41  1224737
>>1224716
Что после праты? Дейтл или сразу КИР
Аноним 08/07/18 Вск 21:28:47  1224738
>>1224716
И нужны ли вообще дейтелы?
Аноним 08/07/18 Вск 21:50:03  1224746
Насколько сложно на Си написать простой парсер/лексический анализатор? Хочу сделать более-менее надежный разбор файла и заполнение структуры данными из него.
Аноним 08/07/18 Вск 22:08:25  1224752
>>1224737
После Праты брать уже конкретные книги по разработке под интересующую платформу и там уже по ходу дела читать про хороший/плохой код, про алгоритмы/структуры данных и т. д.
Аноним 08/07/18 Вск 22:09:46  1224753
>>1224746
Можно написать вручную, не очень сложно, но проще взять какой-нибудь flex, пусть компьютер сделает за тебя хотя бы половину работы.
Аноним 08/07/18 Вск 23:09:34  1224777
>>1223301
Смешались в кучу кони, люди...
Что такое машинное слово? Что такое int?
>>1223681
По-моему, всё-таки бомбит у веб-макак т.к. постоянно лезут сюда с подобными вопросами.
>>1224451
Гугли littleendian и big-endian
>>1224661
>придумали (относительно) недавно
Это старая рекурсия. Слышал в начале 2000-х где-то в русскоязычной литературе.
>>1224610
А он и не эмулятор. Это реализация WinAPI под никсы, а не эмуляция выни.
>>1224737
Сначала осиль Прата. Если пойдёт на пользу, то ты уже не будешь задавать таких вопросов антону.
Аноним 09/07/18 Пнд 07:32:46  1224903
>>1212059
Библиотеки содержат библиотечные ф-ции - это обертка над системными вызовами. Ну т.е. допустим есть у тебя printf() - это тупо обертка на сисколом write. Но только плюс еще есть буферизация, чтобы потсоянно не вызывать сискол, ибо это дорого для процессорного временя(смена контекста). Ну и плюс еще кроссплатформенность, ибо сисколы могут иметь разные номера на различных системах. Как-то так.
Аноним 09/07/18 Пнд 09:23:36  1224910
>>1224777
>Это старая рекурсия. Слышал в начале 2000-х где-то в русскоязычной литературе.

Перепутали с GNU, которое действительно GNU is Not Unix.

Линукс - это линус с X на конце, ну типа он юникс (конкретнее, порт minix с блекджеком и шлюхами) изначально хотел запиливать, тогда было модно в название UNIX-совместимых систем букву Х пихать чтобы всем понятно было..
Аноним 09/07/18 Пнд 09:25:00  1224911
Господа, здесь где-нибудь обсуждают winapi, Руссиновича и внутреннюю структуру винды?
Аноним 09/07/18 Пнд 10:07:29  1224926
>>1224911
> winapi
Здесь
> руссиновича
-> /fag/
> внутреннюю структуру винды
-> /re/ Обсуждают то, чего нет
Аноним 09/07/18 Пнд 11:16:21  1224949
>>1224903
> printf() - это тупо обертка на сисколом write
Охуительные новости.
Аноним 09/07/18 Пнд 11:30:56  1224951
>>1224949
Ну блядь расскажи тогда что это по-твоему?
Аноним 09/07/18 Пнд 11:31:14  1224952
>>1212063
2 тысячи строк кода из за одного printf? Охуеть
Аноним 09/07/18 Пнд 12:18:44  1224965
>>1224951
Ну это как говорить, что OpenGL - обертка над putpixel. Между тем, printf() на самом деле обертка над fprintf(), который обычно использует общую для всего семейства функцию, форматирующую текст и по мере форматирования выводящую результат (в поток или буфер, в зависимости, и там все нихуя не просто. Зато можно делать так: https://github.com/HexHive/printbf твой write() так может?
Аноним 09/07/18 Пнд 12:54:37  1224977
>>1224965
Ну так в конечном счете ОНИ один ХУЙ делают сискол. Я надеюсь ты понимаешь это?
Аноним 09/07/18 Пнд 14:45:30  1225054
>>1224977
Ага, а OpenGL ОДИН ХУЙ когда-нибудь рисует пиксел. Все, обертка!

И нет, printf может и не делать сискол. Например, у тебя embedded, и твоя реализация либц напрямую пишет в регистр UART. Или рисует текст на экране, вызывая не write(), а какой-нибудь blit_screen(). И это не говоря уже о http://man7.org/linux/man-pages/man3/fmemopen.3.html который в ядро (даже если оно есть) не ходит в принципе.
Аноним 09/07/18 Пнд 14:52:16  1225057
>>1224965
>Ну это как говорить, что OpenGL - обертка над putpixel

Ну не над putpixel, а, вместе с юзермодным драйвером и libdrm - обертка над ioctl.
Аноним 09/07/18 Пнд 15:00:08  1225059
>>1225057
Как же вы заебали.
> A wrapper function is a subroutine in a software library or a computer program whose main purpose is to call a second subroutine or a system call with little or no additional computation.
> (Википедия)
Аноним 09/07/18 Пнд 15:21:03  1225066
>>1224521
Да что значит это слово то, пе-ре-но-си-мость?
Не понимаю.
Аноним 09/07/18 Пнд 15:50:27  1225077
>>1225066
>Да что значит это слово то, пе-ре-но-си-мость?
>Не понимаю.

Программа без доработок работает на разных компьютерах с разной архитектурой CPU и разными операционными системами. Например - любая скриптопараша, начиная с бейсиков для восьмибитных компов 80х - более-менее переносима.
Аноним 09/07/18 Пнд 16:18:31  1225092
>>1224952
Есть легковесные альтернативы типа musl https://github.com/bminor/musl/tree/master/src/stdio
Аноним 10/07/18 Втр 14:36:54  1225552
Аноны, поясните что такое abstract data type. У меня задание сделать структуру с ADT, я чето гуглил, но не смог точно понять. Это как шаблоны что ли? как это реализовать на C
Аноним 10/07/18 Втр 14:55:14  1225563
>>1225552
> как это реализовать на C
Сайзоф и укозатели на войд - твои лучшие друзья.
Аноним 10/07/18 Втр 15:45:00  1225578
>>1225563
А сайзоф зачем?
Аноним 10/07/18 Втр 17:12:09  1225636
>>1225578
А как ты будешь делать какой-нибудь линкед-лист из структур, если не знаешь размер структуры?
Аноним 10/07/18 Втр 19:58:34  1225729
>>1225636
Напомни, всё принято мерить в char?
Аноним 10/07/18 Втр 20:05:15  1225736
>>1225729
Да. И на подавляющем большинстве машин char = byte = octet, поэтому никто не заморачивается и говорит про байты.
Аноним 10/07/18 Втр 20:25:33  1225755
>>1225736
octet это еще что?
А как может быть: байт из 16 бит или char из 2 байт?
Аноним 10/07/18 Втр 20:29:14  1225758
>>1225755
байт из 5, 7, 10 бит.
Октет - восьмёрка бит.
Аноним 10/07/18 Втр 22:45:20  1225855
>>1225755
> char из 2 байт
Возможно сделать такой компилятор, но смысла в этом нет. Так что на практике и байт, и char - минимальный адресуемый юнит. И это скорее не
> байт из 5, 7, 10 бит.
а 16 или 32.
Аноним 10/07/18 Втр 22:46:06  1225857
>>1225755
>char из 2 байт
Так не бывает. Только биты.
Как бы char и есть байт.
Аноним 10/07/18 Втр 23:49:16  1225883
Как можно посмотреть текст программы после обработки препроцессором? Если я пытаюсь в gcc -E передать, выдает 4 строки, хотя у меня в сишнике структура. По идее код больше должен становиться?
Аноним 11/07/18 Срд 00:13:10  1225891
>>1225883
Телепаты в отпуске, лето же. Тащи код. Да, по идее, должно быть много строк. Может быть, у тебя где-то #ifdef в false развернулся? Может, ты другой файл смотришь?
Аноним 11/07/18 Срд 01:06:19  1225903
>>1225857
Весь вопрос, где почитать, чтоб не как бы и о практичной интуиции — это, спасибо, знаю, а где это строжайше задается и где полномочия C, а где зависит от от чего зависит, кстати??
Аноним 11/07/18 Срд 12:12:04  1226047
Подкиньте флагов gcc и то что они делают. Имеет ли смысл использовать -std=c89(99,11), правда ли они компилят по старому стандарту
Аноним 11/07/18 Срд 12:14:29  1226049
ребята объясните пожалусто зачем пишут
> typedef struct { ... } yoba;
вместо простого
> struct yoba { ... };
есть какая-то разница вообще?
Аноним 11/07/18 Срд 13:24:56  1226085
>>1226047
https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/#toc-GCC-Command-Options
Подкинул, иди читай.

> Имеет ли смысл использовать -std=c89(99,11)
Очевидно, что если ты используешь недефолтную версию стандарта, ты ее указыаешь.

> правда ли они компилят по старому стандарту
Кто они?

>>1226049
> есть какая-то разница вообще?
В Си (но не в C++) у тегов struct и enum отдельные пространства имен, не пересекающиеся с пространством имен типов. Если ты напишешь struct yoba, то и использовать в качестве имени типа сможешь только struct yoba myvar, но не yoba myvar. Чтобы поиметь последний вариант и не писать лишних кейвордов, делают typedef.
Аноним 11/07/18 Срд 13:42:16  1226089
>>1226085
>В Си (но не в C++) у тегов struct и enum отдельные пространства имен, не пересекающиеся с пространством имен типов. Если ты напишешь struct yoba, то и использовать в качестве имени типа сможешь только struct yoba myvar, но не yoba myvar. Чтобы поиметь последний вариант и не писать лишних кейвордов, делают typedef.
Охуеть, спасибо.
Аноним 11/07/18 Срд 14:31:50  1226105
какой же си классный пиздец просто
Аноним 11/07/18 Срд 17:19:58  1226161
>>1226105
Двачую. Вкатился только два месяца назад, до этого писал на крестах и джаве, в адовом восторге до сих пор.
Аноним 11/07/18 Срд 19:20:56  1226243
>>1226161
Как вкатывался? Нехватка чего мешает на первых порах и как справляешься?
Аноним 11/07/18 Срд 19:26:56  1226250
>>1226161
>на крестах и джаве,
как ты через си перескочил, пиздунишка
Аноним 12/07/18 Чтв 13:03:34  1226595
image.png (122Кб, 250x324)
image.png (124Кб, 223x300)
>>1206626 (OP)
whoops
Аноним 12/07/18 Чтв 13:52:53  1226619
>>1226595
И ничем не похожи
Аноним 12/07/18 Чтв 16:08:26  1226683
Привет антон, говорят что тян не нужны, а нужны ли дейтелы?
Аноним 12/07/18 Чтв 16:12:52  1226686
Вечер в хату.
Поясните ньюфагу, как объявить define в одном хедере так чтобы он был виден в других хедерах?
Например:
defines.h
#define DEBUG

main.h
#ifdef DEBUG
#define A
#else
#define B
#endif
Аноним 12/07/18 Чтв 16:16:20  1226687
>>1226686
Заинклюдь один хедер в другой
Аноним 12/07/18 Чтв 16:24:00  1226691
>>1226686
Сам спросил, сам и отвечу.
Не знаю насчёт правильности такого решения, но можно просто вписать в

main.h
#include "defines.h"

#ifdef DEBUG
#define A
#else
#define B
#endif
Аноним 12/07/18 Чтв 16:24:53  1226692
>>1226687
Спасибо, не увидел твоего ответа.
Аноним 12/07/18 Чтв 16:40:40  1226699
>>1226243
Ну я писал на плюсах для себя, как устроился на работу - писал на джаве. А следующий проект был на Си+АСМ, так что я недолго думая сказал, что готов, хотя был не готов.
В принципе, вкатился очень легко, не могу сказать, что мне действительно что-то мешало в плане программировании.
А вот недостаток математики чувствовался (и сейчас чувствуется, но уже полегче) очень сильно, так как отрасль связана с криптографией. Но меня в общем-то хвалят, значит справляюсь.
Аноним 12/07/18 Чтв 16:52:43  1226708
Объясните самовару про то что такое слово(определение связанное с памятью) это типа как байт или че, не пойму
Аноним 12/07/18 Чтв 17:26:06  1226729
Что означает : 1?
Например:
u32 example : 1;
Аноним 12/07/18 Чтв 17:58:28  1226752
>>1226729
Поле в структуре занимает один бит
Аноним 12/07/18 Чтв 18:31:23  1226768
>>1226708
То количество бит, которое удобнее всего обрабатывать ALU. Поэтому регистры в процессоре обычно размером с машинное слово.
Аноним 12/07/18 Чтв 18:46:39  1226780
>>1226752
В данном случае u32 только для переносимости? Получается это просто флаг работает?в большинстве случаев
Аноним 12/07/18 Чтв 19:08:29  1226794
>>1226780
> В данном случае u32 только для переносимости?
Это от глупости. Во-первых, u32 намекает на 32 бита, хотя их там, конечно же, нет. Во-вторых, это наоборот ломает переносимость. Для битовых полей стандартом разрешены только bool и int (в том числе unsigned), возможность использовать что-то еще - implementation defined.

> Получается это просто флаг работает?
Да, обычно такое притаскивают ради флагов, для более читаемого кода, чтобы с масочками не ебаться.
Аноним 12/07/18 Чтв 19:26:58  1226805
>>1226794
Понятно, спасибо.
Аноним 12/07/18 Чтв 22:19:37  1226931
Где-то используются триграфы?
Аноним 13/07/18 Птн 00:26:03  1227004
>>1226931
Нигде, сейчас нет кодировок, в котором отсутствую представленные триграфами символы. Ты можешь столкнуться с триграфами разве что в обфусцированных исходниках или при написании своего компилятора (и то, если ты вдруг про них забудешь - никто и не заметит).
Аноним 14/07/18 Суб 14:36:13  1227961
Скажите, а va_list еще используется? Если да, то для каких задач?
Аноним 14/07/18 Суб 14:59:41  1227972
>>1227961
Для printf
/va_end
Аноним 14/07/18 Суб 19:06:19  1228215
Видел в каких-то пpимеpах как знак пеpевода стpоки \r\n. Я же всегда видел и использовал пpосто \n. Я пpочитал, что \r - это знак "пеpеноса каpетки", но всё же и с \n ноpм. В общем, зачем и почему?
Аноним 14/07/18 Суб 19:18:35  1228223
>>1228215
> В общем, зачем и почему?
есть виндовз и есть линупс
Аноним 14/07/18 Суб 19:52:49  1228237
>>1228215
В примерах \r\n не нужен. Если у тебя stdout/stderr или текстовый файл (открытый без флага "b"), то стандартная библиотека Си автоматически будет транслировать \n в \r\n, если платформа это требует (читай: Windows).

Вот если у тебя бинарные файлы, тогда для виндовых концов строк нужно будет явно писать \r\n. Или если у это велосипедный HTTP поверх голых сокетов, или просто CGI-скрипт, там тоже нужен явный \r\n.
Аноним 15/07/18 Вск 22:29:08  1228922
Подскажите, что значит ILP32 и LP64, почему long в первом случае 4 байта, а во втором 8?
Аноним 15/07/18 Вск 22:45:20  1228939
>>1228922
> ILP32
32-битная машина. integer, long и pointer по 32 бита.

> LP64
64-битная машина. Просто взяли и договорились, что будет так. На 64-битных машинах бывает еще LLP64 (винда), с 64-битным long long и указателями, и 32-битными int/long.
Аноним 16/07/18 Пнд 00:54:13  1228981
>>1228939
Спасибо. Я знал, что эта аббревиатура просто должна быть хоть мало мальски осмысленной. ILP это удобно.

А что за странные штуки типа __m64, __m128, __m256? Где они вообще обитают и как используются?
Аноним 16/07/18 Пнд 01:18:42  1228988
Делаю линуксовую консольную прогу, в которой нужно будет по хоткею вызывать открытие некоторого url в браузере. Вопрос: открывать браузер через popen() или есть вариант получше?
Аноним 16/07/18 Пнд 02:45:00  1229000
>>1228981
> Где они вообще обитают и как используются?
Это типы данных для SIMD-интринсиклв (SSE,AVX). Сам гугли.
Аноним 16/07/18 Пнд 02:49:26  1229001
>>1228988
Нет, в линуксе лучше вариантов нет. Более того, узнать, что за браузер установлен, тоже будет непросто. Существуют еще всякие xdg-open и аналоги, но и их может не быть. Поэтому обычно путь к браузеру пишут в конфиг.
Микроконтроллеры Аноним 16/07/18 Пнд 12:21:50  1229142
Здравствуйте! что можно почитать касательно программирования микроконтроллеров(конкретно код. про датащит подсказали)?
На си писал, но обычные программы. микроконтроллерами вообще не интересовался до настоящего момента.
Аноним 16/07/18 Пнд 12:41:17  1229148
Я использую vmovntdqa и ymm регистры, соответственно использую alignas(32) при определении блока памяти. При этом большую часть времени всё хорошо, но на определённом этапе работы программы я падаю с unaligned access. Какова вероятность, что gcc игнорирует мои потуги на алайн?
Аноним 16/07/18 Пнд 13:23:57  1229154
Сапую программачу, аноны как думаете стоит ли вникать в переносимые типы stdint.h и inttypes.h, и нахера вообще они нужны, как часто используются и используются ли вообще
Аноним 16/07/18 Пнд 13:44:03  1229159
>>1229154
Очень удобно, конечно используются
Аноним 16/07/18 Пнд 13:44:07  1229161
>>1229142
Касательно stm32 есть reference и programming мануалы, а также книга с имеющимся русским переводом - "Ядро Cortex-M3 компании ARM. Полное руководство". Ну и плюс ютуб, хотя качество материала там говняное и с ошибками, хотя для хеллоуворлдов пойдёт.
Аноним 16/07/18 Пнд 13:59:44  1229168
>>1229159
У праты очень непонятно об этом написано(
Аноним 16/07/18 Пнд 14:02:04  1229171
>>1229148
>>1229147
Кажется, приблизился к разгадке, но нужен хелп.

Есть структура, к одному из полей которой применяется атрибут alignas(32).
Вычисляется размер этой структуры с учётом паддингов (если есть), после чего динамически аллоцируется память (malloc).

И тут получается какое-то совсем странное поведение. Размер посчитан с учётом паддингов, вызванных в том числе и атрибутом алайн, а значит выделенной памяти должно быть достаточно для алайна. Но выравнивания не происходит.

Если делаю allocated_alloc(32, х) вместо malloc(х), то получаю выравнивание всей структуры целиком. При этом, я так понимаю, никакой гарантии выравнивания конкретного поля не будет, верно? Какие тогда есть варианты решения?

Из простого я вижу allocated_alloc для структуры, а поле, для которого мне нужно выравнивание, поставить первым (хотя по стандарту гарантий нет, чтоб аллокация будет в порядке определения, но обычно так и происходит).

Из правилнього я вижу использование allocated_alloc непосредственно для нужного мне поля и присвоение ему полученного указателя, а не для всей структуры.
Аноним 16/07/18 Пнд 15:33:41  1229210
>>1229171
malloc() не помогает потому, что может возвращать память, выровненную на sizeof(double), чего явно не хватает для выравнивания твоего поля.

Пример:
struct foo {
int a; // Офсет 0 выравнивается по 4 (неявный alignas для int) = 0, размер 4.
alignas(32) char b; // Офсет 4 выравнивается по 32 = офсет 32, размер 1.
}; // Офсет 33 выравнивается по 32 = размер структуры 64.

Допустим, malloc() вернула нам адрес 0x00000008. 8 + offsetof(struct foo, b) = 8 + 32 = 40 = пиздец выравниванию. Вот если бы адрес начала структуры был кратен 32, то и адрес b из-за alignas(32) тоже был бы кратен 32.

Почему в примере размер структуры выраванивается до 32? Если бы этого не происходило, то следующая структура в массиве таких структур оказалась бы невыровненной, т.е., адрес следующей структуры не был бы кратен 32, поэтому не получилось бы удовлетворить требование о выравнивании b на 32. Для выравнивания размера берется максимальное необходимое выравнивание внутри структуры. В язык вместе с alignas добавили еще и alignof, и если его применять к структуре, он как раз и выдает выравнивание поля, которому требуется наибольшее выравнивание.

И если ты скормишь результат alingof(struct foo) = 32 в aligned_alloc, то тебе дадут адрес, кратный 32, что автоматически гарантирует тебе правильное выравнивание как b, так и других полей, которым требуется меньшее выравнивание (ведь то, что кратно 32, кратно и 4). Поэтому используй aligned_alloc с alignof, выставляй правильные alignas нужным полям структуры и не выделывайся, ничего никуда двигать не нужно, и отдельно выделять тоже не нужно.

> хотя по стандарту гарантий нет, чтоб аллокация будет в порядке определения
Есть гарантии. Нет гарантий, что между полями не будет паддинга. Например, между a и b в примере - 28 байт мусора.
Аноним 16/07/18 Пнд 16:13:47  1229235
>>1229210
>И если ты скормишь результат alingof(struct foo) = 32 в aligned_alloc, то тебе дадут адрес, кратный 32, что автоматически гарантирует тебе правильное выравнивание как b, так и других полей, которым требуется меньшее выравнивание (ведь то, что кратно 32, кратно и 4). Поэтому используй aligned_alloc с alignof, выставляй правильные alignas нужным полям структуры и не выделывайся, ничего никуда двигать не нужно, и отдельно выделять тоже не нужно.
Можешь перефразировать?
Аноним 16/07/18 Пнд 16:18:41  1229239
>>1229210
>+ 32
Почему плюс? Это же никак не влияет на выравнивание.
Аноним 16/07/18 Пнд 16:20:23  1229242
Перечитал, вроде бы понял. Почему при выделении на стеке такой проблемы нет? Почему там достаточно alignas(32)?
Аноним 16/07/18 Пнд 18:07:06  1229313
>>1229239
Ты о том, где 8 + 32? Ну так 8 - это адрес, который выдала malloc(), 32 - смещение поля от начала структуры (там в комментариях к структуре посчитано). Результат сложения - адрес поля. Пример не очень получился из-за того, что офсет с выравниванием совпадает.

>>1229235
> Можешь перефразировать?
somestruct ∗ptr = aligned_alloc(alignof(∗ptr), sizeof(∗ptr)); и все будет ок.

>>1229242
> Почему при выделении на стеке такой проблемы нет?
Потому что malloc() возвращает void ∗, и это внешняя функция из библиотеки, компилятор не может ей через астрал рассказать, что именно ты собрался туда класть - из параметров там только размер (собственно, поэтому aligned_alloc со вторым параметром и появился). Для malloc() есть лишь требование вернуть адрес достаточно выровненный для любого из встроенных типов т.е., фактически для double или long double, так как они самые требовательные). Если для тебя такого выравнивания недостаточно - тебе нужен aligned_alloc (или раньше, до aligned_alloc выделяли больше необходимого и "вручную" выравнивали указатель).

При размещении структуры на стеке компилятор знает, что кладешь ты именно структуру и знает ее выравнивание, поэтому он может напрямую сгенеририровать код, который делает после уменьшения указателя стека выравнивает его по alignof(структура). Вот если ты будешь делать alloca(), которая опять же знает только размер, у тебя возникнет точно такая же проблема, как и с malloc().
Аноним 16/07/18 Пнд 18:23:20  1229323
>>1229313
Превосходно, спасибо огромное.

А как быть в случае, если структура должна быть упакованной (без паддингов)? С той идеей, чтоб её размер был постоянный и можно было при инициализции делать assert(X == sizeof(struct)), где X был бы суммой всех sizeof полей (эта штуки считалась бы снаружи, где сама структура не видна, известно только о наличии некоего хэндла void*).
Аноним 16/07/18 Пнд 19:07:23  1229352
>>1229323
> А как быть в случае, если структура должна быть упакованной (без паддингов)?
Не совсем понятно, зачем. Без выравнивания крэши могут быть даже на интах, если у тебя арм какой-нибудь. alignas тебе не поможет, но обычно компиляторы умеют в #pragma pack, которая эффективно шлет нахуй все требования по выравниванию: и явные alignas, и неявные для всяких int и double. А стандартного ничего нет - alignas может только увеличивать требуемое выравнивание, но не уменьшать.
#pragma pack(push, 1)
struct foo {
char a;
alignas(32) int b;
};
#pragma pack(pop)

static_assert(sizeof(struct foo) == 5, "wrong structure size");
Аноним 16/07/18 Пнд 19:27:04  1229362
>>1229352
>Не совсем понятно, зачем.
Мне тоже.
Идея чувака была в том, что "снаружи" считается сумма полей в compile-time, это значения хранится в enum рядом с другими такими же для других структур.

А при инициализации структуры полученный void приводился к struct и его sizeof сравнивался со значением, хранящимся в enum. Это, насколько я понял, дополнительная дебажная гарантия того, что мы используем правильный контекст.

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

А, вспомнил. Это ещё для того, чтоб можно было на стеке размещать структуру, не перевыделяя память наугад.

В итоге две идеи:
1. Компиляция в два этапа. Определяем структуру, считаем её sizeof на данной системе. Полученный результат подставляем в исходники для выделения блока памяти на стеке. С учётом этого компилим уже основной проект.

2. Предположение о каком-либо расширении gcc/стандарта, позволяющем выделять на стеке variable-length данные, честно обещая, что оно посчитается в compile-time.
Аноним 16/07/18 Пнд 19:27:18  1229364
5E68AE55-969B-4[...].png (295Кб, 1136x640)
C7ED4660-5DF4-4[...].jpeg (98Кб, 1136x139)
Чето нихуя не понял че тут написано(к слову пишет прата) разве принтф не отправляет вывод в тот момент когда выполнение программы достигает оператора вызова функции принтф? Какого хуя он мне тут про буферы задвигает(скорее всего конечно же я еблан, многого не знаю) но блять объясните че за хуйня я ебал
Аноним 16/07/18 Пнд 19:31:26  1229366
>>1229364
Буферизованный ввод-вывод.
stdio тебе предоставляет.
http://man7.org/linux/man-pages/man3/setbuf.3.html
Аноним 16/07/18 Пнд 21:24:43  1229461
>>1229366
> дополнительная дебажная гарантия того, что мы используем правильный контекст.
Какая-то странная гарантия. Раз изменил структуру - правь enum тогда, зачем тебе упаковка?

Если очень хочется знать, что структура не поменялась, лучше понатыкать static_assert (будет проверять на стадии компиляции), сравнивающий sizeof структуры с константой, можно даже проверять offsetof каждого поля, чтобы еще более быть уверенным. Но правильнее всего будет комментарий в определении структуры, поясняющий, как именно принято ломать совместимость со старыми версиями структуры в данном случае.

> Предположение о каком-либо расширении gcc/стандарта, позволяющем выделять на стеке variable-length данные,
alloca() же. Только к чему тут это?

> Полученный результат подставляем в исходники для выделения блока памяти на стеке.
sizeof() и так compile-time (за исключением VLA), зачем что-то подствавлять? В общем, снова нихуя не понятно.
Аноним 16/07/18 Пнд 21:25:23  1229462
>>1229362
>>1229461
Промазал.
Аноним 17/07/18 Втр 12:43:12  1229813
>>1229461
>как именно принято ломать совместимость со старыми версиями структуры в данном случае
Звучит забавно конечно.

>сравнивающий sizeof структуры с константой, можно даже проверять offsetof каждого поля
Да, об этом думал. В общем, хрен знает. Но спасибо тебе большое.
Аноним 17/07/18 Втр 19:43:00  1230047
>>1229461
>alloca()
The alloca() function allocates size bytes of space in the stack frame of the caller. This temporary space is automatically freed when the function that called alloca() returns to its caller.

>when the function that called alloca() returns to its caller.

То есть именно так, а не при выходе из scope? Грустно как-то.
Аноним 17/07/18 Втр 21:33:52  1230142
>>1230047
> То есть именно так, а не при выходе из scope? Грустно как-то
Компиляторы чаще всего не заморачиваются scope-ами, и выделяют стандартным прологом все автоматические переменные за раз (но бывает, что выделяют меньше и потом переиспользуют локальные переменные и даже аргументы под что-то другое). В любом случае, это стек, его не жалко.
Аноним 19/07/18 Чтв 01:09:41  1230744
Доброй ночи. В треде по ++ меня завернули к вам.
Я прошу рекомендации: что почитать, чтобы вникнуть в основы сетевого программирования?
Сам не профи и с OSI и всякмими сокетами-портами на вы и шепотом, не знаю даже, как это тестить (ну типа, хеллоуворлд написать чтобы проверить поток вывода на экран — понятно, а с сетевыми штуками куда?) такие вот начальные данные. Нужно на первое время хотя бы поверхностное, но общее понимание что к чему. Какую литературу/видеолекции порекомендуете?
Аноним 19/07/18 Чтв 09:10:25  1230834
>>1230744
Stevens. UNIX Network programming
Аноним 19/07/18 Чтв 23:18:59  1231326
Добрый вечер.
Вы пользуетесь аллокаторами?
Я тут пробовал поставить всякие dmalloc, tmalloc, jemalloc, но нихрена не получается, потому что у меня Windows. Пробовал через MinGW и MSYS2 — ничего не помогло.
У dmalloc выдает при запуске ./configure кучу ошибок типа Core Dumped, остальные вообще даже запускать скрипт конфигурации не хотят.

Есть какой-то способ поставить их под винду или, раз у меня шындовс, то всё, несудьба?
Аноним 19/07/18 Чтв 23:28:29  1231331
>>1231326
> Вы пользуетесь аллокаторами?
Да. Маллок из сишной стандартной либы, говорят, неплох. Расскажи, зачем тебе понадобился нестандартный? Поиграться? Поставь на виртуалку линукс, поиграйся и успокойся. Вот если ты странного хочешь, то boehm gc на винде работает. Только зачем?
Аноним 19/07/18 Чтв 23:33:29  1231336
>>1231331
Въехать в суть хочу. Там один дядька в шляпе показывал, как эти штуки помогают находить утечки памяти. Вот себе тоже думал, ща запилю, ан нет.
А boehm gc так умеет? Там еще какое-то замерение скорости он делал, короче, интересно. Значит, виртуалка? Какую посоветуешь?
Аноним 20/07/18 Птн 00:14:21  1231358
>>1231336
> как эти штуки помогают находить утечки памяти
У белых людей существует gcc/clang -fsanitize=address,leak давно уже. Но на винде оно в leak не умеет, только в address. Зато на винде ты можешь перед завершением программы посмотреть неосвобожденные блоки банальным HeapWalk(GetProcessHeap(), ...), потому что malloc() в гцц и шланге пользуется стандартной виндовой кучей.

> А boehm gc так умеет?
Нет, это противоположное решение проблемы - автоматическая сборка мусора (с оговорками).

> Значит, виртуалка? Какую посоветуешь?
Дефолтный виртуалбокс. Ну или впску дешевую купи за бакс в месяц - GUI тебе не нужно, а поиграть с компилятором за глаза хватит.
ПЕРЕКАТ Аноним # OP  20/07/18 Птн 03:14:03  1231399
Юбилейный 25 тред!

>>1231397 (OP)
>>1231397 (OP)
>>1231397 (OP)
>>1231397 (OP)


Топ тредов
Избранное