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


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

Check this out!


[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 504 | 31 | 166
Назад Вниз Каталог Обновить

C Programming Language #22 Аноним # OP  18/05/17 Чтв 11:23:36  992632  
C Programming L[...].png (78Кб, 792x1023)
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

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

Что читать:

- Классика от Отцов: http://www.cypress.com/file/56651/download
- Годное пособие для гуманитариев: http://c.learncodethehardway.org/book/
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/%7Eats/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 умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.

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

Stephen Prata "C Primer Plus, 6th Edition" (2014)
Свежая знает про C89, C99, C11, описывает различия, объемная около тысячи страниц, годная хотя есть некоторые шероховатости, с вопросами, упражнениями и ответами. Читать после K&R или до.

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

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

- №19: https://arhivach.org/thread/248880/
- №20: https://arhivach.org/thread/254158/
- №21: https://arhivach.org/thread/260316/

Шапка: http://piratepad.net/bJ1SdmkZyu
Предупреждение Аноним 18/05/17 Чтв 12:30:59  992652
Крестухи, идите в свой тред!

За крестовопросы — бан.
Аноним 18/05/17 Чтв 12:38:54  992660
>>992652
Упырь свой мел. Ты не модератор, чтобы мне указывать
Аноним 19/05/17 Птн 20:12:37  993457
14915541948460.jpg (7Кб, 220x207)
Ребят, попалась очень сложная задача в курсовике
Даже препод не может ничего сказать, в гугле нихуя, поэтому прошу совет по решению тут, мб кто подскажет что нибудь


Сама задача:

В графе н айти максимальное (по количеству ребер) подмножество попарно несмежных ребер
Аноним 19/05/17 Птн 20:13:41  993458
>>993457
>Ребят, попалась очень сложная задача в курсовике
>Даже препод не может ничего сказать, в гугле нихуя, поэтому прошу совет по решению тут, мб кто подскажет что нибудь
Сколько заплатишь?
Аноним 19/05/17 Птн 20:14:48  993459
>>993458
Аххахах, не прошу решить задачу за меня, просто совет по решению
Аноним 19/05/17 Птн 20:15:48  993460
>>993459
>просто совет
Займись спортом, скоро понадобится.
Аноним 19/05/17 Птн 20:26:07  993465
>>993460
Аахаххаха, вот ты тварь

Понимаю, я бы тут что то тривиальное спрашивал
Аноним 19/05/17 Птн 21:04:55  993480
>>993465
Найс, так не похуй, что сажу включил. Нахуя, ты ебанутый?
Аноним 19/05/17 Птн 21:16:57  993488
>>993480
Я не специально, лол
Аноним 20/05/17 Суб 16:33:22  993819
>>993457
Никакого секрета тут нет, берешь все подмножества ребер, выбираешь из них попарно несмежные, и ищешь максимальное из них.
Аноним 20/05/17 Суб 17:21:47  993839
>>993457
1. Попробуй сначала для определённого вида графов - отрезок, цепь, дерево.
2. Попробуй вывести алгоритмы сложения подмножеств несмежных ребёр.
3. Переформулируй задачу, скажем таким способом:
Среди всех рёберных раскрасок графа, необходимо найти раскраску, мощность множества ребер какого-то цвета максимально.

Алсо, с раскраской тут что-то сразу нагуглилось - https://ru.wikipedia.org/wiki/Паросочетание
Аноним 20/05/17 Суб 22:03:55  993951
>>993839
И там сразу ссылки на алгоритмы поиска наибольших паросочетаний.
Аноним 20/05/17 Суб 22:29:00  993957
.PNG (99Кб, 685x493)
>>992632 (OP)
Наверное не совсем по теме треда, но попробую.
Читаю книжку "Практика программирования" 2004 года.
В 9 главе наткнулся на пикрелейтед.
Что за "Гриша" имеется ввиду?
"Фишка" перевода?

В исходниках https://9p.io/sources/extra/9hist/power/errno.h
> Egreg, / it's all greg's fault /

О чём речь-то???
Аноним 20/05/17 Суб 22:32:29  993960
>>993457
minimal vertex cover
Дальше сам
Аноним 20/05/17 Суб 22:36:05  993961
>>993957
Какая-то очень старая шутка из Plan9 судя по всему, имеется в виду Greg Chesson. Ну а перевод Greg = Гриша, ну петросянство, ну что поделаешь.
Аноним 20/05/17 Суб 22:41:02  993964
>>993961
Да, я понял, что Greg сокращение от Gregory, по-нашенски Григорий.
Там даже в исходник есть имя ken кен томпсон видимо, но имена пишутся с большой буквы и это смутило%%.
Да и не совсем было ясно из комментарием. До и после идут обычные комментарии с пояснениями, тут раз какой-то greg.
Вот и смутило.
Аноним 22/05/17 Пнд 19:09:11  994827
Снимок.PNG (38Кб, 829x602)
Репост из крестового треда. Думаю, для С вопрос тоже применим.
Как в VS компилировать код с минимальным размером кроме настроек пикрил?
Какие директивы компилятора нужно использовать, чтобы переменная в в PE-файле была в секции кода, а не инициализированных констант?
Можно ли встроить/переписать себе функции из WinAPI, чтобы не было привязки ко всяким Kernel32.dll, user32.dll, чтоб можно было просто вытащить секцию с кодом из исходного PE файла и вставить её целиком в другую и не ебаться с подгоном адресов функций, импортом и т.п.?
Аноним 22/05/17 Пнд 19:43:44  994862
>>994827
Все можно, но зачем?
Аноним 22/05/17 Пнд 19:49:45  994865
>>994862
Так вышло, что мне нужно написать инжектор, но инжектить собираюсь не зловред, а протектор. В большинстве мануалов инжектят чистый ассемблерный код чисто для JMP в Х-код, но там подходы в основном для кода малого размера без особого выебонства, а мне нужно целую, блядь, программу, запихать в произвольный чужой PE - файл. Вот сижу и думаю, чё делать то с переменными, импортом и всем прочим. Наименьшим геморроем мне представляется просто взять и выдрать .text секцию из протектора и захуярить в защищаемый .exe в отдельную секцию хотя Касперски предлагает размазывать код оверлеем по паддингам секций, но чё то это попаболь, учитывая, что дедлайн через 2 недели, а помимо этого еще куча других дел с дальнейшим смещением точки входа на новую секцию (+ еще надо будет в конце внедренной секции добавить JMP на OEP, но это, надеюсь, не сложно).
Аноним 22/05/17 Пнд 19:56:56  994869
>>994865
> целую, блядь, программу, запихать в произвольный чужой PE
Родина дала им LoadLibrary(), но нет, надо изъебываться. В крайнем случае посмотри на reflective dll loader из метасплоита, например.

> чтобы переменная в в PE-файле была в секции кода, а не инициализированных констант?
https://msdn.microsoft.com/en-us/library/wxz26dz2.aspx

> Можно ли встроить/переписать себе функции из WinAPI
Hash-based import, только антивирусы тебя за это очень любить будут, и с SxS-либами в современных ОС все очень непросто.
Аноним 22/05/17 Пнд 20:13:41  994877
>>994865
>LoadLibrary()
Я думал об этом, но, во первых, идея хранить весь протектор в dll мне не нравится. Не могу объяснить почему, наверно потому что факт хранения целого подмодуля в отдельном .dll мне не по душе, хотя реальных аргументов особо нет. Во вторых, у executable, насколько я понял, один хрен выполнение начинается с точки входа программы, и потом уже загружаются библиотеки, у которых дёргают DllMain(), а мне нужно, чтобы сначала начинал работу протектор и только потом, если проверка выполнена успешно, начиналось выполнение самой программы. И тут еще нюанс есть (на мсдн в документации), в DllMain не рекомендуют хранить сложные вычисления, типа загрузчик может залупиться. Хотя сейчас я задумался, можно ведь и просто dll подкинуть в таблицу импортов, сдвинуть EP куда нибудь в оверлей секции (при этом расширив virtual size секции, чтобы это был уже не оверлей), там просто вызвать LoadLibrary(%протектор%.dll), GetProcedureAddress (%протектор.main()%), вызвать процедуру по полученному адресу, а потом JMP на OEP. Какие подводные камни помимо того, что в любом дизассемблере/дебагере вызов функции из dll как на ладони, затри участок NOP'ами оставив только JMP - и поехали. И тут еще вопрос появился - если я собираюсь упаковывать/криптовать код целевого приложения, чтобы нельзя было в дизасме/дебаггере нащупать, то загрузчик ведь не подставит адреса импортируемых функций, как быть?

>https://msdn.microsoft.com/en-us/library/wxz26dz2.aspx
Пасеба. Через #pragma comment() такие вещи позволяется делать?

>Hash-based import, только антивирусы тебя за это очень любить будут, и с SxS-либами в современных ОС все очень непросто.
нихуя не понял, у Касперски только про стандартный, bound и delay импорт читал, но после идеи с LoadLibrary(), если конечно я правильно понял твою подсказку, может вообще откажусь от первоначальной затеи.

Аноним 22/05/17 Пнд 20:20:41  994878
>>994877
Так, пожжи ебана, для LoadLibrary ведь вообще не надо либу протектора импортировать, так? Главное, шоб .dll был в папке с .exe? Но тогда мне надо, знать адрес LoadLibrary и GetProcAddress() из Kernel32.dll не говоря уж о том, чтобы она вообще была, хотя подкинуть её не проблема, есть чужая либа для работы с PE для этого, или загрузчик сам увидит, что я использую эти функции и любезно укажет внедренному коду загрузки протектора адреса этих функций?
Аноним 22/05/17 Пнд 20:23:03  994879
>>994877
> идея хранить весь протектор в dll мне не нравится
И зря. Минимум проблем в будущем.

> мне нужно, чтобы сначала начинал работу протектор и только потом, если проверка выполнена успешно, начиналось выполнение самой программы
CreateProcess(CREATE_SUSPENDED), вставляешь JMP на LoadLibrary по EP, но не забываешь о существовании TLS callbacks. А если exe тоже твой, то нахуя тебе внешний протектор вообще?

> DllMain не рекомендуют хранить сложные вычисления
Чушь. В DllMain нельзя вызывать некоторые функции из-за возможных проблем по причине вздернутого loader lock.

>>994878
> Hash-based import
> нихуя не понял
Посмотри любой шелкод для винды. Получаешь список загруженных длл из PEB, ищешь kernel32, парсишь импорты, ищешь LoadLibrary, грузишь нужные либы, парсишь импорты... Для ускорения процесса, обфускации и уменьшения размеров бинарника имена функций часто хэшируются.
Аноним 22/05/17 Пнд 20:30:59  994880
>>994879
>А если exe тоже твой, то нахуя тебе внешний протектор вообще?
exe не мой, писал же - произвольный чужой exe
>Чушь. В DllMain нельзя вызывать некоторые функции из-за возможных проблем по причине вздернутого loader lock.
Ага, вроде нельзя вызывать функции, вешающие основной тред, типа диалоговых окон. Вот только в случае ошибки проверки предполагается выводить окно типа "поцан ты денешку отдал за программу))?", и тут мне как раз хорошо зашёл бы MessageBox. + вроде не рекомендуется убивать хост-процесс из .dll.
>CreateProcess(CREATE_SUSPENDED)
Дк пользователь же будет запускать программу дабл кликом по .exe. Или в заголовках PE можно указать, чтоб процесс запускался повешенный?
Аноним 22/05/17 Пнд 20:38:54  994885
>>994880
> Дк пользователь же будет запускать программу дабл кликом по .exe.
> Или в заголовках PE можно указать, чтоб процесс запускался повешенный?
Можно сделать ланчер, который инжектит, что нужно. Можно сделать, чтобы при запуске конкретного exe запускался какой-нибудь другой (это отладочный механизм, не нравится антивирусам, но работает - гугли Image File Execution Options). Я хуй знаю, какие у тебя там требования, но очевидно, что если пользователь может запускать что-то даблкликом без протектора, он будет это делать, а протектор потрет.
Аноним 23/05/17 Втр 12:01:12  995124
>>994885
Ананасы, если я буду писать код, в котором буду использовать системный вызов getaddrinfo для получения значения IP-адреса в виде 32-битного integer (если я всё правильно понял, то getaddrinfo записывает нужное мне значение в struct addrinfo строго в big-endian), то мне ведь не нужно ебаться с порядком байтов для портабельности, если единственной функцией, которая прямо использует полученное значение является вот это:

#define IP_TO_STR(ip_str, ipv4_addr) do { \
snprintf(ip_str, IP4_STR_LEN, "%u.%u.%u.%u", \
(unsigned char) ((ipv4_addr >> 0) & 0xff), \
(unsigned char) ((ipv4_addr >> 8) & 0xff), \
(unsigned char) ((ipv4_addr >> 16) & 0xff), \
(unsigned char) ((ipv4_addr >> 24) & 0xff)); \
} while (0)
Аноним 23/05/17 Втр 12:01:35  995125
>>995124
Упс, не туда ответил
Аноним 23/05/17 Втр 13:08:07  995149
>>995124
> IP_TO_STR
Да, порядок всегда будет сетевым (big endian), но зачем ты изобретаешь inet_ntoa?
Аноним 23/05/17 Втр 13:10:55  995151
>>995149
>inet_ntoa
Пишет в статический буфер, а мне многопоточность нужна.
Аноним 23/05/17 Втр 13:14:03  995154
>>995151
Не знаю насчет линуксов, но в винде этот буфер - per-thread.
Аноним 23/05/17 Втр 13:18:23  995156
>>995154
На юниксах - нет (по крайней мере в мане thread-safe нигде не указано. А упоминание о использовании статического буфера есть). Другое дело, что есть inet_ntop, но мне она не подходит, т.к. не на всём нужном железе поддерживается.
Аноним 23/05/17 Втр 13:20:17  995157
>>995156
https://github.com/bminor/glibc/blob/73dfd088936b9237599e4ab737c7ae2ea7d710e1/inet/inet_ntoa.c#L27
Ну да ладно, ты в общем-то прав.
Аноним 23/05/17 Втр 19:52:09  995311
14642772214530.jpg (146Кб, 720x960)
Лабодаун на связи. Есть задание:
1)Создание структурированного типа данных:
-Книга: название, предметная область, год издания
2)Действия над массивом структур:
-подсчет количества книг, относящихся к предметной области "Физика";
-нахождение книги с самым старым годом издания.

1) часть я сделал по крайней мере всё выводится, код: https://pastebin.com/yF0hgZ5T
2) прошу помощи у вас разобраться с этой хуетенью. В теории понимаю что нужно сделать - создать массив в виде отдельной функции которая будет считать эти книжки, но блять, нихуя не получается, нужно до завтра. Верю в тебя, анон!
Аноним 23/05/17 Втр 20:09:25  995316
>>995311
А что не получается-то? Копипиздишь цикл с 24 строки.

> Посчитать по предметной области
Создаешь счетчик, присваиваешь 0. В цикле идешь по книгам, с помощью strcmp сравниваешь field текущей книги со строкой "Физика", если возвращается 0, увеличиваешь счетчик.
> нахождение книги с самым старым годом издания
Заводишь переменную oldest_index, присваиваешь 0. Идешь в цикле по книгам, если год текущей книги меньше года книги с oldest_index, записываешь в oldest_index индекс текущей книги.
Аноним 23/05/17 Втр 20:34:34  995329
14806898147390.jpg (179Кб, 1280x853)
Уже очень долго не могу решить одну простенькую задачку, поэтому спрошу тут

Задача:
В заданном бинарном дереве посчитать количество вершин на N-ном уровне, считая корень вершиной 0-ого уровня

Саму программу я написал, но работает она не так, как нужно

Скорее всего ошибка в этой функции - https://pastebin.com/XPxGaaD4

Идея в том, что я разделяю уровни NULL'ом И когда мы находимся на нужном уровне выходим из цикла и просто достаем элементы из очереди до последнего NULL'а. res - результат

Put - функция для добавления элемента в очередь
Get - функция для взятия элемента из очереди
Empty - функция для проверки на пустоту очереди

Вот фулл код - https://pastebin.com/gLUVEhf0
Аноним 23/05/17 Втр 20:35:20  995331
>>994885
многострочные макросы - зло, десу
Аноним 23/05/17 Втр 20:35:57  995332
>>995331
>>995124
Не туда.
Аноним 23/05/17 Втр 20:58:53  995341
>>995331
Зло, когда нечитаемые. А это - вполне читаемый макрос. Хотя можно было бы и inline-функцию сделать.

>>995329
Хуй знает, у тебя все вроде норм, кроме того, что корень получается вершиной 1 уровня, а не 0, ну и т. д.
Аноним 23/05/17 Втр 21:06:14  995342
>>>995331
Вот-вот

while (!Empty(q))
{
z = Get();
res = res + 1;
}

Единственное в чем сомневаюсь, это этот цикл, правильно ли >while (!Empty(q)) в этом случае
Аноним 23/05/17 Втр 21:07:22  995344
>>995342

>>995341*
Аноним 23/05/17 Втр 22:27:30  995390
>>995342
Ну можно слегка поправить логику. Как-то так (на изменения вне ShowTree не смотри): https://pastebin.com/WyJwiuQN ideone только у меня сломался и ничего не постит?
Аноним 24/05/17 Срд 13:01:20  995639
fdddddddd.JPG (26Кб, 516x236)
>>995316
Ну во захуярил счетчик с циклом, но консоль крашится, после того как я ввожу последний год 3 книги https://pastebin.com/tHewRGBP
Аноним 24/05/17 Срд 13:23:42  995656
>>995639
1) У тебя там gets_s неправильно вызывается, где второй аргумент? И вообще лучше используй scanf везде, коли начал: scanf("%30s", libry[ i].name). И getchar() тогда из тела цикла убери, scanf сама пробелы и переводы строк пропускает.
2) k не инициализируешь.
3) strcmp() == 0 надо. strcmp как бы "вычитает" одну строку из другой, и когда их "разность" == 0, строки равны.
Аноним 24/05/17 Срд 15:13:34  995706
13455.JPG (75Кб, 1160x509)
>>995656
что неправильно вызывается? вот пик, всё выводится же нормально. k инициализирована, в pastebin чекни, ну или на скрине
Аноним 24/05/17 Срд 16:15:20  995732
>>995706
> что неправильно вызывается?
https://msdn.microsoft.com/ru-ru/library/5b5x9wc7.aspx Посчитай аргументы там, а потом у себя. И ворнинги в компиляторе включи, блять.
> всё выводится же нормально
Счастливое совпадение.
> k инициализирована, в pastebin чекни
int k;
k = k + 1 это не инициализация. Ты по сути пишешь int k = мусор; k = мусор + 1.
Аноним 24/05/17 Срд 17:01:20  995749
2515.JPG (102Кб, 1153x691)
>>995732
Спасибо, всё захуярил
Аноним 24/05/17 Срд 17:31:00  995757
>>992632 (OP)
Ананасы, это вообще нормальный стиль, когда исолняемый файл динамически линкуется с shared либой и использует её функции, а либа в свою очередь использует внешнюю переменную бинарника (т.е. в либе имя переменной объявлено как extern)? Я вот до сегодняшнего дня не знал даже, что так можно делать (дергать переменные исполняемого файла из подключаемой библиотеки) и теперь не уверен - а правильный ли это подход?
Аноним 24/05/17 Срд 17:34:02  995759
>>995757
И вообще - как оно работает? Я вот сделал objdump исполняемого бинарника и не увидел имени переменной, которая используется
Аноним 24/05/17 Срд 17:34:28  995760
>>995759
А, нет, пизжу, увидел.
Аноним 24/05/17 Срд 17:46:31  995762
>>995757
В общем-то забейте, я понял, что это - хуевая идея
Аноним 24/05/17 Срд 20:59:42  995888
Кто-нибудь собирал сишный проект sdl2 с cmake на винде? Блять, у меня пиздец от этой кривой хуйни горит уже. С linux все просто и понятно. Вот тут хидеры, вот тут сошки, линкуй и инклюдь на здоровье.
Неужели ради одной большой хуйни целый цирк придумывать?
Аноним 24/05/17 Срд 21:07:21  995890
>>995888
Кросскомпилируй на линуксе, если тебе так сложно. В чем конкретная проблема-то?
Аноним 24/05/17 Срд 21:47:10  995915
>>995390
Спасибо огромное, очень помог

Только один вопрос

Что такое

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

>#define _CRT_SECURE_NO_WARNINGS
Это знаю, но чем это отличается от обычного

#define _CRT_SECURE_NO_WARNINGS
Аноним 24/05/17 Срд 22:49:25  995943
>>995915
Ничем. Просто _MSC_VER определяется компилятором Microsoft Visual C++, и соответственно дефайн делается только для этого компилятора. Это в принципе не обязательно, но как бы намекает читающему, что во всем виноват Microsoft.
Аноним 24/05/17 Срд 22:53:15  995946
>>995890
>В чем конкретная проблема-то?
Я понятия не имею, что нужно кроме хидеров для сборки под винду и чем после cmake это собирать.
Аноним 24/05/17 Срд 22:55:08  995947
>>995946
Кроме хидеров нужны либы. Компилируется все абсолютно так же, как в линуксах.
Аноним 24/05/17 Срд 23:47:21  995973
В си вообще есть какая-либо либа, с помощью которой можно нормально резолвить DNS-имена?
Аноним 24/05/17 Срд 23:58:30  995978
>>995947
>Компилируется все абсолютно так же, как в линуксах.
Ну тут ты перетолстил.
Аноним 25/05/17 Чтв 00:05:49  995981
>>995888
>Кто-нибудь собирал сишный проект sdl2 с cmake на винде?
В MSYS2 не получится?
Аноним 25/05/17 Чтв 00:17:53  995988
>>995973
В Си нет. В большинстве ОС есть gethostbyname(), что подключать - гугли.
Аноним 25/05/17 Чтв 00:30:38  995991
>>995988
>В Си нет.
Ух придерся. Ну ладно, мне нужно что-нибуть более-менее POSIX-совместимое (ну или хотя бы чтоб на большинстве эмбеддед и не очень линуксов работало).
gethostbyname, getaddrinfo и вся эта библиотечная ебала не подходит, т.к. а) они слишком перегружены всякой хуйней б) не являются по сути DNS-резолверами в) не гибкие (например, нельзя даже установить таймаут запроса). Дефолтный gethostbyname еще и кривой, т.к. не может в многопоточность.
Тут стандартными библиотечными функциями не отделаешься никак и нужно готовое решение, но я пока еще не сильно горю желаниям велосипед писать.
Аноним 25/05/17 Чтв 01:24:16  996009
>>995991
> Дефолтный gethostbyname еще и кривой, т.к. не может в многопоточность.
Опять ты начинаешь. Мы же уже выяснили, что может, если это линукс и glibc. В линуксе есть асинхронный getaddrinfo_a, и без проблем со статическим буфером заодно. Не нравится - спизди из той же glibc или uclibc. Ну и на гитхабе DNS-клиентов до жопы. Может кто и посоветует что-то конкретное, но у меня никогда не возникало необходимости в кастомном ресолвере.
Аноним 25/05/17 Чтв 22:00:56  996365
>>995981
>MSYS2
Сейчас погуглю что это и попробую.
Аноним 25/05/17 Чтв 23:28:24  996405
Поколдовал с библиотеками под VC и cmake, таки теперь нормально собирается и в community vc. Хотя бы так.
Аноним 25/05/17 Чтв 23:57:15  996419
Предлагаю добавить в шапку следующего треда http://c-faq.com/index.html
Аноним # OP  26/05/17 Птн 00:35:01  996429
>>996419
А как насчет внимательно посмотреть на шапку?
Аноним 26/05/17 Птн 03:53:12  996449
Почему до сих пор не перешли на С++??????
Аноним 26/05/17 Птн 04:17:02  996450
>>996449
1) Слишком много прыжков по оперативной памяти.
2) Синтаксис я/п можно взять и новый, от Ц++
3) Наследование реализации — зло.
Аноним 26/05/17 Птн 08:14:19  996463
>>996449
> С++
Говно от васяна
Аноним 26/05/17 Птн 10:04:00  996481
>>996429
Извиняюсь, обосрался.
Аноним 27/05/17 Суб 17:27:27  997085
Ананасы, есть ли принципиальное отличие между программированием риалтаймовых задач и нериалтаймовых? Нужны ли для этого какие-то дополнительные знания? Вот я сишкоблядил на линуксе и на некоторых железяках с FreeRTOS/ThreadX многопоточные приложения, вроде бы всю эту хуйню хорошо понимаю. Теперь собираюсь уходить на новую работу, где пилят в юзерспейсе QNX риалтаймовую automotive хуйню. Вроде бы это - тот же POSIX с некоторым дополнительным IPC и гибкой настройкой всяких там планировщиков. Но переживаю, что буду сначала жутко тупить и делать слишком детские ошибки
Аноним 27/05/17 Суб 23:28:46  997226
Screenshot from[...].png (14Кб, 261x210)
Сап, есть короче такая структура и затуп там, где стоит ???.
Как обратиться к clr для элемента массива?
Аноним 27/05/17 Суб 23:38:17  997234
>>997226
>Как обратиться к clr для элемента массива?
Я нихуя не понял.
Аноним 27/05/17 Суб 23:45:15  997243
>>997234
>>997226
Не бейте, лучше обоссыте.
arr[0].clr будет. Я дико тупанул, вопрос снимается.
Аноним 28/05/17 Вск 09:37:06  997343
Как

delete[] t;

С с++ выглядит на Си?

Просто free(t); ?
Аноним 28/05/17 Вск 14:09:30  997429
>>997343
Да.
Аноним 29/05/17 Пнд 00:20:32  997718
Посоны, я тут говнину учу, вот сижу домашку делаю. Написал говнокод, и не знаю как его улучшить.
скажите, тут совсем ВСЕ ПЛОХО или это просто ПОЛНЙ ПИЗДЕЦ?

http://ideone.com/uUBXQe
Аноним 29/05/17 Пнд 00:41:01  997728
>>997718
Да.
Аноним 29/05/17 Пнд 00:49:45  997735
>>997728
а конкретнее?
Аноним 29/05/17 Пнд 01:40:46  997752
>>997735
Ну поехали:
1) T payload; Смысл есть, но это когда оно в хедере. Этакие шаблоны для бедных: задефайнил T, подключил хедер, получил реализацию для T (но только один раз в одном модуле). В остальных случаях лучше написать прямо или хотя бы делать T не дефайном, а вменяемым тайпдефом (PayloadType?).
2) Node ∗newNode(): где void в скобках? Это точно Си?
3) Касты для malloc() не нужны, он возвращает указатель на void.
4) Сообщения об ошибках посреди реализации библиотечного, по сути, кода. Но для лабы в принципе сойдет.
5) if (q == NULL) { puts("Out of memory!"); return ∗q;}: это типа все равно продолжать бесполезно, давайте умрем прям тут? Или опечатка?
6) qPush: это какой-то бессвязный список. Одним концом втыкаем элемент в очередь, второй конец очереди в воздухе висит. Где tmp->next инициализируется, я вообще не нашел.
7) &q->oldest == &q->recent: если адрес одной ячейки структуры равен адресу другой ячейки структуры, то... это union, блять. Потом там какой-то дабл-фри и опять бессвязный список. Что? Еще один фри? Ох, ебать!
8) Что там творится с рекурсией ниже 100 строчки, я вообще не распарсил.
9) Стека не увидел.
10) Начиная читать, я ожидал увидеть: Queue_AddToHead, Queue_RemoveFromHead и аналогично для Tail. Тогда реализация стека ограничилась бы использованием уже готовой Queue и молчаливым игнором пары функций для работы с одним из концов Queue.
11) В идеале я бы вообще выкинул весь мемори-менеджмент из кода Queue, оставив только лишь управление двусвязными списками, ну и проверку размера, если очень хочется. Тогда я мог бы сам решать, что туда класть и где выделять под это память:
typedef struct ListNode { struct ListNode ∗prev, ∗next; } ListNode;
void Queue_AddToHead(Queue ∗q, ListNode ∗node);
ListNode ∗Queue_RemoveFromHead(Queue ∗q);
typedef struct MyYobaType { ListNode listNode; int my_payload; char another_payload[10]; };
...
MyYobaType ∗item = malloc(sizeof(∗item));
... some init ...
Queue_AddToHead(q, &item->listNode);
MyYobaType ∗item2 = Queue_RemoveFromHead(q);
if (item2) {
...;
free(item2);
}
Так сделано в ядре винды, например.
Аноним 29/05/17 Пнд 02:53:46  997766
>>997752
Окей. Спасибо. То есть, тут нужно сразу оговорится, что я не настоящий сварщик, конечно. И это вообще моя первая штука на С, сложнее хеловорлда.

>Смысл есть, но это когда оно в хедере.
особенности домашки, препод просит все сдавать в одном файле.
Я понимаю, что в жизни в жизненном примере это должно быть иначе. Но это чисто попробовать, посмотреть как оно.
>где void в скобках? Это точно Си?
В первый раз слышу, если честно. IDE и коньпилятор ни словом не обмолвись. Ни ворнинга, нихуя.
>Касты для malloc() не нужны
ок, просто решил перестраховаться. Они остались после рефакторинга, на самом деле. изначально, вместо newNode(); был именно каст. потом я обернул в функцию и добавил инициализацию. а маллок так и остался.>>997752
> это типа все равно продолжать бесполезно, давайте умрем прям тут?
Вроде того. Ну, как я понял, эксепшенов в C нет, разбираться и читать как обрабатывать такую хуйню времени тоже небыло. Типа въебал плейсхолдер, чтобы компилилось, мол, если будет время - поправлю. Но нет. уже два ночи, хули. Сдавать завтра.
>Где tmp->next инициализируется, я вообще не нашел.
Он инициализируется как NULL при создании ноды. Хвост показывает в нулл, да. Когда к хвосту прибавляется еще один элемент, нулл становится поинтром на последний элемент (который теперь показывает на предыдущий и в нулл).
>&q->oldest == &q->recent: если адрес одной ячейки структуры равен адресу другой ячейки структуры, то...
ну типа очередь же. убиваю старейший элемент, и говорю следующему за ним, что он теперь самый старый. если самый молодой тот же что и самый старый, значит я добрался до конца очереди.
>Что? Еще один фри? Ох, ебать!
ЩВАБОДКА ЖИ. На самом деле, когда элемент списка больше не нужен, я его грохаю. Я совершенно не уверен, что я это делаю правильно, но, да, я не настоящий сварщик, я ленивое быдло котрое привыкло полагатся на коллекторы.
>Что там творится с рекурсией ниже 100 строчки, я вообще не распарсил.
Это тупая шутка, слабо имеющая отношение к коду вообще. Можно считать это инструментом дебага. Это говно рекурсивно бежит по n->next пока не уткнется в нулл поинтер и печатает payload в консоль. Почему рекурсивно? Да потому что пошли вы нахуй, вот почему. Этот код не делает ничего полезного и написан через жопу вполне осознано.

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

Да, изначально я что-то такое и предполагал. Но почти на два часа увяз в поинтрах сраных. И до сих пор не могу сказать что понял, как с ними ебатся.
сам по себе Queue помнит первый и последний элемент. остальные просто линкуют друг друга. У меня нет как таковой головы и хвоста. у меня какой-то сраный котопес у которого голова с двух сторон.

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

Но окей, спасибо, комментарии познавательные. Но, еще раз, это реально первый раз в жизни, когда я пишу что-то отдаленно похожее на реальный код в сях. И я не то, что бы когда-то собирался учить именно Си или реально кодить на нем. Я высокоуровневое быдло. Но кто-то решил что в жизни недостаточно боли, и решил показать некоторые премудрости кодинга на примере Сей. Ну, чтоб знал, сынку, откуда в твоих жавах массивы берутся. Это, конечно, интересно, и дохуя чего понял из того что раньше было просто ебаной магией, но я нет. Спасибо, но нет.
Аноним 29/05/17 Пнд 03:19:58  997771
>>997766
> IDE и коньпилятор ни словом не обмолвись. Ни ворнинга, нихуя.
С пустыми скобками ты как бы говоришь "функция принимает какие-то аргументы", это старый стиль, он не запрещен в общем-то. В крестах эта же запись значит "функция не принимает аргументов". В общем, похуй.

> Он инициализируется как NULL при создании ноды
Читал жопой, каюсь. Но в общем-то, при oldest == NULL стоит присваивать к oldest, и к recent сразу один и тот же элемент.

> &q->oldest == &q->recent
Ты имел в виду запись без &, поверь. Иначе ты сравниваешь адреса памяти, где лежат указатели (а они лежат рядом в структуре, разница в байтах sizeof(struct Node ∗), в элементах = 1). Но смысла условия я не понял, хотя и предполагаю, что вместо первых двух free() ты хотел просто присвоить NULL (задумайся - ты удалил 1 элемент, а память освобождаешь трижды!). Последний free() ок.

> Ну, чтоб знал, сынку, откуда в твоих жавах массивы берутся
Ты так говоришь, как будто в жабе связанные списки по-другому делаются.
Аноним 29/05/17 Пнд 13:15:26  997883
Screenshot at 2[...].png (21Кб, 514x237)
https://ideone.com/1ibTxC
Куда тут \0 воткнуть чтобы заработало?
Аноним 29/05/17 Пнд 14:36:45  997948
>>997883
Ты просишь повторить четырежды, а сравниваешь с тремя повторами. Другое дело, что sizeof(char) == 1 по определению, памяти выделяешь мало (тебе нужно len ∗ count + 1, где 1 - это место под \0). Ну и без strcat можно было обойтись, не бегая каждый раз от начала строки в поисках ее конца, когда ты по факту знаешь, где начнется очередной кусок, и можно было бы хоть через memcpy копировать.
Аноним 29/05/17 Пнд 15:39:21  997983
>>997948
Скопировал криво. Здесь https://www.codewars.com/kata/string-repeat/train/c
этот код всё равно не работает и с + 1 , может в задании ошибка
Аноним 29/05/17 Пнд 15:52:33  997987
>>997983
Не заметил очевидную проблему. Когда ты выделяешь буфер через malloc(), его содержимое не определено. В том числе, там может содержаться какой-нибудь мусор. strncat() добавляет строку в конец этого мусора. Ты был прав, тебе на самом деле нужно было воткнуть ∗result = '\0'; (перед циклом), чтобы изначально буфер был пустой строкой, и strncat() работал правильно.
Аноним 29/05/17 Пнд 15:56:45  997988
>>997983
https://ideone.com/IjXaLk
УМВР
Аноним 29/05/17 Пнд 20:21:35  998117
2.PNG (37Кб, 836x345)
1.PNG (37Кб, 950x509)
Репост из крестового треда
Друиды, помогите. Хочу вызвать LoadLibraryA по адресу в виртуальной памяти, при этом адрес я хочу получить сам, основываясь на данных таблицы импорта скомпилированного PE файла и ImageBase, который я получаю через FindImageBase(). Я скомпилировал приложение (код 1.png), вытащил из получившегося PE RVA функции LoadLibraryA. Как я понял, это RVA, в который будет записан VA той самой функции, но тем не менее получаемый адрес отличается от того, что я получаю по auto x = LoadLibraryA. ЧЯДНТ?
Аноним 29/05/17 Пнд 20:55:22  998152
>>998117
Это может быть как нибудь связано с relocation'ами? Типа, мне чтоб получить действительный RVA, нужно к значению из PE файла прибавить фактический ImageBase -
номинальный ImageBase?
Аноним 31/05/17 Срд 03:20:41  998914
>>998117
Я у мамы хакир? GetProcAddress не модно у нынешних хакиров уже?
Аноним 31/05/17 Срд 09:37:00  998948
Я решил в качестве обучения, состряпать свой язык программирования со СБОРЩИКОМ МУСОРА и кросс компиляции . Стандартную библиотеку думаю запилить на Си компонентах libcurl, libxml2. Если язык применяет подход с автоматической сборкой мусора , то можно ли использовать в ней либы из Си?
Аноним 31/05/17 Срд 11:25:32  999014
Привет, я ищу человека, который поможет мне в написании кода на си. Основная проблема в том, что мне нужно скорее даже не написать программу, а понять некоторые вещи, которым я не смогла найти объяснения в книге. Понимаю, что мало кому захочется возиться со мной бесплатно, но больших сумм предложить не могу (об этом лучше поговорить лично). Еще могу в ответ научить чему-нибудь другому. Можно будет общаться через скайп (так даже удобнее), но, к сожалению, я живу во Владивостоке и не факт, что мы сможем найти удобное для нас время.
Контакты:
hekkushun@bk.ru
тг - @Hekkushun
Аноним 31/05/17 Срд 13:13:06  999066
>>999014
Правила знаешь?
Аноним 31/05/17 Срд 14:23:15  999127
>>999014
>что мало кому захочется возиться со мной бесплатно, но больших сумм предложить не могу (об этом лучше поговорить лично)
сиськами на камеру свети в качестве оплаты
Аноним 31/05/17 Срд 16:01:17  999187
>>998948
> Если язык применяет подход с автоматической сборкой мусора , то можно ли использовать в ней либы из Си?
Можно. Сборка мусора собирает то, чего много (память). Всякие файлы, сокеты и прочие дорогие вещи все равно нужно закрывать явно, ибо их количество может быть ограничено, а сборщик мусора когда там еще отработает.

>>999014
Тут спрашивай.
Аноним 31/05/17 Срд 20:38:11  999380
Батяни, помогите с книгой. В шапке-то всё написано, но оно для бегиннеров, как бы. Та же K&D кажется, что это больше как мануал для референсов, а не собственно учебник.
Сам имею пхп-бекграунд, хочу вкатиться в С, подскажите нормальный учебник.
Аноним 31/05/17 Срд 21:31:06  999392
>>999380
Читай для бегиннеров, делай задачки. После K&R или Праты можно уже брать простенькую реальную задачу и по ходу дела разбираться с тем, чего не знаешь. Ну или можно сверху еще Стивенса про юникс-программинг навернуть.
Аноним 31/05/17 Срд 21:31:25  999393
Пытаюсь переделать свой интерпретатор BF 5-летней давности под ввод/вывод в буферы вместо stdin/stdout.

https://ideone.com/7RspWD - так всё работает
https://ideone.com/LttVQ8 - input_ptr теперь аргумент функции, а не глобальная переменная. Почему сегфолтится может кто объяснить?

(я хочу все глобальные переменные перенести в параметры, чтобы функцию run() можно было вызывать много раз)
Аноним 31/05/17 Срд 21:43:21  999397
>>999393
Не запускал, но очевидное отличие между двумя версиями: когда ты когда ты запускаешь вторую версию, и рекурсивно вызванная run() меняет свой input_ptr, она меняет свой, локальный input_ptr, а внешняя run() этого изменения, конечно же, не видит, у нее тоже свой локальный input_ptr. Передавай указатель на указатель или сразу сообрази себе структуру с контекстом, в числе которого будет лежать и input_ptr тоже.
Аноним 31/05/17 Срд 21:55:41  999402
>>999397
А мне представлялось, что указатель он на то и указатель, чтобы иметь один адрес в любой точке программы, теперь понятно.
Аноним 31/05/17 Срд 21:57:55  999403
>>999402
Нет, указатель - это просто адрес адреса, никакими выдающимися свойствами не обладает.
Аноним 31/05/17 Срд 22:43:43  999430
>>999393
https://ideone.com/SHTWFd
Такая хрень получилась в итоге. Пытался заменить 3 параметра для строки кода на один указатель, но не получилось из-за логики в циклах.
Аноним 31/05/17 Срд 23:58:50  999465
>>999430
>SHTWFd
SHIT WTF DUDE
Аноним 01/06/17 Чтв 03:08:31  999496
>>992632 (OP)
Итак, господа, написал кусок кода со следующей идеей: беру изображение, загружаю его в память как массив из w*h элементов типа unsigned long. Я хочу посчитать, сколько раз мне встречается каждый из возможных цветов, при этом я хочу несколько упростить задачу и все пикселы округляю, сдвигая их побитово на 4 вправо и потом на 4 влево. Получается охуительный массив с округлёнными пикселями, это я проверил и это хорошо работает.
Дальше я хочу посчитать, сколько раз встречается пиксел каждого цвета. Результаты заношу в табличку, но пока до этого не дошло и я просто вывожу в терминал через printf. Вижу два пути решения: либо я каждый пиксел проверяю на присутствие в таблице, и если он там есть - инкрементирую счётчик для него, а если нет - дописываю со счётчиком 1. Этот способ, я проверил, работает, но долго и хуёво. Второй способ: беру первый попавшийся пиксель, проверяю весь массив, высчитывая, сколько раз он там встречается, если вижу другой - выписываю в другой массив. Потом вызываю мою функцию уже с другим массивом, из которого те пиксели уже как бы вычтены. И так повторяется, пока в массиве не останется элементов. И, как я уже написал, к нему я список свой не прикрутил. Для маленьких изображений работает пиздато. Но если взять сколько-нибудь большое изображение, начинается пиздец, он выводит ошибку сегментации довольно быстро. Уменьшать количество цветов путём сдвига более чем на 4 не помогает, разбивать изображение на куски почему-то тоже: код нормально выполняется для нескольких первых кусков, потом посылает меня нахуй с помощью segmentation fault.
Функция http://ideone.com/Vlt4RU
Аноним # OP  01/06/17 Чтв 04:26:10  999501
>>999496
Есть неебически простое и неебически быстрое решение. С целыми 32-битными пикселами не работает (на 32-битных машинах), но если откинуть альфу, вполне норм. Суть:
1) Выделяешь массив uint32_t count[N]. Размер массива = 256 x 256 x 256 = 0x1000000 элементов. По 4 байта на элемент - это 64 мегабайта. Это много, зато быстро (да и нужно ненадолго). Выделять лучше calloc-ом, чтобы потом не пришлось бегать по нему и обнулять. Создаешь еще счетчик total = 0.
2) Идешь по входному массиву пикселов: берешь i = pixel & 0xffffff (т.е., без альфы) и просто делаешь (count++ || total++). В результате получаешь total равным количеству цветов в массиве, можешь на его основании выделять дальнейшие буферы и т.п.
3) Идешь по получившемуся массиву count (индекс - цвет, count[индекс] - количество). Выписываешь все ненулевые элементы. Можешь сортировать там по ходу дела (или после) по количеству использований, приводить к палитре и т.п. (фиг знает, зачем тебе это понадобилось), дело твое.
4) Очевидно, что если тебе нужны округленные или пикселы, тебе понадобится меньший массив count, но суть не изменится (если использовать старшие 4 бита каждого компонента (i = pixel_b >> 4 | pixel_g >> 4 | pixel_r >> 4), то 24 бита = 16, 163 компонента[/s] = 4096 элемента размером 4 КиБ x sizeof(uint32_t) = 16 килобайт массив).
Аноним 01/06/17 Чтв 04:27:45  999503
>>999501
> делаешь (count++ || total++).
(count[ i ]++ || total++) блядская макака.
Аноним 01/06/17 Чтв 14:56:55  999637
vlcsnap-2017-03[...].png (1141Кб, 1920x1080)
>>999501
Спасибо, охуенно работает. Обработка пикрелейтед: https://pastebin.com/pGuTDKGx
То есть примерно в два раза быстрее вышло. На некоторые другие файлы выходит быстрее, например, вместо 0.111 получается 0.033.
Аноним 01/06/17 Чтв 14:59:42  999641
>>999501
Не подскажешь способ узнать через терминал память, которую жрёт этот процесс? Время я узнаю запуская time ./test, а вот что с памятью - хз, гуглится не очень хорошее что-то.
Сейчас единственный способ узнать реальную память, которую процесс жрёт - это въебать в него сразу файлов 100 и пока он будет охуевать - отследить через pid.
Аноним 01/06/17 Чтв 15:17:27  999644
>>999641
> Не подскажешь способ узнать через терминал память
Ну можешь открыть для себя удивительный мир профилирования: http://valgrind.org/docs/manual/ms-manual.html
Алсо, time -v вроде умеет показывать максимум (только не тот, который в баш встроен, а который отдельной утилитой).
Аноним 01/06/17 Чтв 15:26:37  999645
>>999644
Спасибо, буду разбираться.
Аноним 01/06/17 Чтв 21:30:34  999800
>>992632 (OP)
>>999392
>После K&R
Начал я его читать. Что-то я не пойму, неужели это самая крутая книга по С? Там прямо с первой страницы кормят говном 80-ых в виде main() {}, когда по современному стандарту может быть только int main() { return 1; } . Аноны, помогите, посоветуйте книгу хорошую по современному этапу развития языка, не хочу окунаться в какую-то неразбериху и потом переучиваться. Разве это сложно просто дать нормальную книгу?
Аноним # OP  01/06/17 Чтв 22:09:36  999822
>>999800
> Там прямо с первой страницы кормят говном 80-ых в виде main() {}
Вот не начинай только. В первых тредах уже были срачи, они ничем хорошим не кончились. Да, синтаксис старый, да в C11 implicit int убрали. Но не все пишут на C11, в жизни все равно придется со старым кодом сталкиваться. В качестве введения в язык книга вполне сойдет.

> может быть только int main() { return 1; }
Если говорить о современных стандартах, то ты void в аргументах забыл. Ну и return 1 - это return EXIT_FAILURE.

> Разве это сложно просто дать нормальную книгу?
Прата. Есть в шапке. Я всегда советовал читать обе. И потом еще десяток. И мануал к компилятору. И вообще все что видишь.
Аноним 01/06/17 Чтв 23:16:03  999850
>>999822
Да я только вкотился в этот ваш С. Так как должна выглядеть самая простая функция main? Я как ньюфаг совершенно сконфужен. В книге мне говорят одна, на stackoverflow другое, CLION предлагает по умолчанию третье. Ненавижу эту путаницу, когда вкатываешься куда-либо.
Аноним 01/06/17 Чтв 23:18:50  999851
>>999822
>Прата
>Stephen Prata "C Primer Plus
и да, эта же по плюсам, не?
Аноним 01/06/17 Чтв 23:21:36  999852
>>999851
нашёл по обычному С, посмотрю её, но всё равно бешусь от путаницы
Аноним 01/06/17 Чтв 23:43:43  999859
>>999850
Ты бы еще в плюсы или фортран покатился. Это говно за свои пятьдесят лет обросло тысячами ревизий, которые меняют то как надо этот язык. А вот информационную сферу от говна атлантов никто не чистил.

Соответственно, запросы в гогель бьешь не через C, а через C11. И книжки ищешь, в которых указано, что автор выучил весь новый стандарт перед тем как начать вываливать буквы.
Аноним 02/06/17 Птн 00:46:06  999880
>>999850
> Так как должна выглядеть самая простая функция main?
int main(void);
int main(int argc, char ∗argv[]); // Или char ∗∗argv, это синонимы в данном случае.

И дополнительно реализация языка может предлагать еще какие-то варианты. Например, int main(int argc, char ∗argv[], char ∗envp[]); очень часто поддерживается. Но стандартных только два.
Минимальное тело main() пустое: {} (начиная с С99 разрешили в main(), и только в ней! не писать return - это равносильно возврату 0).
Аноним 02/06/17 Птн 12:57:51  1000021
>>999880
Можно еще void main(), тогда в конце return 0 подставит компилятор. А для выхода с кодом ошибки использовать exit().
Аноним 02/06/17 Птн 14:42:00  1000055
>>1000021
void main() - это кресты. Не путай людей.
Аноним 02/06/17 Птн 18:09:27  1000156
Untitled.png (39Кб, 616x650)
Untitled2.png (32Кб, 588x554)
Untitled3.png (51Кб, 634x789)
Вопрос про OpenSSL
Я слышал, что все приложения, использующие данные либы стараются использовать .dll для быстрой поддержки секурити обновлений, и не вшивают OpenSSL статически (в том же Qt)
Однако где тогда находятся эти .dll в браузерах или в том же стиме?
Аноним 02/06/17 Птн 18:29:31  1000163
>>1000156
Во-первых, в Chromium уже года три как свой форк: https://www.chromium.org/Home/chromium-security/boringssl . Во-вторых, собрано статически, ибо постоянные автообновления. В третьих, собрано статически, ибо каждая первая малварь норовит подменить длл на свою и выискивать твои банковские карточки и прочие пароли в трафике - со статическим билдом такое провернуть тоже можно, но уже слегка сложнее.
Аноним 02/06/17 Птн 19:20:48  1000171
>>992632 (OP)
Анон, каковы шансы того, что функция ниже будет соптимизована таким способом, что переменная flag будет проверяться перед началом цикла, а не при каждой итерации?
void func(bool flag)
{
for (int i = 0; i < 1000; i++)
{
if (flag)
{
//do something
}
else
{
//do something else
}
}
}
Аноним 02/06/17 Птн 19:21:53  1000172
>>1000171
http://ideone.com/qX4CzJ
Аноним 02/06/17 Птн 20:16:46  1000189
>>1000163
И при обновлении они не вставляют куски кода, а просто банально заменяют конечный исполняемый файл? Или есть и другие трюки?
Аноним 02/06/17 Птн 20:20:41  1000190
>>1000171
Шансы есть. Наблюдаемое поведение не изменится, значит у компилятора развязаны руки (зависит от того, что будет в do something, очевидно). Расскажи, что ты хочешь сделать, почему тебе оптимизации могут помешать?

>>1000189
Ну да. Какие могут быть трюки, когда установленный браузер весит больше, чем 15 лет назад весила вся ОС с офисом и прочим софтом?
Аноним 03/06/17 Суб 00:44:33  1000285
Анон, как вкатиться в сишный энтерпрайз? Занимаюсь непрофессионально и периодически программированием уже 6 лет, не начинающий, но не могу представить себе работу за деньги. Писал драйвера для самосборных устройств и прошивки для них, всякого по мелочи ещё. Совершенный код не читал, но планирую. Что можно почитать, куда попробовать устраиваться, что писать в резюме, где искать вакансии? инбифо фриланс
Аноним 03/06/17 Суб 01:08:56  1000290
>>1000285
Фриланса на сях почти нет. Пиши письма счастья в интересующие конторы, работающие с железками, вне зависимости от наличия вакансий. Не забудь няшный гитхабчик, где на сях есть что-нибудь кроме хелловорлда.
Аноним 03/06/17 Суб 23:28:13  1000689
Господа,
Ебусь с указателями. Именно это почему то довольно сложно идёт.
А есть ли какие то мнемонические правила?
Аноним 03/06/17 Суб 23:29:42  1000690
>>1000689
Что именно ты хочешь запомнить и зачем?
Аноним 04/06/17 Вск 01:10:44  1000727
Что вообще можно делать на С? Писать под микроконтроллеры?
А работа не связанная с железом и вот этим вот всем есть? Как вообще выглядит путь программиста на С в 2017? Не лучше ли учить С++? Помогает ли знание С при вкате в С++? Поясните вообще
Аноним 04/06/17 Вск 01:20:06  1000729
>>1000727
На си можно делать что угодно, но как правило это эмбеддед + системное программирование. Ядра линупса, винды и макоси написаны на сях, например.

Начинать в принципе похуй с чего, но си проще крестов. В крестах вагон ненужной хуйни, которую страуструп зачем-то в них принес. Знание си помогает при вкате в кресты и наоборот.
Аноним 04/06/17 Вск 01:20:26  1000730
>>1000727
> Что вообще можно делать на С?
Все.

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

> А работа не связанная с железом и вот этим вот всем есть?
Пишу сервера под Linux и либы для обработки сигналов. Ну почти.

> Как вообще выглядит путь программиста на С в 2017?
Учишь Си, учишь кресты, учишь питон (или что-то другое скриптовое, что тебе по душе), учишь асм под интересующие архитектуры, разбираешься в предметной области.

> Помогает ли знание С при вкате в С++?
Местами помогает (синтаксис-то частично общий, но он дай бог процентов 10 от того, что нужно знать в крестах). Ну и надо понимать, что это другой язык и не скатываться в "си с классами".
Аноним 04/06/17 Вск 01:24:40  1000731
>>1000730
> не скатываться в "си с классами"
Да нет, это как раз самый правильный вариант использования крестов.
Аноним 04/06/17 Вск 01:43:22  1000734
>>1000729
>>1000730
Просто хочу вот слезть с веб-мартыханства во что-то более серьёзное (для души, бабосы на мартыханстве рубить продолжу), но вместе с тем не хочу оказаться у разбитого корыта микроконтроллеров и инжереской фигнёй с драйверами(ну не лежит душа к железу). Хочу для себя что-то выучить, на чём можно игру написать десктопную или просто окунуться в машин лёрнинг. Чтоб была свобода выбора и не поганая гонка фреймворков. Надеюсь, понятно объяснил.
Путь выбрал такой - сначала учу С и шлифую его, потом перехожу на кресты и начинаю писать для себя всякие искусственные интеллекты. всё правильно? не лучше ли сразу выбрать какой-нибудь пистон или swift?
Аноним 04/06/17 Вск 03:40:47  1000748
>>1000734
>искусственные интеллекты
lol
Аноним 04/06/17 Вск 11:27:14  1000779
>>1000730
> или что-то другое скриптовое, что тебе по душе
Команды bash?
Аноним 04/06/17 Вск 13:21:53  1000818
> view = glm::lookAt(cameraPos, cameraPos + cameraFront, cameraUp);
> cameraPos + cameraFront
Как это возможно?
OpenGL, glm. Переменные "cameraPos" и "cameraFront" это "vec3", а "vec3" это, по идеи, массив из трёх элементов типа "float". Сложение двух массивов -- особенность крестов или я чего-то не понимаю?
Аноним 04/06/17 Вск 14:04:26  1000843
>>1000818
Если переопределён оператор+ почему бы и нет
Аноним 04/06/17 Вск 14:11:48  1000849
>>1000843
> переопределён оператор+
Это как? Объясни пожалуйста.
Аноним 04/06/17 Вск 14:15:20  1000855
>>1000849
Это класс а не массив https://glm.g-truc.net/0.9.2/api/a00131_source.html
Аноним 04/06/17 Вск 18:28:55  1001004
>>1000689
>А есть ли какие то мнемонические правила?
left-to-right rule
Аноним 06/06/17 Втр 10:43:55  1001848
>>1000190
> Расскажи, что ты хочешь сделать, почему тебе оптимизации могут помешать?
Не помешать, наоборот помогут. Кривой код переписывать лень, поэтому надеюсь, что компилятор сделает всю работу за меня.
Аноним 06/06/17 Втр 17:05:10  1002075
Анон, где можно почитать о том, как правильно строить сложные конечные автоматы?
Аноним 06/06/17 Втр 17:14:32  1002080
>>1002075
>сложные
как они могут быть сложными?
Аноним 06/06/17 Втр 17:26:18  1002086
>>1002080
Ну, например, когда есть рабочая машина состояний с определенным состояниями и подсостояниями, а теперь нужно сохранять еще одно состояние, которое будет висеть поверх других. Мне вот из-за скудности мышления сложно представить как это говно переделать так, чтобы код остался читабельным (т.е. без примитивного boolean флага, который будет сохранять это состояние) и без багов. В интернетах пишут о всяких СУПЕР-, паралельнх состояниях и т.п.
Аноним 06/06/17 Втр 17:48:59  1002101
>>1002086
> В интернетах пишут о всяких СУПЕР-, паралельнх состояниях и т.п.
меньше этих пидарасов хипстерских читай, если появилась какая то еба значит проеб в архитектуре и алгоритме. если хочешь пиздецпиздецсложна мокнись в парсеры, особенно парсеры регулярок типа https://github.com/laurikari/tre
там тебе и стеки и переходы и прочии ништяки
Аноним 06/06/17 Втр 17:52:11  1002102
>>1002101
з.ы. или https://github.com/google/gumbo-parser
он весь на состояниях и на w3c спеках
Аноним 06/06/17 Втр 17:58:09  1002105
Ребят, уже знаю JS, сейчас нужно учить Си, какую книгу/курс/сайт подскажите, чтоб не слишком для новичков в программировании
Аноним 06/06/17 Втр 18:03:17  1002108
>>1002102
>>1002101
Ну я лично столкнулся не с проебом в архитектуре, а с необходимостью делать слишком сложный алгоритм (но поделать с этим ничего не могу) для текущей машины состояний и вижу два решения: перелопачивать архитектуру, на что ни времени, ни компетенции нету, т.к. нужно это всё было сделать вчера, либо же использовать вот эти хипсторские решения, которые позволят более-менее сносно решить задачу.
Поэтому хотелось бы почитать книжечку для ньюфани без нормального опыта, где описаны решения некоторые well-known решения типичных задач.

Ну а регулярки – это уже слишком умно. но ты заинтересовал этой ёбой, надо на досуге почитать.
И вообще скорее всего я сам не знаю, что мне блять надо.
Аноним 06/06/17 Втр 18:08:01  1002110
>>1002108
>И вообще скорее всего я сам не знаю, что мне блять надо.
скорее всего тебе надо стек в который ты будешь пихать нех при переходах
Аноним 06/06/17 Втр 20:01:30  1002165
Пацантрэ, где взять мисру 2к13 в пдф? На либгене только 2004 есть.
Алсо, чего можно почитать по общим каким-то устройствам и принципам работы ртосов?
Алсо, где можно почитать принципы разработки ПО для встраиваемых систем желательно не в виде сферических абстракций, а в виде реальных примеров с пояснениями почему делают так, а не по-другому?
Аноним 06/06/17 Втр 20:03:29  1002169
>>1002105
Язык C в XXI веке
Advanced Topics C
C Primer Plus
Искусство программирования на C (лучше английский оригинал)
ADvanced Data Structures (Peter Brass)
Аноним 07/06/17 Срд 08:23:40  1002477
Помогите пожалуйста, если тут есть кто то в такое время

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

Делал с пузырьковой сортировкой, но препод послал и сказал тип дедлай, что бы подпрограмма добавления элемента сразу создавала упорядоченную таблицу.


https://pastebin.com/zZDh98Pz


Вот код, на вход подается что то вроде 12345678 name 100 (code, name, numb), упорядочить нужно по numb
Аноним 07/06/17 Срд 08:58:21  1002483
>>1002477
>если тут есть кто то в такое время
Слишком рано?
>создает упорядоченную таблицу и все
А в чём проблема создавать сразу же упорядоченную таблицу, что собственно от тебя и требуют. Алгоритм очень простой. Добавляется новый элемент в таблицу, для него с помощью, например, бинарного поиска, ищется позиция. В зависимости от алгоритма поиска, нужно будет добавить элемент или перед текущим, или после него. У тебя есть столбец, по которому нужно будет сортировать. Вот по нему и сортируй. Возможно, для твоего случая может подойти функция qsort из стандартной библиотеки.
Аноним 07/06/17 Срд 10:05:52  1002504
>>1002477
>...создаёт упорядоченную...
>...чтобы сразу упорядочивала...
Ну ты уж как-то определись
Аноним 07/06/17 Срд 10:20:51  1002509
Стоит ли вкатываться в ембедед и системное программирование, или же все таки надо идти в веб?
Аноним 07/06/17 Срд 10:29:55  1002516
>>1002509
Это как минимум интересно
Аноним 07/06/17 Срд 10:32:15  1002517
>>1002516
Я это понимаю, но сейчас же ничего не развивается, кроме веба?
Аноним 07/06/17 Срд 10:36:05  1002519
>>1002517
Господи, где вы набираетесь подобного говна?
Аноним 07/06/17 Срд 10:46:16  1002521
2017-06-07 (1).png (13Кб, 738x276)
2017-06-07 (2).png (12Кб, 624x260)
2017-06-07.png (11Кб, 574x272)
>>1002519

Аноним 07/06/17 Срд 10:47:41  1002522
>>1002517
Запили умный дом или какую другую йобу на контроллерах. Сделай систему управления чем-нибудь, выложи на кикстартер, собирай профиты.
Аноним 07/06/17 Срд 10:53:29  1002524
>>1002521
Учти, что в эмбедддед порог вхождения выше, желающих работать - меньше, следовательно вакансий меньше, т.к. банально некому работать. В веб же суются голодные бабуины за копеечную зарплату пилить формочки для внутреннего говнорынка. И кто такой СИСТЕМНЫЙ ПРОГРАММИСТ?
Аноним 07/06/17 Срд 11:35:09  1002534
>>1002524
Системный программист пишет драйверы и колупает ядро.
Аноним 07/06/17 Срд 11:40:08  1002538
>>1002524
Вот как раз из свежего:
>Высшее техническое образование, полученное в приличном техническом ВУЗе РФ. Если в названии вашего ВУЗа присутствуют слова "социальный", "гуманитарный", "экономический",
>"финансовый","политический", "строительный" - просьба не беспокоить, так как нам нужны сотрудники ориентированные на телеком!
>https://hh.ru/vacancy/20738888
Просто мякотка, учитвая, что ещё и средняя макака без какого-либо образования может зарабатывать больше.
Аноним 07/06/17 Срд 11:41:50  1002539
>>1002521
У тебя embedded по-английски. Не во всех российских компаниях кадровички знают английский. Часто ищут просто инженер-программиста, разработчика встраиваемых систем и т.д.
Да даже на иностранных площадках, embedded developer - нифига не канон. Может быть и Firmware/RTOS/DSP/Automotive/C/C++ developer и чего ещё только не выдумывают. И в 99% случаев это будет embedded.
Аноним 07/06/17 Срд 11:44:10  1002543
>>1002538
>по созданию ПО серверного и терминального оборудования видеоконференцсвязи, а также облачной видеоконференцсвязи
>Желателен опыт работы с системами жесткого реального времени.
Мне кажется, эти уёбки не понимают сути hard real-time.
Аноним 07/06/17 Срд 11:49:55  1002545
>>1002538
Ну вот, как я подозревал. Под вакансией СИСТЕМНОГО программиста (заметь, в описании даже и близко нет намека на то самое системное программирование) сейчас подрозумевается работа рознорабочим в какой-то унылой умирающей конторке из нулевых/90х.
Аноним 07/06/17 Срд 11:58:16  1002549
>>1002545
>Под вакансией СИСТЕМНОГО программиста (заметь, в описании даже и близко нет намека на то самое системное программирование) сейчас подрозумевается работа рознорабочим в какой-то унылой умирающей конторке из нулевых/90х
Совсем не факт. Сейчас ОС крутится в каждом электрочайнике.
Аноним 07/06/17 Срд 12:04:35  1002553
>>1002516
>>1002519
>>1002522
>>1002524
>>1002534
>>1002538
>>1002539
>>1002543
>>1002545
>>1002549
Хорошо, как вкатиться в это ваше системное embedded программирование? Что надо знать и уметь?
Аноним 07/06/17 Срд 12:12:37  1002561
>>1002553
От предпочтений зависит. Можно вкатиться в железо и максимально байтоебить (знание матана и электроники обязательно). Можно выучить юниксы, RTOS, многопоточность и уютно писать на сишечке. Лучший вариант: выучить и то, и другое.
Аноним 07/06/17 Срд 12:15:32  1002565
>>1002561
OpenMP норм?
Где по юниксам почитать?
Аноним 07/06/17 Срд 12:19:48  1002567
>>1002565
Advanced programming in the unix environment подойдет. С OpenMP пока повремени, разберись для начала с нативными средствами (posix threads , потоки и их синхронизация во FreeRTOS, например)
Аноним 07/06/17 Срд 19:15:09  1002741


>>1002504
опечатался
создает неупорядоченную >>1002477
Аноним 07/06/17 Срд 20:17:12  1002794
>>1002483
> Возможно, для твоего случая может подойти функция qsort из стандартной библиотеки.

Не подошла
Аноним 07/06/17 Срд 20:44:12  1002809
14915541948460.jpg (7Кб, 220x207)
>>1002477

Спрошу ещё раз, может кто нибудь ответит
Вот полный код всей программы - https://pastebin.com/kt9BBRzA

С пузырьковой сортировкой все работает идеально, но нужно упорядочивать таблицу именно в этой функции - https://pastebin.com/zZDh98Pz
Вообще не понимаю, как это сделать

qsort и бинарный поиск не подходят
Аноним 07/06/17 Срд 21:06:05  1002816
>>1002524
>в эмбедддед порог вхождения выше, желающих работать - меньше, следовательно вакансий меньше
А я думал, что у нас просто давным давно рынок потребительской электроники по пизде пошел и дальше только хуже, поэтому embedded никому не всрался кроме 3.5 контор, работающих на фсб и армию, и пары что-то пытающихся запилить стартапов.
Аноним 07/06/17 Срд 21:07:24  1002818
>>1002794
>Не подошла
НЕ ЗЛИ МЕНЯ. У меня второй день не получается сделать бесполезную работу, а ты пишешь, что у тебя что-то не получается. Что у тебя не получается? Не можешь разобраться с параметрами? Первый параметр - твой массив таблиц, второй - количество элементов, третий - размер одного элемента, а четвёртый - твоя функция сравнения. В начале функции add_table вызываешь qsort, читаешь документацию, в которой написано, до или после этого элемента надо вставить новый элемент или брутфорсишь до правильного, благо там всего 2 варианта, с помощью memmove перемещаешь массив на один элемент, перед этим не забыв увеличить его с помощью realloc, memcpy для элемента на новое место. Всё, элементарно. Что ещё не понятно?
Аноним 07/06/17 Срд 21:40:28  1002835
>>1002818
>У меня второй день не получается
Да я тоже не могу дописать это уже несколько дней, поэтому и написал сюда

>Не можешь разобраться с параметрами?
с qsort я разобрался, я понимаю как она работает и какие аргументы ей нужны

>Всё, элементарно
Просто попробуй сам написать дописать эти пару строк и поймешь, что то, что ты написал никогда в жизни не сработает в данном случае

Аноним 07/06/17 Срд 21:52:47  1002841
>>1002809
> бинарный поиск не подходят
Или ты поясняешь, что не так с бинарным поиском, или идешь нахуй.
Аноним 07/06/17 Срд 21:55:48  1002842
>>1002841
>бинарный поиск - алгоритм поиска элемента в отсортированном массиве
Аноним 07/06/17 Срд 21:59:46  1002844
>>1002842
Да. У тебя есть пустой массив, тебе на вход приходит элемент, ты бинарным поиском вычисляешь нужное место в массиве и втыкаешь его туда, повторяешь. После каждой итерации массив остается отсортированным (пустой массив и массив из одного элемента, очевидно, тоже можно считать отсортированными).
Аноним 07/06/17 Срд 22:05:47  1002848
Анон, можно ли написать абстрактный класс, который в своем констукторе создает наследников, либо как-нибудь вынести в него логику создания? В универе сказали написать загрузчик сайтов на чистом C++ и обязательно с полиморфизмом. 2 дня ебался с SSL, теперь пилю полиморфизм, решил для него теги взять. В базовом классе есть только конструктор c текстом тега и функция редактирования, которую наследники меняют. Хотел, чтобы по Tag(string) автоматически все создавалось и логика распределения была в самом классе, но так нельзя. Написал функцию Tag createTag(string), но почему-то не могу ее вызвать вне класса.
Аноним 07/06/17 Срд 22:19:59  1002854
>>1002844
А, окей
Пойдет такой https://pastebin.com/dh9K1cZp ?
Просто немного не понимаю, как правильно аргументы написать при вызове в данном случае, мне же не просто t[X] надо, а t[X].numb
Аноним 07/06/17 Срд 22:53:49  1002868
>>1002854
Ну ты поправь его так, чтобы при отсутствии совпадения (т.е., когда low становится > high) возвращался предполагаемый индекс, а не -1. По этому индексу и будешь втыкать элемент.
Аноним 07/06/17 Срд 23:07:18  1002875
>>1002816
С промышленной электроникой все в порядке. Всегда нужны кастомные решения, курс рубля на дне, необходимость сертификации, в т.ч. лоббируемая, все это работает на местных. Пациент определенно жив.

Даже потребительский сегмент: освещение, автосигнализациию.

>>1002565
Правильный выбор. В более железной части чистому программеру жизни нет, прислуга за все.
Аноним 07/06/17 Срд 23:08:57  1002877
Анон, помоги пожалуйста.
Как на C узнать текущее время системы (Linux), желательно не используя библиотеку <time.h>? Нужно считать и записать время системы+60 секунд, и затем сравнивать это значение с текущим.
Но какая-то из сторонних библиотек конфликтует с time.h, ругаясь на функцию nanosleep(без time.h всё компилируется и работает) Код содержащий nanosleep не мой, разбираться почему как часть с nanosleep работает и куда этот nanosleep в оригинале ведет - некогда
Аноним 07/06/17 Срд 23:58:48  1002891
>>1002877
> Но какая-то из сторонних библиотек конфликтует с time.h, ругаясь на функцию nanosleep
Покажи, как ругается. Конфликт со стандартным хедером - это полный пиздец. Скорее всего, ты просто либу собрал неправильно или на другой машине. Но в принципе, это все быстро решается костылем из дефайна.
Аноним 08/06/17 Чтв 00:33:52  1002905
>>1002891
Держи. Вот кусок кода в котором нанослип вызывается:

while ( bcm2835_gpio_lev(pin) == laststate) {
counter++;
nanosleep(1); // overclocking might change this?
if (counter == 100)
break;
}
Аноним 08/06/17 Чтв 00:47:29  1002908
>>1002905
Тебе говорят, что nanosleep вызывается неправильно - он хочет два аргумента, а передают только один. Вызови правильно:
nanosleep(&(struct timespec) { .tv_nsec = 1 }, NULL); (ну или сколько тебе там ждать, хуй знает).
Аноним 08/06/17 Чтв 01:15:10  1002914
>>1002908
Я понимаю что мне говорят. Но без подключения time.h работает именно с одним аргументом. Я хз что он вызывает нанослипам в одном из подключенных заголовков.
Аноним 08/06/17 Чтв 01:25:19  1002917
>>1002914
Ну грепни заголовки, узнаем, откуда оно это берет. Ну и в крайнем случае, тебе никто не мешает сделать так (в качестве очень костыльного костыля, потому что лень/некогда разбираться):
#define nanosleep yoba_nanosleep
#include <time.h>
#undef nanosleep
Но в идеале надо править кривой код, а не городить костыли. Алсо, если погуглить этот твой код, в 99% случаев там nanosleep закомментирован нахуй, в остальном 1% там usleep.
Аноним 08/06/17 Чтв 01:27:41  1002918
>>1002914
Алсо, ты уверен, что ты с -Wall компилируешь? А то вот такой код тоже "работает", пока не подключишь stdlib.h:
int main(void) { qsort(0); }
Аноним 08/06/17 Чтв 01:53:17  1002927
>>1002918
Ну я других настроек gcc не подсовывал, но да, вот с -Wall Как-то немало варнингов.
>>1002917
У меня там чей-то код с хабры, для работы с датчиками DHT-11/DHT-22. Указанный на хабре сурс - лежит.
Как твой пример с дефайнами работает?
Алсо, если не сложно, поясни как мне получить при подключении time.h время от начала работы программы или системы в секундах или милисекундах?
Аноним 08/06/17 Чтв 02:25:23  1002932
>>1002927
> скриншоты
Я не о том говорил. Есть такая штука, как implicit function declaration (запрещена в C99, наконец-то) - наследие древних темных времен. Когда компилятор встречает вызов функции, о которой он не знает (т.е., еще не видел ее объявление или определение), он считает, что фунция возвращает int, а принимает любые аргументы. Т.е., контроль типов и количества аргументов у таких функций не производится (не с чем сравнивать правильность), производятся только стандартные promotions, типа char->int или float->double. И когда ты не подключая time.h вызываешь nanosleep, gcc (видимо) считает, что это неявная декларация и позволяет тебе передать один инт в качестве аргумента, только вот функция от этого не перестает хотеть два указателя. Если скомпилированный код после этого работает - он работает по счастливой случайности. Если же ты подключаешь time.h, gcc "узнает", как должен выглядеть вызов nanosleep, и говорит тебе, что ты не прав.

> Как твой пример с дефайнами работает?
Дефайн заменяет один идентификатор на другой. Когда препроцессор встречает time.h extern int nanosleep(что-то там), он производит макроподстановку, и получается extern int yoba_nanosleep(что-то там). После того, как time.h обработан, undef говорит, чтобы препроцессор перестал заменять идентификатор nanosleep на что-либо.

> поясни как мне получить при подключении time.h время от начала работы программы или системы
Ну стандартные способы получения времени - это time() и timespec_get(), но они возвращают таймстамп от 1 января 1970. Если тебе критично именно с начала работы системы, то clock_gettime(CLOCK_MONOTONIC) или всякие: http://man7.org/linux/man-pages/man2/sysinfo.2.html или http://man7.org/linux/man-pages/man2/clock_gettime.2.html и т. п.
Аноним 08/06/17 Чтв 03:01:41  1002941
>>1002932
Оке, спс.
>Если тебе критично именно с начала работы системы
Некритично вообще. Сравниваю просто два времени - одно (когда-то_записанное +60) и снятое_только_что.
Тайм что возвращает? long? В секундах или милисекундах?
>пример с дефайнами
Так толком и не понял. Он по сути заменяет в time.h имя nanosleep на yoba_nanosleep?
>implicit function declaration
Оке. Всё что я из этого вынес - надо заранее объявлять переменные.

Аноним 08/06/17 Чтв 07:32:40  1002971
>>1002741
>>1002809

У тебя и в коде какая-то чушь. К указателю на структуру обращаешься как к массиву.
Сделал бы так:
1. Создал массив указателей на структуры.
2. Выделял память под каждый новый указатель и менял бы значения указателей вместо копирования всех структур.
Аноним 09/06/17 Птн 14:22:57  1003544
Как узнать имя текущего процесса? Именно имя процесса, а не путь к исполняемому файлу.
Аноним 09/06/17 Птн 14:27:00  1003546
>>1003544
В какой ос, и чем это отличается от пути к файлу?
Аноним 09/06/17 Птн 14:50:22  1003553
>>1003546
В windows. Путь к файлу может быть любой, а имя процесса одно и то же.
Аноним 09/06/17 Птн 14:54:38  1003556
>>1003553
А, наебал. Нужно то, что в диспетчере задач называется "Описание".
Аноним 09/06/17 Птн 15:21:47  1003568
>>1003556
VerQueryValue и товарищи. Это из ресурсов, из version info берется.
Аноним 10/06/17 Суб 13:02:14  1003957
Здесь ответ вряд ли найду, но на всякий случай спрошу:
У кого-нибудь удавалось скомпилить ncurses под minix?
Аноним 11/06/17 Вск 10:32:58  1004334
Студентобыдло заваливается в тред с вопросом:
Если у меня есть указатель в проге, которым я в конце проги уже не пользуюсь, но мне нужен указатель, что лучше сделать:
-создать новый с понятным названием, или
-ссылка вида:

type &newName = oldName

И так будет правильно написать для такого кода:

struct Elem {...}

int main() {
Elem *oldName;
...
Elem &newName = odName;
}
?????

Прост у меня заморочка на тему сейва четырех байтов, но я хз, освобождает ли компилятор место из-под указателя, если далее он юзаться не планирует. А ссылка вродь памяти не занимает совсем.
Аноним 11/06/17 Вск 17:30:01  1004504
>>1004334
#define newName oldName
Шютка. Не вздумай так делать. А вообще, судя по коду, тебе в плюсотред.

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

Хочешь надежно застолбить четыре байта? Создай статическую переменную.

А вообще, создать новый указатель не такая уж плохая идея. Компилятор не еблан и он не будет держать на стеке порожняком четыре байта, которые можно пустить в дело.
Аноним 11/06/17 Вск 22:15:09  1004655
>>1004504
>А вообще, судя по коду, тебе в плюсотред.
Мне в психушку надо. Ибо пишу типа на си, юзая некоторые плюшки из плюсов, и приправляя WinAPI32. Усё по методичкам нашего универа, по методике преподов.
Да и вообще, делить С и С++ на разные треды - бред, ИМХО.

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

>А вообще, создать новый указатель не такая уж плохая идея. Компилятор не еблан и он не будет держать на стеке порожняком четыре байта, которые можно пустить в дело.
Збс, значит буду объявлять каждый раз, когда потребуется.

Алсо, слышал, что если вначале объявить переменную и сразу синициализировать, типо int i = 0; то получим переменную не в куче а в стеке, т.е. статическую. И у меня подозрение, что VS2015 нихуя не освободит.
Аноним 11/06/17 Вск 22:31:11  1004668
>>1004655
>делить С и С++ на разные треды - бред
не, у крестов слишком много оверхеда
qt, boost, темплейты и прочее, куча говна
Аноним 11/06/17 Вск 22:45:40  1004675
>>1004655
>меня интересует именно судьба всяких int SortList
Такие переменные существуют в стеке, пока они нужны. Если переменная не используется, то место, которое она раньше занимала, используется для других нужд при наличии необходимости.

>если вначале объявить переменную и сразу синициализировать, типо int i = 0; то получим переменную не в куче а в стеке
Если ты объявляешь эту переменную внутри функции, то она по-любому будет на стеке. Чтобы создать переменную в куче, надо сначала явно выделить под нее место в этой самой куче.

>т.е. статическую
Переменные, для хранения которых компилятор сам резервирует место на стеке, относятся к автоматической памяти, а не к статической. Статическая память это либо глобальные переменные (т.е. объеявленные вне функций), либо явно объявленные с ключевыми словами static или extern. Инициировать статические переменные нулем не имеет смысла, поскольку они и так обнуляются на этапе загрузки программы.
Аноним 11/06/17 Вск 23:00:18  1004682
>>1004668
>>1004675
Плюсики вам в карму :3
Аноним 11/06/17 Вск 23:31:50  1004699
>>1004655
>Да и вообще, делить С и С++ на разные треды - бред, ИМХО.
ООП моча не нужна, template говно тем более. Си простой и ясный язык, как Форт, как Лисп. Не надо сюда тащить всякое говно.
Аноним 11/06/17 Вск 23:33:20  1004700
>>1004699
Но в больших проектах, где нужна производительность С++ незаменим
Аноним 11/06/17 Вск 23:35:32  1004703
>>1004700
Java, C# (с вынесением медленных участков в нативные библиотеки на Си), Free Pascal/Lazarus, Oberon, Rust, Go, Swift, Fortran. Полно вариантов.
Аноним 11/06/17 Вск 23:37:06  1004704
>>1004703
+ Ada еще
Аноним 12/06/17 Пнд 00:59:47  1004736
>>1004700
Это тебя яндекс в жопу выебал?
Аноним 13/06/17 Втр 02:24:42  1005176
Есть switch-case на 100 строчек, примерно. Как и чем его заменить? Очень уж мне не нравится этот матрас.
Аноним 13/06/17 Втр 02:53:25  1005179
>>1005176
>switch-case на 100 строчек
фигасе, а кейсов сколько?
Аноним 13/06/17 Втр 03:49:28  1005186
>>1005176
А что внутри? Может быть, можно сделать таблицу?
Аноним 13/06/17 Втр 08:07:10  1005205
>>1005186
Про chip8 слыхал? Интерпретатор, внутри обрабатываю опкоды и т.д
Аноним 13/06/17 Втр 08:07:36  1005206
>>1005179
Ну я про case и говорю.
Аноним 13/06/17 Втр 10:27:09  1005237
>>1005205
Если цикл что-то типа
switch (opcode) {
case OP_NOP:
...
case OP_RET:
...
}
То сделать массив функций:
typedef void OpcodeFn(VirtualMachineState state);
OpcodeFn opcodeFuntions[] = {opcodeNop, opcodeRet, ...};
void opcodeNop(VirtualMachineState
state)
{...}
void opcodeRet(VirtualMachineState *state)
{...}
...
И в цикле просто вызывать opcodeFuntioncs[opcode]
Заодно и работать будет быстрее.
Аноним 13/06/17 Втр 10:34:24  1005239
>>1005237
typedef void OpcodeFn(VirtualMachineState  ·state);
OpcodeFn opcodeFuntions[] = {opcodeNop, opcodeRet, ...};
void opcodeNop(VirtualMachineState  ·state)
{...}
void opcodeRet(VirtualMachineState  ·state)
{...}
Аноним 13/06/17 Втр 10:34:55  1005240
>>1005237
Попробую, спасибо!
Аноним 13/06/17 Втр 10:52:42  1005245
>>1005240
Этот паттерн, кстати, называется "шитый код". Применялся во многих реализациях Форта, в интерпретаторах Бейсика на 8-битных компьютерах (например, ZX Spectrum), в Фокале на БК-0010.
Аноним 13/06/17 Втр 11:15:40  1005252
>>1005245
> шитый код
Большое спасибо. Почитаю.
Аноним 13/06/17 Втр 11:34:20  1005265
>>1004703
>Free Pascal/Lazarus, Oberon
Умерли.
>Rust
Пока еще малопопулярен, нет IDE, дебаггеров и прочих незаменимых инструментов.
>Go
Не годится в больших проектах
>Swift
Нет на винде и на линуксе
>Fortran
Умер
>Java, C#
Единственный годный вариант, но джава умирает, а С# живет в основном в asp.net
Аноним 13/06/17 Втр 11:36:30  1005268
>>1005265
>Умерли.
Оберон может быть, а Lazarus в российском госсекторе используется.
Аноним 13/06/17 Втр 11:40:42  1005269
>>1005268
>в российском госсекторе используется
Я говорю о нормальных проектах, а не о поедании говна за деньги из бюджета.
Аноним 13/06/17 Втр 11:43:22  1005274
>>1005265
Fortran не умер, просто мало распространен. Есть хороший оптимизирующий компилятор от Intel, неплохой GNU Fortran в составе GCC. Есть ООП, рекурсия, вроде даже лямбды:
https://stackoverflow.com/questions/21471640/fortran-return-an-anonymous-function-from-subroutine
Intel Fotran и GNU Fortran поддерживают параллельность через OpenMP.
Аноним 13/06/17 Втр 11:47:07  1005275
>>1005274
>мало распространен
Так можно про любой язык сказать, даже про тот же хаскель. Я же говорю про язык для продакшена, для которого написаны сотни библиотек, есть годные инструменты, а главное - на нем пишется и будет писаться много новых проектов. Для фортрана было написано много библиотек в свое время, и он использовался для научных вычислений. Теперь его заменил питон, и фортран оказался не нужным.
Аноним 13/06/17 Втр 11:51:24  1005276
>>1005275
> Я же говорю про язык для продакшена, для которого написаны сотни библиотек, есть годные инструменты, а главное - на нем пишется и будет писаться много новых проектов.
ПИТОН
Аноним 13/06/17 Втр 11:52:43  1005277
>>1005276
Высокая производительность?
Аноним 19/06/17 Пнд 09:54:18  1008224
А поясните, пожалуйста, кто в стандартах разбирается. Есть две структуры, что поля второй включают порядок и типы первой, например:
typedef struct {VMT ptrdiff_t; short int data;} T;
typedef struct {VMT ptrdiff_t; short int data; long int other_data;} T1;
Собственно вопрос допустимо ли приводить T1 к T? Не перевыравняет ли компилятор что-либо по своим усмотрениям?
Спасибо.
Аноним 19/06/17 Пнд 13:22:53  1008292
>>1008224
Сунь в union. Тогда можно будет обращаться к common initial sequence любой из этих структур.
Аноним 19/06/17 Пнд 17:24:57  1008395
>>1008224
>Не перевыравняет ли компилятор что-либо по своим усмотрениям?
Может да, а может и нет. Используй #pragma pack
Аноним 19/06/17 Пнд 19:05:01  1008436
>>1008224
>Не перевыравняет ли компилятор что-либо по своим усмотрениям?
Скорее всего нет. Но если делать все максимально кроссплатформенно и по стандартам, то правильнее всего так:
typedef struct {VMT ptrdiff_t; short int data;} T;
typedef struct {T base; long int other_data;} T1;
Аноним 19/06/17 Пнд 20:43:13  1008481
>>1008224
> Собственно вопрос допустимо ли приводить T1 к T?
По стандарту нет. Ибо strict aliasing, разные типы, гроб-гроб-кладбище, авторы компиляторов опять ломают язык ради оптимизаций. По факту да, можно так делать (и делают!), но лучше выделить одинаковую часть структур в отдельный тип.

>>1008395
> Используй #pragma pack
Нинужно. Выравнивание всегда одинаковое у конкретного компилятора на конкретной платформе.
Аноним 19/06/17 Пнд 22:50:52  1008536
>>1008292
>>1008395
>>1008436
>>1008481
Благодарю за пояснения.
Аноним 19/06/17 Пнд 23:54:06  1008557
Аноним 20/06/17 Втр 07:03:21  1008608
Привет. Сишка не мой первый язык, но он мне безумно нравится. Проблема в том, что мне ООП навязало свою модель проектирования приложения, и с Си она собственно никак не коррелирует. Иногда я просто не знаю как разделить исполняемые файлы, хэдеры и т.д Может есть какая-нибудь статья или книга по проектированию на Си? Очень бы пригодилось.
Аноним 20/06/17 Втр 14:53:08  1008781
>>1008608
> Проблема в том, что мне ООП навязало свою модель проектирования приложения, и с Си она собственно никак не коррелирует.
ООП ортогонально языку.
Аноним 20/06/17 Втр 15:08:55  1008787
>>1008608
Так на сишке тоже можно писать ООП.

typedef struct {
  int width;
  int height;
  void data;
} Image;

typedef struct {
  Image ×image;
  int x;
  int y;
  BOOL visible;
} Sprite;

Sprite
Sprite_new() {
  Spritesprite = (Sprite)malloc(sizeof(Sprite));
  if (sprite) {
    sprite->image = NULL;
    sprite->x = 0;
    sprite->y = 0;
    sprite->visible = FALSE;
  }
  return sprite;
}

void Sprite_show(Sprite *sprite) {
  if (sprite) sprite->visible = TRUE;
}

void Sprite_move(int x, int y) {
  if (sprite) {
    sprite->x += x;
    sprite->y += y;
  }
}
Аноним 20/06/17 Втр 15:26:59  1008790
>>1008787
typedef struct {
  int width;
  int height;
  void data;
} Image;

typedef struct {
  Image
image;
  int x;
  int y;
  BOOL visible;
} Sprite;

Sprite Sprite_new() {
  Sprite
sprite = (Sprite)malloc(sizeof(Sprite));
  if (sprite) {
    sprite->image = NULL;
    sprite->x = 0;
    sprite->y = 0;
    sprite->visible = FALSE;
  }
  return sprite;
}

void Sprite_show(Sprite
sprite) {
  if (sprite) sprite->visible = TRUE;
}

void Sprite_move(Sprite *sprite, int x, int y) {
  if (sprite) {
    sprite->x += x;
    sprite->y += y;
  }
}
Аноним 20/06/17 Втр 15:28:02  1008791
>>1008790
Странно, почему сбивается разметка, в прикрепленном треде все норм...
Аноним 20/06/17 Втр 15:28:07  1008792
>>992632 (OP)
Запощу тут чтобы не проебать, ихнорируйте меня
http://web.eecs.utk.edu/~plank/plank/classes/cs360/general.html
Аноним 20/06/17 Втр 15:29:52  1008793
>>1008792
Для заметок лучше использовать E-mail, там можно отправлять письма самому себе.
Аноним 20/06/17 Втр 15:39:02  1008798
>>1008793
Да я понимаю, просто я на чужой машиенрии сейчас
Аноним 20/06/17 Втр 22:10:29  1008946
Лёгкий (не Code::Blocks) FOSS кроссплатформенный DE.
Аноним 20/06/17 Втр 22:11:03  1008947
>>1008946
IDE*
Ну и не советуйте блокнот, пожалуйста.
Аноним 20/06/17 Втр 22:56:11  1008963
>>1008946
Нет таких. Либо легкий, либо IDE, либо кроссплатформенный, либо FOSS. Я, например, предпочитаю SublimeText для более-менее простых проектов и полноценные "тяжелые" IDE для больших и сложных вещей. Для хелловорлда подходит любой блокнот, да.
Аноним 20/06/17 Втр 23:00:34  1008966
>>1008963
А что по CodeLight?
Аноним 21/06/17 Срд 00:55:29  1009010
>>1008966
Интерфейс тупой, бесполезный и перегруженный.

Anjuta попробуй, ничего лишнего и работает быстро.
Аноним 21/06/17 Срд 00:57:36  1009011
>>1008963
>>1008963

Pelles C же.
Аноним 21/06/17 Срд 00:59:36  1009013
>>1004675
Статические переменные же не в стеке хранятся.
Аноним 21/06/17 Срд 01:36:36  1009025
>>1009011
Не кроссплатформенный, Pelle опять вымер на два года, никаких фич IDE нет - по сути просто блокнот с редактором ресурсов и кнопочкой "компилировать".
Аноним 21/06/17 Срд 09:10:35  1009067
сисюны, нужно байтоебить с пиздецки большими файлами > 1tb, стоит ли смотреть на cuda?
Аноним 21/06/17 Срд 09:44:55  1009080
>>1008946
Clion
Qt Creator
Visual Studio
Выбирай из этого, все остальное - параша.
Аноним 21/06/17 Срд 10:01:43  1009085
>>1009067
С чем файлы-то?
Аноним 21/06/17 Срд 10:18:16  1009089
>>1009085
>С чем файлы-то
с байтами =) ну на самом деле дамп пиздецкого массива структур, размер структур всегда одинаков
Аноним 21/06/17 Срд 10:31:12  1009096
>>1009080
Короче, ладно, notepad++ с NppExec
Аноним 21/06/17 Срд 10:52:00  1009098
>>1009096
>notepad++ с NppExec
всегда пользуюсь, eclips + cdt в редких случаях. ide для пидоров
Аноним 21/06/17 Срд 12:52:53  1009150
>>1009098
Два чая, в сишке в отличие от C++/C#/Java автокомплит и рефакторинг не нужны.
Аноним 21/06/17 Срд 13:44:03  1009171
>>1009096
>>1009098
>>1009150
Ну если кодить только на Си, то ide может и не нужна. Но т.к я крестун, то использую VS с MSVC для С++ и VS с Clang/C2 для Си
Аноним 21/06/17 Срд 13:46:22  1009173
>>1009150
Автокомплит нужен, если ты не под микроконтроллеры и прочий эмбеддед пишешь. Я вот сейчас хуй сам вспомню, как в каком порядке вызывать аргументы функций usb-core в линуксах, хотя писал под него меньше месяца назад.
Аноним 21/06/17 Срд 14:08:59  1009192
>>1009173
и ты такой с автоконплитом хуяк хуяк и накодил? один хуй нужно ман просмотреть или копипастить со своего кода.
Аноним 21/06/17 Срд 15:38:04  1009238
>>1009192
Когда накидываешь драйвера для однотипных устройств - да, хуяк-хуяк и накодил с автокомплитом.
Аноним 21/06/17 Срд 17:40:29  1009335
Ну что, байтобляди, есть желающие поработать?
https://spb.hh.ru/vacancy/21401883
Аноним 21/06/17 Срд 18:08:36  1009356
>>1009098
Ты не подскажешь, в чём может быть проблема?
Делаю такое:
gcc "$(FULL_CURRENT_PATH)" -o "$(NAME_PART) ".exe
cd "$(CURRENT_DIRECTORY)"
$(NAME_PART).exe
Мой HelloWorld компилится, потом стартует процесс программы, но выхлопа ноль, никакого окна не возникает
Аноним 21/06/17 Срд 18:12:03  1009358
0296892d0e1bffc[...].jpg (111Кб, 600x491)
>>1009335
Ты повёлся на слово «MISRA» как рыба на блесну, штолле? Но ведь это же:
- Люксофт (т.е. анкеты и IQ-тесты)
- Зарплата не указана (и ведь это редкий в наших краях специалист)
- Какие-то уебанские технологии, XBank, eDebug, Turbo-Ohuelli надо знать (а если не знаю — мне самому свою з/п называть, да?)

Короче, хватит. Пошутили и хватит! Нет такого языка программирования.
Аноним 21/06/17 Срд 18:25:42  1009365
>>1009356
Разобрался с Npp_run
Аноним 21/06/17 Срд 18:28:54  1009367
>>1009358
Edebug is a source-level debugger for Emacs Lisp programs, with which you can:

Step through evaluation, stopping before and after each expression.
Set conditional or unconditional breakpoints.
Stop when a specified condition is true (the global break event).
Trace slow or fast, stopping briefly at each stop point, or at each breakpoint.
Display expression results and evaluate expressions as if outside of Edebug.
Automatically re-evaluate a list of expressions and display their results each time Edebug updates the display.
Output trace information on function calls and returns.
Stop when an error occurs.
Display a backtrace, omitting Edebug's own frames.
Specify argument evaluation for macros and defining forms.
Obtain rudimentary coverage testing and frequency counts.
Аноним 21/06/17 Срд 19:07:28  1009388
>>1009335
неа,

Вакансия Программист-разработчик C / C++ 250.000 Gross, ПО и драйвера ККТ, МСК

https://www.linux.org.ru/forum/job/13490618?lastmod=1497939633401
Аноним 21/06/17 Срд 20:06:09  1009441
>>1009365
Но он почему-то не хочет сохранять мои скрипты, после перезапуска ничего нет
Аноним 21/06/17 Срд 20:07:04  1009443
>>1009388
>МСК
Плюс вычитай 30%, если Gross.
Аноним 21/06/17 Срд 20:11:01  1009445
>>1009358
>- Зарплата не указана (и ведь это редкий в наших краях специалист)
У нас есть Анкета, в которой каждый кандидат указывает желаемую з/п. Мы стараемся учитывать предпочтения каждого=)
Аноним 21/06/17 Срд 21:32:29  1009508
>>1009367
>Emacs
Ой, всё.
Аноним 21/06/17 Срд 22:15:17  1009544
>>1009445
>>1009388
Падажжи, эйчар рекрутирует на харкаче? Теперь я видел всё.
Аноним 21/06/17 Срд 22:53:29  1009589
Помогите пожалуйста, нужно находить индекс элемента для вставки в таблицу с помощью бинарного поиска, что бы таблица создавалась сразу упорядоченной, но я не могу нормально реализовать. Как поправить?


Вот код с функциями и пояснением:

https://pastebin.com/0DNkMMK0

Фулл код:

https://pastebin.com/P2LgQASf
Аноним 22/06/17 Чтв 01:47:30  1009683
>>1009589
Как же ты заебал! http://ideone.com/wp3PL0
Аноним 22/06/17 Чтв 19:19:28  1010062
Image 001.png (2Кб, 783x28)
С чем пикрил может быть связан? Возникает ошибка довольно рандомно.
Аноним 22/06/17 Чтв 19:19:55  1010063
>>1010062
И при этом ничего не компилится.
Аноним 22/06/17 Чтв 19:21:35  1010064
>>1010062
Нет права на запись в директорию, куда предполагается поместить бинарник твоей программы.
Аноним 22/06/17 Чтв 19:22:32  1010066
>>1010064
Проклятая сперма, не может даже регулярно не давать права.
Аноним 22/06/17 Чтв 19:28:00  1010068
>>1010066
А, есть закономерность.
Если не открою эту папку в explorer, то никогда не даст gcc записать в папку, а если открыт explorer, то можно, вестимо, всем туда писать.
Б Е З О П А С Н О С Т Ь
Аноним 22/06/17 Чтв 19:29:12  1010069
>>1010068
Может быть, ACL у папки надо подправить?
Аноним 22/06/17 Чтв 19:30:23  1010071
>>1010069
Всё разерешено, вообще всё и всем, папка вполне обычная
Аноним 22/06/17 Чтв 19:34:34  1010072
>>1010071
Солипсизм уровня M$.
В системе существует только то, что ты видишь в эксплорере.
Аноним 22/06/17 Чтв 19:37:51  1010073
>>1010072
Ага, так и нашёл файлик с конфигом для всей этой параши
Аноним 22/06/17 Чтв 21:04:31  1010145
>>1010062
Аналогичная хуйня на Server 2008R2. Собирал, собирал - и ошибки запрещенного доступа., Через некоторое время разрешало. ИЧСХ на семерке на ноуте такого нет.
Аноним 22/06/17 Чтв 21:06:43  1010146
>>1010145
А это какой-нибудь антивирус или индексация фоновая не могут быть?
Аноним 22/06/17 Чтв 21:10:37  1010151
>>1010146
Антивируса нет, индексация была нагуглена и отключена, как и теневые копии. Так что точно нет.
Аноним 22/06/17 Чтв 21:12:13  1010153
>>1010151
Если воспроизводится до сих пор, не можешь взять FileMon/ProcessExplorer и узнать точную причину?
Аноним 22/06/17 Чтв 21:12:39  1010154
>>1010153
ProcessExplorer ProcessMonitor
Аноним 22/06/17 Чтв 21:14:18  1010156
>>1010153
Завтра гляну.
Аноним 23/06/17 Птн 10:10:40  1010354
>>992632 (OP)
есть джва байтовых массива по 10 байт, нужно присвоить один другому. хочу обойтись без пидерских memcpy и циклов, а двумя операторами присваиваний, int64+int16. как это синтаксически будет выглядеть?
Аноним 23/06/17 Птн 11:41:32  1010375
>>1010354
http://ideone.com/y6DhfC
Обернуть массив структурой, которая копируется по значению. Но это лютый говнокод, за который следует отбивать руки. Кроме того, не стоит забывать, что вся эта ебанина творится на стеке.
Аноним 23/06/17 Птн 13:35:48  1010404
>>1010375
внатуре говнокод, надумал вот такую писечку:

((uint32_t)block1)[0] = ((uint32_t)block2)[0];
Аноним 23/06/17 Птн 13:36:48  1010405
>>1010404
з.ы. звездочки макака захавал
Аноним 23/06/17 Птн 13:47:53  1010412
>>1010354
>как это синтаксически будет выглядеть?
union Convert {
char c[10];
struct {
uint64_t a;
uint16_t b;
} s } c1, c2;
c1.c = { ... };
c2.s = c1.s;
Будет работать, хотя теоретически компилятор поля структур может разнести на произвольное расстояние. Правильнее через memcpy.

Аноним 23/06/17 Птн 14:08:15  1010426
>>1010412
>memcpy
впизду, смотри >>1010404, утакуот работает
((uint64_t•)block1)[0] = ((uint64_t•)block2)[0];
((uint16_t•)block1)[4] = ((uint16_t•)block2)[4];
Аноним 23/06/17 Птн 16:01:10  1010460
>>1010426
Type punning - плохой стиль. По стандарту надо через memcpy (лучший вариант) или юнионы (худший).
Аноним 23/06/17 Птн 17:13:31  1010491
>>1010460
>плохой стиль
ойойой, это мне подняло скорость выполнения на треть, хотя всеравно этого мало...
Аноним 23/06/17 Птн 17:31:52  1010503
>>1010491
Сам посмотри, с mempcy компилятор копирование вообще выкидывает, а через поинтер делает mov через sse:
https://godbolt.org/g/Qn8A4g
Аноним 23/06/17 Птн 17:42:18  1010517
>>1010503
ну на самом деле у меня блок по 192байта и фактически я развернул цикл, а memcpy так не сможет. хотя вызовов memcpy не много, много вызовов memcmp, развернутый цикл выигрывает. кстати на 32 битных машинах, наверное 64 приведение обосрется...
Аноним 24/06/17 Суб 01:46:13  1010728
Кодеров в РФ наёбывают:

https://2ch.hk/po/res/23263797.html

Тлен. Безысходность.
Аноним 24/06/17 Суб 08:17:10  1010759
>>992632 (OP)
мудрый анон, любой флаг оптимизации конпелятора ломает мою байтоебную прогу, это норма?
Аноним 24/06/17 Суб 08:22:51  1010760
>>1010759
Таки норма. Оптимизация может покорежить и не-байтоебскую программу. Например, компилятор может выкинуть вызов memset(data, 0, data_size), если он расположен перед выходом из функции.
Есть способы с этим бороться, но для каждой конкретной программы и компилятора они свои.
Аноним 24/06/17 Суб 08:34:45  1010762
>>1010760
теперь я спокоен, спасибки
Аноним 24/06/17 Суб 08:38:20  1010763
>>1010759
Нет, это не норма. Прочитай стандарт, научись в -fno-strict-aliasing. Применяй байтоеблю правильно.
Аноним 24/06/17 Суб 09:31:41  1010768
>>1010763
>Прочитай стандарт
вот делать мне больше нечего
Аноним 26/06/17 Пнд 11:54:51  1011837
>>995311
> system("chcp 1251");
вот откуда говнокодеры
Аноним 26/06/17 Пнд 11:55:24  1011838
>>1010768
надо
Аноним 26/06/17 Пнд 17:28:29  1011977
о великие перед вами.я маленькая криветочка
и у меня вопрос #include <stdio.h>
#include <math.h>
main ()
{
int a;
float b;
scanf("%d\n",a);
b=a(3.156 pow(10,7));
printf("%f\n",b);

}
почему число нужно вводить дважды если scanf 1
Аноним 26/06/17 Пнд 19:42:59  1012020
ayF0Jv9k9bI.jpg (227Кб, 1280x956)
Сап, есть кто завтра в 6:00 МСК не будет спать?

Нужна небольшая помощь с задачкой не бесплатно офк
Аноним 26/06/17 Пнд 19:49:46  1012021
>>1012020
сколько платишь?
Аноним 26/06/17 Пнд 20:03:37  1012025
>>1011977
Перевод строки убери из строчки форматирования.
Аноним 26/06/17 Пнд 20:15:08  1012031
>>1012021
хз, никогда не заказывал задачки
рублей 200-300, она не сложная
Аноним 26/06/17 Пнд 20:18:18  1012032
>>1012031
>рублей 200-300
в голосину
Аноним 26/06/17 Пнд 20:21:03  1012033
>>1012032
слишком мало?
Аноним 26/06/17 Пнд 20:21:52  1012034
>>1012032
да не, мб ты не так понял, там просто функцию написать надо и использовать её на чем то использовать я сам смогу
Аноним 26/06/17 Пнд 20:31:08  1012038
>>1012034
Я не думаю, что там что-то сложное, давай своё задание здесь.
Аноним 26/06/17 Пнд 20:50:34  1012050
EgGbrE9XCAc.jpg (207Кб, 1280x960)
>>1012038
В общем есть 100 билетов, в каждом одно задание, ~70 я прорешал, а некоторые прям вообще хз

бывают такие - https://pastebin.com/zFKSFPVb

А бывает и такое:

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

Как с помощью рекурсии это сделать не понимаю
Аноним 26/06/17 Пнд 20:56:50  1012051
>>1012050
> Как с помощью рекурсии это сделать не понимаю
#define max(x, y) ((x) > (y) ? (x) : (y))

int find_max(list ptr elem) {
if (!elem) return INT_MIN;
int foo = elem->value;
int bar = find_max(elem->next);
return max(foo, bar);
}
Ну или на хвостовую перепиши, чтобы было return find_max(elem->next, current_maximum);
Аноним 26/06/17 Пнд 20:57:10  1012052
>>1012050

Просто типо из этих двух я уверен, что мне выпадет вторая, поэтому и написал сюда тип подстраховаться

1)В текстовом файле дана последовательность чисел. Написать подпрограмму, которая в однонаправленном списке из каждой группы подряд идущих равных элементов оставляет только один. Используя эту подпрограмму, преобразовать заданную последовательность.


2)В текстовом файле дана последовательность чисел. Написать подпрограмму, которая проверяет, упорядочена ли последовательность действительных чисел, хранящаяся в двунаправленном списке. Используя эту подпрограмму преобразовать заданную последовательность следующим образом, если она упорядочена, то, не нарушая упорядоченности, вставить в нее элемент со значением p, иначе удалить элемент с номером k.
Аноним 26/06/17 Пнд 21:01:52  1012053
>>1012051
сейчас попробую, спасибо
Аноним 26/06/17 Пнд 21:03:53  1012054
>>1012052
1) Втыкаешь внутренний цикл, крутящийся, пока следующий элемент есть и равен стартовому.
> Используя эту подпрограмму
Беги оттуда. У тебя препод - любитель втыкать не относящиеся друг к другу действия в одну функцию[s/] подпрограмму.
2) Крутишь цикл, пока next не NULL, проверяешь, что значение next больше значения текущего элемента. Попутно считаешь порядковые номера, запоминаешь указатели элемент с индексом k и элемент со значением p. Когда выйдешь из цикла, в зависимости от next !=/== NULL, принимаешь решение, какое действие с каким из указателей сотворить. И сотворяешь.
Аноним 26/06/17 Пнд 21:13:31  1012057
>>1012054
Не, ну первую то я офк легко решил.

>Беги оттуда. У тебя препод - любитель втыкать не относящиеся друг к другу действия в одну функцию[s/] подпрограмму.

Да у меня вообще пиздец, у меня препод дает нам постоянно операторы с крестов new delete etc, а наш курс называется просто "Программирование на языке Си"
И вообще все преподавание это написание синтаксиса какой нибудь функции на доске и выдача лаб. Мб поэтому я так туплю.


>>1012051
>(list ptr elem)
Немного не понимаю, что это?
Быть может (struct list *elem)?
Аноним 26/06/17 Пнд 21:32:11  1012064
>>1012051
Написал, работает. Только как с помощью этой же подпрограммы удалить max?
Аноним 26/06/17 Пнд 21:33:24  1012066
>>1012050
Сделал: https://pastebin.com/n1QGhYPc

Не проверял на работу, но должно заработать.
Аноним 26/06/17 Пнд 22:59:21  1012137
>>1012064
Тайна сия велика есть. Но можно возвращать не max, а указатель на максимальный элемент. Соответственно по возврату из функции в вызывающей функции этот элемент грохать как-нибудь. Но опять же однонаправленный список... хуй знает.
Аноним 27/06/17 Втр 05:48:49  1012237
Сап, возможно ли с помощью этой подпрограммы - https://pastebin.com/g8ziudsN

Удалить все элементы из списка (кольцевого двусвязного) с черными номерами, считая, что нумерация начинается с 1 отправлено первого элемента?
Аноним 27/06/17 Втр 06:17:48  1012247
>>1012237
> Сап, возможно ли с помощью этой подпрограммы - https://pastebin.com/g8ziudsN

> Удалить все элементы из списка (кольцевого двусвязного) с черными номерами, считая, что нумерация начинается с 1 отправлено первого элемента?
Ты точно по-русски говоришь?
Аноним 27/06/17 Втр 10:47:27  1012299
>>1012247
Ананасы, как вы в POSIX запускаете процесс, который должен запуститься, сделать своё дело и завершиться, но при независимых довольно нестандартных обстоятельствах может и повиснуть (либо очень долго выполняться)?
Я вижу два решения:
1. fork и waitpid с таймаутом (не совсем надежно, в худшем случае может остаться зомби), но зато можно получить код завершения процесса при успешном выполнении (что в моем случае было бы полезно)
2. вызвать fork дважды, делать exec с последнего child, первый child убить. Надежно, но сложно получить код завершения (и тут я думаю — а нужен ли он мне...).
Аноним 27/06/17 Втр 10:47:44  1012300
>>1012299
упс, не туда ответил
Аноним 27/06/17 Втр 10:55:52  1012302
>>1012300
А я ананас.
Аноним 27/06/17 Втр 12:53:01  1012366
>>1012299
Не вижу проблемы.
>в худшем случае может остаться зомби
С чего бы это? Ты SIGCHILD не обрабатываешь?
Аноним 27/06/17 Втр 13:20:10  1012380
Есть одна прога. Она должна посчитывать CRC16 файлов, ну и сохранять их. Функция по расчету CRC16-CCITT точно правильно работает, т.к скопизжена. Так вот, почему-то контрольную сумму от файлов считает неправильно, но если это обычный текстовик - то все работает нормально. Не понимаю, в чем проблема.
https://pastebin.com/UKg6ydbH
Аноним 27/06/17 Втр 14:35:47  1012416
>>1012380
Немного поясню - неверно считает хэши от всяких бинарников, от exe до mp3 и прочее.
Аноним 27/06/17 Втр 14:43:12  1012420
>>1012380
>>1012416
Вопрос снят. Заменил unsigned char на byte, и оно почему-то заработало.
Аноним 27/06/17 Втр 15:50:20  1012448
>>1012420
>byte
Это что за зверь в сях?
Аноним 27/06/17 Втр 16:02:12  1012457
>>1012448
signed char?
Аноним 27/06/17 Втр 17:24:03  1012497
>>1012448
Глянул объявление - unsigned char. Другой вопрос, почему через этот самый unsigned char оно не работало, а через byte - вполне.
Аноним 27/06/17 Втр 17:27:28  1012498
>>1012497
Магия
Аноним 27/06/17 Втр 18:02:05  1012509
>>1012497
Врешь ведь. У тебя там винда и отсутствие флага "b" в fopen. Поэтому в бинарниках >>1012416 проблемы с \r\n. А из-за unsigned char проблем быть не может (с правильно написанным кодом, который знает про integer promotions).
Аноним 27/06/17 Втр 18:29:52  1012523
>>1012509
Хотя нет, я был не прав, rb есть, но unsigned byte явно vs. typedef все равно влиять не должны. Зато есть другие проблемы типа f.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY (надо через & тестить, могут быть другие атрибуты), странного чтения посимвольно, хотя fread может поблочно, еще более странной конструкции для вычисления размера (у тебя int 32-битный, чего ты вообще пытаешься добиться?), отсутствия проверки, открылся ли файл и отсутствия fclose в принципе (количество открытых файлов ограничено, см. FOPEN_MAX - однажды следующий не откроется, и ты будешь считать чексумму мусора в памяти). Ну и FindNextFile BOOL возвращает.
Аноним 27/06/17 Втр 19:46:31  1012570
Image 001.png (313Кб, 778x760)
Вот, K&R в пункте про goto пишут два примера программы для нахождения первых попавшихся равных элементов двух массивов.
Для пикрил примера без goto пишется, что приходится вводить ещё одну переменную с дополнительными проверками.
Ну а вообще, какой из двух вариантов на пикрил будет быстрее? Насколько дорого обходится желание "прыгнуть" в определённый участок кода?
Аноним 27/06/17 Втр 20:18:54  1012584
>>1012570
goto бесплатный (превращается в jmp). Переменную компилятор скорее всего оптимизирует в тот же jmp (но без гарантий). Код с пика можно переписать без goto и переменной: при совпадении нужные действия и возврат, а при выходе из цикла у нас ничего не нашлось.
Аноним 27/06/17 Втр 20:19:57  1012586
>>1012584
А, ну да, можно просто i=n и j=m присвоить, тогда циклы загнутся. Спасибо
Аноним 27/06/17 Втр 20:22:18  1012590
>>1012586
Нет, присваивать не нужно, тогда уж лучше перемеменная. Я имел в виду
for (...) {
for (...) {
if (...) {
// found
...
return;
}
}
}
// not found.
return;
Аноним 27/06/17 Втр 20:46:59  1012605
>>1012523
Спасибо. Энивей, это была лишь заготовка, и всякие проверки прикручены.
Аноним 29/06/17 Чтв 08:01:07  1013282
Повторно вкатываюсь в программирование, в школе учил поцкаль (боже, как давно это было), два года назад ещё помнил как накодить калькулятор на Python, но за прошедшее время нещадно отупел и огуманитарился.
Спросил у бро-программиста (не российского), каким, на его взгляд, должен быть стартовый язык, потому что возврат к Python мне сейчас не кажется очень хорошей идеей, а на двачах в основном советуют JS. Бро процитировал мне Дийкстру про Basic, уточнил, что это более чем относится и к JS'у, поэтому, для общей подтяжки алгоритмики и более глубокого понимания происходящего, он советует стартануть с C, как когда-то делал он.
Собственно, вопрос. Как думаете, стоит ли действительно вкатываться с Pure C, или это не самая лучшая идея при наличии на другие языки огромного количества всяких человеко-ориентированных обучалок для энтри-левела?
(бро, впрочем, расценивает Java как неплохой энтри-язык, с поправкой на то, что именно С быстрее всего сломает мне старые шаблоны и заставит мыслить как программист, а не codemonkey)
Аноним 29/06/17 Чтв 08:16:48  1013283
>>1013282
Всякие речи про ломание шаблонов это хуйня полная, язык программирования это средство, учи что хочешь, что нужно будет на первой работе, что понравилось, пробуй разные языки, а потом если захочешь, то почитаешь про архитектуры и прочую лабуду, без которой 99% кодмакак живут и радуются жизни.
Аноним 29/06/17 Чтв 10:54:15  1013324
>>1013282
Начни с Си, хорошенько поебись с низкоуровневыми фичами и указателями, потом спокойно иди на питон и изучай всё остальное, включая ооп и алгоритмы. Ты слабо представляешь, какая беда у средних программистов с пониманием указателей.

После основ этих двух будешь готов к любому языку, а на Js ты будешь больше ебаться с несовершенствами Js, что тебе совсем не нужно, как новичку. Java тоже неплохо, но Питон меньше всего отвлекает от высокоуровневой сути.
Аноним 29/06/17 Чтв 12:15:36  1013349
>>1013282
Python - это такой современный Бейсик, с более широкими возможностями (ООП, ФП и т.д.). Он легок для вкатывания, но калечит мышление.
Начинать нужно с языка, который даст тебе представление об устройстве компьютера.
И это - только Си. Раньше еще был Паскаль, но он умер, а дедушка Вирт впал в маразм и несет какую-то ахинею (последним нормальным языком от него был Модула-2, наработки из которого вошли в Turbo Pascal и Delphi).
Аноним 29/06/17 Чтв 12:22:54  1013352
>>1013324
> Java тоже неплохо
Java и C# ни в коем случае не годятся для первого языка, ибо совмещают сложность C/C++ (статика и т.д.) с высокоуровневостью (тормоза, песочница и т.д.) JS/Python/Ruby/PHP/Perl.
Для многих прикладных задач эти языки удобны, но начинать нужно с других, лучше с Си.
Аноним 29/06/17 Чтв 15:05:54  1013439
>>1013349
>Раньше еще был Паскаль
пускаль всегда был говном, от := ажтриясет
Аноним 29/06/17 Чтв 15:09:04  1013440
>>1013439
ссы всегда был говном, от = и ++ внутри выражений ажтриясет
Аноним 29/06/17 Чтв 15:33:07  1013457
Прочитал полностью первую главу K&R, появилось желание по заниматься практикой. Открыл первый же рандомный задачник с простенькими задачками и понял, что ничего кроме getchar() не знаю. Что посоветуете почитать про встроенные и сторонние функции в Си?
Аноним 29/06/17 Чтв 15:35:53  1013461
>>1013457
Герберт Шилдт. Полный справочник по C
Аноним 29/06/17 Чтв 15:40:56  1013467
>>1013440
обоссал дауна
Аноним 29/06/17 Чтв 15:54:57  1013478
>>1013467
Себя что ли?
Аноним 29/06/17 Чтв 16:30:27  1013532
>>1013478
кек но даун это ты даун
Аноним 29/06/17 Чтв 16:38:55  1013544
>>1013532
Зачем ты разговариваешь с зеркалом?
Аноним 29/06/17 Чтв 22:31:44  1013778
>>1013457
Придумай задачу, например калькулятор или интерпретатор brainfuck, и реализуй. Потом читай больше об этом и узнаешь о других способах того же самого действия.
Аноним 30/06/17 Птн 12:56:41  1014036
Image 001.png (92Кб, 749x249)
Можно где-нибудь поподробнее про побитовые операции (с основами) в C?
А то я это пропустил, а сейчас думаю, что зря.
Читаю пикрил и...
> x & ~077
Почему 077? Не зависит от длины слова? Длины слова?
> Запись x & ~077 лучше, чем x & 0177700
>...
Короче, нужны совсем основы побитовых операций
Аноним 30/06/17 Птн 13:01:51  1014040
>>1014036
Чот хуйня, первый раз вижу ~ в C
Аноним 30/06/17 Птн 13:03:12  1014043
>>1014036
> Почему 077
Восьмеричная система, 077 = 63 = (1 << 6) - 1, т.е., ставим 6 младших битов в 1.

> Не зависит от длины слова? Длины слова?
sizeof(int). Не зависит потому, что слева от наших 6 единичек может быть сколько угодно нулевых бит, и ~ успешно их все инвертирует.

За булевой логикой в вики. Начни с двоичной системы и обратного дополнительного кода.
Аноним 30/06/17 Птн 13:18:39  1014055
41KHlIadcWL.SX3[...].jpg (25Кб, 308x499)
978-5-8459-1838[...].jpg (109Кб, 341x500)
>>1014036
Читай Библию.
Есть в русском переводе.
Аноним 30/06/17 Птн 13:38:49  1014065
Screenshot46.png (21Кб, 617x400)
двач я сглупил 3 месяца стоит gcc(mingw)сегодня аетивирус
написал что G++.exe подозрителен ну я такой ну ладно исправлю думал ничего не будет и теперь cmd видит gcc но не видит команду g++ что делать?


idp generic

не дает переустановить
выдает это
Аноним 30/06/17 Птн 13:40:35  1014066
>>1014065
В карантине, скорее всего, g++.
Через менеджер карантина антивируса восстанови g++, потом настрой антивирус так, чтобы он вообще не трогал папку с твоими поделиями и папку с mingw.
Аноним 30/06/17 Птн 13:43:02  1014068
>>1014065
Я не люблю это писать, но вон из профессии. Если уж ты с антивирусом справиться не можешь, и не знаешь, как решить access denied в системе, зачем ты ползешь ее программировать? Начни с простого - разберись в ОС как юзер.
Аноним 30/06/17 Птн 13:45:13  1014069
>>1014068
Нафиг оценивать скиллы в сишке по умению совладать с шиндой, если шинда вообще не показатель ни для кого?
Аноним 30/06/17 Птн 13:45:15  1014070
>>1014066
понятно дело но его там нет он там
был но я его удалил
Аноним 30/06/17 Птн 14:18:10  1014085
>>1014068
>разберись в ОС
Ты не отличаешь программиста от тыжпрограммиста?
Аноним 01/07/17 Суб 01:35:58  1014433
>>1014085
Чтобы писать код для ОС, нужно представлять, как она работает. Если ты представляешь, как она работает, ты знаешь, отчего бывает access denied. Если нет - стоит выбрать какой-нибудь жаваскрипт, в котором взаимодействовать с ОС не нужно.
Только спокойствие Аноним 01/07/17 Суб 12:42:51  1014514
Image 001.png (15Кб, 720x394)
Упр. 4.14 K&R, ужасно непонятное.
> Определите swap(t,x,y) в виде макроса, который
осуществляет обмен значениями указанного типа t между аргументами
х и у. (Примените блочную структуру.)
В интернете либо решения с использованием следующих глав, либо решено только для случая int.
https://pastebin.com/jrTjfqg4
Там вообще бредятина ужасная, скорее всего, но просто со слов K&R о макроподстановках я так и понял.
Аноним 01/07/17 Суб 13:16:48  1014531
>>1014514
Кое-что исправил, ругается, когда встречает строку
> for (i=0; i<sizeof(x); TEMP=x, x=y, y=TEMP, i++); \
error: subscripted value is neither array nor pointer nor vector
for (i=0; i<sizeof(x); TEMP=x, x=y, y=TEMP, i++);\ ^
https://pastebin.com/KBkDme2T
Аноним 01/07/17 Суб 20:59:36  1014832
>>1014514
От тебя ожидалось всего лишь что-то типа:
#define yoba_swap(type, foo, bar) do { \
type temp = foo; \
foo = bar; \
bar = temp; \
} while (0)
Естественно, для массивов не сработает, но для всего остального - вполне. Суть макросов в том, что все выполняется на этапе компиляции, поэтому твое решение со сравненим строк в рантайме ничем не оправдано. Нет, ну можно конечно с VLA из C99 замутить обмен чего угодно:
http://ideone.com/kmidbZ хотя это извращение, и код далек от оптимального.


>>1014531
Во-первых, у тебя условие неправильное. Ты пишешь: если t совпадает со строкой "int", и t совпадает со строкой "double" strcmp возвращает 0 при совпадении, не говоря уже о том, что t не может быть двумя разными строками одновременно, и размеры объектов равны а вот нифига, препроцессор тебе развернет SIZEX в sizeof(x), но аргумент туда уже не подставит, т.е., что бы ты не передал в swap, на выходе всегда будет sizeof(x), то...
Во-вторых, объекты, которые обмениваются значениями, могут не быть массивами, и в этом случае твой цикл слегка не в тему, что собственно у тебя и происходит.

> char s[]={'i','n','t'};
Значение знаешь?
Аноним 01/07/17 Суб 21:05:54  1014838
>>1014832
Спасибо, довольно подробно.
> Значение знаешь?
Ну, если char s[]="int", то char s[]={'i','n','t','\0'}.
А зачем do {...}while(0) ?
Выглядит просто как причина открыть фигурные скобки, ибо по-любому выполнится один раз.
Но зачем?

Аноним 01/07/17 Суб 21:14:57  1014845
>>1014838
do {} while (0) - это минимальный statement, после которого можно воткнуть ; без последствий:
#define YOBA(a, b, c) { что-то там }
if (expr)
YOBA(1, 2, 3);
else
YOBA(4, 5, 6);
После препроцессирования получаем:
if (expr)
{ что-то там };
else
{ что-то там };
И компилятор недоумевает, а откуда взялся else, ведь перед ; if с его точки зрения уже кончился. В свою очередь после while точка с запятой к месту, и ничего не ломает.

> Ну, если char s[]="int", то char s[]={'i','n','t','\0'}.
Отлично, но зачем?
Аноним 01/07/17 Суб 21:28:16  1014851
>>1014845
> Отлично, но зачем?
Сейчас уже нет смысла об этом говорить, я совсем по-другому себе всё это представлял.
Ну и не проще ли просто не ставить ; при вызове макроподстановок? Так можно заодно и отличать их от вызовов функций
Аноним 01/07/17 Суб 21:51:10  1014859
>>1014851
1) Макрос #define SMTH(x) ((x) + 3) и вызов printf("%d\n", SMTH(1) / 2). Если тут точку с запятой поставить в макросе, сломается вызов.
2) Часто макросами заменяют короткие функции, иногда даже в одном проекте одно имя может быть функцией или макросом, в зависимости от настроек проекта и платформы (тот же getchar() в стандартной либе очень часто макрос), т.е., чтобы узнать, ставить ли точку с запятой, тебе нужно понять, вызываешь ли ты функцию или макрос (сам вызов-то выглядит одинаково). Т.е., тебе нужно запоминать это для каждого имени или каждый раз ходить смотреть.
3) Читается хуже, пидорасит подсветку в IDE.
Поэтому проще всего оставить обычные подстановки для #ifdef и констант (типа #define M_PI 4.0), а все остальное делать function-like макросами, и не ставить в них финальную точку с запятой. Этот подход вызывает наименьшее количество путаницы.
Аноним 02/07/17 Вск 00:45:17  1014911
Мне вот интересно, а вы, случайно, про юникод не слышали?
Аноним 02/07/17 Вск 00:59:59  1014913
>>1014911
Слышали. Есть вопросы - задавайте.
Аноним 02/07/17 Вск 01:10:29  1014916
>>1014913
Ну, тут такое дело. Хочу написать приложение. С локализацией. В чем бы мне хранить все эти китайские иероглифы вместе с арабской вязью? В char-то не влезают.
Аноним 02/07/17 Вск 01:12:36  1014917
>>1014916
Влезут в массив.
Аноним 02/07/17 Вск 01:16:16  1014918
>>1014917
А как мне потом по этому массиву понять, сколько же там всего символов? Ну или, скажем, как получить n-ый символ?
Аноним 02/07/17 Вск 01:16:28  1014919
>>1014916
Мало редактируешь текст - UTF-8, много редактируешь текст хранишь в UTF-8, а обрабатываешь в UTF-32. C wchar_t осторожнее.
Аноним 02/07/17 Вск 01:20:43  1014922
>>1014918
Сколько символов в строке "ó"? А в строке "ó"? А третий с нуля символ в строке "​​​​​​​​​xyz" какой?
Аноним 02/07/17 Вск 01:22:00  1014924
>>1014922
Один. Два байта.
Аноним 02/07/17 Вск 01:25:37  1014927
>>1014922
Мне там макака свинью подложила. В первом случае была o с акцентом, во втором символы o и акцент. В третьем все еще веселее, он даже у макаки работает.
Аноним 02/07/17 Вск 01:47:13  1014934
>>1014922
Это еще фигня, вот корейский Хангыль - это вообще жопа.
괜찮아
Аноним 02/07/17 Вск 01:52:25  1014937
>>1014927
Не акцентом, а ударением.
Аноним 02/07/17 Вск 01:58:11  1014938
>>1014937
Принципиальной разницы нет. Ты еще к символами прицепись и расскажи про глифы и кодовые позиции.
Аноним 02/07/17 Вск 15:15:54  1015075
>>1014934
>괜찮아


Бля, хорошо, что я пхп-макакака. Тут же столько БОЛИ.
Аноним 06/07/17 Чтв 03:23:26  1017263
Нуб скромно шагнул в тред.

Почему запись (✻s++ = *t++) сдвигает указатель на 1, а не увеличивает на 1 то, на что он указывает?
Аноним 06/07/17 Чтв 03:34:19  1017267
>>1017263
Прошу прощения, нашёл ответ в faq, надо почаще туда смотреть, лол.
Аноним 06/07/17 Чтв 03:39:51  1017271
>>1014922
> А третий с нуля символ в строке "​​​​​​​​​xyz" какой?
NULL?
Аноним 06/07/17 Чтв 19:12:23  1017570
>>1017271
Дважды не угадал. Во-первых, NULL в сишечке - это ((void *) 0), а ты, наверное, имел в виду то, что в ASCII называется NUL, он же '\0'. Во-вторых, разговор был о юникоде, поэтому тебе стоило скопировать ту строчку куда-нибудь и разобрать по байтикам. Там несколько пробелов нулевой ширины перед буквами.
Аноним 06/07/17 Чтв 21:00:05  1017627
>>1014919
OMG, а utf больше 8 где-то используют? И что с ними?
Аноним 06/07/17 Чтв 22:08:53  1017684
>>1017627
UTF-8 хорош для передачи и хранения. В винде нативный апи - UTF-16. С UTF-16 слегка проще/быстрее работать, меньше проблем с невалидными последовательностями, но все равно остаются суррогатные пары, о которых нужно помнить, ну и порядок байт еще (поэтому лучше UTF-16 оставить для обработки, а передавать UTF-8). А так как памяти сейчас дохуя, то некоторые используют сразу UTF-32, чтобы устранить даже минимальную еблю на этапе обработки, ну и 11 бит еще на всякие флаги остаются, тоже удобно иногда.
Аноним 06/07/17 Чтв 22:13:07  1017687
>>1017684
Для обработки есть однобайтовые кодировки.
Аноним 06/07/17 Чтв 22:15:16  1017688
>>1017687
Лолшто? Ты разбиваешь текст на слова и хранишь каждое слово в своей кодировке? Или как?
Аноним 06/07/17 Чтв 22:17:30  1017691
>>1017688
Ты чё ёбнутый? Берёшь и работаешь с буквами в каком-нибудь кои8-р.
Аноним 06/07/17 Чтв 22:59:00  1017736
>>1017688
А почему не придумать какой-то способ переключения кодировок неявный? Там какой-то идентификатор и переключающий символ.
Аноним 06/07/17 Чтв 23:17:22  1017756
>>1017736
Потому что проблем гораздо больше, чем даже с UTF-8. Простейший пример: ты отрезал 3 первых символа строки, в том числе переключающий символ. В какой кодировке строка? Когда я был молодой и глупый я тоже такое изобретал. При попытке практического использования все проблемы-то и вылезли.
Аноним 07/07/17 Птн 18:38:13  1018145
struct {
FILE fp;
int eof=0;
char
scur;
int snum=0;
} file[MAXFILES];
Во всём массиве будет file.eof==0 ?И можно будет менять это значение?

Аноним 07/07/17 Птн 18:47:10  1018151
>>1018145
В Си такого синтаксиса (= 0 в определении структуры) нет, можешь сделать struct { ... } file[MAXFILES] = { 0 }, и тогда во всем массиве будут нули (компилятор скорее всего memset воткнет явно или инлайном). И да, значение можно будет менять, конечно же.
Аноним 07/07/17 Птн 18:49:01  1018153
>>1018151
А , т.е. он сам тип определит, а если {0, 0}, то он воткнёт 0 и snum, и eof.
А если {NULL ,0, NULL, 0}, то и указателям, да?
Аноним 07/07/17 Птн 19:03:28  1018166
>>1018153
Нет. { 0 } - это по сути короткая запись для { [0] = { .fp = 0 } } (т.е., первому элементу массива, первому элементу структуры присвоить ноль), но частично структуры инициализировать нельзя, поэтому компилятор забьет все оставшиеся элементы массива и члены структур нулями тоже. { 1, 2 } - присвоит значения первым первым двум членам первого элемента массива, остальное забьет нулями.

> А если {NULL ,0, NULL, 0}, то и указателям, да?
Так ты не сделаешь, нет такой выборочной инициализации элементов массива или структуры, да еще и с пропусками. Можно явно:
{ [0] = { .eof = 0, .snum = 0 }, [1] = {.eof = 0, .snum = 0 }, итд }, но это бессмысленно, потому что компилятор все равно забьет все остальное нулями.

Хочешь инициализировать именно eof и snum, и ничего больше - делай явно:
for (...) { files[ i ].eof = 0; files[ i ].snum = 0; }
но выиграешь только на больших массивах. Если у тебя порядка пары килобайт, инициализация всего массива разом = { 0 } или мемсетом будет быстрее.
Аноним 07/07/17 Птн 22:31:35  1018311
>>992632 (OP)
Вот в шапке много всяких книг, но в них только в них синтаксис языка объясняют. Как практиковаться, может есть список проектов с возрастающей сложностью. Вот хочу написать что нибудь, а что писать и как не знаю. Не могут изучать язык по книгам. Нужны реальные задачи. Где взять реальные задачи анончики?
Аноним 07/07/17 Птн 22:34:22  1018315
>>1018311
Тоесть помогать каким-то проектам или пилить свои?
Аноним 07/07/17 Птн 22:35:57  1018317
>>1018311
Прочитай книгу с синтаксисом. Не зная синтаксиса идти что-то реализовывать глупо.
> как практиковаться
Расскажи, зачем ты учишь язык? Какая область тебе интересна?
Аноним 07/07/17 Птн 22:47:18  1018327
>>1018317
Даже уже комом в горле этот синтаксис. Мне интересно программирование начиная от процессора и заканчивая сетью. Изучал разные языки и понял, что мне мешает эта прослойка между ними ОС и процессором. Хочу понять что на низком уровне. Как транслируются программы, в частности те же языки программирования. Как работают компиляторы, как работает параллелизм на уровне ОС, на уровне процессора, на уровне компиляторов-интерпретаторов. Как реализуются сетевые протоколы.

Проблема в том, что без практики у меня не усваивается, а такие глубокие темы в основном описываются теоретически, либо вообще нет информации.
Аноним 07/07/17 Птн 22:57:43  1018337
>>1018327
Что бы ты хотел написать годного?
Аноним 07/07/17 Птн 23:01:55  1018346
1467935270957.png (301Кб, 1920x1080)
>>1018327
> заканчивая сетью
Ну вот и напиши DHT-клиент для Kademlia. Сложно, заебешься (придется узнать о TCP/IP, придется узнать про сокеты, придется парсер bencode написать, про структуры данных узнать какие-нибудь, архитектура, обработка ошибок, вот это все), хотя сам принцип прост.

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

> такие глубокие темы в основном описываются теоретически, либо вообще нет информации
Овердохуя информации, если можешь в английский. Вплоть до видеотуториалов на ютубе.

Алсо, пикрелейтед.
Аноним 07/07/17 Птн 23:05:57  1018353
>>1018346
А я на 77-ом уровне.
Аноним 07/07/17 Птн 23:07:03  1018355
>>1018346
ролл
Аноним 07/07/17 Птн 23:07:44  1018358
>>1018355
ха, а я думал это уровни.
Аноним 07/07/17 Птн 23:18:08  1018375
ролл
Аноним 07/07/17 Птн 23:21:38  1018381
>>1018337
Компилятор, интерпретатор, свой сетевой стек...
Аноним 07/07/17 Птн 23:23:59  1018383
>>1018381
Напиши интерпретатор брейнфака. Сместо стека (для циклов) я использую массив int и int с порядковым номером.
Аноним 07/07/17 Птн 23:24:27  1018384
>>1018346
Спасибки. Эти челленджи с warosu.org? Нагуглил v2-v3 кроме v1.4 того что на твоей пикче.
Аноним 08/07/17 Суб 10:48:22  1018540
Программа линкрил
https://pastebin.com/SL2hZhRD
должна в теории сравнивать некоторое кол-во файлов, если находит различие в определённой строке (в т.ч. если один из файлов уже кончился), то выводит сообщение с номером строки и выводит строки с этим номером.
Но если ей подсунуть два одинаковых файла, то функция fstobuf (очередная строка файла в буфер, возвращает указатель на строку в буфере) каким-то образом добавит 13-ый символ (возврат каретки, щито?!) в каждую строку, а функция strcmp, получив (в теории) одинаковые строки, выдаст единицу, хотя выглядит она (strcmp) довольно просто, должна возвращать ноль, если строки одинаковы.
Ужос.

Аноним 08/07/17 Суб 11:03:21  1018544
Вопросик такой. Решил упростить свой Сишный код няшными функциями новой гомоС++.

Будет ли auto в данном коде работать как var? Функция вызываемая мной возвращает NTSTATUS, по идее я хочу чтоб _status после вызова стал типом NTSTATUS и мне не пришлось обьявлять для этого дополнительную переменную.

Вот код :

https://pastebin.com/vEqu6beF
Аноним 08/07/17 Суб 11:14:07  1018549
>>1018540
Дошло.
Аноним 08/07/17 Суб 12:07:28  1018566
Простите за плюсовой код, но вопрос больше касается именно C-корней.
Часто говорят, что выделение двумерного массива в С/С++ плохое, потому что в памяти всё лежит по столбцам, а не по строкам, а вот в фортране всё хорошо, там всё построчно и поэтому можно быстро бегать по двумерному массиву.

Я набросал этот код и запустил его в DevC++ с MinGW:

#include <iostream>

/ run this program using the console pauser or add your own getch, system("pause") or input loop /

#define MD 4

int main(int argc, char argv) {
int a[MD][MD];
for(int i = 0; i< MD; i++)
{
for (int j = 0; j < MD; j++)
{
a[j] = i100+j;
}
}
void
b = a;
for(int i = 0;i<MDMD; i++)
{
std::cout << (b+=sizeof(int)) << " " <<
((int*)b) << std::endl;

}

return 0;
}

На выходе у меня

0x28fe64 0
0x28fe68 1
0x28fe6c 2
0x28fe70 3
0x28fe74 100
0x28fe78 101
0x28fe7c 102
0x28fe80 103
0x28fe84 200
0x28fe88 201
0x28fe8c 202
0x28fe90 203
0x28fe94 300
0x28fe98 301
0x28fe9c 302
0x28fea0 303

--------------------------------
Process exited after 0.2274 seconds with return value 0
Press any key to continue . . .


Т.е. всё лежит именно построчно.
Что я делаю не так?
Аноним 08/07/17 Суб 12:08:34  1018568
>>1018566
Парсер двоща — шлюха, экранировал отступы
Аноним 08/07/17 Суб 13:34:37  1018608
>>1018358
Ну,список странный тогда выходит. Ведь как сначала написать научный калькулятор не умея писать даже с обратной польской нотацией?
Аноним 08/07/17 Суб 14:30:59  1018652
>>1018608
А вот телнет сервер мне был бы очень нужен.
Аноним 08/07/17 Суб 15:38:56  1018682
Здравствуйте. У меня вопрос довольно абстрактного характера. В общем, насколько приемлемо и в каких случаях приемлемо библиотечной функции прерывать выполнение программы? Т.е. выполнять всё, что нужно, ничего не возвращать, а просто вызывать exit(). Я не беру в расчёт всякие ассерты, и вообще обработку исключительных ситуаций. Просто библиотечная функция, в документации которой прямо указывается, что после её вызова, программа прекратит выполнение.
Аноним 08/07/17 Суб 15:54:44  1018702
>>1018682
да
Аноним 08/07/17 Суб 16:00:04  1018705
>>1018702
большое спасибо за развёрнутый ответ
Аноним 08/07/17 Суб 16:11:40  1018709
>>1018682
Если не вредит программе и остаётся читабельной код - вполне да. Но лучше заменять exit ретурном.
Аноним 08/07/17 Суб 16:14:22  1018711
Screenshot47.png (30Кб, 971x601)
двач что за хуйня
в карантине файла нет
>>1014070 и >>1014065 кун
Аноним 08/07/17 Суб 16:21:30  1018716
Двач, чем процедурное программирование отличается от структурного?
Аноним 08/07/17 Суб 16:48:49  1018726
>>1018711
>math.h вместо cmath
>это форматирование кода
>эти отступы, которых нет
Аноним 08/07/17 Суб 16:54:37  1018734
>>1018726
код сделан а редакторе нотепад
>math.h вместо cmath
разница какая тем более для лабы
Аноним 08/07/17 Суб 17:12:34  1018741
>>1018734
> разница какая
завтра потом выростайэт макака. ТЫ ЧО ПИРИМЕННУЮ VAR1 И VAR2 ВСЕ ПОЙМУТ ПРЕДНАЗНАЧЕНИЕ. ЗАСЕМ ОТСТУПЫ КОММЕНТАРИИ ЧИТАБЕЛЬНОСТЬ???ЮЮ НИНУНЖА
Аноним 08/07/17 Суб 17:27:19  1018743
>>1018741
>12 строк
>нечитабельный
да ты поехавший
Аноним 08/07/17 Суб 17:35:05  1018747
>>1018327
Пили файловый менеджер. Ему фичи допиливать можно будет бесконечно: FTP, вьювер картинок, архиватор, mounter, встроенный терминал, API для плагинов на каком-нибудь скриптовом языке, и т.д. и т.п.
Аноним 08/07/17 Суб 17:35:59  1018748
>>1018711
А си тут при чем?
Аноним 08/07/17 Суб 18:25:16  1018790
>>1018748
какая разница что .с что .срр
не коипилится
Аноним 08/07/17 Суб 18:28:42  1018793
>>1018790
Ну смотри, давай я тебе объясню.

С++ — говно сраное, этот язык давно должен был умереть и кануть в Лету.

С — лучший язык современности, он популярен, прост, быстр. Что ещё нужно от языка?
Аноним 08/07/17 Суб 18:32:29  1018794
>>1018790
А ты осмысли своей тупой башкой, что тебе пишут в ошибке.
Аноним 08/07/17 Суб 18:43:00  1018799
>>1018747
Ok
Аноним 08/07/17 Суб 19:06:02  1018818
>>1018793
я тебя не про язык спрашиваю а про коомпилятор
у меня файл что сишная что С++ не компилится
Аноним 08/07/17 Суб 20:47:32  1018884
>>1018818
install gentoo
Аноним 08/07/17 Суб 20:51:28  1018885
>>1018743
На начальном этапе в любом случае надо вводить в привычку писать хороший код.
Аноним 08/07/17 Суб 21:32:46  1018909
>>1018566
Двумерных массивов в сишечке нет. Какой-нибудь array[n][m] - это по сути массив размером n, в котором каждый элемент - массив размером m. Соответственно, тебе нужно просто помнить, что "измерения" лежат последовательно, начиная с самого правого. array[y][x] будет лежать построчно, а вот array[x][y] - по столбцам.

>>1018608
От научного калькулятора в первую очередь требуются математические функции. Добавить приоритеты вычислений можно при последовательном вводе, RPN не нужна. Пример - виндовый калькулятор до десятки.

> В общем, насколько приемлемо и в каких случаях приемлемо библиотечной функции прерывать выполнение программы?
Только если библиотечная функция явно предназначена для прерывания выполнения программы. Иначе неприемлемо. Возвращай ошибки, даже если API станет менее красивым. Алсо, лично я не считаю нужным обрабатывать ошибки при выделении памяти в обычном, не серверном софте, поэтому у меня обертка над маллоком с exit(), но это единственное исключение.

>>1018711
> что за хуйня
Смотри сюда, собирай информацию: >>1010153 А телепаты в отпуске, лето же.
Аноним 08/07/17 Суб 21:33:53  1018911
>>1018682
>>1018909
Аноним 08/07/17 Суб 21:42:33  1018927
>>1018909
Хуй знает, стековый калькулятор запилить как нехуй, а распарсить строку с скобочками, которые меняют приоритеты операций - так и не осилил.
Аноним 08/07/17 Суб 21:48:10  1018929
>>1018927
Ыыы, сколько я говна в блокнотик излил, пытаясь распарсить скобочки.
https://pastebin.com/Nehizuti
Аноним 08/07/17 Суб 22:58:22  1018972
>>1018793
>С++ — говно сраное
Понадобятся классы - прибежишь и начнешь жрать это говно, еще спасибо скажешь, что тебя им накормили.
Аноним 08/07/17 Суб 23:02:57  1018976
>>1018972
Наааахуй эти ваши классы. Если реально надо, то эта задача требует нормального выскоуровнего языка - жаба, питон, хуйтон или что там щас модно.
Аноним 08/07/17 Суб 23:08:19  1018979
>>1018976
А если задача требует высокой производительности, которой не достичь джавой и питоном?
Аноним 08/07/17 Суб 23:36:09  1018993
>>1018979
JNI, экстеншены для питона. На сишечке.
Аноним 09/07/17 Вск 00:05:52  1019015
>>1018979
Разрабатывать программы на C с меньшей эффективностью. Поверь, говнокод васи пупкина на ц++ куда медленнее, чем грамотный код специалиста по java на java.
Аноним 09/07/17 Вск 00:20:23  1019026
>>1019015
>говнокод васи пупкина на ц++ куда медленнее, чем грамотный код специалиста по java на java.
Но быстрее говнокода на Java. А грамотный код специалиста по C++ на C++ быстрее, чем грамотный код специалиста по java на java.
Аноним 09/07/17 Вск 00:34:45  1019029
>>1019026
Java предназначен для грамотной разработки. Тем более, найти специалиста по java куда проще чем по c++, если они вообще есть.
Аноним 09/07/17 Вск 01:02:13  1019040
>>1019026
Джава по скорости почти не уступает крестам, в некоторых случаях даже быстрее. Про скорость разработки и говорить нечего.
Аноним 09/07/17 Вск 01:14:04  1019042
>>1019026
> Но быстрее говнокода на Java.
С нулевой обоссу. Наглый пиздец.

Говнокод Васи Пупкина на крестах будет течь памятью и просто медленно работать потому что Пупкин ебоклак. А говнокод Сюткина течь не будет и будет работать быстрее за счет того, что у Пупкина есть только собственный говнокод, а у Сюткина десятилетиями оптимизируемый JVM.

Только, блять, не надо сюда совать бенчмарки уровня "короч вот тут я запускаю числодробилку и измеряю время старта приложения и время остановки приложения".

В общем, подумой почему на крестах пишутся всякие игори и движки на них, плюс реально специализированное говно, а весь кровавый тырпрайз и хуйлоад на JVM-языках.
Аноним 09/07/17 Вск 01:14:22  1019044
>>1019042
> Наглый пиздеж*
Аноним 09/07/17 Вск 01:18:18  1019047
>>1019042
> java не течёт!
Раздался пронзительный голос со стороны параши.
Аноним 09/07/17 Вск 01:26:48  1019052
>>1019042
>десятилетиями оптимизируемый JVM
Там десятилетия говнокода и архитектурной астронавтики. Достаточно сравнить любую программу на Qt и Swing, чтобы убедиться, что свинг - тормозное overengineered говно, как и большинство кода на джаве.
Аноним 09/07/17 Вск 01:30:36  1019054
>>1019040
>Джава по скорости почти не уступает крестам
Как она может по скороси не уступать, если у любой коллекции там оверхеды в 5 раз по памяти из-за жирных пойнтеров и в десятки раз по скорости из-за отсутсвия value-типов и убивающего кэш пойнтер-чейза.
Аноним 09/07/17 Вск 02:11:11  1019063
>>1018909
> Только если библиотечная функция явно предназначена для прерывания выполнения программы.
Я так понимаю, под это подходит только один exit()?
Аноним 09/07/17 Вск 02:15:22  1019065
>>1019054
Вася и Петя пилят сервер к месседжелу (мессенджеру).
На второй день, пока Петя в джаве пишет конференции, Вася на крестах велосипедирует парсер json, так как другие реализации слишком кривые. Саше вообще класть, на Ц всё давным давно написано и отлажено.
Аноним 09/07/17 Вск 02:15:58  1019066
>>1019063
Возможно не один, но да.
Аноним 09/07/17 Вск 02:39:33  1019070
>>1019042
>В общем, подумой почему на крестах пишутся всякие игори и движки на них, плюс реально специализированное говно, а весь кровавый тырпрайз и хуйлоад на JVM-языках.
ентерпрайз пишут на явке (и на шарпе) потому что там есть горячая загрузка кода - ты можешь подгрузить классы
а в крестах этого нет, так как нет стандартизированного abi, приходится поэтому пользоваться старыми сишными соглашениями и городить поверх них компонентные обертки типа com
Аноним 09/07/17 Вск 02:50:42  1019080
>>1018909
>Двумерных массивов в сишечке нет. Какой-нибудь array[n][m] - это по сути массив размером n, в котором каждый элемент - массив размером m. Соответственно, тебе нужно просто помнить, что "измерения" лежат последовательно, начиная с самого правого. array[y][x] будет лежать построчно, а вот array[x][y] - по столбцам.

В примере у меня получилось, что array[y][x] лежит построчно в виде сплошного массива array[x*y]. При этом всё время слышу о каком-то сверхправильном расположении массивов в фортране, из-за чего он чуть быстрее.
Аноним 09/07/17 Вск 02:51:51  1019081
>>1019070
Нет, пишут на джаве и шарпе потому что там нет байтоебства. В ынтерпрайзе важна надежность, в крестах память потечет, время разработки долгое.
Аноним 09/07/17 Вск 02:52:42  1019082
>>1019080
Это всё демагогия. array[x][y] вполне себе двумерный массив.
Аноним 09/07/17 Вск 02:53:51  1019083
>>1018927
Когда в дело вступают скобки, проще со стека перейти на дерево. Не прямо сразу вот на AST, но примерно как-то так — тоже строишь дерево операций и потом его обрабатываешь.
Аноним 09/07/17 Вск 03:00:15  1019086
>>1019081
В джаве память тоже течёт, но поддержка за деньги и интеграция с другими продуктами орлакли решает.
Если нет классических «у нас джава потому, что манагер срубил откат с сейла оракла», «делаем высеры под ведро», «крабую на галере для тырпрайза» — то и жабы нет, проверено.
Аноним 09/07/17 Вск 12:48:27  1019193
>>1019065
> Вася на крестах велосипедирует парсер json, так как другие реализации слишком кривые
Что за сферический JSON в вакууме? Реальные примеры есть?
Аноним 09/07/17 Вск 13:20:50  1019242
>>1019052
> Там десятилетия говнокода и архитектурной астронавтики.
Доказательств у петушка, конечно, не будет.
> Достаточно сравнить любую программу на Qt и Swing
Проиграл с долбоеба. Свинг имеет такое же отношение к JVM, что и грязь в соседнем лесу к планете Земля. Что свинг, что javafx это действительно говно и любой разработчик на JVM-языках тебе это скажет.
> большинство кода на джаве
Ты не подумол почему. Подумой почему все хуйлоады и инструменты на jvm-языках (сейчас пукнешь, что JVM на крестах написан - никто не отрицает, что кресты ненужны).
> В общем, подумой почему на крестах пишутся всякие игори и движки на них, плюс реально специализированное говно, а весь кровавый тырпрайз и хуйлоад на JVM-языках.
Разбери это предложение по частям и сделай соответствующие выводы для себя.
>>1019070
В голос. Ты правда думаешь, что в продакшене подгружают на горячую код? Ты ведь не думаешь, что хуйлоад это один большой сервер, который нельзя останавливать? Ты ведь не такой дебил?
>>1019086
> В джаве память тоже течёт
Это уже мантра байтоеба какая-то. Доказательств, конечно, не будет.
Аноним 09/07/17 Вск 14:57:33  1019416
Объясните, зачем в Си добавили массивы, если есть указатели?
Аноним 09/07/17 Вск 15:05:54  1019428
>>1019416
Проиграл.
Аноним 09/07/17 Вск 15:20:11  1019446
>>1019242
>все хуйлоады и инструменты на jvm-языках
Я мимокрокодил, мне интересно, о чём конкретно идёт речь? Чего за "хуйлоады" и "инструменты"? Мавен, штоле?
Аноним 09/07/17 Вск 15:36:55  1019477
>>1019446
Проиграл с ждауна.
Аноним 09/07/17 Вск 15:58:18  1019509
>>1019428
Если массивы это указатели, то почему в си добавили указатели, если можно было просто массивы.
Аноним 09/07/17 Вск 16:11:06  1019522
>>1019509
Ты сам понимаешь что несёшь?
Аноним 09/07/17 Вск 16:11:28  1019524
>>1019509
Вернее Ритчи мог тайно добавить в язык указатели, чтобы сделать массивы, а в стандарт не добавлять.
Аноним 09/07/17 Вск 16:11:51  1019525
>>1019522
Что я несу?
Аноним 09/07/17 Вск 16:12:37  1019526
>>1019525
У массивов и указатефлей разные задачи.
Аноним 09/07/17 Вск 16:15:51  1019529
>>1019526
С помощью указателей можно сделать массив, потому что компилятор разворачивает массив в указатель. Тогда в языке можно было бы оставить что-нибудь одно: либо массивы, либо указатели.
Убрав массивы, мы бы ничего не потеряли, т.к их можно реализовать указателями.
Убрав указатели, мы могли бы заменить их массивами, похуй, что задачи разные, все равно массив развернется в указатель, даже если указателей нет в языке.
Аноним 09/07/17 Вск 16:19:49  1019537
>>1019529
Если бы я не понял, что ты нубик, то просрался с тебя по полной.
Напиши интерпретатор brainfuck без массивов.
Аноним 09/07/17 Вск 17:01:53  1019581
Снимок.PNG (17Кб, 627x421)
Репост из крестового треда
Что за хуйня - почему код в ассемблерной вставке работает, а в цикле while вываливается с исключением - нет прав на чтение (типа лох расчехляй VirtualProtect).
Ах да, inb4 используй (DWORD)GetModuleHandleA(NULL) - нет, мне нужно именно вручную находить image_base, не спрашивайте почему.
Аноним 09/07/17 Вск 17:05:24  1019584
>>1019581
(WORD)IMAGE_BASE
не?
Аноним 09/07/17 Вск 17:07:54  1019587
>>1019584
Не, у меня же там адрес, а переменная - не указатель. Значит нужно кастануть к указателю, а потом получить значение, находящееся по адресу. А адрес - DWORD.
Аноним 09/07/17 Вск 17:09:28  1019589
>>1019587
Ну а значение - WORD.
А так циклиться будет, пока 16..31 биты нулевыми не окажутся по указателю, ведь сравниваешь с 0x00005A4D.
Аноним 09/07/17 Вск 17:13:14  1019592
>>1019589
Ето C++, там при компиляции в x86 константы - int. Да и дело даже не в том, что там найтись не может результат, а в том, что при одинаковых командах, написанных по разному, в одном случае всё работает, а в другом - доступ запрещен.
Аноним 09/07/17 Вск 17:24:34  1019598
>>1019592
тебе и объясняют, что код не одинаковый: в асме 16-битное сравнение, а в си 32-битное.
открыл бы асм- код на выходе конпелятора да посмотрел бы давно
Аноним 09/07/17 Вск 17:27:50  1019599
>>1019598
Погоди, а какая разница? В асме все равно через оператор ptr берется значение, находящееся под адресом, хранящемся в переменной DWORD, а затем кастуется в word. В С - нет каста. Так или иначе, и там и там берется значение по адресу DWORD, и каст к WORD именно в этом моменте ни на что не влияет. Или я не прав?
Аноним 09/07/17 Вск 17:31:14  1019602
>>1019599
каст к word обнуляет два старших байта
Аноним 09/07/17 Вск 18:54:22  1019674
>>1019416
чтобы можно было удобно манипулировать с куском непрерывной памяти, выделенной на стеке или в глобальной памяти посредством индексного доступа
поэтому ритчи и сделал встроенный тип данных "массив"
Аноним 09/07/17 Вск 18:58:35  1019676
>>1019674
полезно вообще массивы рассматривать как возможность выделить кусок памяти на стеке или в глобальной области
причем следует также знать что в си нет никаких способов работы с кучей, а malloc/free всего лишь интерфейсы к соответствующим системным вызовам
Аноним 09/07/17 Вск 19:21:34  1019690
>>1019676

Скорее всего на windows это врапперы над RtlAllocateHeap/HeapFree. Все это делает CRT.
Аноним 09/07/17 Вск 19:32:16  1019702
Зачем нужны указатели на указатели и даже о, ужас, указатели на указатели на указатели и дальше по глубине?
Аноним 09/07/17 Вск 19:41:38  1019714
>>1019702
Это просто фича языка. Ничего не нужно было делать для поддержки создания указателя на указатель, а вот чтобы запретить - нужно было бы при написании компилятора это запрещать.
Аноним 09/07/17 Вск 21:18:59  1019779
>>1019446
Ант.
ПЕРЕКАТ Аноним # OP  09/07/17 Вск 22:28:31  1019936
ПЕРЕКАТ
>>1019934 (OP)
>>1019934 (OP)
>>1019934 (OP)
>>1019934 (OP)
>>1019934 (OP)
Аноним 09/07/17 Вск 22:30:05  1019939
>>1019936
Еее, два треда.
Аноним # OP  09/07/17 Вск 22:32:44  1019943
>>1019939
Да? Ну извиняйте, я просто в раздел не захожу, сижу в полутора тредах.
Аноним 13/07/17 Чтв 19:45:16  1024304
>>992632 (OP)
Вопрос треду, на сколько живой С в современных реалиях , учу этот ЯП и дико доставляет , но сейчас появляется куча "модных" ЯП не вытеснят ли они С?

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 504 | 31 | 166
Назад Вверх Каталог Обновить

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