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



<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
506 | 35 | 198

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

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

Что читать:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- №29: https://arhivach.cf/thread/347271/
- №30: https://arhivach.cf/thread/366174/
- №31: https://arhivach.cf/thread/366210/
Аноним 20/07/18 Птн 07:33:27  1231434
первыйнах
Аноним 20/07/18 Птн 15:08:49  1231673
Превед, антон. Я блять нихуя не понял што тут написано(прата нажестил). Объясните, растолкуйте плз, с меня нихуя
Аноним 20/07/18 Птн 15:09:43  1231675
2FDB02FF-21A1-4[...].png (295Кб, 1136x640)
7C7BBF75-9292-4[...].jpeg (108Кб, 1136x235)
>>1231673
Бля забыл фото прикрепить, пиздец я еблан
Аноним 20/07/18 Птн 15:10:07  1231677
>>1231673
Да.
Аноним 20/07/18 Птн 15:10:24  1231678
>>1231675
>пиздец я еблан
О да.
Аноним 20/07/18 Птн 15:12:29  1231679
>>1231677
Пизда.
Аноним 20/07/18 Птн 15:15:38  1231681
>>1231675
Тот редкий случай, когда в объяснении из книги не только все понятно, но еще и добавить нечего.
Аноним 20/07/18 Птн 15:17:43  1231683
>>1231679
>Пизда.
Тебе лишь снится.
Аноним 20/07/18 Птн 15:19:19  1231685
Можете придумать мне задание по языку Си? Самому в голову ничего не лезет.
Аноним 20/07/18 Птн 15:22:20  1231686
warosu.png (301Кб, 1920x1080)
>>1231685
Аноним 20/07/18 Птн 15:24:22  1231687
>>1231686
Спасибо.
Ролл. (ТСР чат уже делал).
Аноним 21/07/18 Суб 06:07:38  1232129
>>1231686
Пытался я сделать FTP-клиент. А получился кривой telnet. Ну и рукожоп же я.
Мимо
Аноним 21/07/18 Суб 07:02:27  1232133
>>1232129
Если осилил кривой телнет, значит посылку команд и чтение статусов тем более осилишь. Не пытайся сразу что-то полнофункциональное реализовать, сделай загрузку и скачивание по заранее известным путям (чтобы не ебаться с LIST), в пассивном режиме. Там нужно уметь буквально несколько команд.
Аноним 21/07/18 Суб 11:05:52  1232172
>>1231397 (OP)
перекатился
Аноним 23/07/18 Пнд 01:23:58  1233323
Можно ли прогать на си из под винды или моветон?
Аноним 23/07/18 Пнд 01:47:48  1233331
>>1233323
Можно, без особых проблем, и даже с бонусами в виде адекватных отладчиков.
Аноним 23/07/18 Пнд 10:35:08  1233410
Что почитать, чтобы в принципе понимать, что мне даёт отладчик по сравнению с puts("Nya") для проверки, по какому поути пошла программа.
Ну, т.е. самые общие определения и преимущества, чтобы я потом понимал, зачем я изучаю конкретный отладчик.
Аноним 23/07/18 Пнд 14:13:32  1233533
Антоны, тут у меня одна проблема. Функция - возвращает указатель на структуру. Например я результат функции сохранил в переменной и затем заебашил free. Будет утечка?
Аноним 23/07/18 Пнд 18:11:53  1233631
599716131.png (77Кб, 317x372)
Собираюсь вкатиться в вашу сказку, решил начать с теории, сейчас читаю К&R. Стивен Прата на очереди, когда к практике перейду. Рекоммендации из шапки просмотрел, но есть пара вопросов: какой же из конопляторов оптимальней для 32бит, и что можно почитать по Win API для сишки?
Аноним 23/07/18 Пнд 18:19:57  1233633
>>1233631
>почитать по Win API для сишки
Рихтера и Петцольда
Аноним 23/07/18 Пнд 18:40:16  1233638
>>1233631
> крестопик
Аноним 23/07/18 Пнд 19:17:49  1233650
Здраствуйте. Шапку смотрел, но не понял, есть ли книжка по C текущего стандарта, которая бы учила программированию с нуля? KR читать готов, но кажется так будет лишний шаг с переучиванием с девятсотлохматого стандарта на актуальный.
Короче, хочу вкатываться сразу в новейший-моднйший-C. Что посоветуете?
Аноним 23/07/18 Пнд 19:28:24  1233656
> - Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
Аноним 23/07/18 Пнд 19:29:34  1233657
>>1233656
>>1233650
Аноним 23/07/18 Пнд 20:09:18  1233676
>>1233533
Код? Но в целом у тебя утечек не будет, после free() будет переменная, указывающая в воздух. Или ты по указателю данные забрал? В общем, тащи код.
Аноним 24/07/18 Втр 03:00:38  1233903
>>1233656
Спасибо. А тяжелое вообще чтиво? Ну так, если с KR сравнить или с TCPL Страуструпа?
Аноним 24/07/18 Втр 08:20:54  1233957
>>1231686
roll
Аноним 24/07/18 Втр 08:43:36  1233968
>>1233676
person loadFromFile(...);
person
hippo = loadFromFile(...);
free(hippo);
Аноним 24/07/18 Втр 08:44:11  1233969
>>1231686
Roll
Аноним 24/07/18 Втр 11:35:13  1234059
Можно ли организовать считывание функций с файла?
Аноним 24/07/18 Втр 11:49:16  1234070
Я тут сижу и думаю, как можно узнать размер функции в байтах? Звучит тупо, но это реально нужно для одной моей шальной затеи.
Аноним 24/07/18 Втр 12:01:09  1234077
>>1234070
>
>
> Я тут сижу и думаю, как можно узнать размер функции в байтах? Звучит тупо, но это реально нужно для одной моей шальной затеи.

Никак. На самом деле компилятор тебе может

1) Её вообще заинлайнить
2) Наоптимизировать вызовы так, что даже с идой без поллитры не разберешься.
3) Чтобы подобную хуйню реализовать тебе в машоб-тредик надо, на нейросеточках учить программу дизассемблировать выхлоп компилятора.
Аноним 24/07/18 Втр 12:04:12  1234078
>>1234077

Ну а если тебе очень надо, то есть в GCC ключ -ffunction-sections который позаолит тебе потом из object-файла то что тебе надо прочитать с помощью readelf -S t.o | grep ' .text.'
Аноним 24/07/18 Втр 12:44:00  1234089
>>1231397 (OP)
>Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека"
stdalign не завезли, пришлось делать две ветки windows/linux.
Аноним 24/07/18 Втр 12:44:46  1234090
>>1234059
Скрипты внешние что-ли? Если да, то взгляни на Lua.
Аноним 24/07/18 Втр 13:14:35  1234106
>>1234078
У меня есть задача записать функцию в бинарный файл. Для этого мне желательно знать ее размер.
Аноним 24/07/18 Втр 13:21:18  1234110
>>1234106
Я подумал, что могу оканчивать запись в функцию после байта команды return? Так же можно, наверное?
Аноним 24/07/18 Втр 13:30:09  1234115
image.png (468Кб, 1920x1080)
>>1234110
Я считал 40 байтов с указателя на начало функции. Вот они в hex редакторе. Но в них нет байтов C3 и CB, которые означают return. Неужели функция больше 40 байтов, или же я обосрался с кодом?
Аноним 24/07/18 Втр 13:32:49  1234117
>>1234110
>Я подумал, что могу оканчивать запись в функцию после байта команды return? Так же можно, наверное?

1) Команда return из сей в процессе компиляции может стать чем угодно. начиная от ассемблерной ret и заканчивая сшивкой кода разных функций воедино совершенно рандомными регистрами или через стек без каких-либоявных call/ret. В зависимости от желания компилятора.

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

От себя вангану, что ты хочешь навелосипедить JIT-компилятор для С, но не знаешь в этой области кроме самого языка С нихуя. В таком случае тебя стоит отправить окунуться в волшебный мир плюсов и изучать LLVM, как самый быстрый способ сделать то, что тебе надо.
Аноним 24/07/18 Втр 13:34:31  1234120
>>1234117
Я хотел позабавиться и сделать считывание функции из бинарного файла. Практической пользы почти никакой, просто из интереса. То есть я беру указатель на функцию и дальше записываю туда байты из бинарного файла. Как мне казалось и как кажется, это должно работать.
Аноним 24/07/18 Втр 13:36:47  1234121
изображение.png (233Кб, 480x480)
>>1234115
>Я считал 40 байтов с указателя на начало функции. Вот они в hex редакторе. Но в них нет байтов C3 и CB, которые означают return. Неужели функция больше 40 байтов, или же я обосрался с кодом?

Бляяяяапаааааааааааа
Аноним 24/07/18 Втр 13:37:48  1234122
>>1234121
Скажи мне где я обосрался, я тупой, извините уж.
Аноним 24/07/18 Втр 13:44:04  1234124
>>1234122
>Скажи мне где я обосрался, я тупой, извините уж.

В данном случае - ты словил конкретное такое матерое UB, объявив функцию, которая нигде не используется и взяв с неё указатель.

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

Исключение - функции, объявленные как библиотечные путем __declspec(dllexport) и __attribute__((visibility("default"))) в случае гцц и скомпилированные в lib/dll. В таком случае компилятор блюдет соглашение о вызовах и ты действительно можешь там чего-нибуть накопать. Но и в этом случае с твоим ходом мыслей можешь соснуть хуйца.
Аноним 24/07/18 Втр 13:45:42  1234126
>>1234124
А если надавать кучу ключей компилятору, чтобы он не инлайнил и т.п.?
Аноним 24/07/18 Втр 13:51:34  1234129
>>1234124
>>1234117
Cпасибо за помощь, решил оставить эту затею и пойти чистить карпа.
Аноним 24/07/18 Втр 14:16:56  1234138
>>1234129

Почистишь карпа - прочитай:

https://habr.com/post/119850/
https://habr.com/post/120005/
https://habr.com/post/120424/
https://habr.com/post/120516/
https://habr.com/post/120881/
Аноним 24/07/18 Втр 14:23:25  1234140
>>1234138

То же самое, но с использованием стандартных опердней без велосипедов:

https://gnuu.org/2009/09/18/writing-your-own-toy-compiler/
Аноним 24/07/18 Втр 15:01:59  1234163
>>1234138
>>1234140
Спасибо!
Аноним 24/07/18 Втр 16:00:39  1234194
>>1234115
Это выебывается (читай оптимизирует для предсказателя переходов) visual studio, байты E9 A9 это JMP (считай goto) на реальное начало функции. Посмотри в отладчике оффсет либо интерпретируй следующие байты адреса, чтобы попасть на реальную функцию
Аноним 24/07/18 Втр 19:59:51  1234286
>>1233968
Ну вот ты сделал free(), и твой hippo перестал быть валидным, ты не можешь больше к нему обращаться. Поэтому обычно после free(hippo) делают hippo = NULL, чтобы случайно не вляпаться. А утечек нет.

>>1234059
Скорее всего ты хочешь dlopen/dlsym или LoadLibrary/GetProcAddress соответственно. Но, конечно же, можно и самому грузить рандомный исполняемый код в память и выполнять, только это нихрена не простая задача.

>>1234070
> Я тут сижу и думаю, как можно узнать размер функции в байтах?
В общем случае нельзя. У функции нет четких границ. Твоя функция может начинаться в середине другой функции, а заканчиваться прыжком в середину еще какой-то функции.

>>1234089
> stdalign не завезли
Правда что ли? У меня вроде работало. Хедера нет - завези сам. alignof/alignas точно поддеживаются.
Аноним 24/07/18 Втр 20:14:56  1234295
>>1234286
> Правда что ли? У меня вроде работало
Глянул. Оно в шланговом тулсете есть, поэтому и работало.
Аноним 24/07/18 Втр 20:33:20  1234305
image.png (727Кб, 1920x1080)
>>1234194
Это случаем не функция?
Аноним 24/07/18 Втр 20:39:53  1234312
>>1234305
И выше тоже функция. Возьми сдампи .obj или .o, чего ты в хекс-редакторе гадаешь?
Аноним 24/07/18 Втр 20:43:40  1234315
image.png (513Кб, 1920x1080)
>>1234312
Может я чего-то не понял, но это вроде это?
Аноним 24/07/18 Втр 20:45:48  1234316
>>1234315
А это, мой дорогой друг, секция данных, там константы лежат. Объясни, что ты хочешь сделать и нахуя.
Аноним 24/07/18 Втр 20:47:30  1234321
>>1234315
Открой Visual Studio Command Prompt, напиши dumpbin /ALL main.obj хотя бы.
Аноним 24/07/18 Втр 21:07:08  1234334
>>1234305
Не, функция сишная всегда после вызова начинается с байта 55 - PUSH EBP, для указания через EBP на локальные переменные
Аноним 24/07/18 Втр 21:24:41  1234347
>>1234315
Вообще тебе может быть легче, взяв старенькую утилиту obj2asm и текстовый исходник .c
открываешь в папке с ней командную строку и пишешь что-то вроде

obj2asm project.obj project.c > output.txt

> нужна чтобы вывод в консоль был перенаправлен в файл
Аноним 24/07/18 Втр 21:31:26  1234354
>>1234334
> функция сишная всегда после вызова начинается с байта 55 - PUSH EBP
Чушь. Есть -fomit-frame-pointer, /Oy, есть функции-обертки, есть /hotpatch, втыкающий в начало функции mov edi,edi, есть int getRandomNumber(void) { return 4; }, так что предполагать что-либо о начале функции нельзя.
Аноним 24/07/18 Втр 23:03:12  1234407
>>1231397 (OP)
Привет, двач. У меня тут появилась промлема
int a;
printf("%d\n", a);
почему выводит 4201019 наверное у другних будет другое число, но у меня именно это
Что это за число ? Я просто тупой
Аноним 24/07/18 Втр 23:19:55  1234415
>>1234407
Ты не присвоил знначение x, потому printf распечатала мусор из стека (похоже что какой-то адрес, оставшийся в памяти)
Аноним 25/07/18 Срд 00:31:38  1234434
>>1234407
>почему UB именно такой
>расскажите мне
Аноним 25/07/18 Срд 00:44:43  1234441
>>1234434
Рассказали уже. В переменной лежит адрес возврата, оставшийся в стеке после вызова какой-то функции. Адрес характерный для кодовой секции exe-шника в винде.
Аноним 25/07/18 Срд 01:48:26  1234461
>>1234434
Не почему он такой, а почему там какоет непонятное число которое я никуда не записывал я же написал что я тупой, чё ты приебался
Аноним 25/07/18 Срд 06:02:27  1234501
>>1234316
Я хочу записать байты функции в текстовый файл, чтобы потом можно было загружать оттуда функцию. Нахуя - не знаю.
Аноним 25/07/18 Срд 06:18:14  1234507
image.png (346Кб, 1920x1080)
>>1234347
Вот это выползло.
Аноним 25/07/18 Срд 07:51:31  1234522
>>1234501
Изобретаешь динамически-подключаемые библиотеки?
Аноним 25/07/18 Срд 07:59:08  1234523
>>1234522
Да. Хочу написать что-то свое.
Аноним 25/07/18 Срд 12:23:24  1234615
>>1234295
Отож. Сам недавно собирался, пришлось в виндовый ифдеф воткнуть __declspec( align( # ) )
Аноним 25/07/18 Срд 21:05:43  1234913
Есть следующее условие:

if (index == 1 || strcmp(a, b) == 0) { ... }

Правильно ли я понимаю, что если index == 1, то strcmp уже не будет затем вызываться?
Аноним 25/07/18 Срд 21:12:34  1234919
>>1234523
Так линкер пиши свой. Или грузи объектники. .bin нормально ты все равно не загрузишь.

>>1234913
>Правильно ли я понимаю, что если index == 1, то strcmp уже не будет затем вызываться?
Правильно. Операторы &&, || и частично ?: (когда дело касается второго и третьего операнда) ленивые, и не вычисляют правый операнд, если он не повлияет на значение выражения.
Аноним 26/07/18 Чтв 06:34:07  1235152
>>1234913
Чтобы вызывался надо поставить |.
Аноним 26/07/18 Чтв 09:33:58  1235195
Что значит запись "!!" перед чем-то?
Двойное отрицание? Но зачем.
Аноним 26/07/18 Чтв 11:42:22  1235280
>>1235195
Пошёл на хуй, не осиливший энтри-левел книги скам!
Аноним 26/07/18 Чтв 12:11:13  1235287
>>1235195
Всё, что не ноль, становится строго единицей.
Аноним 26/07/18 Чтв 13:06:29  1235317
>>1235287
Спасибо.
Аноним 26/07/18 Чтв 13:08:32  1235318
>>1235280
Какой ты злой, все лабы уже написал?
Аноним 26/07/18 Чтв 14:26:14  1235379
image.png (193Кб, 1600x900)
image.png (191Кб, 1600x900)
>>1234913
Видимо да
Аноним 26/07/18 Чтв 21:22:23  1235799
Анон подскажи почему кракозябры на винде в консоли
SetConsoleCP(1251); SetConsoleOutputCP(1251); setlocale(LC_ALL, "Rus");
ничего не помогает, MinGW.
На clang все норм работает.
Аноним 26/07/18 Чтв 21:27:27  1235803
>>1235799
По умолчанию в консоле 866 локаль используется
Аноним 26/07/18 Чтв 21:31:12  1235807
>>1235799
Рекомендую >>1224213 вот это решение, пока тред еще не уплыл. SetConsole[Output]CP убери.

> подскажи почему
Потому что исходник в UTF-8, наверное. Но лучше всего его в UTF-8 и оставить.
Аноним 26/07/18 Чтв 21:46:53  1235817
>>1235807
>Потому что исходник в UTF-8, наверное. Но лучше всего его в UTF-8 и оставить.
т.е. от кодировки исходников генерируется различный объектный код?
Аноним 26/07/18 Чтв 21:50:38  1235823
>>1235817
Нет. В Си есть source charset и execution charset. Если они отличаются, то компилятор транслирует строковые литералы. Если execution charset не совпадает с фактическим (т.е., если по-русски, строковые литералы в бинарнике не в той кодировке, что ожидает консоль), ты видишь крякозябры.
Аноним 26/07/18 Чтв 21:53:27  1235826
>>1235823
>>1235817
А насчет того, почему лучше не трогать source charset - потому что у гцц по умолчанию UTF-8, у всякие редакторов UTF-8, в линупсе UTF-8, на всяких гитхабах UTF-8.
Аноним 26/07/18 Чтв 22:03:18  1235831
>>1235799
>>1235807
>Рекомендую >>1224213 вот это решение, пока тред еще не уплыл. SetConsole[Output]CP убери.
Короче методом научного тыка нашел более красивый способ:
SetConsoleCP(CP_UTF8);
SetConsoleOutputCP(CP_UTF8);
Мб кому пригодится
Аноним 26/07/18 Чтв 22:04:37  1235832
>>1235831
или тут есть побочные свойства?
Аноним 26/07/18 Чтв 23:41:44  1235894
>>1235832
Еще полтора года есть подводный камень: консоль с кодировкой UTF-8 в Windows 7 работает через пень-колоду. Иногда не работает вовсе.
Аноним 27/07/18 Птн 17:30:17  1236367
Управляющие операторы это те что while или if так ведь? Считается ли оператор возврата return управляющим?
Аноним 27/07/18 Птн 17:39:23  1236372
А как насчет оператора инкремента или декремента, они к какому типу относятся?
Аноним 27/07/18 Птн 17:41:09  1236373
>>1236367
Не считается.
Аноним 27/07/18 Птн 17:43:54  1236374
>>1236372
К слодению и вычитанию
Аноним 27/07/18 Птн 17:45:55  1236375
>>1236372
унарные
Аноним 27/07/18 Птн 17:50:44  1236377
Как насчет оператора while? Управляющий?
Аноним 27/07/18 Птн 17:59:15  1236388
Как насчет оператора c++? Управляющий?
Аноним 27/07/18 Птн 18:00:42  1236389
>>1236377
>>1236388
Заместитель управляющего.
Аноним 27/07/18 Птн 18:02:33  1236392
>>1236389
Нет. В Си есть source charset и execution charset. Если они отличаются, то компилятор транслирует строковые литералы. Если execution charset не совпадает с фактическим (т.е., если по-русски, строковые литералы в бинарнике не в той кодировке, что ожидает консоль), ты видишь крякозябры.
Аноним 27/07/18 Птн 18:03:40  1236394
>>1236392
Ты написал бота на С?
Аноним 27/07/18 Птн 19:21:00  1236446
>>1236394
Я? Какого бота?
Аноним 27/07/18 Птн 20:11:52  1236475
Как scanfить char*? А то выдает мусор какой-то.
Аноним 27/07/18 Птн 20:55:14  1236498
>>1236475
Все, понял.
Аноним 28/07/18 Суб 03:52:17  1236609
image.png (192Кб, 1600x900)
>>1231397 (OP)
почему

0061FF24
вот тут инт хранится
0061FF28
а вот тут чар, да ? Тогда почему 4 байта выделилось ? Можете пояснить, просто я тупой и в книге это не объяснялось
0061FF2C
Аноним 28/07/18 Суб 04:16:36  1236610
>>1236609
> Тогда почему 4 байта выделилось
Выделился байт, остальные три - выравнивание, чтобы следующий член структуры получил адрес, кратный четырем. Это, в свою очередь, нужно для того, чтобы процессору было удобнее (и/или быстрее) его читать. На x86 ты можешь сделать #pragma pack, чтобы структуры упаковывались плотно: >>1229352, но на многих RISC-архитектурах процессор вообще не может прочитать слово по невыравненному адресу - сразу alignment fault, гроб-гроб-кладбище. Если хочешь подробнее: http://www.catb.org/esr/structure-packing/ (где-то было и на русском), но можешь просто не заморачиваться, компилятор обо всем позаботится пока ты не захочешь SSE: >>1229171.
Аноним 28/07/18 Суб 04:18:11  1236611
>>1236610
Тоесть 3 байта заполняются ничем ? Впустую ?
Аноним 28/07/18 Суб 04:23:31  1236612
>>1236609
>>1236610
Как-то из моего ответа не очевидно, что для char выравнивания не требуется (если очень вкратце, примитивный тип выравнивается на свой размер), т.е., char a; char b; будут лежать рядом, без дыр. Так же и short a; short b; или даже short a; char b; char c;. Собственно, в перестановке полей структуры так, чтобы не было дыр, и заключается "искусство" ручной упаковки структур по ссылке выше.

>>1236611
Да, ничем. У этих байтов нет имени, к ним нельзя обращаться (физически можно, конечно, выебнуться, но по стандарту нельзя). Чем оно заполнится - зависит от расположения структуры. Статическая память (глобальная) - скорее всего, там будут нули. Стек или куча - мусор.
Аноним 28/07/18 Суб 04:24:22  1236613
>>1236610
>>1236611
А где ты эту инфу взял ? Хочу нормально разобраться в сишке, а не чтоб смотреть на двачи\стаковерфловы каждый раз когда чего-то не понимаю
Аноним 28/07/18 Суб 04:33:06  1236615
>>1236613
Ээээ. Ну я тебе выше ссылку дал. И стандарт, но в нем сложно что навскидку найти. И википедия, и стековерфлоу, что в них плохого? И вообще, в теории (с точки зрения стандарта Си), тебя не должно волновать какое-то там выравнивание. У тебя есть offsetof() и sizeof(), а остальное не твое дело.
Аноним 28/07/18 Суб 04:34:16  1236617
>>1236615
Да, спасибо анон, я просто слепой даун
Аноним 28/07/18 Суб 10:04:04  1236649
Пацаны, есть толк от бинарной записи структур/массивов?
Аноним 28/07/18 Суб 10:40:47  1236658
>>1236649
ПИШЕШ
@
ЧИТАЕШ
Аноним 28/07/18 Суб 11:46:48  1236669
Есть функция

void func (int t)
{

struct {
char a[10];
char b[10];
char c[10];
} arr[30];

for (int i = 0; i < 25; i++)
puts(arr.a);

// ... далее ещё код, где используется arr.a
}

Мне нужно, чтобы при t == 1 вместо arr.a вызывался arr.b во всей функции, а при t == 2 arr.c

То есть типа такого:

if (t == 1)
var = b;

if (t == 2)
var = c;

arr.$var

Как это на Си сделать?
Аноним 28/07/18 Суб 11:48:24  1236670
>>1236669
Там после arr везде i в квадратных скобках.
Аноним 28/07/18 Суб 12:37:31  1236695
Антоны, допустим я сделал хэдер с функциями. Нужно ли внутри него совать #include <stdio.h> и т.п.?
Аноним 28/07/18 Суб 12:43:56  1236698
>>1236695
Если ты добавишь его в хэдэр, то в мейн файле он тебе не понадобится
Аноним 28/07/18 Суб 12:49:47  1236700
>>1236698
Спасибо тебе!
Аноним 28/07/18 Суб 15:58:23  1236790
>>1236649
> главное не проебать разный align компилятораом при оптимизациях, endian и прочие тонкости выстрела себе в ногу.
Аноним 28/07/18 Суб 17:57:44  1236842
Есть легальная возможность изменить тип члена структуры без использования union?
Аноним 28/07/18 Суб 18:54:42  1236867
Почему если я передам функциибез прототипа принимающей аргумент типа int значение double то фактический аргумент не получит новое значение? Разве не работает принцип усечения дробной части?
Аноним 28/07/18 Суб 20:13:05  1236890
Как можно реализовать ввод строки, чтобы выделять памяти только столько сколько нужно? Иначе же получается, например, если мы выделили char buf[1024], то мы в любом случае будем столько памяти тратить.
Аноним 28/07/18 Суб 20:18:13  1236895
>>1236669
> Мне нужно, чтобы при t == 1 вместо arr.a вызывался arr.b во всей функции, а при t == 2 arr.c
Нихуя не понял, что тебе нужно, но видимо, ты хочешь трехмерный массив вместо массива структур, но боишься: arr[30][3][10]. Ну и используешь, хоть puts(arr[ i][0]), хоть arr[ i][t].

>>1236695
> хэдер с функциями. Нужно ли внутри него совать #include
Да, если ты используешь в хедере типы или макросы из stdio.h (например FILE). Это правило хорошего тона, чтобы тот, кто подключает твой хедер не задумывался, что там нужно подключить до него и в каком порядке.

>>1236698
> то в мейн файле он тебе не понадобится
Если мэйн использует функции из stdio.h, нужно подключать stdio.h явно. Потому что реализация anonlib.h может измениться, он уберет из своего anonlib.h инклуд stdio.h, и все сломается.

>>1236842
> Есть легальная возможность изменить тип члена структуры без использования union?
Ну можно ∗(othertype ∗) &structure.member, но это не совсем легальная возможность. Хотя все так делают.

>>1236867
> Почему если я передам функциибез прототипа принимающей аргумент типа int
Перефразируй или покажи пример. Если ты в printf суешь дабл вместо инта, то он просто не знает, что нужно преобразовывать дабл в инт.

>>1236890
> если мы выделили char buf[1024], то мы в любом случае будем столько памяти тратить.
Ты не переживай, у тебя стек кроме этого килобайта еще сотню "впустую" тратит. Но ты можешь выделить много, посчитать длину и перевыделить ровно столько, сколько нужно, получив кучу других проблем из-за своей экономии.
Аноним 28/07/18 Суб 20:21:27  1236899
>>1236895
>Ты не переживай, у тебя стек кроме этого килобайта еще сотню "впустую" тратит. Но ты можешь выделить много, посчитать длину и перевыделить ровно столько, сколько нужно, получив кучу других проблем из-за своей экономии.
Я вот это и делаю, получается пиздец какой-то несусветный.
Аноним 28/07/18 Суб 20:26:57  1236903
>>1236899
> Я вот это и делаю, получается пиздец какой-то несусветный.
Я не знаю, какую проблему ты решаешь, но можешь почитать про таблицы строк. Делаешь динамический массив, кладешь строки вплотную, при необходимости делаешь realloc. Но до строк придется ходить по двум указателям: по адресу массива и по индексу первого символа строки внутри массива. Прямой указатель на строку долго хранить нельзя, потому что при realloc() массив вместе с твоей строкой может уехать в рандомное место кучи.
Аноним 28/07/18 Суб 20:44:07  1236912
>>1231397 (OP)
Че делать если простейшие крестики-нолики у меня вышли в 100 строчек ? Как понять как писать правильно ? https://pastebin.com/z0S2Cqck
тиктактое было бы прикольно еслиб вы указали мне на мои недочеты я почти уверен что функцию check_combo можно сделать по другому, но я не увидел как
Аноним 28/07/18 Суб 20:45:56  1236914
>>1236912
На количество строчек насрать.
Аноним 28/07/18 Суб 21:04:33  1236923
анон, реально вкатиться с нуля в си и шоб кто то взял на работу?
Аноним 28/07/18 Суб 21:09:17  1236925
>>1236912
1) В game() твой while можно заменить на for (turnscount = 0; turnscount < 9; turnscount++) и по выходу из цикла говорить, что ничья, а там, где у тебя the "winner is ..." выходить сразу из функции.
2) Кусок с goto вынеси в функцию, которая крутится в while и матерится, пока игрок не введет нормальные координаты. Координаты можешь по указателям возвращать или глобальными переменными, если в указатели пока не можешь.
3) Игра пошаговая, check_combo может проверять только выигрыш того игрока, который только что сходил - это упростит check_combo сразу вдвое. И проверять можно вложенными for(), а не вручную. И еще можно смотреть, куда человек сходил: если он сходил в первую строку во второй столбец, то очевидно и проверять нужно только первую строку и второй столбец. Но не факт, что такой код будет проще, потому что есть еще и диагонали.
4) Найди уже в своей IDE автоформатирование кода, или какой-нибудь astyle осиль, или clang-format, или сразу пиши красиво. У тебя кое-где скобки не на своих местах.
5) Ну и стандартное отсутствие (void) у функций без параметров сразу выдает крестоблядь.
Аноним 28/07/18 Суб 21:35:33  1236939
>>1236925
В крестах тоже написать void не лишнее
Аноним 28/07/18 Суб 21:37:25  1236941
Зачем писать void в функцию без параметров? Экономия какая?
Аноним 28/07/18 Суб 21:38:11  1236942
>>1236941
Читаемость
Аноним 28/07/18 Суб 21:40:34  1236946
>>1236925
Спасибо, анон
Но я не понял как сделать check_combos через цикл
Мож написать если не сложно ? Или объяснить
Аноним 29/07/18 Вск 01:52:42  1237066
>>1236946
> Но я не понял как сделать check_combos через цикл
Ну как-то так: https://pastebin.com/esCWGyK5 Если сообщения выпилить, будет весьма кратенько. В функцию передавать координаты последнего хода и значок сходившего. Алсо, подразумевается игровое поле в виде массива строк, а не столбцов, т.е., field[y][x], а не field[x][y].
Аноним 29/07/18 Вск 08:38:11  1237113
>>1236925
>Ну и стандартное отсутствие (void) у функций без параметров сразу выдает крестоблядь
C-петушку неприятно, лол. Ссу тебе на голову.
крестобоярин
Аноним 29/07/18 Вск 10:56:07  1237148
>>1237113
Ты там определился, throw() или noexcept?
Аноним 29/07/18 Вск 11:44:09  1237161
>>1236895
> Ну можно ∗(othertype ∗) &structure.member, но это не совсем легальная возможность. Хотя все так делают.

Попробовал в gcc, разницы никакой, int не стал float. Покажи на примере, как этим пользоваться.
Аноним 29/07/18 Вск 11:54:56  1237163
>>1237161
Мля, да всё работает, уже не надо. Просто надо было в printf ещё приводить.
Аноним 29/07/18 Вск 17:30:16  1237298
image.png (163Кб, 1280x1024)
>>1236895
вот простейший пример. передаю ну как бы инт и спецом в прототипе не указываю что функция cube принимает аргумент типа double. на выводе получаю 0 при вводе любого числа. Вопрос почему так? разве по логике передачу фактического аргумента функции нельзя сравнить с присваиванием переменной типа double(в данном случае она имеет имя a). ну как бы я так себе представляю передачу аргумента типа переменной a присвоится значение n из функции main которое идет. ну хз короче
Аноним 29/07/18 Вск 21:03:09  1237410
>>1237298
> не указываю что функция cube принимает аргумент типа double.
Непонятно, зачем ты с этим возишься, если программа очевидно сломана. Это, кстати, хороший пример, почему пустые скобки триггерят >>1237113 сишников. Диагностики по этому поводу по умолчанию в гцц нет (но можно включать -Wmissing-prototypes), потому что раньше такой код был нормальным, да и сейчас иногда требуется.

Пустые скобки в твоей декларации означают любое количество любых аргументов. Когда при вызове функции компилятор не знает типов аргументов, он приводит все аргументы к дефолтным типам: все целые (char, short и т. д.) к интам (если не влезут - к лонгам), плавающую точку к даблам. Т.е., в твоем случае в аргументы попадает int. А дальше мы попадаем в cube(), и у нас происходит undefined behavior, потому что типы фактически переданных аргументов не совпали с ожидаемыми. И все, дальше ни о чем думать не нужно - программа сломана, дело закрыто.

Но похуй, объясню, откуда берется "ноль". В 32-битном коде 64-битный дабл при передаче в качестве аргумента кладется в виде двух 32-битных слов. Т.е., твоя функция cube() видит стек примерно так:
> ...
> адрес возрвата
> младшие слово (32 бита) дабла, у тебя сюда попадает твой инт
> старшее слово (32 бита) дабла, тут какой-то мусор (стек-то не пуст)
> ...
Из двух слов собирается дабл, инт идет в младшие 32 бита дабла (в младшие биты мантиссы, которые почти ни на что не влияют), мусор в старшие. И если у мусора не было нескольких (хотя бы трех) старших битов вполне нормальная ситуация, если там какой-нибудь указатель или адрес возврата, дабл получается положительнным и с маленькой экспонентой. Умножение усугубляет дело, делая экспоненту настолько маленькой, что она, возможно, даже перестает влезать в дабл, и в printf() уже передается настоящий ноль. Попробуй сделать printf("%g\n", a); в cube(), чтобы оценить, какое маленькое число ты получаешь на входе.

В 64-битном коде все проще - там первый целочисленный аргумент (или указатель) кладется в rdi (твой инт как раз туда попадает), а значения с плавающей точкой передаются через регистры SSE - первый аргумент через xmm0, а ты туда ничего не кладешь. Но так как твоя программа только что стартовала и скорее всего еще не успела что-либо оставить в регистрах SSE, то cube() достает оттуда дефолтный ноль.

Мораль сам придумаешь?
dnoge 30/07/18 Пнд 12:09:02  1237619
>>1231686
roll
Аноним 30/07/18 Пнд 13:05:17  1237631
Как писать на Си если я не умею в ручной менеджмент памяти?
Аноним 30/07/18 Пнд 13:37:33  1237647
>>1237631
Что значит "не умею"?
А что там "уметь"? Ну не пользуйся памятью.
Аноним 31/07/18 Втр 06:31:28  1238102
14788902579710.jpg (40Кб, 640x360)
>>1237631
Попробуй ножной
Аноним 31/07/18 Втр 21:05:49  1238504
Здравствуйте.
Есть задача:

while(...)
{
while(...)
{
как отсюда выбраться наружу внешнего вайла, не используя abort(), terminate(), exit() и goto
}
}

Нагуглил только возможность возвращать значения, если это всё изначально было внутри функции. Но должны быть еще варианты, какие не знаю. Подскажете?
Аноним 31/07/18 Втр 21:06:44  1238505
>>1238504
Добавь кондишон во внешний вайл, влавствуй.
Аноним 31/07/18 Втр 21:10:35  1238507
>>1238504
continue
Аноним 31/07/18 Втр 21:12:07  1238509
>>1238507
To be continued...
Аноним 31/07/18 Втр 21:29:12  1238518
>>1238504
Правильно - goto или обернуть в функцию и использовать return (последнее предпочтительно). Допустимо - добавить дополнительную переменную и условие во внешнем цикле, как посоветовали выше.
Аноним 31/07/18 Втр 22:49:47  1238561
>>1238518
Согласен с этим.
Аноним 31/07/18 Втр 23:32:55  1238605
image.png (3Кб, 292x58)
Сап. Этим советам, на первом пике, можно верить? Интересует второй, про смешивание.
К примеру, написал что-то вроде:
int value = 100, *pointer = &value;
т.е. и переменную объявил, и адресок взял, и все одной строкой.
Следуя логике советчиков - мне пiзда. Если так, то почему?
Чем однострочная запись хуже той, что на пике?
Да, ресурс так себе, знаю. Просто стало любопытно, почему так.
Аноним 31/07/18 Втр 23:34:25  1238608
image.png (22Кб, 652x272)
>>1238605
БЛЯБЛЯБЛЯ!!! АТЕНШОН!!! не та картинка
Аноним 31/07/18 Втр 23:55:40  1238625
>>1238605
> Следуя логике советчиков - мне пiзда
Логика советчиков не в том. С точки зрения синтаксиса все ок. Но:

// При беглом взгляде кажется (особенно новичкам), что y и z - указатели, но нет.
// Это просто-напросто хуже читается. И это основная причина так не делать.
int ∗x, y, z;
Аноним 31/07/18 Втр 23:58:13  1238631
>>1238625
А бывает еще вот такое форматирование, которое запутывает еще больше (поэтому нормальные люди звездочку пишут рядом с переменной, а не с типом):
int∗ x, y, z;
Аноним 01/08/18 Срд 00:16:32  1238638
>>1238625
>>1238631
Спасибо. По поводу форматирования еще встречал когда звездочку ставят как знак умножения, типа
int * p
А на читаемость больше по моему влияют грамотные имена переменных и указателей(и всего остального).
Но да, построчно конечно понятнее.
Аноним 01/08/18 Срд 05:06:18  1238687
>>1238505
>>1238518
Спасибо, как-то не догадался.

>>1238507
А как это должно мне помочь, если во внешний цикл будет while(1)? continue же только „доматывает“ итерацию внутреннего цикла и идет на следующую, а если в обоих условиях 1?

Есть какие-то дополнительные возможности, если приложение многопоточное?
Аноним 01/08/18 Срд 05:12:18  1238688
148457343816676[...].jpg (22Кб, 600x444)
>>1238631
Нормальные — это те, которые яйцо разбивают с правильной стороны, следуя всем мудрым доводам твоего лагеря и игнорируя глупые доводы приверженцев противоположного?
Аноним 01/08/18 Срд 06:41:15  1238709
>>1238688
Нормальные - это те, которые следуют древнему завету "декларация отражает использование". Если пишешь int∗ foo, будь последователен, делай дереференс int bar = ∗ foo; Не забудь также о printf("square: %d\n", ∗ foo ∗ ∗ foo);
Аноним 01/08/18 Срд 08:23:46  1238718
>>1238504

break.

Пиздец, тут все поехали чтоли?


goto, return вообще охуеть.
Аноним 01/08/18 Срд 08:50:25  1238723
>>1238718
goto и return нормальный юзкейс. В ядре линукса можно много где увидеть, хотя там обычно один return, на нем меткаerr_exit: и к нему делается goto.
Аноним 01/08/18 Срд 08:52:13  1238724
>>1238718
>>1238723

И это ты поехал чтобы из внутреннего цикла выйти вне внешнего тебе нужно как минимум два break, а я могу одним goto, и это будет нагляднее и понятнее.
Аноним 01/08/18 Срд 09:05:37  1238729
>>1238724
Goto это антипаттерн. За такое нужно увольнять.
Аноним 01/08/18 Срд 09:08:47  1238731
>>1238729
>Goto это антипаттерн.
Это, конечно верно - но иногда просто нет других вариантов.
Но редко, да.
Аноним 01/08/18 Срд 09:10:22  1238732
>>1238729
Ах да, вот это - >>1238504 - как раз такой случай.
Аноним 01/08/18 Срд 09:11:17  1238733
>>1238724
>нужно как минимум два break,
Это хуйня, а вот то, что надо два бранча - это хуево.
Аноним 01/08/18 Срд 09:28:31  1238737
>>1238733

bool terminated = false;

while
{
while
{
while
{
while
{
....
terminated = true;
break;
}
if(terminated)
break;
}
if(terminated)
break;
}
if(terminated)
break;
}
Аноним 01/08/18 Срд 09:46:27  1238748
>>1238737
Говнокод уровня легкой олигофрении, поздравляю.
Аноним 01/08/18 Срд 10:23:37  1238762
>>1238729
Мы постоянно апстримим свой драйвер в netnet-next-branch линукса, да и не только мы юзаем goto.
Алсо: http://koblents.com/Ches/Links/Month-Mar-2013/20-Using-Goto-in-Linux-Kernel-Code/
Аноним 01/08/18 Срд 10:24:22  1238763
>>1238737
Вот за такое тебя точно выебут, а goto нормальная практика.
Аноним 01/08/18 Срд 10:26:03  1238764
>>1238763
*this
Аноним 01/08/18 Срд 11:12:53  1238779
>>1238729
>Goto это антипаттерн. За такое нужно увольнять.
Пошто его все так люто хейтят? Просто каждый считает своим долгом обосрать goto.
Что в нем такого плохого? Объективно. Реальные причины есть, или из разряда "все хейтят и я буду"?
Аноним 01/08/18 Срд 11:15:17  1238784
>>1238779
Старый мем, повторяют как обезьяны.
Всё, что они могут сказать, написано в
Edgar Dijkstra: Go To Statement Considered Harmful
в своё время.
goto используется overДохрена раз в ведре Linux.
Аноним 01/08/18 Срд 11:20:11  1238791
>>1238779
>Пошто его все так люто хейтят?
Потому что лапша.
Потому что структурное программирование придумано для того, чтобы принуждать умственно неполноценных дебилов вроде вас всех меньше говнокодить.
ООП, кстати, тоже в том числе для этого.
Аноним 01/08/18 Срд 11:22:02  1238795
>>1238791
<setjmp.h> на вас нет, структуристы хреновы.
Аноним 01/08/18 Срд 11:23:24  1238797
>>1238795
>этот говнокодящий олигофрен.
А вот и иллюстрация.
Аноним 01/08/18 Срд 11:24:41  1238799
>>1238797
Ни разу не юзал гото, просто не пишу глубокие вложения, можно было бы выскочить с гото - выскочил.
Потому что надо быть адекватом, а не кукарекать за идиому.
Аноним 01/08/18 Срд 11:28:14  1238807
>>1238799
>просто не пишу глубокие вложения
2 - уже может быть глубоким, кстати.
Впрочем, крудомартышкам это в любом случае не нужно.
Аноним 01/08/18 Срд 15:04:53  1238931
Посоны, не умирайте.

Какие рабочие нагрузки выбрать при установке MS Visual Studio, чтобы работать с Си?
Аноним 01/08/18 Срд 15:56:40  1238962
>>1238931
>рабочие нагрузки
Пришлось даже гуглить что это лол
Ну хз чел, я бы советовал бежать нахуй от майкрософтовского поделия и юзать труЪ стафф.
Обычный текстовый реактор и gcc все что тебе нужно, базарю.
Как проект разрастется напишешь makefile.
Аноним 01/08/18 Срд 16:45:58  1238984
Почему никто не вспомнил про использование goto для возвращения в начало функции? Другие методы(рекурсия) либо замусоривают стек, либо выглядят уж точно уродливей, чем метка в начале функции.
Аноним 01/08/18 Срд 16:48:17  1238986
>>1238984
Потому что в общем равноценно возврату в любую точку кода в функции, даже не хочется рассматривать как специальный юзкейс.
Ыыы, так же можно ещё в while(0){} скоп запрыгнуть, ну ахринеть. Эксклюзивный так скоп только для гото)000)0
Аноним 01/08/18 Срд 17:01:58  1238993
>>1238962
Иногда ещё clang можно юзать, у нас как-то порт на другую платформу не собирался на гцц, а на кланге собрался.
Аноним 01/08/18 Срд 17:40:54  1239017
>>1238962
Мне надо написать серверную часть с ГУИ, потому что, сука, клиентская часть на Си.
Я Си то плохо знаю, а тут ещё почитал, что хрен слепишь графику.

Была не была, может тут ответят на мой ответ про TCP Socket'ы:
>Есть ли какой-нибудь выход, кроме как сливать значения передаваемых переменных в string с уникальными маркерами, а потом долго и уныло их парсить, перебирая каждую переменную?
Изначально хотел передавать структуру (потому что много данных типа bool, uint8_t, char), но в питоне нет структур... А для Си я граф. оболочку ни разу не писал. Как, впрочем, и на других языках.

Короче, mingw-w64 и SublimeText норм?
Смотрел ещё Eclipse - чем-то похожа на одну фирменную среду разработки под микроконтроллеры.
Аноним 01/08/18 Срд 18:15:34  1239054
image.png (85Кб, 1366x738)
>>1239017
>Короче, mingw-w64 и SublimeText норм?
>Смотрел ещё Eclipse - чем-то похожа на одну фирменную среду разработки под микроконтроллеры.
Да, норм, mingw-w64 это пак gcc, g++ и прочего, под винду, gcc он и в африке gcc.
Сам пользуюсь нотепад++, всем устраивает, после кое каких настроек приобретает вид аля IDE, см. пик.
SublimeText лично не щупал, но думаю она норм, выглядит симпатично.
Эклипс да, ее вроде как юзают аврщики и ардуинщики часто. Тоже норм.
Многие еще vim юзают, что вообще мега труЪ.

Насчет ГУЯ - я тоже озадачен этой темой, но пока думаю над архитектурой и самим кодом.
Могу подсказать только направление куда копать, и пару либ, большего, увы, не делал:
https://habr.com/post/319106/ - Присматриваюсь к ней, но пока щупать не решаюсь.
https://github.com/wjakob/nanogui
Если пишешь под линукс, попробуй поковырять xlib.
Если кросс платформ - лучшее решение будет опен жл, у нуклеара в примерах есть рендер жл-овский.
Аноним 01/08/18 Срд 18:28:34  1239059
>>1239017
>>1239054
Вот еще вспомнил, есть замечательная вещь - tcl/tk
tcl - скриптовый язык, tk - графическая либа к нему.
На этой связке довольно часто пишут ГУИ к консольным программам на си.
Аноним 01/08/18 Срд 20:04:03  1239108
>>1239017
>но в питоне нет структур
Только не говори, что нельзя написать байндинг к твоему питухону
Аноним 01/08/18 Срд 21:03:19  1239195
>>1239017
> в питоне нет структур
import struct; help(struct)

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

Сам посоветую не страдать хуйней и написать гуй на Python/Qt5 (если он каким-то местом в проекте имеется) или C++/Qt5. Можно подумать о Gtk+, но если в требованиях в том числе и винда, то лучше все же Qt.
Аноним 01/08/18 Срд 21:31:53  1239223
>>1239195
>но для сервера гуй
Нормальные люди делают гуй на хтмл, серверу послушать лишний порт не тяжело
Аноним 01/08/18 Срд 21:33:50  1239226
>>1239223
Тоже хороший вариант.
Аноним 02/08/18 Чтв 04:45:21  1239435
>>1239195
>import struct; help(struct)
Лол, загуглил "python структуры" а там давай втирать, что как таковых структур в питоне нет и что они не соответствуют структурам из Си; потом загуглил "uint8_t python", пишут что нет такого типа данных готового.

>Нормальные люди делают гуй на хтмл
Слишком много гемора с освоением, для хоббийного проекта то.
Аноним 02/08/18 Чтв 04:52:39  1239436
>>1239435
>Слишком много гемора с освоением, для хоббийного проекта то.
ясно, школьник?
Аноним 02/08/18 Чтв 04:58:42  1239437
>>1239436
Нет.
Аноним 02/08/18 Чтв 06:45:13  1239455
>>1239436
>>1239223
Ок, как это должно выглядеть? На словах хотя бы, чтобы иметь представление.
Аноним 02/08/18 Чтв 08:50:25  1239471
>>1239455
>На словах хотя бы, чтобы иметь представление.
Скачай fossil и запусти с ui
Аноним 02/08/18 Чтв 17:50:33  1239679
Почему Прата называет sizeof ОПЕРАЦИЕЙ? Это же оператор. Вообще как-то синонимично называют операции, операторы, выражения
Аноним 02/08/18 Чтв 18:35:45  1239720
Clear11.jpg (58Кб, 561x604)
>>1239679
Он просто перегрузил слово операция.
Аноним 02/08/18 Чтв 20:39:51  1239786
>>1239679
>Это же оператор.
Схуяли? Он сводится в компайл тайм к константе
Аноним 02/08/18 Чтв 20:41:51  1239787
>>1239786
Умножение на ноль тоже сводится к компайл-тайм константе, но умножение от этого оператором быть не перестает. Алсо, в C99 и выше есть VLA, для которых sizeof работает не в компайл-тайм:
int foo = scanf("%d");
int bar[foo];
printf("run-time sizeof: %zu\n", sizeof(bar));
Аноним 02/08/18 Чтв 21:02:35  1239804
1533232953753.PNG (10Кб, 322x258)
Какое значение у posix, win32, sjlj и seh?
Сначала архитектура написана, а что дальше я не понимаю.
Аноним 02/08/18 Чтв 21:14:54  1239809
>>1239804
SJLJ/SEH - это поддерживаемые модели исключений крестов (в Си в принципе нету). POSIX/Win32 - поддерживаемые модели потоков. Если собираешься линковаться с чужими длл (особенно с MSVC-шными) - выбирай win32.
Аноним 03/08/18 Птн 00:55:12  1239898
>>1239809
>SJLJ/SEH - это поддерживаемые модели исключений крестов (в Си в принципе нету).
?
Аноним 03/08/18 Птн 05:09:26  1239929
>>1239804
>значение
буль дог
в тыренте фсё есть деб
Аноним 03/08/18 Птн 12:07:18  1240136
Какие существуют реальные и перспективные аналоги Си?
Аноним 03/08/18 Птн 14:13:10  1240199
На русском языке есть что прочитать?
Аноним 03/08/18 Птн 14:46:23  1240215
>>1240199
к&r неплохой перевод, я вообще тупо эту книгу выдрачивал до просветления, уникальная книга, плотность информации в ней зашкаливает
есть еще недооцененная книга кернигана - "unix, программиное окружение", я бы посоветовал ее даже тем кто не планирует кодить под линуксы, хорошенько промывает мозг
Аноним 03/08/18 Птн 15:49:36  1240254
>>1240215
Спасибо большое.
Алсо, вот я у себя дома нашел книжку Демидович Е.Ь "Основы алгоритмизации и программирования" 2 издание.2008
Си сильно поменялся с 2008 года?
Прост с моника и телефона сейчас не кайф читать(я так питон учил, и подустал) А тут такая книга дома, могу подучить с бумаги.

Еще есть книжка дома С/C++ Т.А. Павловская 2007
Аноним 03/08/18 Птн 16:12:53  1240260
Почему в шапке нет Steven C. Mcconnell Code Complete ?
Годнота же.
Аноним 03/08/18 Птн 17:45:50  1240319
45450241240542.jpeg (72Кб, 550x916)
>>1239471
https://habr.com/post/244281/
Посмотрел - подходит.
И ,похоже, графики кривых отрисовывать тоже можно.

Блядь, но с жабо-скриптами я вобще не знаком. Короче, кругом жопа.
Аноним 03/08/18 Птн 18:52:10  1240373
к.PNG (93Кб, 559x770)
>>1240254
> С/C++ Т.А. Павловская 2007
У меня валяется 2003 кажись, эта книга сделает тебя крестовиком, а не сишником.
Аноним 03/08/18 Птн 19:09:47  1240380
>>1240136
Rust?
Аноним 03/08/18 Птн 19:11:20  1240381
>>1240136
Go
Аноним 03/08/18 Птн 19:12:43  1240382
>>1240380
>>1240381
Но С они, конечно, не заменят никогда.
Скорее Rust немного потеснит кресты, а Go - Питуна с крестами и им подобных.
Аноним 03/08/18 Птн 19:13:20  1240383
>>1240382
А, ну Rust, конечно, ещё C# может заменить.
Аноним 03/08/18 Птн 19:30:52  1240390
>>1240381
Он не для системного программирования.
Аноним 03/08/18 Птн 19:33:27  1240392
>>1240390
Так, что по-твоему системное?
И почему тогда был назван Rust, а не C++?
C++ отличная замена C, ты не теряешь скиллов С, просто по сути получаешь более хороший компилятор.
Аноним 03/08/18 Птн 19:58:00  1240414
>>1240392
Кресты проигрывают в скорости си, и на си уже дохуя всего написано.
Аноним 03/08/18 Птн 19:59:36  1240416
>>1240414
Писец, лучше не обсуждать языки вообще никогда и нигде.
Аноним 03/08/18 Птн 20:12:14  1240423
>>1240136
А зачем? В Си и так все неплохо
Аноним 03/08/18 Птн 20:39:09  1240436
>>1240260
>Почему в шапке нет Steven C. Mcconnell Code Complete ?
Потому что она не про конкретный язык, а про программирование в целом.

>>1240414
> Кресты проигрывают в скорости си
Нет. Если предположить, что и на Си, и на C++ пишет разбирающийся в языке человек, Си проигрывает крестам по скорости (из-за шаблонов, из-за constexpr, из-за тех вещей, которые сложно выразить лаконичным синтаксисом Си, но можно крестовыми заклинаниями). Но стать человеком, разбирающимся в Си - гораздо проще, поэтому обычно сишный код обгоняет крестовый.
Аноним 03/08/18 Птн 22:17:04  1240482
>>1240436
Все твои шаблоны и т.д. это скорость написания кода, а не скорость его работы.
И на си пишутся обычно операционные системы и драйверы, где хуй знает вообще можно применить шаблоны, в таком широком смысле.тем более я говорил про линукс, там крестам вообще нет места, под Винду и на крестах пишут, ето так
Аноним 03/08/18 Птн 23:21:24  1240507
>>1231397 (OP)
kill(-1) убивает все запущенные процессы? Это прямо как rm -rf /
Аноним 03/08/18 Птн 23:24:44  1240508
>>1240507
У функции два аргумента, если что.
И ты забыл --no-preserve-root
Аноним 03/08/18 Птн 23:44:54  1240532
>>1240508
Просто kill(-1, SIGKILL) грохнуло мне все запущенные процессы.
Аноним 04/08/18 Суб 01:58:32  1240584
>>1240482
> Все твои шаблоны и т.д. это скорость написания кода, а не скорость его работы.
Нет. Например, на Си ты вместо шаблонов сделаешь void *, и компилятор не сможет это отптимизировать так же качественно. И вообще, в целом, в сишном коде у тебя будет больше ненужных дереференсов указателей и вызовов функций. Но ты, конечно, можешь все разворачивать, приправляя мешаниной дефайнов, превращая код в абсолютно нечитаемый.
Аноним 04/08/18 Суб 02:57:10  1240590
>>1240584
>превращая код в абсолютно нечитаемый
Другое дело кресты...
Аноним 04/08/18 Суб 03:48:47  1240591
>>1240590
>Другое дело кресты...
Другое дело ООП...
Аноним 04/08/18 Суб 06:37:02  1240605
>>1240319
бляя загугли electron или photon
даже однорукая макака без мозга сможет в этоговно
откуда вы лезете уёбки7
Аноним 04/08/18 Суб 15:17:56  1240768
>>1240591
https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
Аноним 04/08/18 Суб 18:02:56  1240834
Подскажите, какую литературу читать, чтобы понять, как текут потоки в C?
Аноним 04/08/18 Суб 18:04:10  1240836
>>1240834
Никак, в С нет потоков.
Модель памяти в С++ рассматривается в книге Энтони Уильямс "Параллельное программирование на C++ в действии"
Аноним 04/08/18 Суб 18:08:00  1240837
>>1240836
> Никак, в С нет потоков.
В С11 завезли же. https://en.cppreference.com/w/c/thread
Аноним 04/08/18 Суб 18:09:43  1240839
>>1240837
> en.cppreference
А я о чём тебе говорил? Короче, книга вон.
Аноним 04/08/18 Суб 18:09:55  1240840
>>1240836
Это уже скачал, но хочу начать именно с C, или вообще пофиг?
>>1240837
>https://en.cppreference.com/w/c/thread
Собственно об том и вопрос, что по этой ссылочке смотрю в книгу, вижу фигу. Есть что-то популярнее? Может на ютюбе разжевалово от индусов для прочих бичей?
Аноним 04/08/18 Суб 18:10:33  1240841
>>1240840
> вообще пофиг
*This.
Аноним 04/08/18 Суб 18:11:43  1240845
>>1240839
Во-первых, я другой анон, так что я не знаб кому, что ты говорил. Во-вторых, ссылка на описание ссылок С11, а не на кресты.

Ссылку не открывай
@
Дебаты разводи
Аноним 04/08/18 Суб 18:15:00  1240848
>>1240840
Смотри pthread.h они близки друг другу.
Аноним 04/08/18 Суб 18:58:38  1240870
>>1240845
OS-specific API, если не хочешь дебаты, быстро и решительно >>1240848

Аноним 04/08/18 Суб 19:01:31  1240875
2018-08-04 1900[...].png (15Кб, 708x325)
>>1240845
Алсо,
> юзлесс говно кидай
Аноним 04/08/18 Суб 19:10:48  1240884
>>1240875
А никто и не говорил, что это... я просто показал, что есть возможность, а на сколько она хороша...

>>1240870
Очень приятно, когда в пример приводят мой же коммент. Добра тебе, няш.
Аноним 04/08/18 Суб 19:12:16  1240885
>>1240884
Ну тогда и тебе добра.
Аноним 04/08/18 Суб 20:14:47  1240915
Как узнать что подключение через сокет AF_UNIX все еще работает?
Аноним 04/08/18 Суб 20:39:34  1240933
>>1231397 (OP)
У меня головная боль от переизбытка информации.

Я прост скачал книгу http://1.maintracker.org/forum/viewtopic.php?t=452291 и планирую прочитать её. Она хооршая? Она дсат мне работу и научит делать прилоежния на смартфоны и прилоежния/игры?
Аноним 04/08/18 Суб 20:41:00  1240936
>>1240933
> http://1.maintracker.org/forum/viewtopic.php?t=452291
Тебе в крестотред. И нет, для смартфонов одного C++ маловато. Можно, но маловато - нужна еще и Java.
Аноним 04/08/18 Суб 20:42:27  1240938
>>1240933
>>1240936
И нет, книга, изданная в двухтысячном и описывающая давно устаревший C++98 не даст тебе работу даже в теории.
Аноним 04/08/18 Суб 20:54:28  1240943
>>1240938
И что делать тгда? ИСкать версию 2010+?

просто уже зебался каждый день оухевать от кол-ва книг, курсов, видео на тубе, хочу просто сесть и начать читать что-нибудь, а эта книга вроде очень фундаметнальная и аж на 700 стр...
Аноним 04/08/18 Суб 23:27:55  1241026
>>1240943
400 из них это база, которую знают даже дети, остальные 300 устаревшее легаси говно, которое никто не использует.
Аноним 05/08/18 Вск 02:06:31  1241057
>>1240836
https://www.opennet.ru/opennews/art.shtml?num=49059
В GNU C Library добавили поддержку потоков ISO C (threads.h), определённых в спецификации ISO/IEC 9899:2011). Для использования потоков в приложениях необходимо связывание с libpthread.
Аноним 05/08/18 Вск 02:47:23  1241064
>>1240834
Там немного есть:
Р. Лав - Linux. Системное программирование
Иванов Н.Н. - Программирование в Linux
Аноним 05/08/18 Вск 08:04:59  1241095
>>1241057
> glibc
Ну это уже как раз ОС-специфик по сути, не?
Аноним 05/08/18 Вск 08:07:03  1241096
>>1241064
Ну и APUE тогда уж.
Правда, опять-таки, спрашивалось, как в С текут.
А в главе 5 >>1240836 как раз модель памяти с точки зрения проектировщиков языка.
А что аналогичное для С вы можете доставить?
Аноним 05/08/18 Вск 17:00:26  1241360
>>1241095
Есть стандартная либа, в ней определен стандарт на потоки, а реализации - удивительное дело, отличаются для разных ОС.
Аноним 05/08/18 Вск 21:12:14  1241556
>>1241360
> glibc
Красноглазые уже пишут и принимают стандарты С?
Аноним 05/08/18 Вск 21:31:17  1241572
>>1241556
>ISO C (threads.h), определённых в спецификации ISO/IEC 9899:2011)
Ты читать не умеешь?
Аноним 05/08/18 Вск 21:41:27  1241576
15333863886780-b.png (257Кб, 421x407)
Возвращаю из функции указатель на саму себя, ну и что ты мне сделаешь?
Аноним 05/08/18 Вск 21:41:47  1241577
15333863886780-b.png (257Кб, 421x407)
Возвращаю из функции указатель на саму себя, ну и что ты мне сделаешь?
Аноним 05/08/18 Вск 22:01:04  1241595
>>1241577
>Возвращаю из функции указатель на саму себя, ну и что ты мне сделаешь?
Возвращаю из функции указатель на саму себя, ну и что ты мне сделаешь?
>>1241572
Как скажете, спасибо за прототипы функций, ИСОСИ!
Аноним 05/08/18 Вск 22:11:57  1241609
>>1241595
А что тебе еще надо? В стандарт добавили потоки, а дальше на каждой ОС своя реализация. На прыщах glibc, на *bsd libc и т.д.
Аноним 05/08/18 Вск 22:12:51  1241611
>>1241609
> А что тебе еще надо?
std::atomic
Аноним 05/08/18 Вск 22:21:44  1241631
>>1241611
>std::atomic
<stdatomic.h>
Аноним 05/08/18 Вск 22:23:44  1241633
>>1241631
Охренеть, я обленился уже читать гугл.
Мне книгу по этому не выкатили, я этого не видел, мда.
Аноним 05/08/18 Вск 22:26:07  1241636
>>1241633
Так что тебе надо?
Аноним 05/08/18 Вск 22:26:36  1241637
>>1241631
>>1241636
Впрочем, привлекательней threads.h с единственной имплементацией на amd64 ты не сделал.
Именно с прагматической стороны.
Аноним 06/08/18 Пнд 00:27:08  1241724
>>1241637
https://en.wikipedia.org/wiki/POSIX_Threads
https://en.wikipedia.org/wiki/OpenMP
https://en.wikipedia.org/wiki/Grand_Central_Dispatch
Аноним 06/08/18 Пнд 09:12:43  1241793
>>1241724
pthreads nice, OpenMP - блевотина в плане решёточного синтаксиса.
Вот <thread> топчик, он везде реализован, и у него в какой-то степени pthread-like синтаксис.
Аноним 06/08/18 Пнд 09:53:59  1241797
Вообще претензии к стандартной библиотеке языка, 99 юзкейсов которого - это велосипедить реализации библиотек и системных вызовов с нуля - ну такое.

>>1240392
>Так, что по-твоему системное?

Это значит, что ты можешь выбросить рантайм и стандартную библиотеку и с помощью одного лишь компилятора под таргет-архитектуру чото сделать. Если без рантайма и стандартной библиотеки обломинго - значит не системное.
Аноним 06/08/18 Пнд 10:32:35  1241815
>>1241797
>выбросить рантайм
А где у тебя программа будет выполняться? В компайл-тайме?
Аноним 06/08/18 Пнд 10:38:46  1241816
>>1241815
>А где у тебя программа будет выполняться? В компайл-тайме?

На процессоре.
Аноним 06/08/18 Пнд 11:48:53  1241836
>>1241815
Ыхы, он подразумевает, что baremetal - не рантайм.
Хотя если дословно, рантайм - это рантайм и есть.
Аноним 06/08/18 Пнд 12:03:51  1241839
>>1241836
>рантайм - это рантайм и есть
Какое пидерское словечко, это же стандартные либы которые свободно доступны в юнихах и по пидерски в шиндовсе.
Аноним 06/08/18 Пнд 12:05:08  1241840
>>1241816
Умник какой.
Аноним 06/08/18 Пнд 12:06:17  1241841
>>1241836
Я бы посмотрел на то, как он попробует сделать что-то bare metal.
Аноним 06/08/18 Пнд 12:09:24  1241845
>>1241841
>попробует сделать что-то bare metal.
В порты никогда не писал, лалка?
Аноним 06/08/18 Пнд 12:13:40  1241847
>>1241845
А это теперь уже стало программированием на чистом железе? Я как-то в универе на маняторе цвет пикселя напрямую поменял, я теперь тоже baremetal программист?
ну и дибилизм пиздец
Аноним 06/08/18 Пнд 12:22:07  1241849
>>1241847
>на маняторе цвет пикселя
Был бы не дибилом, мог бы загрузчик на псевдографике запилить.
Аноним 06/08/18 Пнд 21:32:38  1242239
Вы тут смотрю потоки обсуждаете, но что это дает? Какая от этого практическая польза? Типа распараллелить вычисления или что? Сорян, я еще немного нюфак. Знаю только что есть потоки типа stdin, stdout и stderr.
Аноним 06/08/18 Пнд 21:36:29  1242243
>>1242239
> Какая от этого практическая польза
В одном потоке рабоать с пользовательским вводом и сетью, во втором рисовать с фиксированным фреймрейтом, еще в трех - считать что-то тяжелое. Алсо, с блокирующим IO в отдельном потоке работать гораздо проще, чем с неблокирующим IO со всякими poll и select в основном потоке.
Аноним 06/08/18 Пнд 22:20:37  1242270
>>1242243
>Алсо, с блокирующим IO в отдельном потоке работать гораздо проще, чем с неблокирующим IO со всякими poll и select в основном потоке.
Это где так?
Аноним 06/08/18 Пнд 22:23:29  1242271
>>1242270
Везде. Оба подхода - обычное дело и в Linux, и в Windows.
Аноним 07/08/18 Втр 03:45:34  1242351
>>1242239
>Вы тут смотрю потоки обсуждаете

Если писать что-то сложнее хеллоуворлда, то они обязательно понадобятся.
Аноним 07/08/18 Втр 05:01:41  1242354
>>1241064
Я так понимаю, юзеру венды рыпаться смысла нет?
Аноним 07/08/18 Втр 06:24:08  1242363
>>1241797
> Вообще претензии к стандартной библиотеке языка, 99 юзкейсов которого - это велосипедить реализации библиотек и системных вызовов с нуля

Зачем велосипедить, если есть уже готовые сторонние библиотеки? Или ты хочешь, чтобы стандартная разжирела?
Аноним 07/08/18 Втр 09:34:05  1242408
>>1242239
>Вы тут смотрю потоки обсуждаете, но что это дает? Какая от этого практическая польза?

В 21 веке процессоры многоядерные. Производительность на ядро растет всё меньше и меньше. Писать однопоточный код уже признано однозначным зашкваром. Тот кто его пишет считается дремучей лалкой из времен pentium4/athlonxp
Аноним 07/08/18 Втр 09:35:30  1242409
>>1242363
>Зачем велосипедить, если есть уже готовые сторонние библиотеки?

Потому что они завязаны на конкретную OS. А OS еще нет. Есть только голая железяка и конпелятор, умеющий в неё.
Аноним 07/08/18 Втр 09:36:18  1242410
>>1241847
>Я как-то в универе на маняторе цвет пикселя напрямую поменял, я теперь тоже baremetal программист?

Нет. Ты хуй и паскаль.
Аноним 07/08/18 Втр 12:38:25  1242456
>>1242408
>дремучей лалкой
Сам ты дремучая лалка, хуйня твоя
Аноним 07/08/18 Втр 12:38:46  1242457
>>1242456
многопоточность
Аноним 07/08/18 Втр 12:52:10  1242464
изображение.png (480Кб, 680x800)
>>1242456
>>1242457

О, ниасиляторская лалка найс порвалась.
Аноним 07/08/18 Втр 13:10:22  1242471
153283812814027[...].jpg (30Кб, 400x266)
>>1242464
У тебя каргокульт многопоточности, пососи сисю
Аноним 07/08/18 Втр 17:09:58  1242559
>>1231397 (OP) АААААА !!!блядь!
Что за хуйня? Читаю Мозга Кернигана с Денисом, а там блядь ФУНКЦИИ БЕЗ ТИПА, т.е. что то типа
foo (x,y) {пошла моча;}
Что за троллинг? Я прост с крестов начинаю, а тут такие ужасы...
Аноним 07/08/18 Втр 17:11:33  1242561
>>1241577 отрублю тебе стек, по самые регистры, сука!
Аноним 07/08/18 Втр 17:19:47  1242564
>>1242559
неявный int
Аноним 07/08/18 Втр 17:23:09  1242566
>>1242564
>неявный int
Ух блядь. И в параметрах функции так же?
А то я уже думал может файл книги битый или какая то опечатка или что угодно.
Аноним 07/08/18 Втр 18:20:27  1242580
>>1242559
Чёт орнул. А допустимость конструкции auto int тебя не удивит?
Аноним 07/08/18 Втр 19:39:51  1242627
Анон, привет! Сорри за нубские вопросы заранее. Только начал изучать Си.
Оператор return. Не могу понять немного суть использования (не в функции). return 0 - типа успешное завершение программы. А вот допустим видел кусок кода, в начале данные на инпут от юзера идут и код чекает удовлетворяют ли они условиям и идёт 3 штуки if в конце которых return 1; return 2; return 3 соответственно. Вот этот момент кто-нибудь может объяснить на пальцах?
Аноним 07/08/18 Втр 19:50:21  1242634
> The C Programming Language
В технических книгах сложный английский?
Есть смысл пробовать читать в оригинале, если с английским знаком только по интернетам, но никогда его не учил?
Аноним 07/08/18 Втр 19:55:43  1242636
>>1242634 не насилуй себя на начальном уровне. В языке Си много тонких мест, и если ты их проебёшь из-за незнания английского, то нахуй выёбываться. Один хуй тебе придётся читать доки ко всем либам только в оригинале.
Аноним 07/08/18 Втр 19:58:14  1242640
>>1242627 return - точка выхода из программы. Всё сворачивается автоматические переменные убиваются и остаётся только то что ты повесил на return.
Если прога ничего не должна возвращать то и return не нужен.
Читай мануал дальше. Там всё объяснено.
Аноним 07/08/18 Втр 20:02:57  1242648
А млять, неправильно прочёл что ты там срашивал.
Прога завершается и return высирается ОС, а дальше уже она сама решает что с этим говном делать. Читай как и зачем в Юниксах пайпы делают, это из этой оперы.
>>1242640 - продолжение
Аноним 07/08/18 Втр 20:08:25  1242654
>>1242564 читнул, орнул, забавно. У Си значит есть своё auto, которое не то новое auto у С++.
Аноним 07/08/18 Втр 20:38:33  1242670
>>1242654
Это никакой не авто, это умолчание для одного типа.
Ты, верно, слишком молод, раз орёшь по таким мелочам
Аноним 07/08/18 Втр 20:50:19  1242678
>>1242648
// ensure proper usage
if (argc != 2)
{
printf("Usage: fifteen d\n");
return 1;
}

// ensure valid dimensions
d = atoi(argv[1]);
if (d < DIM_MIN || d > DIM_MAX)
{
printf("Board must be between %i x %i and %i x %i, inclusive.\n",
DIM_MIN, DIM_MIN, DIM_MAX, DIM_MAX);
return 2;
}

// open log
FILE* file = fopen("log.txt", "w");
if (file == NULL)
{
return 3;
}
Вот сам код
Аноним 07/08/18 Втр 20:54:16  1242681
>>1242678
Тебе же сказали, почитай стандартные значения кодов возврата.
Зачем ты код принёс.и на будущее заливай код в идеон или сорт оф, а в тред ссылку
Аноним 07/08/18 Втр 21:12:29  1242686
>>1242354
У юзера винды есть Рихтер и есть соответствующая глава в MSDN. После этого достаточно лишь прочитать описание threads.h в стандарте.

>>1242408
> В 21 веке процессоры многоядерные
> Писать однопоточный код уже признано однозначным зашкваром
Вот только процессов тоже больше одного. Писать многопоточный код без необходимости - это извращение уровня FizzBuzzEnterpriseEdition.

>>1242566
Да, раньше в языке было еще больше способов стрелять себе в ногу с переподвыверта.

>>1242627
0 - это EXIT_SUCCESS. Все остальное на твое усмотрение. Можешь обойтись лишь EXIT_SUCCESS/EXIT_FAILURE, можешь возвращать номер стадии, на которой произошла ошибка (как в коде, о котором ты говоришь). Или, например, в MS-DOS была команда choice, использовалась для написания батников - она предлагала нажать одну из заданных в аргументах клавиш и возвращала ее порядковый номер. Так тоже можно.
Аноним 08/08/18 Срд 17:57:53  1243132
Сап. Подскажите какой дебаггер выбрать.
Мне нужно чтобы я запустил прогу, а дебаггер показывал, какая часть исходного кода выполняется. Типа, нажал кнопку в проге, и он тут же подсветил участок кода. Чтобы можно было посмотреть какие переменные в памяти, чтобы можно было останавливать выполнение в произвольном месте и например отматывать назад или выполнять код по шагам/тактам.
Работаю на винде. Но в принципе, если есть такое только под линукс, то ок. Хорошо бы чтобы он был опенсорсный.
Аноним 08/08/18 Срд 19:33:31  1243174
>>1242686
Спасибо, что-то вроде проясняется после твоего ответа. А можешь объяснить FizzBuzzEnterpriseEdition это что такое? ФиззБазз что такое знаю, а всё в целом что подразумевает?

И этот неявный инт - это архаика и теперь так писать дурной тон, правильно?
Аноним 08/08/18 Срд 19:37:05  1243175
>>1243132
В любой иде такое есть, в той же студии.
Аноним 08/08/18 Срд 20:41:55  1243203
>>1243174
> А можешь объяснить FizzBuzzEnterpriseEdition это что такое?
Погугли.

> И этот неявный инт - это архаика и теперь так писать дурной тон, правильно?
Правильно. В С99 и выше уже запрещено.

>>1243132
Ты не поверишь, но gdb. Собираешь с -ggdb. Кроме того, на винде Visual Studio, Pelles C и windbg все умеют в source-level отладку.

> и например отматывать назад
Нинужно.
Аноним 08/08/18 Срд 20:48:44  1243206
>>1243203
Дополню, последнее не нужно, потому что есть стоп-меткиили как ето называется?
другой-анон
Аноним 08/08/18 Срд 21:23:15  1243227
>>1243203
Спасибо большое, про gdb наслышан, буду пробовать его. Ну и студию тоже наверно попробую.
>>1243206
Ты про точки останова, да?
Аноним 09/08/18 Чтв 00:21:34  1243322
Вопросы по Прате:
Вот пример из книги https://ideone.com/oJaSnL объявление структуры и объединения у меня вызвало подозрение, попробовал запустить, офк ничего не пошло, пока не убрал булы, размер структуры с ними 16 , без них 4, хули так много? хотя размер була 1, я так понял что в структуре у меня засели int на 4 позиции bool 4 опять инт и опять бул. Это так?
Так вот, такую же мешанину из short, int и bool делать нельзя? Что происходит с битовыми полями при смешивании типов, почему по ссылке все работает норм?
Аноним 09/08/18 Чтв 00:50:17  1243334
>>1243322
> Так вот, такую же мешанину из short, int и bool делать нельзя?
Делать мешанину можно, но битовые поля не ок с точки зрения производительности. Все это стоило сделать настоящими bool и int, экономия тут ни к чему.

> Что происходит с битовыми полями при смешивании типов
Ничего не происходит, тип элемента битового поля может быть bool или int. Единственное, чего нельзя - указывать битов больше, чем в реальных singed/unsigned int или bool.

> почему по ссылке все работает норм?
Потому что и должно работать норм.

> офк ничего не пошло, пока не убрал булы
Возможно, у тебя компилятор не умеет в C99, возможно, ты просто -std=c99 или -std=c11 забыл. Тащи сообщение об ошибке.
Аноним 09/08/18 Чтв 00:54:45  1243338
>>1243334
c11 включен, даже варнингов нет.
Вот мой выхлоп:

Исходные настройки окна:
Окно непрозрачно.
Цвет фона желтый.
Рамка отображается.
Цвет рамки зеленый.
Стиль рамки штриховой.

Настройки окна с использованием представления unsigned short:
Окно непрозрачно.
Цвет фона черный.
Рамка не отображается.
Стиль рамки сплошной.
Цвет рамки черный.
комбинация битов 00000000000000000000000000000001

Измененные настройки окна:
Окно прозрачно.
Цвет фона желтый.
Рамка отображается.
Цвет рамки зеленый.
Стиль рамки штриховой.

Настройки окна с использованием представления unsigned short:
Окно прозрачно.
Цвет фона голубой.
Рамка не отображается.
Стиль рамки пунктирный.
Цвет рамки красный.
Комбинация битов 00000000000000000001001000001100
Аноним 09/08/18 Чтв 01:28:03  1243344
>>1243338
Во, теперь понял, в чем твоя проблема. Дело в том, что GCC "оптимизирует" битфилды таким образом, что члены разных типов выравниваются на границу инта. Получается бит для bool + 31 бит выравнивания, 7 бит для цвета и безымянного члена + 25 бит выравнивания, 1+31 для bool и выравнивания и т. д. Всего 4 инта, т.е., 16 байтов. Скажи -mno-ms-bitfields или собирай шлангом, там этот ключ по умолчанию, а для GCC-шного поведения нужно специально попросить -mms-bitfields.
Аноним 09/08/18 Чтв 01:34:43  1243345
>>1243344
>собирай шлангом, там этот ключ по умолчанию
я им и собирал, так а вообще это выравнивание битовых полей в стандарте не прописано?
Аноним 09/08/18 Чтв 01:47:12  1243347
>>1243345
> я им и собирал
Мда, ну значит у меня просто старый шланг.

> а вообще это выравнивание битовых полей в стандарте не прописано?
В стандарте всегда крайне расплывчатые формулировки всего, что выходит за пределы абстрактной машины. Код в Прате непортабелен, потому что делает предположения относительно раскладки битфилдов: компилятор может выделить под элемент char, а может и int, может начать заполнение со старшего бита, а может с младшего. Но то конкретное поведение, на которое ты напоролся - стандарту противоречит. Даже если компилятор выделит всего байт для первого bool, в байте останется еще достаточно места, чтобы туда влезли fill_color и анонимный член, и в этом случае компилятор обязан их туда положить.
Аноним 09/08/18 Чтв 01:50:59  1243348
>>1243347
ясно, спасибо
Аноним 09/08/18 Чтв 11:58:35  1243444
Почему крашится?
int c;
c = getchar();
printf(c);
Аноним 09/08/18 Чтв 12:17:58  1243447
>>1243444
>printf(c);
Сам-то как думаешь?
Аноним 09/08/18 Чтв 13:14:20  1243474
>>1243444
Гондон, съеби.
Аноним 09/08/18 Чтв 13:19:11  1243476
>>1243444
>крашится
А компилится, для начала, сынок?
Аноним 09/08/18 Чтв 13:45:17  1243490
Подскажите какой нибудь литературы c++ для ньюфага
Аноним 09/08/18 Чтв 14:00:44  1243500
>>1243490
> c++
CPP for newfagots
Аноним 09/08/18 Чтв 17:38:35  1243661
В теории эта программа https://ideone.com/gBSvuQ должна выводить количество слов определенной длины, на практике ничего не работает, что я делаю не так?
Аноним 09/08/18 Чтв 18:05:10  1243679
>>1243661
приоритет у != выше чем у =
Аноним 09/08/18 Чтв 18:11:18  1243683
>>1243679
Даже, если пофиксить эту ошибку, у него не будет это нормально работать. У него не будет считаться последнее слово в файле, но с этой ошибкой пусть он уже сам разбирается, она довольно тривиальна.
Аноним 09/08/18 Чтв 18:31:30  1243695
>>1243679
Если честно, не понял как это должно помочь
Аноним 09/08/18 Чтв 18:34:51  1243701
>>1243695
while((c = getchar()) != EOF){
Аноним 09/08/18 Чтв 18:35:36  1243704
>>1243701
Но это все равно говнокод и тебе придется этот блок еще раз переделывать, потому-что у тебя не будет считаться последнее слово.
Аноним 10/08/18 Птн 03:54:11  1243934
Аноны, какие есть способы организации динамических библиотек?
На винде есть dll файлы, а мне бы что нибудь похожее, только кросс платформенное.
Допустим, я написал в таком модуле некие функции, структуры и т.д., в общем модуль с некоей функциональностью.
Потом где-то отдельно, скомпилировал сишный код этого модуля в такую вот библиотеку, и могу ее смело подключать к основной программе, чтобы в ней появилось нужная мне функциональность.
Чтобы почитать по этой теме? Интересует как сам формат таких библиотек, так и механизм компиляции и их подключения.
Интересно было бы взглянуть на какие нибудь уже существующие реализации, если таковые есть.
Хотя я бы предпочел пилить свой велосипед, так интереснее + я в этом гарантированно разберусь.
Аноним 10/08/18 Птн 04:05:08  1243935
>>1243934
> а мне бы что нибудь похожее, только кросс платформенное
Оберни dlopen/LoadLibrary, оберни dlsym/GetProcAddress и не выделывайся попусту. Не стоит оно того, особенно если ты кроссплатформенно хочешь, лол.

> Чтобы почитать по этой теме?
John Levine "Linkers and Loaders"

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

> механизм компиляции
Ну ты такой короч пишешь ld-скрипт или каштомный линкер.

> их подключения
mmap/VirtualAlloc + mprotect/VirtualProtect
Аноним 10/08/18 Птн 08:01:49  1243968
>>1243934
> кросс платформенное.
В Qt есть система плагинов.
Аноним 10/08/18 Птн 11:06:46  1244040
Сап, написал всякой хрени, которая предосиавляет интерфейс malloc/free, но перед free зануляет область памяти.
Смотрю, а в тырнете пишут, что всякие линухи зануляют страницы сами после использования чтобы приложения не шарились у друг друга в куче.
А где-то пишут, что недостаточно секьюрно/опция в таком-то дистре отключена из-за перформанса.
Короче, кто ведает состоянием page zeroing'а на современных никсах? Когда, где, при каких условиях?
Аноним 10/08/18 Птн 16:56:18  1244321
Алсо, хорошо бы иметь имя функции с ГНУтым компилятором как строковый литерал, а не как указатель __func__.
Аноним 10/08/18 Птн 18:40:13  1244378
>>1243934
Гугли autotools
Пишешь обычные библиотеки, через autotools делаешь кроссплатформенный configure файл, который потом генерирует makefile под нужную платформу.
Аноним 10/08/18 Птн 18:49:01  1244381
>>1244378
>autotools
Говно, лучше сразу в маке писать
Аноним 11/08/18 Суб 05:48:54  1244571
>>1231397 (OP)
Как написан язык си ? На каком языке ? Мб есть сурс код у кого ? Буду благодарен просто интересно, мб в будущем доделаю язык и сделаю нормальный импортинг файлов лол
Аноним 11/08/18 Суб 06:14:25  1244573
>>1244571
https://github.com/TinyCC/tinycc
Аноним 11/08/18 Суб 06:31:48  1244576
>>1244571
Ебанутый, С - это как русский, оба языка и не могут быть как то написаны в стиле программы, есть компиляторы С, вот их много, из маленьких которые можно смотреть выбирай PCC или TCC, ссылку на последний тебе дали.
Аноним 11/08/18 Суб 06:35:44  1244577
>>1244040
https://www.viva64.com/ru/b/0388/

Аноним 11/08/18 Суб 07:02:02  1244583
>>1244573
А сам язык кде ?
Аноним 11/08/18 Суб 07:32:00  1244585
>>1244583
Просто иди нахуй.
Аноним 11/08/18 Суб 08:57:04  1244602
Посоветуйте исходников socks5 UDP клиента. UDP Associate.
Моя реализация работает криво.
Аноним 11/08/18 Суб 08:58:31  1244604
>>1244577
Он вроде не совсем про то. Он про то, должно ли ядро обнулять страницы перед передачей их чужому процессу. Должно, обнуляет.
Аноним 11/08/18 Суб 09:37:53  1244623
>>1244604
Он же изначально просто затереть хотел память.

>Должно, обнуляет.
Можно скомпилировать чтоб не обнуляло. вроде есть опция, мне лень искать
Аноним 11/08/18 Суб 09:46:24  1244625
>>1244577
Спасибо.
>>1244604
Почитаю энивэй.
>>1244623
PG_ZERO, походу, по дефолту в конфиге не отображается. Наверное, надо эмбеддед врубить.
Правда, эта опция тоже не совсем то, она отвечает за произвольный зероинг в состоянии idle.
Можно нагуглить коммит стрекозаБДСМ из 2016 за подробностями
Аноним 11/08/18 Суб 09:56:15  1244627
>>1244577
А ещё в этой статье не очень изящное решение.
в gcc нет memset_s, но можно сделать указатель на функцию с сигнатурой мемсет, но только у указателя на память volatile добавить. И вызывать мемсет_с
Аноним 11/08/18 Суб 09:58:05  1244629
Какими менеджерами пакетов пользуетесь для Си?
Аноним 11/08/18 Суб 09:59:52  1244631
>>1244629
Напоминаю, что это смешная шутка, но её надо шутить к крестотреде, когда им networking ещё к файловой системе добавят
Аноним 11/08/18 Суб 10:28:21  1244641
>>1244631
Не, я не шучу. Просто тупой. На Си не нужен менеджер, потому что всё пишут с нуля, не считая стандартных библиотек?
Аноним 11/08/18 Суб 10:30:31  1244643
>>1244641
Пакетный менеджер можно организовать везде, не часть языка.
Вообще, доской ошибся.
Аноним 11/08/18 Суб 10:31:39  1244644
>>1244643
Ответа так и нет. Я не про пакетный менеджер для себя, а про базу готовых библиотек.
Аноним 11/08/18 Суб 10:34:57  1244647
>>1244644
Качай линух, ставь себе что хочешь любым пакетным менеджером.
Писец, нюфаги поехали из-за сраных Го с Питоном и интересуются , почему в языке нет пакменов. Я в шоке.
Аноним 11/08/18 Суб 11:13:27  1244665
>>1244647
Ты опять не понял. При чём здесь пакетный менеджер линукса? Это не централизованное хранилище библиотек для Си. Да, с помощью него можно управлять исходниками, формировать свои пакеты, но это всё нужно делать самому. А я про централизованное хранилище, чтобы ставить и обновлять библиотеки, а не копировать их самому откуда-то вручную и самому следить за версиями.
Аноним 11/08/18 Суб 11:16:10  1244668
>>1244665
Попробую пояснить в другом ключе.
Библиотеки для нас - не перчатки, мы их не меняем по сто раз в неделю, а вся работа с библиотекой не сводится для нас в import os.
Так яснее?
Аноним 11/08/18 Суб 11:22:23  1244675
>>1244668

>Так яснее?
Да, извините за срач.
Аноним 11/08/18 Суб 11:27:09  1244681
>>1244629
apt-get
Аноним 11/08/18 Суб 11:32:56  1244685
>>1241577
А как это вообще можно реализовать? Чтоб прям
func(1)(2)(3)(4)
Аноним 11/08/18 Суб 12:34:28  1244731
>>1244685
mov ecx,[esp]
mov eax,[ecx-4]
add eax,ecx
ret
Аноним 11/08/18 Суб 12:37:30  1244733
>>1244731
Тредом ошибся?
Аноним 11/08/18 Суб 12:52:01  1244748
uint8_t call_me(){
uint8_t
ret = __builtin_return_address(0);
ret=(uint32_t)(ret-4)+ret;
return ret;
}

int main(){
printf("%p %p\n",call_me(),(void*)call_me);
return 0;
}
Аноним 11/08/18 Суб 12:53:04  1244750
>>1244748
https://pastebin.com/raw/Cd7rRVwg
Аноним 11/08/18 Суб 12:57:27  1244755
>>1244750
% gcc main.c -m64 -o main
% ./main
0xc4 0x56344a315139
Аноним 11/08/18 Суб 13:00:36  1244760
>>1244755
gcc -O0 main.c
./a.out
0x55b6568a0139 0x55b5568a0139
Аноним 11/08/18 Суб 13:01:21  1244762
Что ты вообще творишь? Указатель я знаю как вернуть, тут магии не надо, можно просто

typedef void (*fnptr)();
fnptr foo(void) {
return (fnptr)foo;
}

Я хочу именно возвращаемый тип тот же.
Аноним 11/08/18 Суб 14:11:06  1244824
>>1244583
Сам язык не написан, он существует в голове у людей. Другой анон привел аналогию, си это как русский. Ты можешь написать программу которая умеет писать на Си, читать Си, исполнять Си, но ты не можешь написать Си.
Аноним 11/08/18 Суб 14:12:21  1244826
>>1244824
То есть можно написать Си на человеческом, то есть типа доки написать, стандарты там, но это не совсем Си.
Аноним 11/08/18 Суб 14:14:02  1244827
Язык си это компилятор языка си.
Аноним 11/08/18 Суб 14:18:48  1244831
Как в mingw-w64 подключить стороннюю библиотеку?
Может быть в gcc ключ есть какой?
Аноним 11/08/18 Суб 14:56:43  1244870
>>1244831
> в gcc ключ есть
Почему он такой странный?
-I и без пробела указывать путь?
Можно как-то проще? Если положить в одну директорию с gcc.exe, то пойдет?
Аноним 11/08/18 Суб 15:02:06  1244872
>>1244831
Какую стороннюю библиотеку, для начала?

Проще скинуть в корневой каталог main.c и подключить: в самом .c файле (если прога только из него и состоит) или в файле-заголовке .h.

Должно само подтянуться без всяких параметров.
Аноним 11/08/18 Суб 15:04:46  1244874
>>1244872
cs50.h

> Проще скинуть в корневой каталог main.c и подключить: в самом .c файле
Пробовал, не получилось.
Аноним 11/08/18 Суб 15:09:29  1244879
>>1244874
>cs50.h
https://github.com/cs50/libcs50
Должно помочь добавление параметра -lcs50 к линкеру.
Чтобы не возиться с путями - пусть лежит там же - в корне проекта.
Аноним 11/08/18 Суб 15:25:28  1244883
.png (11Кб, 477x185)
>>1244879
Аноним 11/08/18 Суб 15:33:25  1244885
>>1244883
https://cs50.stackexchange.com/questions/7291/how-do-i-install-the-cs50-library-to-my-local-os

Попробуй ещё параметр -lm добавить.
Аноним 11/08/18 Суб 15:37:25  1244887
>>1244885
> Note the use of quotes instead of angled brackets.

Сработало, но теперь это:
> undefined reference to `GetString'
> collect2.exe: error: ld returned 1 exit status
Аноним 11/08/18 Суб 15:43:11  1244890
>>1244887
Всё, решилось вот этим:
https://cs50.stackexchange.com/a/16616
Аноним 11/08/18 Суб 15:44:35  1244892
>>1244890
:-)
Аноним 11/08/18 Суб 17:03:04  1244932
>>1244665
>Это не централизованное хранилище библиотек для Си.

Репы линуксовых дистров централизованные. Там могут храниться библиотеки не только для одного языка программирования, но это сишникам не мешает.
Аноним 11/08/18 Суб 18:33:25  1244998
>>1231675
Твоё недоумение понятно. Это когда ты под писи на линуксе, например, пишешь у тебя printf в любом случае выводит текст, даже если ты перенос строки (\n) не поставил в конце и читать о таких вещах в книге крайне удивительно, потому что такое поведение воспринимается даже совсем новчиками либо как нечто нелогичное, либо как какой-то атавизм, тем более после того, как выясняется, что и без переноса строки всё прекрасно выводится. А я вот однако умудрился столкнуться с этой хуйнёй когда реализовал weak-linked функции _read и _write (через которые работает io), чтобы сделать маленький интерактивный шелл для микроконтроллера по uart'у. И тогда поведение printf'а и всяких putchar меня удивило, потому что я через них выводил строчки начиная с символа новой строки, а не заканчивая им, то есть как printf("\nstring"), а не printf("string\n") - в конце концов нужно же было как-то сделать вывод приглашения шелла, например. В результате строка начинавшаяся с символа новой строки выводилась только после того, как выполнялась строчка кода, выводящая другую строку. В тексте на скриншотах объясняют природу этого феномена через разъяснение механики работы ввода-вывода - наличия буфера.

>>1231686
roll
Аноним 11/08/18 Суб 19:54:59  1245071
Как получить список запущенных процессов?
inb4 popen("ps -x", "r")
Аноним 11/08/18 Суб 20:20:07  1245086
>>1244629
http://conan.io
Аноним 11/08/18 Суб 23:52:17  1245191
>>1244831
С -I указываешь путь к директории с заголовочниками либы, с -L - путь к директории, где лежиь либа (libимя.a), c -lимя поключаешь библиотеку (или -lимя.a, если имя не соответствует стандарту). Класть свое говно в директории установленного гцц категорически не рекомендуется. Чтобы не писать каждый раз все это руками, делаешь мэйкфайл.

>>1245071
> Как получить список запущенных процессов?
Прогулкой по procfs (/proc).

>>1245086
Нинужно. Переход с одной версии либы на другую должен быть взвешенным и осознанным решением.
Аноним 12/08/18 Вск 00:13:07  1245198
>>1245191
>Прогулкой по procfs (/proc).
Это только на линуксах.
>As of February 2011, procfs is gradually becoming phased out in FreeBSD.[1] It was removed from OpenBSD in version 5.7, which was released in May 2015, because it "always suffered from race conditions and is now unused".[2]
Аноним 12/08/18 Вск 00:27:58  1245205
>>1245198
В винде есть Toolhelp-функции и NtQuerySystemInformation в API, есть dbghelp.dll, можно даже парсить PEB, если нужна дополнительная информация о процессах. Очевидно, что кроссплатформенно такие вещи не делаются.

> procfs is gradually becoming phased out in FreeBSD
Сочувствую.
Аноним 12/08/18 Вск 01:13:38  1245226
Что за хуйня https://learnc.info/c/opaque_pointers.html
In file included from F:\Documents\workspace\test\src\sec.c:2:
F:\Documents\workspace\test\src/header.h:25:12: warning: unused function 'checkDepth' [-Wunused-function]
static int checkDepth(unsigned);
^
F:\Documents\workspace\test\src/header.h:26:12: warning: unused function 'checkHeight' [-Wunused-function]
static int checkHeight(unsigned);
^
F:\Documents\workspace\test\src/header.h:27:12: warning: unused function 'checkWidth' [-Wunused-function]
static int checkWidth(unsigned);
^
3 warnings generated.
sec-7987a8.o : error LNK2019: ссылка на неразрешенный внешний символ createBox в функции main
sec-7987a8.o : error LNK2019: ссылка на неразрешенный внешний символ getVolume в функции main
sec-7987a8.o : error LNK2019: ссылка на неразрешенный внешний символ setWidth в функции main
F:\Documents\workspace\test/bin/sec.exe : fatal error LNK1120: неразрешенных внешних элементов: 3
clang.exe: error: linker command failed with exit code 1120 (use -v to see invocation)
[Finished in 0.3s]
как так то, функцию креэйт добавил, не могу никак понять что за гавно? {ули он не видит, компилю шлангом, да и гцц ту же ересь несет. Бля они тупо не видят Box.c, как так то блять?
Аноним 12/08/18 Вск 01:18:52  1245229
>>1245226
Покажи командную строку, как собираешь; убери ключевое слово static из .h - единственные static-функции, которые имеет смысл класть в .h - это static inline. Ну и скорее всего, ты при сборке указываешь один .c файл, но не указываешь второй.
Аноним 12/08/18 Вск 01:20:48  1245230
>>1245226
Ладно, я еблан, надо было в сублайме изменить параметры компиляции или мейкфайлом делать.
Будут ли косяки если я буду включать все сурсы в параметре компилятора? даже не относящиеся к программе, компилятор их заигнорит?
Аноним 12/08/18 Вск 01:25:19  1245231
>>1245230
> Будут ли косяки если я буду включать все сурсы в параметре компилятора?
Пока учишь язык, обо что-нибудь обязательно споткнешься, хотя качественный код с правильно расставленными статиками для функций и переменных от такого ломаться не должен.

Лучше просто сделай мэйкфайл, саблайм в них отлично может.
Аноним 12/08/18 Вск 01:47:24  1245236
>>1245226
>>1245229
>убери ключевое слово static из .h
вот не понимаю, убираю я статик, а почему все ровно не могу обращаться к чек функциям из main? они же ничем не отличаются от геттеров и сеттеров. Или я уже в глаза долблюсь?
Аноним 12/08/18 Вск 01:51:11  1245239
>>1245236
и почему компилятор ругается когда стоит статик в заголовочном?
Box.h:26:12: warning: unused function 'checkDepth' [-Wunused-function]
Аноним 12/08/18 Вск 02:29:36  1245251
>>1245236
> а почему все ровно не могу обращаться к чек функциям
Значит не убрал статики, не перекомпилировал box.c или еще что-то, нам-то откуда знать, что ты там написал и как собираешь?

>>1245239
> Box.h:26:12: warning: unused function 'checkDepth' [-Wunused-function]
Потому что в main.c ты не используешь эту функцию, а объявлена она как статическая, т.е., static говорит, что функция существует только в данном файле. А если она "существует" в main.c, но не используется, то нахуй она тебе нужна?

Как сделать правильно, а не как в статье: если checkXXX не нужны вне box.c, удаляешь их объявления из box.h нахуй и кладешь их в начало box.c. Или удаляешь объявления вообще и кладешь определения (тела) в начало box.с, добавляя к ним static (часто именно так и делают, если нет перекрестных зависимостей между функциями). Если check нужны вне box.c, тогда просто удаляешь ключевые слова static из box.h, и функции станут доступны из любого файла.
Аноним 13/08/18 Пнд 11:07:08  1245979
Двач есть проблема, линкер не видет printf.
Turbo C++ Version 3.00
https://pastebin.com/8AD21GEP

Turbo Link 5.0
Error: Undefined symbol _PRINTF in module MAIN.CPP

Компилирую:
TC\TCC.EXE -ID:\TEST\INCLUDE -LD:\TEST\LIB -c -oMAIN.OBJ -ml MAIN.CPP
TC\TCC.EXE -ID:\TEST\INCLUDE -LD:\TEST\LIB -c -oTEST.OBJ -ml TEST.CPP
TC\TLINK.EXE -i TEST.OBJ MAIN.OBJ, MAIN.EXE
В чём может быть проблема?
Аноним 13/08/18 Пнд 11:28:42  1245985
>>1245979
Разобрался сам
Аноним 13/08/18 Пнд 11:57:55  1245991
>>1245985
> Разобрался сам
А нам рассказать?
Аноним 13/08/18 Пнд 12:08:25  1245995
>>1236610
Да, с avx я долго ебался, чтоб всё красиво было.
Вроде работает.
Аноним 13/08/18 Пнд 14:07:34  1246048
Не могу разобраться с массивами. В книге написано: в С вызываемая
функция не может модифицировать переменные в вызывающей функции

Но к примеру тут https://ideone.com/f4VZYD она же модифицирует. Или я чего то не понимаю?
Аноним 13/08/18 Пнд 14:09:33  1246052
Какие есть инструменты анализа кода и построения структуры программы ?
Про Doxygen вычитал:
Doxygen генерирует документацию на основе набора исходных текстов и также может быть настроен для извлечения структуры программы из недокументированных исходных кодов. Возможно составление графов зависимостей программных объектов, диаграмм классов и исходных кодов с гиперссылками.
Есть ли еще инструменты с таким функционалом?
Аноним 13/08/18 Пнд 15:01:58  1246072
>>1231397 (OP)
Ананасы, а как используя аргумент exceptfds (четвертый аргумент) в системном вызове select() получить собственно тип исключения? Это вообще возможно или нужно всё переделать на poll() и смотреть на возвращаемые биты в revents структуры дескриптора struct pollfd?
Аноним 13/08/18 Пнд 15:12:45  1246079
>>1246072
Да, юзай poll()
Аноним 13/08/18 Пнд 15:17:45  1246084
>>1246048
>https://ideone.com/f4VZYD
Здесь функция модифицирует память, на которую указывает переменная, а не сам указатель (который собственно был передан функции).
Но в общем твое непонимание понятно: в книге имеется в виду, что в вызываемую функцию передаются копии параметров. Т.е. передавая в функцию указатель на память, вызываемая функция может использовать этот указатель как угодно, в том числе модифицировать память, на которую он указывает, но вот само значение указателя (т.е. адрес масива) остается таким же в вызывающей функции, что бы ты не делал.
Аноним 13/08/18 Пнд 15:20:18  1246086
>>1246079
Вот блять, спасибо
Аноним 13/08/18 Пнд 21:29:33  1246276
>>1246052
> Есть ли еще инструменты с таким функционалом?
Source Insight.

Аноним 13/08/18 Пнд 23:36:01  1246351
Да блядь, какое нахуй деление по модулю нахуй!
Анонче, пихаем шорт или что том у нас двухбайное в чар, какая половина будет в чаре? Старшая или младшя?
Я слишком тупой чтобы обясните мне в бинарном коде.
Аноним 14/08/18 Втр 00:08:11  1246362
>>1246351
Младшая. А чего ты в модуле понять не можешь? Это просто такой способ сказать "старшие биты выбрасываются". Представим, что у тебя не двоичные разряды, а десятичные, и у тебя есть 12345678, из которого тебе надо 4 разряда - старшие разряды ты отбрасываешь. Можешь это выразить как: 12345678 % 104 = 12345678 % 10000 = 5678. То же самое с битами: есть 16-битное xxxxxxxxyyyyyyyy, тебе нужно впихнуть его в 8 бит, и ты выбрасываешь старшие разряды. Можешь это записать как xxxxxxxxyyyyyyyy % 28 = xxxxxxxxyyyyyyyy % 256 = yyyyyyyy.
Аноним 14/08/18 Втр 00:15:04  1246367
>>1246362
>старшие биты выбрасываются
Вот оно.
Не ну ахуеть, вот деление по модулю нахуй понятнее да. Шутники блядь.
Аноним 14/08/18 Втр 12:45:39  1246539
>>1246367
Без него жизни нет
Аноним 14/08/18 Втр 15:52:08  1246622
>>1246362
Чет лафхак какойто, всегда биты маской выбивались, а тут по модулю, фу
Аноним 14/08/18 Втр 21:40:30  1246791
>>1246622
Наоборот сдвиги и маска - это лайфхаки для деления и остатка для частного случая в виде степеней двойки.
Аноним 15/08/18 Срд 00:14:03  1246870
>>1246791
Так компилятор все равно деление сдвигами и масками делает.
Аноним 15/08/18 Срд 13:01:00  1247031
Где посоветуете лучше всего почитать о точках следования? В общих чертах слышал звон, да вот углубиться надобно в это всё.
Аноним 15/08/18 Срд 16:16:27  1247145
Порекомендуйте свободные программы на Си с наиболее качественным, на ваш взгляд, кодом. Кроме ядер операционных систем и игр.
Аноним 15/08/18 Срд 16:43:36  1247161
>>1247145
SpiderMonkey
Аноним 15/08/18 Срд 17:08:36  1247178
>>1247161
https://github.com/ricardoquesada/Spidermonkey
Это? Там Си очень мало.
Аноним 15/08/18 Срд 17:22:31  1247194
>>1247178
версия 1.8 последняя на Си
Аноним 15/08/18 Срд 17:58:20  1247244
>>1247194
Нет, там столько же сишного кода в процентах.
Аноним 15/08/18 Срд 18:46:49  1247292
.PNG (27Кб, 590x370)
Зачем в этом примере переменной fahr задали тип float, хотя логичнее было бы оставить int?
Аноним 15/08/18 Срд 19:09:45  1247318
>>1247292
раздели 5 на 9 в инте и посмотри что получится)
А вычисление выражения идет слева направо
Аноним 15/08/18 Срд 19:13:28  1247321
>>1247318
> раздели 5 на 9 в инте
0 должен получиться, но fahr-то каким боком там?
Аноним 15/08/18 Срд 19:14:09  1247322
>>1247292
я чето не о том подумал и про порядок вычисления написал.
Куда бы ты не воткнул 5/9 в инте - компилятор рассчитает эту константу во время компиляции и воткнет 0. Что в начале выражения, что в конце
Аноним 15/08/18 Срд 19:17:05  1247323
.PNG (11Кб, 545x177)
>>1247321
Во втором примере, кстати, они оставили fahr в int.
Аноним 15/08/18 Срд 19:46:43  1247343
>>1247292
Инт целое, флоат с плавающей точкой. 5 разделив на 9 ты не получаешь целое. Ну и уж если совсем доебаться, то константой а заодно и мелкой оптимизацией запись float fahr = 0x3f000000; лучше оставить, а коммент добавить что это за константа.
Аноним 15/08/18 Срд 19:51:17  1247344
> Упражнение 1.6. Проверьте, что выражение getchar () ! = EOF действительно равно
1 или 0.
Как? У меня только 1 выводит.
Упражнение 1.7. Напишите программу для вывода значения константы EOF.
Как? У меня -1 получается.
>>1247343
> 5 разделив на 9 ты не получаешь целое
Согласен, поэтому и нужно celsius в float, а почему fahr в int не оставили?
Аноним 15/08/18 Срд 19:57:24  1247349
.png (27Кб, 590x370)
.png (31Кб, 590x370)
На второй картинке ведь красивее получается.
Всё ещё не понимаю, почему они двум переменным сменили тип на float.
Аноним 15/08/18 Срд 20:08:51  1247352
>>1247292
>>1247349
Просто очепятка, не парься, изменив fahr с флота на ин-т ничего не изменится.
Аноним 15/08/18 Срд 20:09:26  1247353
>>1247344
if((getchar() != EOF) == 0)
printf("0");
Аналогично для 1.

EOF и должен == -1.

Аноним 15/08/18 Срд 20:10:53  1247354
>>1247353
> if((getchar() != EOF) == 0)
> printf("0");
А что мне вводить нужно, чтобы 0 был?
Аноним 15/08/18 Срд 20:12:41  1247356
>>1247352
Изменится, тогда всё выглядит няшнее, если смотреть на типы. Они только в одной строчке получаются разные, а в остальных одинаковые.
Аноним 15/08/18 Срд 20:15:08  1247358
>>1247354
Если под виндой сидишь, то ctrl + z, если под линуксом - Ctrl+D. Либо ещё перенаправление потока ввода с фала можно сделать и по итогу 0 выдаст.
Аноним 15/08/18 Срд 21:10:46  1247391
>>1247031
Прямо в стандарте в Annex C есть прямо списком.

>>1247349
С float будет меньше преобразований int/float на каждом шаге цикла. Еще с float можно задать шаг в 0.5 - для такой таблички вполне естественное решение.
Аноним 15/08/18 Срд 21:15:06  1247394
>>1247391
> С float будет меньше преобразований int/float на каждом шаге цикла.
Наоборот ведь, смотри маленькие синие буковки.
Я поэтому и задал вопрос.
Аноним 15/08/18 Срд 21:19:06  1247396
>>1247394
В глаза ебусь. В общем, я думал, что там вcему float выставили: в том числе и lower/upper/step.
Аноним 16/08/18 Чтв 22:20:06  1247979
clang.mp4 (4095Кб, 912x648, 00:00:19)
Аноним 16/08/18 Чтв 22:25:22  1247984
>>1247979
> смэллтэлк
Аноним 17/08/18 Птн 02:07:02  1248059
>>1231686
roll.
Аноним 17/08/18 Птн 13:01:13  1248163
>>1231397 (OP)
>Тред, посвященный прародителю всех С-подобных языков
Алголу чтоле?
Аноним 17/08/18 Птн 13:46:18  1248175
>>1248163
А то, и по ФОРТРАНУ.
Аноним 17/08/18 Птн 13:47:23  1248176
>>1239787
>VLA
> while we continue to work to remove all VLAs in the kernel: of the ~115 cases found in v4.16, after the v4.19 merge window we should be down to about 13 remaining, most of them in crypto code, all of which have patches under review
https://www.phoronix.com/scan.php?page=news_item&px=Linux-4.19-STACKLEAK-GCC
Но почему
Аноним 17/08/18 Птн 16:57:17  1248232
25 лвл, долбоеб, есть вышка "инф. и выч. тех.". Какие шансы на успех вкатывания по-вашему?
Аноним 17/08/18 Птн 19:02:33  1248270
>>1248232
> 25 лвл, долбоеб
100% будешь вкатываться
Аноним 17/08/18 Птн 19:03:37  1248271
>>1248270
по че му?
Аноним 17/08/18 Птн 20:44:01  1248323
Есть ли готовые функции strtod() и atof(), которые не зависят от локали?
Если нет, то как вы в таком случае поступаете, тупо меняете локаль на англоязычную?
Аноним 17/08/18 Птн 21:34:14  1248352
>>1248176
> Но почему
Потому что ты заранее знаешь, сколько памяти на стеке ты можешь позволить себе выделить (и тогда просто выделяешь массив фиксированного размера), либо ты не знаешь, поэтому не ограничиваешь максимальный размер массива, рано или поздно пытаешься выделить много и получаешь переполнение стека. Вывод: VLA нинужны.

>>1248323
> готовые функции strtod() и atof(), которые не зависят от локали
Есть. strtod() и atof(). При старте у тебя локаль "C", где разделитель - точка. Если меняешь локаль и не хочешь локальные разделители (или файл парсишь, например) - выставь LC_NUMERIC в "C", потом вернешь.
Аноним 17/08/18 Птн 23:14:30  1248397
>>1231397 (OP)
Как парсить простой ini файл?
[SectionName]
keyName=value


[SectionName]
keyName=value


и т.д.
Аноним 17/08/18 Птн 23:21:10  1248399
>>1248397
Читаешь построчно, опционально убираешь из начала и конца прочитанной строки все isspace(). Если строчка пуста или начинается с ; - пропускаешь. Если строчка начинается с [ - читаешь и запоминаешь имя текущей секции, проверяешь, что после ] нет мусора. Иначе ищешь первый =, читаешь до = имя параметра, после - значение. Что ты дальше с этим будешь делать - дело твое. Можешь в словарик сложить, можешь сразу применять, можешь на каждый ini_get("section", "key") парсить заново в поисках сначала нужной секции, а потом нужного параметра в секции.
твой кэп
Аноним 18/08/18 Суб 10:39:00  1248517
>>1248232
>25лвл
Слишком старый для IT в целом.
Аноним 18/08/18 Суб 14:13:46  1248577
>>1248517
Лол, это если на жс писать, где каждую неделю новый фреймворк, а для Си и 35 норм.
Аноним 18/08/18 Суб 16:12:52  1248655
>>1239787
>в C99 и выше есть VLA
Про "и выше" надо бы поаккуратнее.
> Variable length arrays are a conditional feature that implementations need not support; see 6.10.8.3.)
https://port70.net/~nsz/c/c11/n1570.html#6.7.6.2p4
Аноним 18/08/18 Суб 16:36:12  1248665
>>1231686
t
Аноним 18/08/18 Суб 17:15:41  1248694
>>1248397
https://www.google.com/search?q=c+ini
Аноним 18/08/18 Суб 21:23:38  1248825
>>1248655
По факту оно есть. Так же как и типы из stdint.h, например, которые тоже optional.
Аноним 19/08/18 Вск 15:27:03  1249164
>>1248397
https://github.com/cktan/tomlc99
Аноним 19/08/18 Вск 17:58:10  1249235
Я вообще правильно понимаю, что от меня хотят или нет?

> Упражнение 1.9. Напишите программу для копирования входного потока в выходной с
заменой каждой строки, состоящей из одного или нескольких пробелов, одним пробелом.
https://pastebin.com/0eEVzG3k
> Упражнение 1.10. Напишите программу для копирования входного потока в выходной с заменой знаков табуляции на \t, символов возврата назад (Backspace) на \b, а обратных косых черт — на \ \. Это сделает табуляции и символы возврата легко читаемыми в потоке.
https://pastebin.com/iLgcxjF5
Аноним 19/08/18 Вск 20:56:11  1249341
>>1249235
> Пробелы.
Нет, неправильно. Имеется в виду, что для файла типа:
foo
...
...bar
(точки - пробелы) ты должен вывести:
foo
.
...bar
А та программа, что написал ты, абсолютно ничего не делает. Вторая вроде ок.
Аноним 19/08/18 Вск 22:12:46  1249405
>>1249341
Сложно что-то.
Ну и как такое сделать?
Аноним 19/08/18 Вск 22:18:53  1249412
>>1249405
Считаешь пробелы, пока не встретишь не-пробел. Если встретил конец строки - выводишь один пробел и конец строки. Если встретил что-то еще - выводишь столько пробелов, сколько насчитал, выводишь встреченный символ, выводишь символы до конца строки включительно. Идешь на следующую итерацию.
Аноним 20/08/18 Пнд 10:59:04  1249576
>>1249341
Посмотрел парочку решений отсюда:
https://clc-wiki.net/wiki/K&R2_solutions:Chapter_1:Exercise_9
Они немного другое делают, ведь у них получается вместо
> foo
> .
> ...bar
foo
.
.bar
Аноним 20/08/18 Пнд 11:09:46  1249583
>>1249576
Ну там не line, а string, так что это, видимо, переводопроблемы. Требуется схлапывать последовательности из нескольких пробелов в один: foo...............bar -> foo.bar. В целом суть та же, просто чуть меньше условий.
Аноним 20/08/18 Пнд 14:51:49  1249691
Как же больно писать жирные неуклюжие функции и не уметь разбивать задачу на подзадачи.
Аноним 21/08/18 Втр 04:08:04  1250013
>>1248825
>типы из stdint.h, например, которые тоже optional.
optional бывает разный, лол
> These types are optional. However, if an implementation provides integer types with widths of 8, 16, 32, or 64 bits, no padding bits, and (for the signed types) that have a two's complement representation, it shall define the corresponding typedef names.
https://port70.net/~nsz/c/c11/n1570.html#7.20.1.1p3

Так что stdint.h фактически не optional. Или ты много платформ знаешь, которые не попадают под эти условия?
Аноним 21/08/18 Втр 04:08:35  1250014
>>1250013
Хотел подчеркнуть, вместо этого зачеркнул.
Аноним 22/08/18 Срд 21:50:55  1251152
Есть большой набор чисел, который один раз были посчитаны при запуске программы, а теперь их нужно использовать, не вычисляя повторно. Допустим, 100 мегабайт данных.

Но проблема в том, что процессов может быть очень много, которые эти данные будут использовать. И если 100 процессов загрузят себе по 100 мегабайт чисел, это это уже 10 гигов.

Можно каким-то образом реализовать расшаренную область памяти? Или это достигается только инжектом с чтением памяти чужого процесса?

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

Алсо, пока что не придумал, как эти данные перенести собственно в код. Сейчас они прямо там и вычисляются, но если их билдить с экзешником, то это 100 мегабайт экзешник получается - пиздец какой-то.
Аноним 22/08/18 Срд 22:24:32  1251166
>>1251152
> Можно каким-то образом реализовать расшаренную область памяти
Можно. mmap с MAP_SHARED, shm_open(), все дела. А вообще, ты уверен, что тебе нужны отдельные процессы, а не потоки?
Аноним 22/08/18 Срд 22:29:09  1251169
>>1231397 (OP)
300к коллизий на миллион элементов, это нормальный показатель для хеш функции?
Аноним 22/08/18 Срд 22:35:14  1251173
>>1251166
>Можно. mmap с MAP_SHARED, shm_open(), все дела.
Получится иметь во всех процессах указатели на переменные в этой памяти? Это вот прям так работает из коробки? При этом все процессы всегда будут читать не_с_диска?

>А вообще, ты уверен, что тебе нужны отдельные процессы, а не потоки?
Да, хотя я и не уверен, почему именно. Я пишу статическую либу, а параллелиться это будет на уровень выше, там другие люди решения принимают.
Аноним 22/08/18 Срд 22:38:30  1251175
>>1251173
Да, забыл сказать, что скорость очень критична.
Аноним 22/08/18 Срд 22:41:40  1251178
>>1251173
Ёпта, есть ещё такая штука как COW.
По сути, даже если ты не будешь явно задавать shared-область, ядро навряд ли будет делать дубликаты, пока ты не испачкаешь страницы.
Да, оно реально будет работать так, как тебе тот анон показал.
Аноним 22/08/18 Срд 22:44:55  1251179
>>1251169
Каждый третий элемент коллизия, примерно, ну не знаю даже.
Аноним 22/08/18 Срд 22:47:43  1251182
>>1251179
Он там CRC-4 изобрёл?
>>1251169
> 2^1 time complexity
Да ето точно вин.
Аноним 22/08/18 Срд 23:15:39  1251195
>>1251182
>>1251179
И сколько должно быть?
Аноним 22/08/18 Срд 23:21:06  1251199
>>1251195
Я не могу сказать Тебе, чего Ты хочешь.
0
Аноним 22/08/18 Срд 23:38:55  1251204
>>1251199
Такого быть не может.
Аноним 23/08/18 Чтв 00:06:45  1251216
>>1251195
Ну очевидно же, что у идеальной функции будет 1 коллизия на 2n элементов, где n - количество бит в хэше.
Аноним 23/08/18 Чтв 00:18:49  1251218
>>1251166
Набросал прототип. Да, действительно всё работает так, как мне надо. Спасибо.

Правда, shm_open() по имени как-то смутил, несерьезно что ли это, мало ли какой конфликт.

Алсо, насколько неудобно будет портировать это под винду? Может и не понадобится, но я не уверен, что смогу обойтись никсами.
Аноним 23/08/18 Чтв 09:04:29  1251278
>>1251218
> мало ли какой конфликт
mkstemp()

> насколько неудобно будет портировать это под винду
Это базовая возможность всех более-менее полноценных ОС. CreateFileMapping (именованный)/MapViewOfFile.
Аноним 23/08/18 Чтв 09:56:52  1251291
>>1251216
Тем не менее, криптографы обычно ожидают коллизию уже среди 2^(n/2) элементов (парадокс о задаче о днях рождения).
Аноним 25/08/18 Суб 11:45:06  1252376
Скажите, а в C есть раздельная компиляция? Ну там, хедеры отдельно, а отдельно реализация функций, как в плюсах?
Аноним 25/08/18 Суб 11:50:41  1252379
>>1252376
К сожалению, хедеры в плюсы как раз из Си и пришли. У современных посонов модули, а мы все еще текст препроцессором копипастим.
Аноним 25/08/18 Суб 18:56:37  1252561
Пытаюсь исполнять машинный код при помощи апишного VirtualAlloc значит... Но почему-то оно выдает exception на то, что я пытаюсь лезть в защищенные области памяти. Как это объяснить?
https://ideone.com/ZtKovP
Аноним 25/08/18 Суб 18:59:07  1252563
>>1252379
>У современных посонов модули
Почему эти крестоносцы модули не накатят? Они же все из себя такие ПРОДВИНУТЫЕ
Аноним 25/08/18 Суб 20:16:53  1252613
>>1252561
Ну вот ты вызвал свою функцию, исполнил два нопа, а дальше? А дальше, после нопов, у тебя в выделенной тобой странице памяти идут нули. А нули эти - add[rax],al. А в rax тебя что? Говно какое-нибудь. Вот оно и падает. Что оно должно делать дальше? Как оно вернется, чтобы выполнять вот эти твои виртуалфри? Алсо, тебе в >>1216107 (OP), а не сюда.

>>1252563
Они почти накатили уже, и они как-то буэ. Как бы нам тоже не завезли под шумок в C21.
Аноним 25/08/18 Суб 20:19:01  1252617
>>1252613
>исполнил два нопа, а дальше?
Я же выделил память только под два байта, то есть sizeof(code). Почему оно исполняется дальше?
Аноним 25/08/18 Суб 20:31:56  1252626
>>1252379
Можно для танкиста, кто эти современные посоны, что у них за модули и чем плоха препроцессорная подстановка?
Аноним 25/08/18 Суб 20:56:33  1252641
>>1252617
Потому что процессор исполняет инструкции одну за другой (если они не какой-то сорт бранча), и ему похуй, сколько ты там скопировал. А выделить меньше, чем страницу ты тоже не можешь. Вот и получается, у тебя либо access violation, потому что нули - это mov, пишущий куда-то не туда, либо access violation, потому что после страницы ничего нету. В общем, прочитай про ассемблер что-нибудь, про вызов функций, все такое.
Аноним 25/08/18 Суб 21:06:34  1252648
>>1252626
Подстановка всем плоха, она замедляет компиляцию и затрудняет автоматический анализ исходников. Заодно хедеры заставляют тебя при изменении сигнатуры функции править ее в двух местах. В лучшем мире компилятор автоматически брал бы сигнатуру из объектника, если мы распространяем собранные либы, либо из исходника, если исходники доступны.

Современные посоны - это программисты на скриптовых языках, где такого говна нет, а скоро и программисты на крестах: https://medium.com/@wrongway4you/brief-article-on-c-modules-f58287a6c64 (первый результат из гугла, ты мог бы и сам найти!).
Аноним 25/08/18 Суб 21:18:19  1252652
>>1252648
>править ее в двух местах
ой бля, как тяжело, а давайте запилим йобу поверх йобы, чтобы оно само делалось
Аноним 25/08/18 Суб 21:24:50  1252656
>>1252652
Ой бля, как просто переносить код на новую архитектуру, давайте продолжим пилить юниксы на ассемблере.
Аноним 25/08/18 Суб 21:28:39  1252659
4to.jpg (103Кб, 1600x1200)
>>1252648
>https://medium.com/@wrongway4you/brief-article-on-c-modules-f58287a6c64

А по запросу какому? С++ modules?
Я правда не догоняю, о чем вообще речь идет.
Короче, это вещь нужная и ее стоит изучить и юзать, так?
Аноним 25/08/18 Суб 21:30:34  1252660
>>1252659
Стандарт еще не вышел, можешь пока погодить. Но там уже черновик вылизывают, так что скоро. Опять мы кресты в треде про няшную обсуждаем. Ну что ж такое-то!
Аноним 25/08/18 Суб 21:36:34  1252664
>>1252659
НЕТ СИ ТОЛЬКО СИ ТОЛЬКО ХЕДЕРЫ ТОЛЬКО ЭТО ГРОЗНЫЙ В ОГНЕ НО ТЫ ДЕРЖИСЬ БРАТОК
Аноним 25/08/18 Суб 22:37:25  1252713
>>1252656
>переносить код на новую архитектуру,
Кого ты там переносить собрался? Никогда проблем не было, но тут вкатились смузихлебы
Аноним 25/08/18 Суб 22:39:19  1252715
>>1252664
>ХЕДЕРЫ
ТОЛЬКО ЮНИТИ БИЛД, КАКАЯ НАХРЕН РАЗДЕЛЬНАЯ КОМПИЛЯЦИЯ
БЕСПЛАТНЫЙ ЛТО ЭТО ВЕЩЬ!
Аноним 26/08/18 Вск 12:19:47  1252890
>>1252715
> ЛТО
Что это???
Аноним 26/08/18 Вск 17:21:31  1253105
>>1252890
Link-time optimizations. Компилятор генерит аннотированный байткод, а линкер схлапывает все объектники, после чего уже генерит машинный код. Это позволяет выкидывать неиспользуемые функции, инлайнить часто вызываемые функции, даже если они не были объявлены как static inline, мержить функции с одинаковым телом и много чего еще. В гцц включается флагом -flto, в студии это называется link-time code generation и включается -GL.
Аноним 26/08/18 Вск 21:23:17  1253315
Branch prediction теперь больше не актуален из-за meltdown/spectre?
Аноним 27/08/18 Пнд 03:57:58  1253425
15353314163702.jpg (29Кб, 960x642)
Может ктонибуть набросать простой пример как юзать pcre2_substitute?
Примеров в нете чет толком не могу найти, либо очень запутанный код, а я в Си не так давно, перловые регулярки знаю хорошо, но вот въезжание в api libpcre2 дается с очень большим трудом.
Буду благодарен если покажите как char *subject = "test1 test2 test2", с помощью pcre2_substitute, заменить регуляркой "s/(test)2$/\13/"
Аноним 27/08/18 Пнд 09:34:19  1253469
>>1253425
https://www.pcre.org/current/doc/html/pcre2demo.html

тут вон под конец есть. Какая-то сложная ебола этот PCRE, но, видимо, лучшее, что есть для С.
Аноним 27/08/18 Пнд 15:21:44  1253629
228.png (11Кб, 433x314)
Господа, пишу в Geany следующее и получаю пустой .dat файл, рассчитывая на набор координат для графика. Где я долбоёб?
#include <stdio.h>
#include <math.h>
int main() {
FILE*f;
double a,b,st,x,y,y8=1./0.;
int i,n;
f=fopen("02hyp.dat","w");
a=-1.; b=1.; n=301;
st=(b-a)/(n-1); x=a-st;
for (i=0; i<0; i++) {
x+=st; y=1./x; if (fabs(y)>100.) y=y8;
fprintf(f,"%lf %lf\n",x,y);
}
fclose(f);
return(0);
}
Аноним 27/08/18 Пнд 15:23:58  1253633
>>1253629
помимо того, что криво вставил текст
Аноним 27/08/18 Пнд 15:27:59  1253639
>>1253629
Отделяй операторы пробелом, не делай слишком много инициализаций в одну строчку.
Для бинарной записи открывай файл как '"wb".

Почему у тебя не работает - не разбирался.
Аноним 27/08/18 Пнд 16:24:59  1253667
>>1253629
ап (спасите, гнуплот кормить нечем)
Аноним 27/08/18 Пнд 16:29:49  1253669
>>1253469
> pcre2_substitute
> https://www.pcre.org/current/doc/html/pcre2demo.html

Так в томто и дело что pcre2_substitute там в демо нет, поэтому и прошу чтоб анон помог, с простым примером
Аноним 27/08/18 Пнд 16:42:32  1253677
>>1253629
По виду должно работать. Посмотри, может fopen не сработал. Может, ты вообще не в той папке смотришь?
Аноним 27/08/18 Пнд 16:55:38  1253681
>>1253677
Возвращает 0, создаётся файл .dat в нужной папке. Сам файл пустой. Гнуплот, логично, ругается. Пишу в Geany на шиндовс 10, компиллятор tdm-gcc
Аноним 27/08/18 Пнд 17:25:49  1253694
image.png (49Кб, 575x593)
>>1253629
У тебя цикл на 0 итераций, аутист.
Аноним 27/08/18 Пнд 17:37:03  1253698
>>1253694
Благодарю. Деградировал малость, исправлюсь.
Аноним 27/08/18 Пнд 18:19:38  1253711
надо ли знать математику чтобы уметь в си/си++, чтобы устроится в nasa jpl ? или можно прорешать много алгоритмов?
Аноним 27/08/18 Пнд 18:43:10  1253718
>>1253711
Смотря что ты имеешь ввиду под "знать математику".
Аноним 27/08/18 Пнд 19:01:25  1253722
>>1253711
И смотря чем ты собираешься заниматься. Знакомый веб-дизайнер пользуется очень ограниченным набором мат. приёмов и знаний, хватает для фронт и бэк энда. А кто-то, как мой препод в институте, вообще говорит, что если человек не сдал матан - его нельзя подпускать к компу.
Аноним 27/08/18 Пнд 20:13:59  1253746
>>1253722
>человек не сдал матан - его нельзя подпускать к ЭВМ
Прфиксил в стиле вузовских пердунов не могущих ни в то и не в другое
ПЕРЕКАТ Аноним # OP  27/08/18 Пнд 20:15:53  1253748
>>1253747 (OP)
>>1253747 (OP)
>>1253747 (OP)
>>1253747 (OP)
>>1253747 (OP)


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