Главная Mobile Контакты NSFW Каталог Пожертвования Купить пасскод Pics Adult Pics API Архив Реквест доски Каталог стикеров Реклама
Доски

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

Check this out!


<<
Назад | Вниз | Обновить тред | Автообновление
427 | 30 | 163

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.


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