М.Двач / Программирование

Этого треда уже нет.
Это копия, сохраненная 13 декабря 2016 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

78 Кб, 792x1023

C Programming Language #14 # OP 04 Ноя, 23:59 #869911 В конец треда | Веб

Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Что читать:

- Классика от Отцов: 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/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт) не драфт ищем на торрентах
- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- man/Dash/zealdocs

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

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

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

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

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

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? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).

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

Stephen G. Kochan "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://arhivach.org/thread/106153/
- https://arhivach.org/thread/131949/
- https://arhivach.org/thread/140570/
- https://arhivach.org/thread/153698/
- https://arhivach.org/thread/155908/
- https://arhivach.org/thread/173837/
- https://arhivach.org/thread/180461/
- https://arhivach.org/thread/182958/
- https://arhivach.org/thread/188294/
- https://arhivach.org/thread/193780/
- https://arhivach.org/thread/198868/
- https://arhivach.org/thread/206632/
- https://arhivach.org/thread/211714/

Шапка: http://piratepad.net/bJ1SdmkZyu

Ответы>>870044>>871105>>872230>>874538>>876368>>877723>>881132

05 Ноя, 00:15 #2 #869915

Ура, товарищи.

05 Ноя, 00:44 #3 #869924

В чём профит голого C?

Ответы>>869927>>870685

05 Ноя, 00:54 #4 #869927

>>869924
Ибо воистину, первый язык. Основа основ.

Все стандарты (OpenGL, OpenMP, OpenCL (API настройки девайсов, не сам язык для их программирования) ) написаны под него.

05 Ноя, 03:22 #5 #869968

int main(int argc, chat argv[][])
{
потом закрыть не забудьте

Ответы>>869971>>870687>>871043

05 Ноя, 03:31 #6 #869971

>>869968
}

закрыл азазаза

Ответы>>870029>>875596

05 Ноя, 06:05 #7 #870029

>>869971
Нещитово

16 Кб, 1200x624

05 Ноя, 08:06 #8 #870044

>>869911 (OP)
Анон, как мне сменить язык с С++ на просто С, я ультраньюфаня

Ответы>>870045>>870231

05 Ноя, 08:08 #9 #870045

>>870044
Это невозможно, придется тебе учить плюсы. Извини.
Это была си шутка. Просто создайфайол с расширением .с

Ответы>>870048

29 Кб, 1201x621

05 Ноя, 08:17 #10 #870048

>>870045
Сразу еще один вопрос, почему программа не выполняется? Я жму "скомпилировать и выполнить" и выходит эта ошибка? Что не так делаю

Ответы>>870054>>870064>>870373

05 Ноя, 08:32 #11 #870054

>>870048
А, все, разобрался

05 Ноя, 09:20 #12 #870064

>>870048
Кто так пишет исходный код? Не будь макакой, приучайся писать нормально.
1. Где форматирование? IDE не поддерживает автоформатирование - делай вручную.
2. Название файла кириллицей - из-за этого однажды утром ты можешь не проснуться. Подумой.
3. Нет проверки введённых значений. А вдруг ввели белиберду. Проверь, чтобы scanf возвращал единицу.
4. Если кодишь под Windows - __try, __finally, __except.

Ответы>>870113

05 Ноя, 10:33 #13 #870113

>>870064
> Если кодишь под Windows - __try, __finally, __except.
Ты зачем новичков плохому учишь?

Ответы>>870128

05 Ноя, 10:57 #14 #870128

>>870113
Что плохого в обработке исключений?

Ответы>>870138

05 Ноя, 11:07 #15 #870138

>>870128
антипаттерн

Ответы>>870140

05 Ноя, 11:15 #16 #870140

>>870138
Ой да ладно тебе, кто в твой код заглянет? Пиши как умеешь, расшумелся тут.

05 Ноя, 11:25 #17 #870142

Короче, надо заполнить массив случайными элементами целочисленного типа из заданного диапазона, вводимого пользователем.
Заполняю при помощи rand() без всяких примочек - если ввести одинаковые границы диапазона, вывод всегда будет одинаковым.
Если использовать сранд srand() со временем - выводятся одинаковые числа, я так понял, потому что генерируются одновременно.
Есть что простенькое, чтобы помочь мне выводить случайные целые числа, которые будут меняться каждый вывод и не будут совпадать (т.е. не будут закономерно совпадать)?
Простенькое, так как только начал изучать массивы, я грю уж про рандомные числа.

Ответы>>870143>>870155>>870691>>871797

05 Ноя, 11:26 #18 #870143

>>870142
Ты перед каждым вызовом rand делаешь srand? Код показывай, из описания не разберёшь, что у тебя там за проблемы.

Ответы>>870145

1 Кб, 188x71

05 Ноя, 11:29 #19 #870145

>>870143
Я не делаю srand(), тамушта везде в тырнетах пишут сранд этот сраный со временем, что мне не подходит

Ответы>>870147

05 Ноя, 11:32 #20 #870147

>>870145
Или подходит?
Т.е. мне бы узнать, с какой точностью он время берёт для рандомизации

Ответы>>870165

05 Ноя, 11:39 #21 #870155

>>870142
Давай весь код с выхлопом. Используй pcg.

Ответы>>870157

20 Кб, 1138x539

05 Ноя, 11:45 #22 #870157

>>870155
Да держи, только расскажи, что за pkg.
И мне способ простой нужен, если ты не читаешь по-русски с первого раза

Ответы>>870161>>870163

05 Ноя, 11:48 #23 #870161

>>870157
Делай stand(time(NULL)); в начале программы.
Почему i <= 11? i < 12 должно быть.

Ответы>>870162

05 Ноя, 11:49 #24 #870162

>>870161
> Почему i <= 11? i < 12 должно быть.
Ты серьёзно? Это важно? Это действительно важно?!
И ты хотел написать srand(time(NULL)), верно?
Ок, сейчас запилю,

Ответы>>870168

05 Ноя, 11:50 #25 #870163

>>870157
Ну и где у тебя srand?
>способ простой нужен
http://www.pcg-random.org/
Скачал, заинклюдил один файл, вызвал две функции - куда уж проще.

Ответы>>870167>>870169

05 Ноя, 11:50 #26 #870165

>>870147
>мне бы узнать, с какой точностью он время берёт для рандомизации
srand - это начальное значение для генератора псевдослучайный чисел. Без него у тебя всегда будут одинаковые значения. В некоторых случаях полезно, но не здесь.

05 Ноя, 11:51 #27 #870167

>>870163
> Скачал, заинклюдил один файл, вызвал две функции - куда уж проще
Мне нельзя так делать, давайте в рамках ANSI C и без примочек, мне это ещё сдавать.

05 Ноя, 11:52 #28 #870168

>>870162
>Ты серьёзно? Это важно? Это действительно важно?!
Это очень важно. У тебя 12 элементов, самому проще будет.
>И ты хотел написать srand(time(NULL)), верно?
Именно так и написал, как хотел. Только ';' в конце ты пропустил. Не сконпелируется.

05 Ноя, 11:52 #29 #870169

>>870163
Сделал с srand, внезапно, всё заработало, а в прошлый раз были схожие значения

05 Ноя, 14:56 #30 #870231

>>870044

//Можно еще так:

#ifdef __cplusplus
extern "C" {
#endif

//...

#ifdef __cplusplus
}
#endif

Ответы>>870272

05 Ноя, 16:02 #31 #870272

>>870231
Это не влияет на язык, только на метод создания имен экспортируемых символов.

05 Ноя, 16:53 #32 #870316

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

05 Ноя, 18:05 #33 #870373

>>870048
> conio.h

05 Ноя, 18:18 #34 #870384

Допустимо ли в 2016 году использовать глобальные переменные? Например, у меня есть функции, работающие с сокетами. Хэндл сокета я сделал глобальным, чтобы другие функции могли работать с ним. Или лучше передавать сокет как параметр функции?

Ответы>>870385>>870386

sage 05 Ноя, 18:19 #35 #870385

>>870384
>Допустимо ли в 2016 году использовать глобальные переменные?
В допустимых пределах всё допустимо.

05 Ноя, 18:20 #36 #870386

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

05 Ноя, 18:51 #37 #870410

С чего лучше начинать, с сишечки или с питончика?

Ответы>>870435>>870486>>870492

05 Ноя, 19:09 #38 #870435

>>870410
>С чего лучше начинать
с пива и беспорядочного секса

Ответы>>870452

05 Ноя, 19:30 #39 #870452

>>870435
Как же ты прав, анончик…

05 Ноя, 20:36 #40 #870486

>>870410
>питончика
Питухон для пидоров, начинай с Перла, он наиболее близок синтаксически к Сифактически интерпретируемый Си с плюшками.

Ответы>>870489

05 Ноя, 20:37 #41 #870489

>>870486
>Сифактически
хотел быстрофикснуть, но кекнул

05 Ноя, 20:40 #42 #870492

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

Ответы>>870522

05 Ноя, 21:18 #43 #870522

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

Ответы>>870523

05 Ноя, 21:19 #44 #870523

>>870522
У нас в проекте кодогенерация и всевозможная поддержка билда на питоне, например.

Ответы>>870526

05 Ноя, 21:27 #45 #870526

>>870523
> всевозможная поддержка билда на питон
ну это модно и молодежно, не более.

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

Ответы>>870528

05 Ноя, 21:29 #46 #870528

>>870526
Питон читаемый, и его знают все. Перл знают только олдфаги, а написать на нем неподдерживаемый код можно даже случайно.

Ответы>>870531

05 Ноя, 21:35 #47 #870531

>>870528
>и его знают все
я не знаю
>неподдерживаемый код можно даже случайно
нельзя

06 Ноя, 03:31 #48 #870678

Есть вот такая лапша уровня LABA_XXX:
http://ideone.com/u1q82P
Меня устраивает почти всё, кроме одного.
Нужно, что бы если числа повторяются, то они выводились со степенью. Пробовал завести перменные, типа предыдущий делитель и count и сравнивать новый делитель с предыдущим, и т.п.
Но выходит какая-то хуита.
Как это реализовать?

Ответы>>870688>>870936

Dmitry 06 Ноя, 04:27 #49 #870685

>>869924
В примитивности и скорости.
Но узконаправленные языки для узконаправленных задач быстрее должны быть, и есть.

Dmitry 06 Ноя, 04:28 #50 #870687

>>869968
Поясните зачем это? Я ничего этой функции передавать не хочу, а если хочу то что передавать?

Ответы>>870692

Dmitry 06 Ноя, 04:32 #51 #870688

>>870678
Каждое число сравнивать с всеми остальными, что уже сравнил исключай.

Ответы>>870723

06 Ноя, 05:03 #52 #870690

зигулю всем сисятым. давно мысль вынашиваю, ведь то что компилятор не знает что значение в свитч строго не может быть неправильным, типо ему не позволяет сделать тупо таблицу с указателями да. но можно ли как-нибудь пропихнуть эти знания до компилятора, например через assert(v >= 0 && v <= 10) к примеру, прокатит не? или нужно строга хуярить if'ы по харду? так то я могу и gcc'шным методом проредить но как-то в заёб городить макросы для совместимости (хотя видимо так и сделаю, не могу же я проверить выхлоп компилятора потому что жирный лентяй). я тут просто посчитал количество кейзов при удалении элемента из 2-3 дерева (4 на 1 элементного батю и 12 на 2х) и как-то дико прихуел пишу чисто в академический интерес.

кстати заебатые слайды тут: http://web.eecs.umich.edu/~sugih/courses/eecs281/syllabus.html

например http://web.eecs.umich.edu/~sugih/courses/eecs281/f11/lectures/10-Mway.pdf

Ответы>>870800

06 Ноя, 05:09 #53 #870691

>>870142
просто съебись с винды и используй /dev/random как царь. в общем-то, по сути не барское это дело, генерировать случайные числа. или как илатка любит поправятся, вынув изорта болт на время, псевдо.

06 Ноя, 05:23 #54 #870692

>>870687
например ключики передавать, и также путь до программы система передаст. ты совсем деревянный чтоль?

06 Ноя, 09:09 #55 #870723

>>870688
Я уже весь извертелся как мог, в голову уже ничего не идёт.
Тыкни носом пожалйста.

06 Ноя, 13:07 #56 #870782

Аноны, расскажите, сложно ли с вашего языка перекатываться на другие (java, python, ruby)?
Хочу изучать Си, как первый язык, так как он довольно интересный и монументальный.
Изучать хочу по расово правильной книги от отцов, правильно ли я поступаю, или стоит начать с чего то по проще?

Ответы>>870786>>870838

06 Ноя, 13:27 #57 #870786

>>870782
Правильно, дерзай.

06 Ноя, 13:49 #58 #870800

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

Ответы>>870864

6 Кб, 488x158

06 Ноя, 14:05 #59 #870811

Сделал дамп одной криптованной программы, таблица импорта разрушена. С помощью какой-то программы восстановил соответствие адрес-экспортируемая функция:
00416C31: Directly-> 0C570000 : 77F06B7E : RtlEnterCriticalSection
Как и IDA создать таблицу импорта вручную? Или заменить адрес 7DE922B0 на осмысленный RtlEnterCriticalSection?
Самый простой способ, который вижу - создать комментарий с функцией с помощью скрипта. Но хотелось бы знать, вдруг можно по другому.

Ответы>>870823

06 Ноя, 14:27 #60 #870823

>>870811
Проще всего запилить новую таблицу импорта в бинарнике (автоматически ImpRec-ом или вручную) и заново загрузить файл в IDA. Если не получится или нельзя по каким-то причинам:
0) Берешь IDAPython, а то заебешься в IDC писать.
1) Ищешь, где была IAT. Или создаешь сегмент новый - похуй.
2) Делаешь в скрипте таблицу маппинга между адресом и именем функции.
3) Заполняешь сегмент импортами (не обязательно в формате PE, просто списка func1 dd ?, func2 dd ? будет достаточно), т.е., делаешь IAT.
4) Проходишь по всей программе, патчишь относительные адреса в call, чтобы указывали на нужную функцию в твоей новой IAT.
Я бы как-то так делал. Алсо, существуют всякие idc.SetManualInsn/idaapi.set_manual_insn или даже просто idc.OpAlt/idaapi.set_forced_operand , но это решение уровня комментариев. Хотя может тебе подойдет. Можно и вручную по Alt+F1 на адресе имена прописывать, лол.

06 Ноя, 14:55 #61 #870838

>>870782
>Изучать хочу по расово правильной книги от отцов, правильно ли я поступаю, или стоит начать с чего то по проще?
Ты медицину начал бы изучать по книгам от отцов?

06 Ноя, 15:05 #62 #870844

Как разрешать такие проблемы с разными типами данных (и как вообще правильно использовать типы - только встроенные или только типы WinAPI)? http://ideone.com/BuXRnd

У меня объявлены:
TCHAR processName[BUFFER_SIZE];
TCHAR dllName[BUFFER_SIZE];

Но при компиляции такого кода strncpy(processName, buffer, BUFFER_SIZE); возникает ошибка из-за того, что функция не принимает тип TCHAR. Однако если заменить тип данных на char, тогда ошибка возникает в GetWindowText(hWnd, buffer, sizeof(buffer)); потому что эта функция требует аргумент типа LPWSTR. Что делать?

Ответы>>870846

06 Ноя, 15:10 #63 #870846

>>870844
Ну можешь использовать виндовые апи (типа lstrcpy, или StrCpyN), можешь поинклудить tchar.h (_tcsncpy), а лучше не еби мозг, скажи компилятору -DUNICODE и используй юникод всегда. Нахуй тебе ансишный билд в конце 2016 года?

Ответы>>870849

sage 06 Ноя, 15:14 #64 #870849

>>870846
В смысле, у тебя и так уже юникодный билд, судя по ругани, поэтому просто всегда пиши WCHAR вместо TCHAR, LPWSTR/LPCWSTR вместо LPTSTR/LPCTSTR и т.д. Ну и #include <wchar.h>, там есть wcspy, вся хуйня.

06 Ноя, 15:42 #65 #870864

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

скажи лучше, а дохуя на call жрётся? например, когда по указателю. так то, с учётом конвертеров, кешей, всех этих ебучих заморочек в современных процах. в тех же деревья, вообще, адекватно использовать со внешней функцией cmp ?

06 Ноя, 16:16 #66 #870880

Анон, ты когда-нибудь писал файл main.h с прототипами функций, используемых в main.c? Мне эот хедер кажется ужасно непривычным.

Ответы>>870883>>871038>>871056

06 Ноя, 16:18 #67 #870883

>>870880
Но зачем? В основном файле должно быть полторы функции для управления всем остальным, зачем им прототипы? Кто будет их вызывать кроме main()?

06 Ноя, 17:34 #68 #870936

>>870678
> Нужно, что бы если числа повторяются, то они выводились со степенью
Дели в цикле, не переходи к следующему делителю, пока не получишь остаток. Количество итераций минус 1 будет как раз степенью. Алсо, в сишечке есть функция lldiv, которая позволяет вычислить сразу и частное, и остаток, с ней будет быстрее. Алсо, не совсем понятно, что ты там меряешь. Если уж мерять, то построение таблицы и факторизацию каждого числа отдельно.

Ответы>>871920

06 Ноя, 19:50 #69 #871038

>>870880
Хорошее место для предварительного объявления или включения всех заголовочных файлов.

Ответы>>871041

06 Ноя, 19:55 #70 #871041

>>871038
с инклюдом в main.c, модно придумано.

sage 06 Ноя, 19:59 #71 #871043

>>869968
>chat argv[][]
Даже не скомпилируется.

Ответы>>871046

06 Ноя, 20:01 #72 #871046

>>871043
хуёвый какой-то у тебя компилятор, даже чаты не поддерживает.

06 Ноя, 20:13 #73 #871056

>>870880
Хедеры делают, чтобы не писать в каждом файле (единице трансляции) одни и те же объявления типа:

[CODE]extern char g_yoba;
int allo(void);
int ebal(struct tvoyu_mamku );[/CODE]

Если твой main.h будет подключать ещё какой-то файл, то это имеет смысл. Если только файл main.c - это бессмысленно.

06 Ноя, 20:49 #74 #871088

Анон, вот этот вот код: http://ideone.com/wV9a26 не хочет компилироваться в гцц при вводе более чем 6 элементов, вылетает ошибка
Error in `./b.out': realloc(): invalid next size: 0x000000000229f010
У другого человека в Dev C++ все нормально работает. ЧЯДНТ?

Ответы>>871122>>871216

sage 06 Ноя, 20:55 #75 #871090

А давайте все ньюфаги съебут в свой тред и не будут осквернять тред своими смердящими высерами.

Ответы>>871092

sage 06 Ноя, 20:58 #76 #871092

>>871090
присоединяюсь, реально заебало

Ответы>>871103

# OP 06 Ноя, 21:10 #77 #871103

>>871092
Что обсуждать будем? Предлагай тему.

Ответы>>871111>>871112

06 Ноя, 21:14 #78 #871105

>>869911 (OP)
>С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
ну ахуеть.

Ответы>>872159

06 Ноя, 21:22 #79 #871111

>>871103
>Что обсуждать будем?
давайте философствовать. что выносить в подпрограмму? считаю, повторяющуюся часть кода не возвращающего значение можно задефайнить, если результат работы порождает новую сущность (аки возвращаемое значение) в подпрограмму.
абасыте.

Ответы>>871122

sage 06 Ноя, 21:23 #80 #871112

>>871103
>Что обсуждать будем?
Хохлов.

# OP 06 Ноя, 21:40 #81 #871122

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

>>871088
Смотри, что ты выделяешь память под 1 инт, пишешь туда элемент. Всё ок. Потом i становится 1, ты делаешь реаллок, (пере)выделяешь массивчик под 1 инт, и... пишешь инт по индексу 1, то есть за пределы массива. Из этого следуют простые мысли:
1) Однобуквенные переменные зло. Написал бы length, не ошибся бы.
2) У гцц есть охуительная фича. Пишешь -fsanitize=address и он по хардкору разноцветным текстом поясняет, где и как ты портишь память. Другие -fsanitize тоже заслуживают внимания.
3) Реаллок, на каждом шаге, кстати, тоже зло. Выделяй с запасом (вдвое больше, чем раньше, например), запоминай, сколько выделил. Классический динамический массив - это array, length, capacity.

Ответы>>871123>>871124>>871137

sage 06 Ноя, 21:43 #82 #871123

>>871122
>У гцц есть охуительная фича. Пишешь -fsanitize=address
Это не она требует пересборки всех либ с этой опцией?

Ответы>>871127

06 Ноя, 21:48 #83 #871124

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

Ответы>>871125

06 Ноя, 21:52 #84 #871125

>>871124
но если ты код делаешь грамотна раскидывая по юнитам, то такие функции у тебя будут static inline. и например, нигде не будут видны за этим конкретным местом.

06 Ноя, 21:54 #85 #871127

>>871123
Да вроде не требовалось ничего рекомпилить, если, конечно, в либах нет багов, на которые оно ругается. Оно маллок хукает.

Ответы>>871130

sage 06 Ноя, 21:55 #86 #871130

>>871127
А. Я с сатанайзером, который чтение из неинициазилированной памяти ловит, спутал.

06 Ноя, 21:55 #87 #871132

а вообще, всё время жалею что в ц нет функций в функциях.

Ответы>>871133

06 Ноя, 21:57 #88 #871133

>>871132
Ну пиши исключительно под гцц, у них есть такое расширением.

Ответы>>871134

06 Ноя, 21:58 #89 #871134

>>871133
>исключительно
ещё что посоветуешь в ц треде? хотя тут и так половина подсосков на вин ап.

sage 06 Ноя, 22:00 #90 #871137

>>871122
> Реаллок, на каждом шаге, кстати, тоже зло. Выделяй с запасом
libc не должна сама это разруливать?

Ответы>>871140>>871151

06 Ноя, 22:02 #91 #871140

>>871137
ну ты, кстати, почитай как она разруливает.

Ответы>>871167

06 Ноя, 22:29 #92 #871151

>>871137
> libc не должна сама это разруливать?
Не должна, зависит от реализации. Лучше уж самому выделить, чем гадать, как оно будет работать.

Ответы>>871173

sage 06 Ноя, 23:03 #93 #871167

>>871140
Ну это явно зависит от конкретной реализации. Но логично предположить, что никто не будет делать реализацию, которая будет выделять всё время один в один запрашиваемый размер. Как минимум, он будет округлён до ближайшего оптимального размера, который подбирается с учётом данной архитектуры (размера страницы, кешлайна и хуй знает чего ещё), чтобы скорость доступа к памяти была наиболее высокая.

06 Ноя, 23:04 #94 #871169

сажа приклеилась

Ответы>>871172

sage 06 Ноя, 23:05 #95 #871172

>>871169
А я всегда с сажей пишу. И не стесняюсь этого.

Ответы>>871230

06 Ноя, 23:09 #96 #871173

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

Ответы>>871174>>871180

sage 06 Ноя, 23:10 #97 #871174

>>871173
>Преждевременная оптимизация — корень всех зол.

Использование быстрой сортировки вместо пузырьковой для тебя тоже "преждевременная оптимизация"?

Ответы>>871187>>871216

06 Ноя, 23:17 #98 #871180

>>871173
> больших проблем из-за реаллоков не возникнет
Я частично согласен с высказыванием про оптимизацию (бывает, что из-за запоздалой оптимизации нужно нихуево перепидорасить код), но в данном случае дело не в проблемах и не в тормозах, дело в том, чтобы научиться. В том числе и в динамические массивы без реаллока на каждую итерацию. А потом уже думать про профилировщик и особенности аллокации в glibc.

06 Ноя, 23:30 #99 #871187

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

Ответы>>871190

sage 06 Ноя, 23:33 #100 #871190

>>871187
> и нахуя использовать сортировки/массивы
Слышал что-нибудь про кэши, локальность данных, вот это вот всё?
> то бы как прадеды
Прадеды могли хоть деревья, хоть хуевья использовать — у них не было кэшей.

Ответы>>871191

06 Ноя, 23:35 #101 #871191

>>871190
>локальность данных
про м-вей деревья слышал что-нибудь, и вот это всё? или просто по приколу хуй сосать?

Ответы>>871193

sage 06 Ноя, 23:36 #102 #871193

>>871191
Это какой-то костыль, вместо использования массивов?

Ответы>>871201

3 Кб, 215x215

06 Ноя, 23:39 #103 #871201

>>871193
это способ использовать деревья поверх деревьев.

06 Ноя, 23:46 #104 #871216

>>871174
Слушай, я не топлю за подход анона >>871088 вызывать реаллок на ввод каждого нового элемента. Очевидно, что это ебануто. Но выделять "вдвое больше, чем раньше" для лабы1 это лишнее переусложнение. И в твоём подходе тоже можно доебаться до того, что у тебя происходит перерасход памяти без особой на то причины. Т.е. возможна ситуация, что пользователь ввёл N+1 элеметнов, а выделилась область для 2xN, большая часть которой пользователю была не нужна, допустим. При особо больших N это будет крайне ощутимо.

Что касается меня, я бы просто статический массив бы юзал. Нахуя вообще для такой задачи malloc/realloc.

Ответы>>871220

sage 06 Ноя, 23:52 #105 #871220

>>871216
Перевыделять в два раза — это стандартный подход. Никаких "преждевременных оптимизаций".

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

Ответы>>871226>>871227

06 Ноя, 23:58 #106 #871226

>>871220
Я вообще предлагал использовать статический массив, какой в жопу множитель.

07 Ноя, 00:00 #107 #871227

>>871220
>Перевыделять в два раза — это стандартный подход.
Где это он стандартный? Можно какой-нибудь пруф?

Ответы>>871235>>871240

07 Ноя, 00:01 #108 #871230

>>871172
Это оттого, что у вас много ума но мало совести

07 Ноя, 00:07 #109 #871235

>>871227
> пруф
Ну загугли сам-то. Можешь отсюда начать: https://habrahabr.ru/post/242279/ инбифо ализар

Ответы>>871243

sage 07 Ноя, 00:15 #110 #871240

>>871227
Потому что если множитель не 2, то надо объяснять, почему.

Ответы>>871244>>871288

07 Ноя, 00:21 #111 #871243

>>871235
>Перевыделять в два раза — это стандартный подход
>Почему буфер должен расти экспоненциально
Экспоненциально - это не обязательно в 2 раза.

07 Ноя, 00:21 #112 #871244

>>871240
тебе же говорят: для экономии памяти. или мы про в 2 раза от чего, от минимально необходимого для работы за всё время? или всего используемого?

07 Ноя, 01:39 #113 #871288

>>871240
http://stackoverflow.com/a/1100426
Как тебе такое объяснение, умник.

Ответы>>871292>>871299

sage 07 Ноя, 01:41 #114 #871292

>>871288
Норм.

07 Ноя, 01:45 #115 #871299

>>871288
Есть еще такое объяснение: всем похуй на своп, поэтому 2x выделять норм. Зато вариант с 2x предельно простой, работает всегда, для него не нужно всяких проверок, условий и прочей хуйни (как, например, для 1.5x: length += length >> 1; выглядит красиво, но только пока length по каким-то причинам не окажется равной 1).

Ответы>>871308

07 Ноя, 01:53 #116 #871308

>>871299
assert(length > 1) азазаза

Ответы>>871310

07 Ноя, 01:54 #117 #871310

>>871308
-D_NDEBUG азаза, ой, что-то свалилось все у меня на продакшене.

07 Ноя, 02:08 #118 #871316

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

07 Ноя, 14:37 #119 #871500

Анон, посоветуй, с чем бы реальным мне поработать (либа, фреймворк), чтобы немного въехать в Си? Пока придумал написать расширение для Питона на C API, повозиться с GTK. Что ещё можно сделать?

Ответы>>871696>>873544

07 Ноя, 20:04 #120 #871696

>>871500
Игру на SDL.

07 Ноя, 22:03 #121 #871797

>>870142
srand (time(NULL));

int rand_int(int min,int max){

double scaled=1.0/((double)RAND_MAX+1.0);

return (int)((max - min + 1)scaledrand()+min);

}
И рекомендую пару раз прогнать в холостую сначала

07 Ноя, 23:36 #122 #871920

>>870936
Всмысле чего меряю? Я сделал решето до мульта и просто беру из него простые числа, дабы не пытаться делить непростыми.

Ответы>>871952

sage 08 Ноя, 00:24 #123 #871952

>>871920
В смысле я про clock(). Результат будет зависеть не от быстродействия кода, а от того, как быстро ты вбиваешь числа во время scanf.

Ответы>>871985

08 Ноя, 01:54 #124 #871985

>>871952
Я их из текстового файла ввожу. У меня там пара тысяч чисел.
Алсо, всё уже решил.

08 Ноя, 05:54 #125 #872017

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

конретно интересует факторизация целых чисел

Ответы>>872023

08 Ноя, 06:49 #126 #872023

>>872017

g:Длинная_арифметика

Ответы>>872025

08 Ноя, 07:00 #127 #872025

>>872023
длинную арифметику то я представляю - на другом языке напишу (написал)
но вот с собственными представлениями чисел на си я не сталкивался, собственно у меня числа длинной до сотни знаков
( на си потому что быстро )

Ответы>>872041>>872161

08 Ноя, 08:30 #128 #872041

>>872025
Так же, как и на другом языке.

Ответы>>872048

08 Ноя, 08:46 #129 #872048

>>872041
да я понимаю как вопрос выглядит но

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

но вот к примеру: с упаковокой стуктур я сталкивался -> понадобиться сделаю
но в другой язые этож не впихнешь

=> то есть спрашиваю за языковые тоности/особенности

Ответы>>872067

08 Ноя, 09:31 #130 #872067

>>872048
Не занимайся преждевременной оптимизацией, анон. Напиши сначала как-нибудь и попрофилируй.

Ответы>>872097

08 Ноя, 10:42 #131 #872097

>>872067
речь не об оптимизации

я умею в факторизацию в открыве от того что нужно запилить свое представление чисел

более того сишный код для
64 битных быстрых целых я написал
проблема в том что мне нужны числа куда больше
то есть я просто ищу способ (чтоб как полагается) представлять очень большие целые на си + мне пару операций на таком представлении (сложение, цел. деление)
тогда я перепишу алгоритмы на новое представление -> profit

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

для кристальной чистоты числа в духе:
1851858457003052118736699169041398614849121954728255181191590943881041451112971339223193346124917
(87 символов например)

Ответы>>872104>>872162>>872196>>872488

08 Ноя, 10:51 #132 #872104

>>872097
Анон, ты тупой?
Тебе уже сказали - гугли длинную арифметику (mpi)
Посмотри как она реализована в криптографических библиотеках (лайк openssl, nss, tomcrypt)
Там практически везде указатель на массив лимбов, где оптимальный размер лимба (32 или 64 обычно) высчитывается макроопределениями для каждой конкретной платформы на этапе компиляции

Dmitry 08 Ноя, 13:47 #133 #872159

>>871105
>компилировать
Ничего охуенного.
А засунуть в оперативку весь проэкт можно и юзать GCC, make, собирать будет наверно даже быстрее, если не статически линковать.

Ответы>>872196>>872488

Dmitry 08 Ноя, 13:49 #134 #872161

>>872025
>на си потому что быстро
>математика
Не, для этого математический язык надо, он быстрее, Фортран быстрее, Ада может тоже.

Dmitry 08 Ноя, 13:56 #135 #872162

>>872097
>64 битов не хватает
Если чисел с минусом нет то делай uint_fast64_t
читай
man stdint.h
если надо минус то запакуй в структуру число и bool значение которое будет вместо минуса.

Ответы>>872196

08 Ноя, 14:12 #136 #872168

Поясните нуфагу: арифметика указателей часто используется?

Ответы>>872170>>872196

Dmitry 08 Ноя, 14:14 #137 #872170

>>872168
Нет

08 Ноя, 15:12 #138 #872196

>>872097
Ну я же тебе отвечал уже в предыдущем треде.

> представить ... массивом 64 битных интов
Ну вот и представляй. Что не так-то?

> но вот как правильно
Какие тут могут быть правила? Быстро это или медленно - подумай или потести.

Вот этого >>872162 не слушай, он бегает с доски на доску и несет всякий бред. Знак у него отдельно в bool, ну охуеть вообще.

>>872159
TCC даже не пытается ничего оптимизировать, поэтому GCC по скорости компиляции его никогда не догонит. TCC был бы охуенным компилятором для сборки тестовых билдов, если бы он полноценно умел в C11 и если бы при дебаге в очередной раз не оказывалось, что баг был в компиляторе.

>>872168
Постоянно. *p++ и a[j] тому примеры.

Ответы>>872213

2481 Кб, 2250x2700

08 Ноя, 15:27 #139 #872205

Привет. Есть говнокод эмулятора на Си: https://github.com/HerculesWS/Hercules/

Как и чем этот говнокод можно покрыть тестами? Есть ли тут те, кто покрывают Си код тестами? Чем пользуетесь, как тестируете, что почитать, что изучить? Короче любой фидбек будет только на пользу.

Ответы>>872210

Dmitry 08 Ноя, 15:37 #140 #872210

>>872205
А что именно тебе тестировать надо?
Бери и проверяй что сомнительно, gprof gdb для мониторинга, собери с самыми дотошными настройками компилятора с конкретным стандартом языка.
А говнокод можно почти весь стереть, ксорг устарел, перекатывай на Wayland.

Dmitry 08 Ноя, 15:43 #141 #872213

>>872196
А в GCC если оптимизации вырубить?
А Clang? у меня шланг медленнее гсс компилировал, а говорили мол некстген компилятор, а джисиси легаси параша.
>если бы мог в 11
А он не швабодный разве?
Можно из других компиляторов код реализации стандарта похитить.

7 Кб, 599x116

08 Ноя, 16:07 #142 #872230

>>869911 (OP)
аноны, я вообще не понимаю, как тут рассчитывать z, чему оно равно? Ответам всем трех уравнений?

Ответы>>872245

08 Ноя, 16:27 #143 #872245

>>872230
if (x ... && y ...) { ... } else if (...) { ... } else { ... }?

Ответы>>872249>>872253

5 Кб, 331x241

08 Ноя, 16:33 #144 #872249

>>872245
Если честно, я ничего из написанного не понял, вот мой уровень в си на примере первой "программы", можешь подробней написать?

08 Ноя, 16:35 #145 #872253

>>872245
Тобишь от значения переменной выбирается уравнение?

Ответы>>872261

08 Ноя, 16:48 #146 #872261

>>872253
Ну да. Можешь это в строчку через ? : записать, но будет хуже читаться.

08 Ноя, 19:46 #147 #872402

Как правильно обращаться с типом void и указателями на void при использовании их для передачи аргументов? Например, есть код:

void TrackChildProcess(void hChild)
{
WaitForSingleObject((HANDLE)*hChild, INFINITE);

}

Функция потока принимает LPVOID. Мне нужно передать потоку хэндл другого потока, но если использовать указатель на void как аргумент, то его нельзя разыменовать по правилам языка.

Ответы>>872411>>872425>>872488

08 Ноя, 20:03 #148 #872411

>>872402
Пиз
Дец

Ответы>>872421

08 Ноя, 20:20 #149 #872421

>>872411
Что не так? У меня небольшой вынос мозга от передачи параметров через LPVOID.

void TrackChildProcess(LPVOID hChild)
{
char szExePath[MAX_PATH];

WaitForSingleObject((HANDLE)hChild, INFINITE);
}

sage 08 Ноя, 20:25 #150 #872425

>>872402
> если использовать указатель на void как аргумент, то его нельзя разыменовать по правилам языка.
Скастуй к указателю на HANDLE

Ответы>>872558>>872564

08 Ноя, 21:56 #151 #872488

>>872097
ебанутый даун научись излагать мысли.

>>872159
ну ты и тормоз. сейчас ты мне расскажешь что ты не можешь быть тормозам, потому что ты человек?

>>872402
очередной вын апи дурачёк вкатился блин.

Ответы>>872490

08 Ноя, 22:00 #152 #872490

>>872488
Таки что ты имеешь против Windows API? Не осилил?

Ответы>>872628

08 Ноя, 23:05 #153 #872558

>>872425
Стыдно спрашивать, но почему это возможно?
void * - 32- или 64-битное число
HANDLE - это тоже число
Получается, что я пишу как на ассемблере, забывая про типы и работая только с двордами?

Ответы>>872564>>872570

sage 08 Ноя, 23:11 #154 #872564

>>872425
>>872558
Точнее, не к указателю на HANDLE. Вопрос в том, как ты хочешь передать. Скастовав HANDLE к void* или передав указатель на переменную, хранящую HANDLE.
И первое, и второе легально обратимо.

Ответы>>872567

sage 08 Ноя, 23:14 #155 #872567

>>872564
>Скастовав HANDLE к void*
Хотя это implementation-defined, но все знают, что это работает.

Ответы>>872570

08 Ноя, 23:19 #156 #872570

>>872558
>>872567
HANDLE - на самом деле указатель. Что-то типа:
typedef struct tag_HANDLE *HANDLE;
И кастить такой указатель на несуществующую структуру к указателю на void и обратно абсолютно легально, и implementation-defined behavior там отсутствует.

Ответы>>872571>>872573

sage 08 Ноя, 23:21 #157 #872571

>>872570
Ок. Я думал это число.

sage 08 Ноя, 23:22 #158 #872573

>>872570
>HANDLE - на самом деле указатель. Что-то типа:
typedef PVOID HANDLE;

Ответы>>872581

08 Ноя, 23:32 #159 #872581

>>872573
Ну да, плохо уже помню про винду, извиняюсь. Но остальные типы хэндлов при -DSTRICT как раз "типизируются" неполными структурами в качестве дополнительной защиты от дурака.

09 Ноя, 04:01 #160 #872628

>>872490
как будто есть смысл осиливать жрать говно

Ответы>>872630

sage 09 Ноя, 04:27 #161 #872630

>>872628
Лучший ответ.

143 Кб, 960x948

09 Ноя, 15:24 #162 #872834

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

Ответы>>873034>>873054

09 Ноя, 16:24 #163 #872883

http://ideone.com/J4CVCA
Подскажите как сложить два массива, пожалуйста.

Ответы>>872940

09 Ноя, 16:33 #164 #872898

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

Ответы>>872904>>872974

09 Ноя, 16:37 #165 #872904

>>872898
Потому, что во всех остальных случаях это массивы указателей ну или так сложились звёзды, наверное

09 Ноя, 17:04 #166 #872940

>>872883
Жава-тред дальше по коридору.

09 Ноя, 17:39 #167 #872974

>>872898
Что ты подразумеваешь под "выводом массива"?

Ответы>>872978

09 Ноя, 17:42 #168 #872978

>>872974
cout

Ответы>>873003

09 Ноя, 18:05 #169 #873003

>>872978
Пожалуйста, проследуйте нахуй сюда >>866503 (OP)

Ответы>>873009

09 Ноя, 18:07 #170 #873009

>>873003
я уже проследовал к твоей матери в сраку

Ответы>>873010

09 Ноя, 18:07 #171 #873010

>>873009
своим хуем

09 Ноя, 18:37 #172 #873034

>>872834
Тред или два назад был кун с подобным заданием. Задание сложное, надо писать почти полноценный парсер или вводить какие-нибудь ограничения синтаксиса. https://arhivach.org/thread/206632/#846642
https://arhivach.org/thread/206632/#846663

09 Ноя, 18:55 #173 #873054

>>872834
Написать парсер для yacc. Так просто ты не сможешь по скобочкам вытащить название. Или попробовать какую-то часть от LLVM, где парсится файл.

09 Ноя, 20:17 #174 #873090

посоветуйте корпоративных, федеральных стандартов NASA, JPL, GOV. на чем там прогают? API всякие

Ответы>>873096

09 Ноя, 20:29 #175 #873096

>>873090
Ada, C++11.

Ответы>>873097>>873098

09 Ноя, 20:30 #176 #873097

>>873096
Всегда упоминают ADA, но я ни разу не видел вживую никого, кто бы на ней писал на работе.

Ответы>>873106>>873149>>873211

09 Ноя, 20:31 #177 #873098

>>873096

Оно сложнее Java?

Ответы>>873099>>873106

09 Ноя, 20:32 #178 #873099

>>873098
Ну это такой как бы паскаль на стероидах.

Ответы>>873106>>873118

09 Ноя, 20:38 #179 #873106

>>873097
>>873098
>>873099
На чистой Аде там тоже не пишут, погуглите SPARK, это диалект Ады.

09 Ноя, 21:00 #180 #873118

>>873099

а схож с objective C? на mac osx10.10 в какой IDE кодить можно? сильно требуется математическое образование, алгоритмы, уровнения, вот это вот все? сисадмину (*NIX) сложно перекатиться?

Ответы>>873127>>873149

09 Ноя, 21:23 #181 #873127

>>873118
Сразу видно американца.

Ответы>>873129

09 Ноя, 21:24 #182 #873129

>>873127

Да, да. это Трамп.

09 Ноя, 22:01 #183 #873149

>>873097
А я однажды писал на работе на Ada (просто вспомогательное приложение, не было разницы на чем его писать), хотя я работаю не программистом. По-моему нормальный язык, очень даже. Примерно как C++ в своей изначально задуманной форме, но только сделанный нормально. Честно не понимаю, почему в зк практически никогда не обсуждается, годнота же.
>>873118
Не знаю насчет мака, IDE по-умолчанию — Gnat Programming Studio, неплохая. С сишки (и думаю с obj-c тоже) перекатиться легко, там нет функциональщины или каких-то особых выебонов, просто нормально сделанное структурное, generic и object oriented программирование.

Ответы>>873152

09 Ноя, 22:03 #184 #873152

>>873149
> сделанный нормально.
Проверка границ массива есть?

Ответы>>873156

09 Ноя, 22:04 #185 #873156

>>873152
Есть. Но если вдруг где-то мешает, то можно попросить компилятор выключить.

Ответы>>873159

09 Ноя, 22:05 #186 #873158

Пишу порт сканер на асинхронных сокетах. Вопрос, почему в результате определяются все активный хосты, а не хосты с открытым заданным портом?

http://pastie.org/10959217

Ответы>>873160

09 Ноя, 22:05 #187 #873159

>>873156
> Есть
Значит Ada не нужна.

Ответы>>873162

09 Ноя, 22:06 #188 #873160

>>873158

Тебе надо воспользоваться этими требованиями:

http://www.hq.nasa.gov/office/codeq/doctree/871913.pdf

Ответы>>873186

09 Ноя, 22:08 #189 #873162

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

Ответы>>873163

09 Ноя, 22:09 #190 #873163

>>873162
Мне интересно. Вот эти все языки с проверками границ типа Ada или там Java. Ну, допустим, прилетело исключение о нарушении границ. Дальше что? Один хрен валить программу.

Ответы>>873165>>873167>>873174

09 Ноя, 22:12 #191 #873165

>>873163
Главное чтобы ты учился хорошо и маму слушался.

09 Ноя, 22:14 #192 #873167

>>873163
Дальше heartbleed, когда проверок нету.

09 Ноя, 22:22 #193 #873174

>>873163
Я сам не особый сторонник исключений и вообще люблю сишку больше всех языков, но почему же сразу валить. Теоретически, баг может быть несмертельный и проявляться только в определенных ситуациях, например при получении запросов или входных данных определенного вида / в определенное время / etc. Можно конечно упасть и перезапуститься (и это если повезет, и баг приведет просто к сегфолту, а не к уязвимости), а можно залоггировать это дело, откатиться и попытаться продолжить работу, надеясь, что ситуация единичная, ну или перезапуститься тоже. Ну и еще раз: какбы фича отключаемая, если не видишь в ней смысла — можно и не использовать.

Ответы>>873180

09 Ноя, 22:26 #194 #873180

>>873174

а ты можешь на C написать БД, сервер приложений, хранилище документов, и простенький ERP ?

Ответы>>873185

09 Ноя, 22:31 #195 #873185

>>873180
Всё можно написать (и на чём угодно), вопрос только во времени. Раскрой свою мысль, а то не совсем понятно, к чему ты это спросил.

Ответы>>873191

160 Кб, 940x630

09 Ноя, 22:31 #196 #873186

>>873160

09 Ноя, 22:37 #197 #873191

>>873185

На языке Тьюринга я ж не прошу написать, или перфокартами набить.

Есть framework(код, dll, binary) на c/c++ который заменит по функциональности weblogic + oracle rdbms + siebel crm( или что-то, хотябы одно)

Ответы>>873195>>873213

09 Ноя, 22:40 #198 #873195

>>873191
На сишечке пишут, когда есть требования к быстродействию или иные ограничения. Написать CRM на сишечке можно, но экономически невыгодно.

Ответы>>873201

09 Ноя, 22:42 #199 #873201

>>873195
RTOS типа?

Ответы>>873207

09 Ноя, 22:48 #200 #873207

>>873201
В основном на сишечке либы и embedded.
> RTOS
И обычные. И у винды, и у линукса, и у OS X ядра на Си.

09 Ноя, 22:52 #201 #873211

>>873097
В вакансиях её маскируют и называют oracle pl/sql

09 Ноя, 22:53 #202 #873213

>>873191
А чем-тебя Оракл не устраивает? Он написан, вероятно, как раз на сишке/крестах по большей части, да и api имеет сишное. Заменить его на 100% тяжело будет, в конце концов его пилят уже сто лет, причем за сотни денег пилят. С остальными двумя приложениями не работал, ничего не могу сказать. В целом crm на сишке — более чем реально, все равно основное это база данных там, а остальное по большому счету без разницы на чем делать (я как-то делал не слишком сложный бэкэнд на сишке и каких-то особых препятствий не заметил).

10 Ноя, 11:44 #203 #873388

Хэй, есть кто?

Ответы>>873400

10 Ноя, 12:35 #204 #873400

>>873388
А вам зачем?

Ответы>>873402

165 Кб, 3264x370

10 Ноя, 12:42 #205 #873402

>>873400
Не могу понять как решить одну задачу
Под буквой б. Что значит A|2b? Зачем тут "|"?

10 Ноя, 13:23 #206 #873424

бляяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяя

10 Ноя, 13:31 #207 #873429

В чём отличие
++slovo от slovo++
?

Ответы>>873455>>873457>>873766

10 Ноя, 14:37 #208 #873455

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

10 Ноя, 14:39 #209 #873457

>>873429
разный приоритет, разная ориентация.

10 Ноя, 14:39 #210 #873458

http://pastebin.com/8KZLEfy1
где ошибка?

Ответы>>873460>>873477

10 Ноя, 14:42 #211 #873460

>>873458
> conio.h
где вы этой хуйни начитываетесь? и в жопы друг друга ебёте потом

Ответы>>873465

10 Ноя, 14:44 #212 #873465

>>873460
ну, _getch же, нет?

10 Ноя, 15:08 #213 #873477

>>873458
В строке 14. Правильно пишется "диапазон".

Ответы>>873481>>873483

10 Ноя, 15:20 #214 #873481

>>873477
А еще н вдефайне надо бы капитальными буквицами написать

Ответы>>873484

10 Ноя, 15:21 #215 #873483

>>873477
аахаххахахахха

http://pastebin.com/uZAr1QQR - пофиксил
должна считать A[n][n]*b[n]
но как то странно работает

10 Ноя, 15:22 #216 #873484

>>873481
Всмысле?
И да, апнул её до 50

10 Ноя, 17:32 #217 #873544

>>871500
> повозиться с GTK
Нинад, там не столько C, сколько обмазывание макросами.

10 Ноя, 18:32 #218 #873565

Эй, быдло, зачем вы программируете на этой древней херне когда уже лет 40 как изобретён лучший язык программирования C++?

Ответы>>873584>>873618>>873640

10 Ноя, 19:15 #219 #873584

>>873565
Зачем нужен C++, когда есть Haskell?

10 Ноя, 20:20 #220 #873618

>>873565
А за эти 40 лет изобрели ОС, написанную на крестах?

Ответы>>873620

10 Ноя, 20:23 #221 #873620

>>873618
BeOS, но она сдохла.

Олсо, http://www.includeos.org/

Ответы>>873624

10 Ноя, 20:24 #222 #873624

>>873620
Гайка жива, юзерспейс-то у них на крестах, а ядро?

Ответы>>873625>>873626

sage 10 Ноя, 20:26 #223 #873625

>>873624
Вижу, кресты, да.

10 Ноя, 20:27 #224 #873626

>>873624
>Гайка жива
А чо воняет так по-трупному?
>>873624
>юзерспейс-то у них на крестах, а ядро?
http://cgit.haiku-os.org/haiku/tree/src/system/kernel

Ответы>>873628

sage 10 Ноя, 20:29 #225 #873628

>>873626
> А чо воняет так по-трупному?
Денег мало, длинный шмель. А была бы охуенная десктопная ОС.

10 Ноя, 21:08 #226 #873640

>>873565
> C++
> лучший
Чет толсто

11 Ноя, 00:03 #227 #873766

>>873429
========
a = b++:
-----------
a = b
b = b + 1
========
a = ++b:
-----------
b = b + 1
a = b
========

Ответы>>873805

11 Ноя, 01:41 #228 #873805

>>873766
а теперь с указателем, с указателям я сказал.

11 Ноя, 14:26 #229 #873964

Что можно простенькое такое написать на Си?

Ответы>>873970>>873991

Какашечка 11 Ноя, 14:44 #230 #873970

>>873964
конпелятор

Ответы>>873988

11 Ноя, 15:21 #231 #873988

>>873970
Конпеляторы легко пишутся на функциональных языках, на си это боль и унижение.

Зацените кстати ответ майкрософта на раст — https://www.microsoft.com/en-us/research/project/checked-c/
Иии... Это си с проверкой границ! Авесоме! на деле просто скопировали реализованное в стандартной библиотеке плюсов в язык, зато пейпер больше стандарта си
Пусть хуесосы из леночкатреда расскажут ещё что рисёрчиские отделения компаний — не просто удобная основа для распилов.

Ответы>>873996>>874003

11 Ноя, 15:23 #232 #873991

>>873964
парсер форта

11 Ноя, 15:29 #233 #873996

>>873988
Хуйня какая-то от индусов и китайцев. Знаем мы, кто у них там в исследовательском отделе сидит.

Ответы>>874006

4 Кб, 144x157

Какашечка 11 Ноя, 15:36 #234 #874003

>>873988
ога

Какашечка 11 Ноя, 15:39 #235 #874006

>>873996
для этого целый гитхаб придумали, чтобы можно было легко и непринужденно копипастить код! получая зарплату и гранты

11 Ноя, 16:52 #236 #874029

Анон, почему функция получения значения ключа реестра работает неправильно? http://ideone.com/GUrzUZ

Стоит Win7 x64, программа 32-битная, поэтому выполняется отображение в ветку Wow6432Node. Ключ там есть. При выполнении программы выводится пустая строка. http://ideone.com/u2oBEY

Ответы>>874131>>874145

11 Ноя, 19:55 #237 #874131

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

Ответы>>874145

11 Ноя, 20:14 #238 #874145

>>874029
>>874131
Вроде, заработало. Почему-то помогло добавление == ERROR_SUCCESS, пойду курить мануалы.

http://pastebin.com/B0JYpuKk

Ответы>>874176

sage 11 Ноя, 21:21 #239 #874176

>>874145
Потому что ERROR_SUCCESS = 0.

12 Ноя, 02:23 #240 #874301

Написал макрос для удобной (как мне показалось) инициализации auto и static массивов с присоединением значения длины к указателю, чтобы можно было не передавать в вызываемую функцию длину массива в отдельной переменной. http://ideone.com/0SsuoH
Считается ли такое уже абъюзом препроцессора, или еще норм и вполне можно использовать?

Ответы>>874302>>874303>>874304>>874433

12 Ноя, 02:36 #241 #874302

>>874301
Слегка абьюз, потому что arr() выглядит как вызов функции, а на самом деле создает переменную. Даже если документируешь, будет неочевидно. Я бы сделал что-то типа struct xy *points = DEFINE_ARRAY(struct xy, ...); Несмотря на то, что тип приходится писать дважды, из такого кода очевиднее, что он делает. В len каст к указателю на void лишний. Макроса LENGTH в таком виде общепринято называется countof (по аналогии с sizeof). В остальном норм.

Ответы>>874310

12 Ноя, 02:39 #242 #874303

>>874301
в c90 не скомпилится.

Ответы>>874304

12 Ноя, 02:43 #243 #874304

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

>>874301
Алсо, желательно использование имени ARRAY в макросе len обернуть в скобочки, а то мало ли, все бывает, решишь выражение передать, и произойдет что-нибудь веселое.

Ответы>>874306>>874310

12 Ноя, 02:46 #244 #874306

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

12 Ноя, 02:50 #245 #874310

>>874302
Каст через воид используется, чтобы заткнуть clang, который иначе почему-то жалуется на несовпадение требований к алайменту, хотя вроде бы очевидно, что там все нормально.
По поводу названия / синтаксиса макроса думаю, что ты прав, если сделать как ты написал, то это выглядит уже не так странно, но при этом все равно намного удобнее, чем объявлять эту структуру вручную.
>>874304
>Алсо, желательно использование имени ARRAY в макросе len обернуть в скобочки
Спасибо, учту.

12 Ноя, 02:59 #246 #874315

Объясните как в С найти произведение положительных элементов в одномерном массиве

Ответы>>874317>>874322

12 Ноя, 03:03 #247 #874317

>>874315
Сделай переменную, присвой ей 1, пройдись циклом for по массиву, если очередной элемент больше нуля, умножь свою переменную на него.
твой кэп

Ответы>>874321

12 Ноя, 03:21 #248 #874321

>>874317
Для меня это сложно, без кода непонятно

sage 12 Ноя, 03:36 #249 #874322

>>874315
http://pastebin.com/q0PXbr74

Ответы>>874323>>874324

sage 12 Ноя, 03:38 #250 #874323

>>874322
Борешься с конкуренцией?

Ответы>>874326

12 Ноя, 03:41 #251 #874324

>>874322
Спасибо, но я учусь в пту, для меня такие вещи как sizeof и size_t неизвестны

sage 12 Ноя, 03:43 #252 #874326

>>874323
>Борешься с конкуренцией?
Эксплуатирую её )

108 Кб, 604x453

12 Ноя, 03:56 #253 #874328

Объясните тупо как быдлу, как дыбилу тупо

12 Ноя, 13:05 #254 #874410

чуваки вот скажите, а как вы тесты хуярите? есть какие-нибудь системы, схемы, хуй знает. просто как-то это странно, у меня просто валяется в специальной папки набор main.с'ов которые инклюдяд заголовки того что они тестят, а это ещё и собрать нужно. на каждый делать по мейку? а если всю кучу прогонять, как-то детектировать какие провалили, как вообще прогресс теста указывать, или хуй с ним, падает значит проебал? вообще не ебу как это делается всё.

12 Ноя, 13:36 #255 #874433

При ближайшем рассмотрении этот >>874301 макрос работает только для статических массивов (т.е. указатель может быть на стеке, но сам массив остается статическим со всеми вытекающими). Можно ли как-нибудь сделать макрос, который бы мог создать такой же массив (с префиксом длины), но на стеке (пусть даже без инициализации)? Я сам что-то никак не додумаюсь.

Ответы>>874437

12 Ноя, 13:43 #256 #874437

>>874433
вот например, вообще не ебу, как тут с тобой кто-то ещё разговаривает, хуету какую-то пишешь непонятную. что у тебя там не на стеке?

Ответы>>874451>>874460

12 Ноя, 14:02 #257 #874451

>>874437
Все, что в круглых скобках в макросе arr является static.
Чтобы было более понятно, оно раскрывается во что-то типа
int ⁎a = ((struct {size_t n; int u[3];} []){3, {1, 2, 3}}).u
Создается статическая структура, состоящая из двух полей: длины массива и самого массива int этой длины. Затем адрес этого массива в составе структуры копируется в указатель a, который может быть где угодно (в т.ч. на стеке), но сама структура с массивом, тем не менее, остается static.
Такую структуру можно создать и на стеке, но я никак не могу придумать, как сделать это максимально удобно (чтобы не нужно было два раза вручную вводить размер массива, а потом еще и инициализировать это же количество элементов). Также не хотелось бы создавать лишнюю локальную переменную для самой структуры, т.е. чтобы переменная была только у указателя на массив в составе структуры, но сама структура (безымянная) при этом тоже лежала на стеке (но вот это вот скорее всего совсем уже невозможно).

Ответы>>874456>>874458

12 Ноя, 14:11 #258 #874456

>>874451
Там должно было быть
int ⁎a = ((struct {size_t n; int u[3];}){3, {1, 2, 3}}).u;

12 Ноя, 14:14 #259 #874458

>>874451
что? там и так будет всё на стеке, где оно по твоему ещё может быть? что ты несёшь? с чего ты взял, что не создаётся экземпляр структуры на стеке, а потом о не заполняется?

Ответы>>874460>>874462

12 Ноя, 14:22 #260 #874460

>>874437
>>874458
Ты прав, я просто немного запутался. Похоже, что эта хуйня действительно на стеке. Статиком там является только временный массив, длина которого считается макросом LENGTH. Просто с таким способом автовычисления длины возникла проблема: макрос отказывается работать, если среди инициализаторов того, к чему применяется LENGTH, есть не константы (потому что этот массив считается статиком). Если передавать длину массива в макрос вручную, то такой проблемы нет. Ты открыл мне глаза, спасибо.

12 Ноя, 14:25 #261 #874462

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

Ответы>>874468>>874537

12 Ноя, 14:34 #262 #874468

>>874462
хуй его знает. я на макросах дохуя писал, можно организовать цикл и в нём перебрать все аргументы из __VA_ARG__, например держа счётчик как несколько 16ричных разрядов-аргументов. но это всё полный дроч, ненужно этим заниматься. а так-то можно хоть математику хуярить, правда у компиляторов есть ограничения в раскрытию... и это одна из причин почему это нахуй не нужно.

Ответы>>874659

12 Ноя, 15:33 #263 #874509

Для чего здесь переменным типа DWORD присваивается результат вызова функции GetProcAddress, приведенный к LPDWORD? Из-за этого код не компилится. Защита от дурака или какая-то древняя магия? Судя по HMODULE LoadExecutable (IN LPSTR path, IN PVOID base = 0), это C++, в котором с типизацией и кастами все строго. Непонятно, для чего это сделано.

Ответы>>874510>>874529

12 Ноя, 15:33 #264 #874510

>>874509
https://vxheaven.org/0x48k/etc/peloader.cpp

Забыл ссылку.

12 Ноя, 16:03 #265 #874529

>>874509
В коде происходит какая-то хуйня. Динамическая память с PE-имиджем освобождается и затем она используется. Сейчас бы найти журнал ксакеп за октябрь 2012, там на диске должен был быть PE-лоадер.

12 Ноя, 16:14 #266 #874537

>>874462
G_LIST_LEN посмотри в glib
Да и вообще погляди там макросы для коллекций. Там много чего интересного реализовано

12 Ноя, 16:14 #267 #874538

>>869911 (OP)
Вот функция:
int main()
{
int a[N],i,count;
srand(time(NULL));
Init(a,N);
Print(a,N);
for(i=count=0;i<N;i++)
if(a>0&&Sum(a)>10)
count++;
printf("count=%d\n",count);
return 0;
}

Вот ошибка:
error: 'N' undeclared (first use in this function)

Что не так?
Научите массив задавать

Ответы>>874542

12 Ноя, 16:17 #268 #874542

>>874538
пошёл нахуй.

Ответы>>874543>>874563

12 Ноя, 16:18 #269 #874543

>>874542
Окей

12 Ноя, 16:24 #270 #874547

Зацените PE-лоадер. Какие у него подводные камни? Подойдет ли для написания криптора, который дешифрует PE-файл в памяти и делает run pe?

http://pastebin.com/DRMG7R31

Ответы>>874548

12 Ноя, 16:28 #271 #874548

>>874547
Алсо, для правильной работы ширусов в памяти надо патчить PEB. Будут ли проблемы из-за использования такого лоадера?

12 Ноя, 16:52 #272 #874563

>>874542
Двачую

12 Ноя, 18:54 #273 #874659

>>874468
Сейчас все-таки еще немного посидел с этим макросом, теперь работает и так:

int ⁎a = ARRAY(int, 1, 2, 3, 4, 5);

и даже так:

unsigned short x = 99;
struct xy ⁎b = ARRAY(struct xy, (1, 2), (3, 4), (5, x));

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

Ответы>>874708

12 Ноя, 19:51 #274 #874708

>>874659
Покажешь макрос?

Ответы>>874716

12 Ноя, 19:52 #275 #874710

Анон, у меня печет. Есть такой код: http://pastebin.com/AGQVz7P4

В следующих строках ошибка:
//CopyMemory(&pStub[text->PointerToRawData + text->Misc.VirtualSize], pImage, dwImageSize);
memcpy(&pStub[text->PointerToRawData], pImage, dwImageSize);

>main.cpp(43): error C2036: 'LPVOID' : unknown size

Что я делаю не так? pStub указывает на PE-имидж загрузчика в памяти. Я хочу дописать в конец секции кода данные. Но с конструкцией &pStub[text->PointerToRawData + text->Misc.VirtualSize] что-то не так.

Ответы>>874719

12 Ноя, 20:01 #276 #874716

>>874708
http://pastebin.com/jtdjX88M
Все права на спизженные идеи и куски макросов принадлежат их законным правообладателям.

Ответы>>874723

12 Ноя, 20:02 #277 #874719

>>874710
Скажи, а pStub + 1 - это какой адрес, если учитывать, что pStub - указатель на void? Скасти к PBYTE или какому-нибудь другому указателю на char.

Ответы>>874722

12 Ноя, 20:06 #278 #874722

>>874719
Понятно. Зря я, наверно, вообще начал использовать LPVOID. Хотя должно быть удобно ксорить сразу по 4 байта.

12 Ноя, 20:06 #279 #874723

>>874716
Я кончил. Алсо, вчера забыл тебе сказать, что ты зря с анонимными структурами возишься в len. Весь len можно сделать просто (((size_t *)(array))[-1]).

Ответы>>874726

12 Ноя, 20:15 #280 #874726

>>874723
Я конечно не эксперт, но сделал так из предосторожности: ведь если мы присоединяем размер к массиву через структуру, то значит, что теоретически между переменной размера и массивом могут быть padding-байты, в зависимости от требований к алайменту элемента массива (например на моей системе у size_t алаймент 8, а у max_align_t – 16). Потому в текущей версии даже задействовал alignas из C11, чтобы между началом массива и его размером всегда было одинаковое количество байтов. Или это я зря заморачиваюсь?

Ответы>>874732

12 Ноя, 20:18 #281 #874732

>>874726
Да, ты прав, а я снова туплю. Извини.

Ответы>>874738

12 Ноя, 20:22 #282 #874738

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

Ответы>>876016

12 Ноя, 21:41 #283 #874819

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

Ответы>>874821>>874826

12 Ноя, 21:42 #284 #874821

>>874819
В школе в столбик делил?

sage 12 Ноя, 21:44 #285 #874826

>>874819
Алсо https://en.wikipedia.org/wiki/Division_algorithm#Large-integer_methods

13 Ноя, 00:33 #286 #874941

Прошу прощения если надоел, но я продолжаю додумывать улучшенные массивы для сишечки.
Если я сделаю такой макрос len, который (как я надеюсь) будет автоматически определять размер или по методу sizeof(a)/sizeof(a[0]) (в случае массива) или доставанием значения из size_t переменной в префиксе массива (в случае указателя), ждут ли меня какие-либо подводные камни? И если да, то какие?
#define len(ARRAY) (((void ⁎)&ARRAY == (void ⁎)&ARRAY[0]) ? LENGTH(ARRAY) : length(ARRAY))

Какашечка 14 Ноя, 13:54 #287 #875497

синьоры макакены, жутко нехочу создавать лишнюю переменную, насколько вставка функции в аргумент второй функции будет по шариату?
типа: a(b(i), j);

Ответы>>875503>>875505

14 Ноя, 14:00 #288 #875503

>>875497
Тебя пидорнёт, передавай в a() указатель на функцию b() внутри тела a() вызывай b().

Ответы>>875504>>875506>>875510

14 Ноя, 14:03 #289 #875504

>>875503
Охуительные истории.

14 Ноя, 14:03 #290 #875505

>>875497
Алсо, по-моему ни в одном ЯП нельзя встроить вызов функции в параметр другой.

Ответы>>875506

14 Ноя, 14:07 #291 #875506

>>875503
>>875505
Вот я даун, извиняйте, нигде такой хуйни не видел, чтобы работала.

Ответы>>875510

Какашечка 14 Ноя, 14:11 #292 #875510

>>875503
наркоман штоле?
>>875506
и ты тоже

41 Кб, 604x401

14 Ноя, 14:58 #293 #875528

Господа, сдаю я курсач преподу дальше можно не читать, вот код. http://pastebin.com/EEE3FJQ2
Так он сказал, что нужно конечными автоматами, помогите со структурной моделью, я в этом вообще не шарю, пожалуйста, пишите свои идеи. Алсо, суть - вытащить из текстового документа названия функций, просто названия, без типа и аргументов, как у меня.

Ответы>>875651>>876015

14 Ноя, 18:17 #294 #875596

>>869971
вызовет warning, т.к. НИЧЕГО НЕ ВОЗВРАЩАЕТ

Ответы>>875612

sage 14 Ноя, 19:21 #295 #875612

>>875596
Для main() есть специальное исключение: если поток выполнения доходит до закрывающей фигурной скобки, main() возвращает 0.

Ответы>>875629

sage 14 Ноя, 20:39 #296 #875629

>>875612
Начиная с C99 или C11

14 Ноя, 21:25 #297 #875651

>>875528
Какой пиздец.

14 Ноя, 23:57 #298 #875738

В проекте VS2010 включена оптимизация по размеру. Если код, который выделяет четыре байта в куче, пишет туда дворд и освобождает эту память полмиллиона раз, находится в WinMain, компилятор его не выкидывает. Но если я выделяю этот код в функцию, компилятор ее оптимизирует, и она не попадает в бинарник. Как заставить компилятор сохранить ее?

Ответы>>875773>>875832

sage 15 Ноя, 00:48 #299 #875773

>>875738
Возможно, __declspec(noinline)? Возможно, стоит эту функцию поэкспортировать, чтобы на нее были ссылки?

15 Ноя, 02:59 #300 #875832

>>875738
volatile на указатель.

15 Ноя, 07:24 #301 #875859

Рубрика зодай вопрос анону.
Ув. Анон! Вот есть fgetc(). Так ведь? Если у нас есть цикл, где этот фгетц читает по символму из файла, как он знает что нуно перескочить на следующий символ в файле, это внутри самой функции указатель некий? Или же это древние темные механики скрытые от простых смертных?

Ответы>>875863>>875865

15 Ноя, 07:42 #302 #875863

>>875859
воспринимает файл как поток.

15 Ноя, 07:50 #303 #875865

>>875859
Зависит от реализации. Обычно за внутри структуры, на которую указывает FILE, хранится системозависимый дескриптор или хэндл для "родного" для системы API доступа к файлам.
Если это "обычный" файл, т.е. с произвольным доступом, с этим дескриптором в ядре ОС ассоциировано смещение в файле. По этому смещению и происходит чтение. И функции чтения автоматически увеличивают смещение на прочитанное число байт.
Плюс ещё, на стороне программы, может быть буффер. Он тоже связан с FILE. Ну и читается какой-то заметный кусок из файла в буффер. И, соответственно, есть указатель на текущий символ в буффере, который fgetc() увеличивает.

Я тут упрощённо описал как это примерно выглядит на чём-нибудь вроде windows или *nix.

Ответы>>876012

15 Ноя, 13:53 #304 #875988

Аноны, начал изучать Си по наставлению нашего товарища и возник с рядом проблем. Изучаю по книге Кёрнигана и вижу для себя море незнакомых формулировок, слов и т.п. Из-за этого думаю, что Кёрнигана лучше оставить на потом, а пока что начать читать что-то более простое. Непосредственно вопрос: может подскажете что-нибудь попроще, или все-таки грызть тот самый материал, который я не понимаю? Не понимаю из-за того, что не могу можно сказать самые первые упражнения сделать сам. К слову, в /pr полный ноль, максимум, что могу сделать из этой среды - прописать shutdown -s -t 180 в командной строке, когда выхожу из дома
памагити

Ответы>>875989>>875997>>876011

15 Ноя, 13:54 #305 #875989

>>875988
Прату читай, очевидно же

Ответы>>875991

15 Ноя, 13:58 #306 #875991

>>875989
т.е. стоит все-таки изучать С++, а не С?

Ответы>>875995

15 Ноя, 14:02 #307 #875995

>>875991
Нет, он и по Си писал книги
https://www.ozon.ru/context/detail/id/31649671/

Ответы>>875996

15 Ноя, 14:04 #308 #875996

>>875995
>
спасибо огромное анон, еще вопрос:
стоит после поверхностного изучения данного языка зубрить его то состояния белиссимо, или же параллельно знакомиться с чем-то новым?

15 Ноя, 14:06 #309 #875997

>>875988
>>875988
Палю годноту, пройди гарвардский курс cs50
Я тебе гарантирую, не разочаруешься.

Ответы>>876004

15 Ноя, 14:11 #310 #876004

>>875997
Дай бог здоровья, буду учиться :з

15 Ноя, 14:26 #311 #876011

>>875988
>начал изучать Си
с какой целью?
есть ресурсы чтобы прожить следующие десять лет до того как сможешь заработать кодом на си?

Ответы>>876013>>876057

15 Ноя, 14:27 #312 #876012

>>875865
зачем объяснять уебкам то что они могут погуглить?

Ответы>>876110>>876135

15 Ноя, 14:28 #313 #876013

>>876011
с целью начать изучать хоть что-то, ибо сестра к себе хочет взять на стажировку в iba
спросил у анонов тут пару дней назад, что лучше изучать - сказали Си, я потихоньку пытаюсь

15 Ноя, 14:30 #314 #876015

>>875528
самое забавное, что эти хуесосы и в продакшон такой код высирают (если это не исходники уровня chrome где уже кодерам нада от 150к в год платить, а в закрытых кодовых базах помельче именно такой пиздец за частую и есть)

15 Ноя, 14:33 #315 #876016

>>874738
чтобы написать крепкую рабочую прогу знание языка это только 10%
а вы уебки и его не знаете
пфф
в печь всех, как евреев в 42

Ответы>>876045

15 Ноя, 15:35 #316 #876045

>>876016
>а вы уебки и его не знаете
Сколько (минимально) чтений по указателям a и b сгенерирует следующий код? Если знаешь язык, то тебе понадобится не больше пары секунд чтобы правильно ответить и объяснить почему.

int ololo(int a, int b)
{
int x = 0;
int y = 10;
x = a + b;
x = 10;
y += b;
x += y;
b += x;
y = dosmth(a);
return y + a + *b;
}

Ответы>>876048>>876049>>876056>>876143

15 Ноя, 15:41 #317 #876048

>>876045
звездочки сьедены?

Ответы>>876050

15 Ноя, 15:41 #318 #876049

>>876045
вы обосрались.

Ответы>>876050

15 Ноя, 15:43 #319 #876050

>>876048
>>876049
Всем, кто знает язык, не составит никакого труда восстановить съеденные звезочки :3

Ответы>>876053

15 Ноя, 15:43 #320 #876053

>>876050
Больше скажу. всем кто знает язык даже и твой код не нужен, они и так знают о чем ты.

Ответы>>876056

15 Ноя, 15:47 #321 #876056

>>876053
>>876045
Короче, рядом с a и b звезочки стоят везде, кроме dosmth(a).
Алсо, если кому-то не лень, ответьте, потому что я и сам хочу проверить, правильно ли я думаю.

Ответы>>876061

15 Ноя, 15:47 #322 #876057

>>876011
Взял расстроил.

15 Ноя, 15:51 #323 #876061

>>876056
2 и 2

Ответы>>876069

15 Ноя, 15:56 #324 #876069

>>876061
Как насчитал? Алсо, вместо x = 10 должно было быть умножение. Но без него получилось бы 1 и 2 по-моему.
http://pastebin.com/XG4jtv4r

Ответы>>876071

15 Ноя, 15:59 #325 #876071

>>876069
ну как-бы после вызова функции сложно знать, изменилось ли значение по указателю b, тоже.

Ответы>>876078>>876079

15 Ноя, 16:16 #326 #876078

>>876071
Это да. Я правда сперва сам не совсем правильно посчитал, а так там 2+2, все правильно.
Алсо, я когда-то не знал про это все, и тогда мне казалось, что не нужно кешировать значения по указателям в локальных переменных (тип лишние переменные будут занимать место, лол), а потом я почитал про restrict, а потом выяснилось, что если вызывать внутри функции другие функции, то и restrict'а будет мало… Но отчего-то мне кажется, что я еще дохуя всего не знаю.

15 Ноя, 16:20 #327 #876079

>>876071
2
остальные бесполезные действия бдут в кэше проца\регистрах

15 Ноя, 17:23 #328 #876110

>>876012
больше не буду

15 Ноя, 18:15 #329 #876135

>>876012
Ну и действительно, зачем

Ответы>>876137

15 Ноя, 18:19 #330 #876137

>>876135
тонко стелишь, так сказать, без скобочек у &.

sage 15 Ноя, 18:28 #331 #876143

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

Ответы>>876150

15 Ноя, 18:32 #332 #876150

>>876143
ну как тут без твоих выебонов. поняли все? вы дурачки, не берите в голову, открывайте и берите в рот, как господин у которого компилятор раскрывает функции.

Ответы>>876157

sage 15 Ноя, 18:37 #333 #876157

>>876150
По делу есть что возразить?

Ответы>>876185

15 Ноя, 18:56 #334 #876185

>>876157
Если функция не объявлена статик, с чего бы компилятору ее выкидывать?

Ответы>>876190

sage 15 Ноя, 19:01 #335 #876190

>>876185
Например, с того, что она не вызывается. Или у нее явно нет сайд-эффектов (и у dosmth тоже), а возвращаемое значение не используется. Или она вызывается один раз, и аргументы известны, поэтому компилятор может решить весь вызов свернуть в одну константу.

Ответы>>876197

15 Ноя, 19:11 #336 #876197

>>876190
Но откуда компилятору знать, к чему ты собрался прилинковать результирующий файл, и, соответственно, будет ли кто-то вызывать эту функцию?

Ответы>>876199>>876268

15 Ноя, 19:13 #337 #876199

>>876197
не будет он её удалять.

Ответы>>876268

15 Ноя, 19:49 #338 #876243

Что лучше первым учить С или С++? Для программирования встраиваемых систем.

Ответы>>876248>>876294>>876365

15 Ноя, 19:54 #339 #876248

>>876243
C

Ответы>>876272

8 Кб, 361x411

4 Кб, 800x97

sage 15 Ноя, 20:06 #340 #876268

>>876197
Под компилятором я понимаю весь тулсет (препроцессор, транслятор, ассемблер, линкер). Функцию выкинет линкер, если умеет в LTO.

>>876199
> не будет он её удалять.
Пикрелейтед. Функцию спиздили, чтений по указателям ноль.

Ответы>>876282>>876824

15 Ноя, 20:09 #341 #876272

>>876248
почему?

Ответы>>876281

15 Ноя, 20:16 #342 #876281

>>876272
Так логичнее.
Сначала Си был, потом его допилили до С++. Более логичная последовательность.
Да и просто Си проще и примитивнее, а в С++ больше сложных вещей и абстракций.

15 Ноя, 20:16 #343 #876282

>>876268
> не будет он её удалять.
> показывает раскрытие функции.

Ответы>>876287

15 Кб, 672x226

sage 15 Ноя, 20:19 #344 #876287

>>876282
Так а функция-то где? Где моя функция?

Ответы>>876300

15 Ноя, 20:24 #345 #876294

>>876243
>программирования встраиваемых систем
Там в основном Си. С++ практически не используется.

15 Ноя, 20:30 #346 #876300

>>876287
а я и не спорил. ты какой-то странный.

15 Ноя, 22:20 #347 #876365

>>876243
Си конечно.
Печально что б-во вкатыльщиков не знает что С++ никогда не был популярней и востребованней Си и не будет.
Просто вакансии на помойках всяких в основном ориентированы на всякий скам.

Ответы>>876376

15 Ноя, 22:24 #348 #876368

>>869911 (OP)
Какой тип данных имеет результат логических выражений в С?

Ответы>>876369

15 Ноя, 22:25 #349 #876369

>>876368
int (0 или 1).

15 Ноя, 22:28 #350 #876376

>>876365
Изучил основы Си, изучаю алгоритмы, решаю олимпиадные задачки. Куда копать дальше, какие перспективы?

Ответы>>876378>>876381>>876420>>879226

15 Ноя, 22:29 #351 #876378

>>876376
На гитхаб, решать реальные задачи. Олимпиадники не нужны.

15 Ноя, 22:30 #352 #876381

>>876376
дальше только отсос для натуралов.

15 Ноя, 23:38 #353 #876420

>>876376
>изучаю алгоритмы, решаю олимпиадные задачки
преподавателем в ПТУ

100 Кб, 1920x1080

16 Ноя, 19:25 #354 #876780

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

В общем, критическая часть программы выглядит примерно так:

void CriticalFunc(void)
{}
void EndFunc(){}

В рантайме происходит расшифрование от начала функции до метки EndFunc().

Но как ее сначала зашифровать? Инбифо: ксором в HIEW
Если собирать с оптимизацией по размеру, компилятор может выкинуть метку EndFunc. Проблема решается объявлением указателя на нее volatile? Может ли линкер разместить EndFunc не после критической функции?

Ответы>>876824

16 Ноя, 20:20 #355 #876824

>>876780
Самый простой способ - написать кастомный кодогенератор для tcc. Можно экспериментировать с LLVM. Можно просто сваять простейший парсер PE/ELF и криптовать секцию кода целиком. Алсо, можно сделать свой линкер - минимальный линкер под сишечку написать несложно, если есть опыт байтоебли.

> Если собирать с оптимизацией
Если творить такую хуйню, фиксированные параметры компиляции и минимальная оптимизация - это мастхэв.

> Может ли линкер разместить
Классический линкер не может менять порядок функций в объектнике, и выкинуть функции он тоже не может, но есть всякие фичи типа "separate functions for linker" (в терминах MS) и прочие LTO >>876268, поэтому опять же нужно подобрать такие параметры сборки, когда линкер не будет мешать твоим планам.

17 Ноя, 02:12 #356 #877015

Хочу вертеть байтики в линуксе туда-сюда как это делает юниксовая dd. Какой ман читнуть?

Ответы>>877018

17 Ноя, 02:15 #357 #877018

>>877015
Даже сишного fopen() вполне хватит для начала.

17 Ноя, 07:34 #358 #877059

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

matrix
+
matrix
*
matrix

я понимаю что вроде пока op не EOF
но что-то никак

Ответы>>877452

17 Ноя, 19:28 #359 #877452

>>877059
Читай fgets() в буфер, если во время чтения строки юзер тыкнет Ctrl+Z (Ctrl+D в Linux), fgets() вернет NULL, и ты закончишь. Дополнительно ты можешь проверять первый символ буфера. Если он \0 или \n - юзер ввел пустую строку, можешь по этому признаку тоже завершать ввод. А дальше ты можешь либо разбирать буфер вручную через strtok(), strtoSMTH() или делать sscanf().

17 Ноя, 22:14 #360 #877552

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

Ответы>>877575>>877595

17 Ноя, 22:42 #361 #877575

>>877552
Rich Edit Controls. Форматирование отключается.

Ответы>>877595

17 Ноя, 23:02 #362 #877595

>>877552
>>877575
Разобрался, надо было включить автоскролл.

Как можно изменить цвет рамки эдита при получении фокуса?

Ответы>>877608

17 Ноя, 23:24 #363 #877608

>>877595
пиздец. всё. нахуй идите со своим тредом.

Ответы>>877631

sage 17 Ноя, 23:59 #364 #877631

>>877608
Почему ты пригорел?

18 Ноя, 02:23 #365 #877680

Какое же ебаное говно этот Pelles C. Несколько часов пердолил в нем код, а после падения IDE весь исходник оказался забит нулями.

Ответы>>877714

18 Ноя, 07:17 #366 #877714

>>877680
Как ты умудрился его уронить? Он и несколько лет назад был вполне стабилен. Ну кроме дебаггера. Антивирусы/малварь в системе есть?

Ответы>>877716

18 Ноя, 07:42 #367 #877716

>>877714
>малварь в системе есть?
Обижаешь, конечно есть!

18 Ноя, 08:20 #368 #877723

>>869911 (OP)
Онан, поясни за GUI на pure-C. Какие фреймворки используешь? Сколько весит hello-world на таких? Можно ли static-версию делать?

(цель Windows 2000-10, Ubuntu 14-...)
Пишу для микроконтроллеров, но иногда надо делать управляющие программы. Пока что делал на delphi 7, лол. Пробовал на Qt, но по 70 мегабайт библиотек таскать, это пиздец.

Ответы>>877735>>877737>>877771>>877977>>879229

18 Ноя, 10:13 #369 #877735

>>877723
>GUI на pure-C
WinAPI, под линуксом через вайн запускаешь

18 Ноя, 10:16 #370 #877737

>>877723
> Какие фреймворки используешь?
А выбор и небольшой, лол. Либо используешь кресты + wxWidgets либо прикручиваешь Gtk3 и не выёбуешься.

18 Ноя, 12:12 #371 #877767

Переделываю неубиваемое консольное приложение в приложение с гуём. http://pastebin.com/qjCPVNM4

Когда компилирую в Pelles C и запускаю, появляется два процесса, которые спавнят друг друга. Но если компилирую в MSVS 2015, второй процесс не запускается, и приложение закрывается после нажатия на крестик. Почему?

Ответы>>877897

18 Ноя, 12:20 #372 #877771

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

18 Ноя, 17:49 #373 #877897

>>877767
Разные методы запуска. Студия через жопу запускает - отобрази командную строку студии, и увидишь.

Ответы>>877898

18 Ноя, 17:51 #374 #877898

>>877897
Запущенный не в среде студии экзешник (из папки) тоже не работает как надо.

Ответы>>877904>>877906

18 Ноя, 17:57 #375 #877904

>>877898
Хуй знает, навскидку код вроде норм. Обработку ошибок и диагностику добавь.

Ответы>>877906

sage 18 Ноя, 17:59 #376 #877906

>>877898
>>877904
Попробуй открывать процесс с SYNCHRONIZE, а не с полным доступом.

Ответы>>877911

18 Ноя, 18:22 #377 #877911

>>877906
Не помогло. Попробую посмотреть, что передается в командной строке.

Ответы>>877915

18 Ноя, 18:29 #378 #877915

>>877911
Странно, вот здесь вместо пути выводится форматная строка.

http://pastebin.com/taKpQnJr

18 Ноя, 18:31 #379 #877918

Почему-то GetModuleFileName(GetModuleHandle(NULL), szExePath, MAX_PATH); вместо пути записывает в буфер символ С.

Ответы>>877932

sage 18 Ноя, 18:59 #380 #877932

>>877918
В настройках проекта юникод, а на предупреждения ты не смотришь?

Ответы>>877939

18 Ноя, 19:27 #381 #877939

>>877932
Ух спасибо, почти весь день убил на поиск проблемы. Надо мне читать Рихтера про юникод и переходить на него.

18 Ноя, 19:53 #382 #877952

ананасы, подскажите, можно ли как нибудь способом узнать указывает ли указатель void * на какое либо место в памяти

Ответы>>877962>>877971

18 Ноя, 20:02 #383 #877962

>>877952
Да, можно.
Погугли функции с названиями вроде check memory page existence и т.п.

Ответы>>877968

18 Ноя, 20:09 #384 #877968

>>877962
большое спасибо

18 Ноя, 20:11 #385 #877971

>>877952
Добавлю, что необходимость в таких функциях чаще всего следствие того, что ты делаешь что-то не так либо что-то близкое к системному софту.

Ответы>>878850

18 Ноя, 20:17 #386 #877977

>>877723
Можешь попробовать это https://github.com/vurtun/nuklear

101 Кб, 1280x800

18 Ноя, 22:58 #387 #878087

Вечер в хату, мужики и стремящиеся. Хочу сделать полупрозрачный гуй, чтобы главное окно и контролы были полупрозрачные, но рамки были яркие. Примерно как на пикрелейтед. Как это можно сделать? Перекопал сегодня много сайтов, но нашел мало полезного. Вот, например:

https://www.experts-exchange.com/articles/1783/Win32-Semi-Transparent-Window.html

Ответы>>878097>>878098

18 Ноя, 23:11 #388 #878097

>>878087
>Вечер в хату, мужики и стремящиеся
нахуй пошел, зек ебаный

Ответы>>878100

18 Ноя, 23:12 #389 #878098

>>878087
>Вечер в хату, мужики и стремящиеся
иди на хуй

Ответы>>878100

9 Кб, 200x200

18 Ноя, 23:18 #390 #878100

>>878097
>>878098
Да ты же РОЛИДОВЫЙ.

2 Кб, 355x55

14 Кб, 644x160

19 Ноя, 05:32 #391 #878163

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

Ответы>>878164

19 Ноя, 05:34 #392 #878164

>>878163
Я понимаю, как задать сам цикл, но не понимаю как заставить считать значение n-ого слагаемого

Ответы>>878167

19 Ноя, 05:44 #393 #878167

>>878164
Вроде про цикл в задании ничего. Рекурсивно оно проще для понимания. Погугли "recursive cosine taylor series in c". Ну или можешь циклом считать, да. Минусы и плюсы - это 1 в степени n, степени в числителе - 2n, числа в знаменателе - факториал 2n. Значения, требуемые для вычисления числителя и знаменателя можно запоминать с предыдущего шага.
> не понимаю как заставить считать значение n-ого слагаемого
В смысле, не умеешь возводить число в степень с помощью pow() и делить его потом?

Ответы>>878168>>878172

sage 19 Ноя, 05:45 #394 #878168

>>878167
> 1 в степени n
-1 конечно же.

19 Ноя, 05:53 #395 #878172

>>878167
Как посчитать то я знаю, я от том, что мы вводим любое n и программа должна посчитать этот n-ый элемент выражения, как это записывать?

Ответы>>878173

sage 19 Ноя, 05:55 #396 #878173

>>878172
Ну тебе все равно всю сумму считать. У тебя будет цикл от 1 (или 0) по n, в цикле ты вычисляешь очередное слагаемое, заканчиваешь n-ным. В чем проблема вывести его после выхода из цикла?

Ответы>>878174

19 Ноя, 05:59 #397 #878174

>>878173
Точно, спасибо анон, погуглил про рекурсию вроде наглядно понял

22 Кб, 389x499

19 Ноя, 20:41 #398 #878465

Хочу вкатиться в си по пикрилу. Какие подводные?

Ответы>>878470

19 Ноя, 20:55 #399 #878470

>>878465
Никаких. Читай, делай упражнения, приходи с вопросами, если возникнут. Успехов.

Ответы>>878472

19 Ноя, 20:57 #400 #878472

>>878470
Как по пути не обосраться с мотивацией продолжать?

Ответы>>878524

19 Ноя, 22:07 #401 #878524

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

Ответы>>878532

19 Ноя, 22:20 #402 #878532

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

19 Ноя, 23:43 #403 #878570

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

http://ideone.com/wm2fM6

15 Кб, 434x155

20 Ноя, 00:05 #404 #878576

отцы помогите тотал нюфагу вкатитсяможет что-нибудь получится
в поставке clang++ из коробки я так понял нет стандартных библиотек, а в GCC:g++ есть.
можно их как-нить с консолидировать чтоб и clang все появилось

Ответы>>878578

20 Ноя, 00:08 #405 #878578

>>878576
В папке со шлангом создай i686-w64-mingw32, туда скопируй include, lib, libexec из гцц. А еще лучше создай симлинки.

Ответы>>878584>>878589

20 Ноя, 00:11 #406 #878584

>>878578
> шиндошс
> симлинки

Ответы>>878604

20 Ноя, 00:22 #407 #878589

>>878578
чтот ничего(

Ответы>>878604>>878605

20 Ноя, 00:45 #408 #878604

>>878584
Да, в NTFS есть симлинки и хардлинки, доброе утро. Но вообще, я имел в виду junction points.

>>878589
Уверен, что правильно скопировал? Что пишет? Покажи скриншот clang -v file.c (кресты я компилить не пробовал, если что).

Ответы>>878608>>878609>>878626

20 Ноя, 00:46 #409 #878605

>>878589
только щас заметил что не в тот тред написал

Ответы>>878608

sage 20 Ноя, 00:48 #410 #878608

>>878604
>>878605
Попробовал кресты, хелловорлд компилится.

242 Кб, 977x579

20 Ноя, 00:49 #411 #878609

>>878604

Ответы>>878618

20 Ноя, 01:02 #412 #878618

>>878609
Я не знаю, почему у тебя таргет по умолчанию msvc. Возможно, стоит убрать переменные окружения INCLUDE и LIB. А насчет хедеров - я сейчас поэкспериментировал, та папка не нужна, оно (по крайней мере у меня) находит директорию с MinGW, если она есть в PATH и автоматически использует инклуды оттуда. Но у меня в винде только clang 3.7 и gcc 4.8. Может, с тех пор что-то сломали. Возможно -target mingw32 решит проблему.

Ответы>>878622

20 Ноя, 01:07 #413 #878622

>>878618
все директории сеть в переменных средах
всё ставил с сайта, таргетинг не понимает(

Ответы>>878624

20 Ноя, 01:11 #414 #878624

>>878622
clang -v -target i686-w64-mingw32 foo.c

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

Ответы>>878627>>878634

20 Ноя, 01:14 #415 #878626

>>878604
> доброе утро.
> 00:45:55
> NTFS есть симлинки и хардлинки
То-то я смотрю, в Cygwin до сих пор пользуются магическими файлами, а в Msys ln -s равнозначно cp. Наверное, они не знают об этих фичах файловой системы.

Ответы>>878629

20 Ноя, 01:16 #416 #878627

>>878624
> скорее всего, вместо решения проблемы предложат поставить линупс.
Ну, это как спрашивать у мылачей, почему последняя студия под вайном не работает и как это исправить.

Ответы>>878629

20 Ноя, 01:22 #417 #878629

>>878626
> в Cygwin до сих пор пользуются магическими файлами, а в Msys ln -s равнозначно cp
Компатибилити же. Настоящие симлинки (которые поддерживаются для файлов тоже) появились в Висте. Junction points не помню, но вроде в XP. И это не работает на FAT32. И там есть тонкости. Вот и не делают.
https://en.wikipedia.org/wiki/NTFS_symbolic_link
https://en.wikipedia.org/wiki/NTFS_junction_point

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

Ответы>>878631>>878643

sage 20 Ноя, 01:23 #418 #878631

>>878629
> LFS
Лол, FHS.
слоуфикс

500 Кб, 1366x768

20 Ноя, 01:26 #419 #878634

>>878624
помогло))
компилит с опцией -target x86_64-w64-mingw32
без нее не хочет

Ответы>>878635

20 Ноя, 01:27 #420 #878635

>>878634
Теперь, наверное, стоит посмотреть на твой PATH.

Ответы>>878638

61 Кб, 529x504

20 Ноя, 01:33 #421 #878638

>>878635
вроде все правильно

Ответы>>878639

20 Ноя, 01:38 #422 #878639

>>878638
Да, все правильно. Больше идей нет. Сделай батник clang-mingw с содержимым типа @clang -target x86_64-w64-mingw32 %*

20 Ноя, 01:45 #423 #878643

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

Ответы>>878645

sage 20 Ноя, 01:55 #424 #878645

>>878643
Я junctions и хардлинки очень давно использую. Нестандартные права для них не нужны, проблем особых с середины 2000х не припомню кроме мелочей типа антивируса, впадавшего в бесконечный цикл при сканировании или инсталляторов, которые до сих пор! проверяют свободное место на томе, где расположена junction point, а не там, куда она указывает.

20 Ноя, 05:46 #425 #878668

Наткнулся на следующий синтаксис:
return (pointer);

К чему тут скобки?

Ответы>>878669

20 Ноя, 05:53 #426 #878669

>>878668
Не влияют ни на что. Кому-то нравится визуально, и они втыкают скобки всегда. Некоторые ставят, когда возвращается выражение.

20 Ноя, 16:08 #427 #878850

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

Ответы>>878894>>878899

3 Кб, 640x70

20 Ноя, 16:32 #428 #878860

Изучаю использование юникода в винапи по книге Рихтера. Как вызвать ошибку компиляции в этом коде? http://ideone.com/jEG29d

Рихтер пишет, что компилятор по умолчанию рассмаривает строки как ANSI, поэтому код компилируется нормально. Но если определить _UNICODE, то возникнет ошибка. Однако ошибка не возникает ни при определении этого макроса с подчеркиванием, ни без подчеркивания. Почему так?

Компилирую из командно строки (пикрелейтед).

Ответы>>878903>>879097

20 Ноя, 17:02 #429 #878894

>>878850
Хендлы.

sage 20 Ноя, 17:08 #430 #878899

>>878850
> Не покидает ощущение того, что организовываю все это ебано, возможно есть лучший варик как это сделать
Да. GC.

sage 20 Ноя, 17:11 #431 #878903

>>878860
> WinAPI
> UTF-16 вместо кодировки
Зря ты за это взялся.

Ответы>>878909

20 Ноя, 17:15 #432 #878907

Окей, реализовать обычный стек для обычных числел, ноу проблемс.
Допустим stack[n] или вообще (int )malloc(ij*sizeof(int))
Не могу придумать, как в стэк пихать 2D массивы?
Гугл молчит, либо я слепошарый.

Ответы>>879097

20 Ноя, 17:19 #433 #878909

>>878903
Какая кодировка сейчас в тренде? Что актуальные пацаны хайпают?

Ответы>>878910>>878929

sage 20 Ноя, 17:20 #434 #878910

>>878909
utf8 же

Ответы>>879097

20 Ноя, 17:45 #435 #878929

>>878909
ascii

20 Ноя, 19:55 #436 #879097

>>878860
Ты представляешь, как препроцессор работает? Ты определяешь UNICODE после включения windows.h, и в результате в windows.h (точнее, в одном из включенных из него хедеров) TCHAR дефайнится как CHAR. Очевидно, чтобы возникла ошибка, надо сделать -DUNICODE в командной строке или дефайн до инклуда.

>>878910
> UTF-8 в Windows
И кодировать туда-сюда на каждый вызов API. Охуенный совет. Не говоря уже о проблемах самой UTF-8, удобной лишь для передачи текста, а не для обработки.

>>878907
Указатели пихай или поясни, зачем ты собрался пихать в стек массивы по значению.

Ответы>>879109>>879360

sage 20 Ноя, 20:04 #437 #879109

>>879097
>И кодировать туда-сюда на каждый вызов API.
Всю жизнь собрался сидеть в WinAPI и дальше локалхоста не вылазеть?
> Не говоря уже о проблемах самой UTF-8, удобной лишь для передачи текста, а не для обработки.
Ахахаххаахахахахаха! Вангую бред про "доступ к символу по индексу".

utf8 прекрасна для всего!

Ответы>>879112

20 Ноя, 20:07 #438 #879112

>>879109
> utf8 прекрасна для всего!
То-то гугл глупый и андроендах использует UTF-32.

Ответы>>879113>>879117

sage 20 Ноя, 20:08 #439 #879113

>>879112
> андроендах использует UTF-32.
В каком конкретно месте?

Ответы>>879118

45 Кб, 721x306

sage 20 Ноя, 20:11 #440 #879117

>>879112
>То-то гугл глупый и андроендах использует UTF-32.

20 Ноя, 20:11 #441 #879118

>>879113
sizeof(wchar_t) в NDK, очевидно же. Да, доступ по индексу. Да, необходимость бранчей или таблиц для вычисления длины строки. А еще инвалидный UTF-8, приводящий к уязвимостям. А еще невозможность порезать строку нормально.

Ответы>>879123>>879156

sage 20 Ноя, 20:15 #442 #879123

>>879118
>sizeof(wchar_t) в NDK
Пхе-хе-хе, при чём тут android, это libc, старающаяся быть совместимой с glic.
> Да, доступ по индексу.
ﬄ — вот 3 буквы. Получи по индексу доступ ко второй.
> Да, необходимость бранчей или таблиц для вычисления длины строки.
define "длина строки". Для меня и strlen "длина строки".
> А еще инвалидный UTF-8, приводящий к уязвимостям.
Проблема уязвимых библиотек.
> А еще невозможность порезать строку нормально.
Раскрой мысль.

Ответы>>879147

sage 20 Ноя, 20:40 #443 #879147

>>879123
> вот 3 буквы
Я про буквы не говорил. Про то, как юникод устроен, я знаю, и про combining characters тоже, и про лигатуры. Но я вполне могу юникод нормализовать, хранить его нормализованным в UTF-32 и потом что-то в таком виде с символами сделать (например, проверить класс по табличке). И делать это проще, когда у тебя codepoint - одна сущность, а не когда тебе ее нужно сначала из байтиков собрать, да еще не забыть на валидность проверить.

> Для меня и strlen "длина строки".
> Проблема уязвимых библиотек.
Нет, вопрос сложнее. Например, я закодировал \0 в виде двух байтов. У либц (strlen, в частности), твоего кода и библиотечного кода могут быть совершенно разные взгляды на этот символ (и это правильно, потому что подход зависит от цели обработки, а та же либц про твои цели нихуя не знает). Кто-то это выбросит, кто-то заменит, кто-то ошибку вернет, а кто-то пропустит.

> А еще невозможность порезать строку нормально.
snprintf() и случай, когда строка не влезла в буфер. Возникают веселые спецэффекты.

Ответы>>879153

sage 20 Ноя, 20:49 #444 #879153

>>879147
> проверить класс по табличке). И делать это проще, когда у тебя codepoint - одна сущность, а не когда тебе ее нужно сначала из байтиков собрать, да еще не забыть на валидность проверить.
Нет, ну если у тебя единственная задача — проверять класс codepoint-а по табличке, то для тебя UTF-32 — лучший выбор.

> я закодировал \0 в виде двух байтов.
Искусственный пример. Если ввод должен прилетать откуда-то извне, он должен проверяться на валидность. К кодировке это отношения не имеет.

> snprintf() и случай, когда строка не влезла в буфер. Возникают веселые спецэффекты.
Чем же нам тут UTF-32 поможет?

Ответы>>879163

sage 20 Ноя, 20:51 #445 #879156

>>879118
>sizeof(wchar_t)
Не подскажешь аналог fopen, принимающий wchar_t?

Ответы>>879163

sage 20 Ноя, 20:59 #446 #879163

>>879153
> Чем же нам тут UTF-32 поможет?
> К кодировке это отношения не имеет.
Тем, что строка останется валидной. А вот если ты порежешь UTF-8 посередине codepoint, у тебя из проверенного, валидного юникода возникнет невалидный, но ПРОВЕРЕННЫЙ, со всеми вытекающими.

>>879156
> fopen()
Это вопрос про недостатки сишной либы, и к тому, какие имена файлов и в какой кодировке принимает ОС. Она может принимать исключительно 7-битный ASCII, если это ембеддед, может принимать исключительно CP866, а может вообще указатель на 16-байтовый бинарный GUID последнее - трустори, если что.

Ответы>>879169>>879172

sage 20 Ноя, 21:07 #447 #879169

>>879163
>Тем, что строка останется валидной.
Ой-ой-ой. Манявалидной, ты хотел сказать.
Никому нафиг не нужна валидная последовательность байт, люди на буквы смотрят =)

Думаешь, обрезание только по четырёхбайтовым границам спасёт тебя от кривых строк? Ха-ха-ха. До первого клиента, которому ты отрежешь accent-ы от буквы. Желаю успехов в объяснении ему что это валидно.

Кстати, сколько букв в следующей строке "ch"?

Ответы>>879180

sage 20 Ноя, 21:14 #448 #879172

>>879163
>Это вопрос про недостатки сишной либы
Это про преимущество. Хоть куда-то этот блядский wchar_t не пролез. Его вообще не должно существовать!
> какие имена файлов и в какой кодировке принимает ОС
Ну, кхе-кхе, кхе-кхе, тут может быть проблема. Но если ты принимаешь имена через аргументы командной строки, то должно, в идеале, работать везде.

sage 20 Ноя, 21:30 #449 #879180

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

> отрежешь accent-ы от буквы
Что лучше: оставить висеть акценты, пролететь мимо \0 в буфере или много позже вернуть из какой-то функции ошибку, когда ее никто не ожидает?

> Кстати, сколько букв в следующей строке "ch"?
Букв две.

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

Ответы>>879183

sage 20 Ноя, 21:32 #450 #879183

>>879180
> Что лучше: оставить висеть акценты, пролететь мимо \0 в буфере или много позже вернуть из какой-то функции ошибку, когда ее никто не ожидает?
Ничего не лучше. И UTF32 никак не поможет.

>Букв две.
Не всегда =)

20 Ноя, 21:37 #451 #879189

Можно ли и вправду научиться кодить, читая только мануалы?

20 Ноя, 22:38 #452 #879226

>>876376
Реальные задачи попробуй решать.

20 Ноя, 22:40 #453 #879229

>>877723
Какие в жопу фреймворки???
У Си только один вменямый инструмент для окон - GTK.

21 Ноя, 01:08 #454 #879360

>>879097
>зачем
Мне на вход подается ебаная куча матриц, и операторов между ними. Я должен всё это подсчитать, естественно умножение приоритетная операция. Ну я и подумал собирать матрицы и операторы в стек и постфиксной ротацией всё это вычислять.

Ответы>>879363

sage 21 Ноя, 01:25 #455 #879363

>>879360
Ну и сделай структурки (либо, если у тебя скаляры тоже есть - union сверху еще), и стек этих структурок.

21 Ноя, 17:56 #456 #879659

Анон, что здесь определяется и для чего?

typedef LONG (WINAPI * NtUnmapViewOfSection)(HANDLE ProcessHandle, PVOID BaseAddress);

Ниже по коду такая строчка:

NtUnmapViewOfSection xNtUnmapViewOfSection;

Ответы>>879664

21 Ноя, 18:00 #457 #879664

>>879659
Указатель на функцию.

Ответы>>879669

21 Ноя, 18:06 #458 #879669

>>879664
Нафиг он нужен, если можно вызвать саму функцию?

Ответы>>879671>>879704>>879736

21 Ноя, 18:07 #459 #879671

>>879669
А если неизвестно какую?

21 Ноя, 18:48 #460 #879704

>>879669
для шимминга, для реализации ООП (методы структуры), для реализации функторов, или для передачи функции в функцию

21 Ноя, 19:26 #461 #879736

>>879669
Эта функция была недокументированной на момент написания кода, и чтобы не кусать локти, если Microsoft вдруг ее уберет не уберет, к ней не стали линковаться статически.

21 Ноя, 20:34 #462 #879787

Как сделать что бы программа выполнялась пока не нажать определенною кнопку?

Ответы>>879790>>879794

21 Ноя, 20:37 #463 #879790

>>879787
while (!knopkah_is_on)
{
...
}

sage 21 Ноя, 20:42 #464 #879794

>>879787
ОС какая? И подробнее расскажи, чего тебе надо. Может, ты трояна пишешь, хз.

22 Ноя, 22:31 #465 #880515

Как мне выровнять ассемблерную ставку на дворд? http://ideone.com/kAflFC

Из-за того, что мои нопы не выровнены, поиск этой метки при помощи указателя на дворд пропускает их.

Ответы>>880519

22 Ноя, 22:41 #466 #880519

>>880515
Если это Microsoft, то просто align 4.

Ответы>>880521

22 Ноя, 22:44 #467 #880521

>>880519
Не понял. Покажи на примере. Такой код работает не так, как задумано.

http://ideone.com/PGOhV4

Ответы>>880557

175 Кб, 2282x2087

22 Ноя, 23:14 #468 #880544

Посоны, я вам свеженького баттхерта принес.
https://www.linux.org.ru/forum/development/13019524

Ответы>>880551

22 Ноя, 23:25 #469 #880551

>>880544
>2016
>быдло бугуртит от WinAPI

О времена! А раньше каждый школьник с компьютером был исследователем реестра винды.

Ответы>>880564

22 Ноя, 23:28 #470 #880553

https://github.com/coruws/malware/tree/master/beetle2

Вин.

Ответы>>880564

22 Ноя, 23:33 #471 #880557

>>880521
Хуй знает, что у тебя там задумано, но у меня все выравнивается, мессаджбокс выдает адреса, по которым начинаются твои нопы. Зачем ты ксоришь код и потом вызываешь полученный мусор?

Ответы>>880566

22 Ноя, 23:46 #472 #880564

>>880551
Раньше и трава была зеленее, и девки чаще давали.

>>880553
Очередной студент младших курсов.

22 Ноя, 23:48 #473 #880566

>>880557
Делаю протектор. В шеллкоде код между этими метками будет заксорен. Потом он расшифровывается, выполняется и снова зашифровывается.

23 Ноя, 17:54 #474 #880946

http://pastebin.com/vERrVKVZ

за что сатана предал меня ?

Ответы>>880947>>880956

23 Ноя, 17:55 #475 #880947

>>880946

struct one {
char a;
char b;
};

struct two {
struct one c;
struct one d;
};

void firstfunction(void source, void dest, int size)
{
memcpy(dest,source,size)
}

void secondfunction(struct two onedata)
{
struct two twodata;
firstfunction((void )onedata->c,(void )&twodata.c,2);
}

void main()
{
struct two onedata;
secondfunction(&onedata);
}

gcc -g -O2 struct.c -o struct
struct.c: In function ‘secondfunction’:
struct.c:19:2: error: cannot convert to a pointer type
firstfunction((void )onedata->c,(void )&twodata.c,2);
^~~~~~~~~~~~~
<builtin>: recipe for target 'struct' failed
make: [struct] Error 1

23 Ноя, 17:55 #475 #880947

>>880946

struct one {
char a;
char b;
};

struct two {
struct one c;
struct one d;
};

void firstfunction(void source, void dest, int size)
{
memcpy(dest,source,size)
}

void secondfunction(struct two onedata)
{
struct two twodata;
firstfunction((void )onedata->c,(void )&twodata.c,2);
}

void main()
{
struct two onedata;
secondfunction(&onedata);
}

gcc -g -O2 struct.c -o struct
struct.c: In function ‘secondfunction’:
struct.c:19:2: error: cannot convert to a pointer type
firstfunction((void )onedata->c,(void )&twodata.c,2);
^~~~~~~~~~~~~
<builtin>: recipe for target 'struct' failed
make: [struct] Error 1

Показать весь текст
Ответы>>880956

sage 23 Ноя, 18:09 #476 #880956

>>880946
>>880947
Всё верно.

Ответы>>880961

23 Ноя, 18:21 #477 #880961

>>880956
нихуя не верно. надо так

firstfunction(&onedata->c, &twodata.c,2);

и без приведений в данном случае если функция сразу укзатели на войды принимает

Ответы>>880963

sage 23 Ноя, 18:22 #478 #880963

>>880961
>нихуя не верно
Я имел ввиду, что gcc и сотона правы, предав тебя.

23 Ноя, 21:33 #479 #881119

В рекомендациях книжка Кернигана и Ритчи, в первой же главе -
while(getchar() != EOF)
Как передать ЕОF , если я предаю значение из командной строки в винде? В одном месте советуют ctrl+z, но нифига. Не работает.
CodeBlocks, Win7, TCC

Ответы>>881126

sage 23 Ноя, 21:45 #480 #881126

>>881119
ctrl+z работает если ничего не было введено после нажатия на enter

56 Кб, 712x1252

23 Ноя, 21:52 #481 #881132

>>869911 (OP)
Перепощу из треда ньфагов, тут вроде уместней?

Подскажите, почему запоминается последняя цифра, если цикл до 15, а цифр в числе 16?
Если я сделаю цикл до 16 значений, то а[16] запишется как 0.
Можете объяснить?

#include<stdio.h>

int main(void)
{
long long h;
do
{
printf("Card number:\n");
h = get_long_long();
} while(h<=0 || h>=9999999999999999 || h<1000000000000);
if (h<1000000000000000)
{
while (h<999999999999999)
h=h*10;
}
int a[16];
int b[16];
int i;
for(i=1; i<=15;i++)
{
printf("%i\n",i);
printf("%lli\n",h);
a[ i ] = (int)(h%10);
h = h/10;
printf("%i\n\n",a[ i ]);
}
for(i=1; i<=16;i++)
{
b[ i ] = a[17-i];
printf("%i ", b[ i ]);
}
}

Ну и ещё, подскажите, если знаете, как проще задать это ограничение на получаемое с клавиатуры число: положительное, от 13 до 16 знаков.

56 Кб, 712x1252

23 Ноя, 21:52 #481 #881132

>>869911 (OP)
Перепощу из треда ньфагов, тут вроде уместней?

Подскажите, почему запоминается последняя цифра, если цикл до 15, а цифр в числе 16?
Если я сделаю цикл до 16 значений, то а[16] запишется как 0.
Можете объяснить?

#include<stdio.h>

int main(void)
{
long long h;
do
{
printf("Card number:\n");
h = get_long_long();
} while(h<=0 || h>=9999999999999999 || h<1000000000000);
if (h<1000000000000000)
{
while (h<999999999999999)
h=h*10;
}
int a[16];
int b[16];
int i;
for(i=1; i<=15;i++)
{
printf("%i\n",i);
printf("%lli\n",h);
a[ i ] = (int)(h%10);
h = h/10;
printf("%i\n\n",a[ i ]);
}
for(i=1; i<=16;i++)
{
b[ i ] = a[17-i];
printf("%i ", b[ i ]);
}
}

Ну и ещё, подскажите, если знаете, как проще задать это ограничение на получаемое с клавиатуры число: положительное, от 13 до 16 знаков.

Показать весь текст
Ответы>>881404

24 Ноя, 12:24 #482 #881404

>>881132
Потому что индексы массивов считают от нуля.

24 Ноя, 12:32 #483 #881409

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

Ответы>>881432

24 Ноя, 13:15 #484 #881432

>>881409
void set_voobshe_lyuboy_callback(void *pointer_na_voobshe_chto_ugodno);

Ответы>>881436>>881488

24 Ноя, 13:28 #485 #881436

>>881432
А если у функции больше одного аргумента?

Ответы>>881459

24 Ноя, 13:47 #486 #881459

>>881436
> pointer_na_voobshe_chto_ugodno
> voobshe_chto_ugodno
Алсо, объясни, что ты будешь с этим колбэком делать, тогда тебе, может быть, и посоветуют.

Ответы>>881462

24 Ноя, 13:54 #487 #881462

>>881459
Пока у меня только теория. По идеи просто выполнять функцию при определённых условиях. Что с ним ещё можно сделать?

24 Ноя, 14:34 #488 #881488

>>881432
Попробовал на практике, когда я вызываю указатель на вообще что угодно мне говорят что "pointer_na_voobshe_chto_ugodno is not a function or function pointer".

Ответы>>881524>>881617>>881641

24 Ноя, 16:40 #489 #881524

>>881488
ALLO
Нет, серьёзно, я спатьки хочу.
Анончик-анончик, ответь мне.

69 Кб, 474x700

24 Ноя, 20:02 #490 #881617

>>881488
> 1488
Указатель, чтобы его вызвать, надо сначала скастовать к тому же самому типу, каким была объявлена функция (иначе undefined behavior). Вот тебе пример. Сначала объявляешь типы своих колбэков (решетку везде заменяй на звездочку):
typedef int (#GovnoPtr)(int arg1);
typedef void (#MochaPtr)(int arg1, char #arg2);
Потом делаешь enum с перечислением своих типов:
enum CallbackType {CALLBACK_GOVNO, CALLBACK_MOCHA};
В свою йоба-функцию-обработчик ты скармливаешь не только указатель на колбэк, но и его тип:
void zaloopa(void #callback_ptr, enum CallbackType type) {
if (type == CALLBACK_GOVNO) {
int result = ((GovnoPtr) callback_ptr)(1488);
} else {
((MochaPtr) callback_ptr)(359, "MYTISCHI UNITY HARDCORE");
}
}
Как-то так.

Ответы>>881755>>881785

sage 24 Ноя, 21:05 #491 #881641

>>881488
> вызываю указатель
PSSSHHHH UKAZATEL ETO TY?

Ответы>>881753

25 Ноя, 01:11 #492 #881753

>>881641
FREE 5 FREE 5 ХОРОНИ ПАМЯТЬ, ХОРОНИ ГОВОРЮ

25 Ноя, 01:25 #493 #881755

>>881617
сук пиздез, блеванул от этой хуйни

Ответы>>881758

25 Ноя, 01:36 #494 #881758

>>881755
Предложи свой вариант.

25 Ноя, 05:31 #495 #881785

>>881617
Бляяяя, пиздец.

Я либу пишу, в либе есть функция, которая должна принимать функцию из внешней программы, которая пользуется этой либой. Так вот, мне нужно юзерфрендли! Чтобы просто всё было. А тут... Бляяя, пиздец. Бляяя, пиздец!

Ответы>>881786

25 Ноя, 05:46 #496 #881786

>>881785
> принимать функцию из внешней программы
Нельзя вызвать функцию, не зная ее тип.

> мне надо чтобы функция могла принимать ваще любую функцию
Поясни, зачем. Скорее всего, ты хочешь void (∗ callback)(void ∗user_data) - это нормальная практика, максимум юзер-френдли. Ну или в крайнем случае проебать типы и void (∗ callback)(int paramspec, ...), но для этого варианта нужны серьезные основания.

Ответы>>881787>>881796

25 Ноя, 05:56 #497 #881787

>>881786
Да, уже дошло, сделал так void (*callback)(void).

25 Ноя, 07:38 #498 #881796

>>881786
Анон, ещё один небольшой вопрос. Вот передал я функцию callback в функцию, а как мне в этой функции записать принятый callback в указатель?

25 Ноя, 07:50 #499 #881797

Ты уже принимаешь указатель на фунцию. Хочешь его куда-то записать - объяви другой указатель на функцию и используй = для присваивания. Или покажи код.

Ответы>>881801

25 Ноя, 07:58 #500 #881798

Есть тут кто нибудь?
Один вопрос по си

Ответы>>881799

25 Ноя, 07:59 #501 #881799

>>881798
Никого нету. Но ты все равно спрашивай.

Ответы>>881800

25 Ноя, 08:03 #502 #881800

>>881799
Окей, например

...
char A[5];
char B[] = "hello3"

Из строки B переписать в А только цифры.

Да, вопрос глупый, но я хз
В интернете ничего не нашел

Ответы>>881802>>881803

25 Ноя, 08:03 #503 #881801

>>881797
Спасибо.
Я, идиот, делал ptr = callback(); а надо было ptr = callback;

25 Ноя, 08:10 #504 #881802

>>881800
Помогите пожалуйстаа

25 Ноя, 08:11 #505 #881803

>>881800
Ну объявляешь указатели на оба массива. В цикле читаешь символы по указателю на B, если прочитал '\0' - выходишь из цикла, если прочитал что-то, для чего isdigit() вернул ненулевое значение - пишешь символ по указателю на буфер A. После выхода из цикла пишешь '\0' по указателю на буфер A. Про инкременты указателей не забудь. Алсо, можешь сделать то же с индексами, а не с указателями.

Ответы>>881809

ПЕРЕКАТ # OP 25 Ноя, 08:19 #506 #881808

>>881807 (OP)
>>881807 (OP)
>>881807 (OP)
>>881807 (OP)
>>881807 (OP)

2203 Кб, 3264x2448

25 Ноя, 08:22 #507 #881809

>>881803
Делаю с индексами, она почему то ругается

Ответы>>881812

25 Ноя, 08:28 #508 #881812

>>881809
Ты не можешь присвоить массив, прочитай в правой части от = нужный тебе символ.

Ответы>>881814>>881815>>881816

2604 Кб, 3264x2448

25 Ноя, 08:30 #509 #881814

>>881812
Только не А катое

6 Кб, 412x90

sage 25 Ноя, 08:33 #510 #881815

>>881812
Забыл k инициализировать. Ну да похуй, пикрелейтед.

Ответы>>881817

2612 Кб, 3264x2448

25 Ноя, 08:33 #511 #881816

>>881812
Так правильнее?

2847 Кб, 3264x2448

25 Ноя, 08:40 #512 #881817

>>881815
Ахахахах, пиздец
Да мне кажется мой препод тут ничего кроме while не поймет
Бтв, все равно ругается

Ответы>>881819

25 Ноя, 08:42 #513 #881819

>>881817
Ну оно же тебе на чистейшем русском языке говорит, что у тебя не так.

Ответы>>881825

25 Ноя, 09:09 #514 #881825

>>881819
Да, спасибо
Доделал, все работает правда пришлось новые слова учить, но это даже хорошо
Спасибо большое, анон

Тред утонул или удален.
Это копия, сохраненная 13 декабря 2016 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion