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

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
78 Кб, 792x1023
C Programming Language #13 # OP #856777 В конец треда | Веб
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Что читать:

- Классика от Отцов: 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/

Шапка: http://piratepad.net/bJ1SdmkZyu
#2 #856791
первый
#3 #856798
&thread
#4 #856802
Поясните за CLang. Слышал краем уха, думал, это очередная IDE/конпелятор, а это

>транслятор для C-подобных языков, созданный специально для работы на базе LLVM


Получается, как java или c# работает? В чем плюсы и минусы по сравнению с любым другим конпелятором?
>>856817>>856905
#5 #856817
>>856802

> как java или c# работает


Не совсем. Java и C# компилируются в набор инструкций виртуальной машины, а затем, при выполнении программы, В используется JIT (just-in-time compiler), чтобы преобразовать этот код в нативные инструкции. И хотя LLVM тоже можно использовать в качестве JIT, у clang по умолчанию на выходе нативный код.
Плюсы/минусы - ну, например, нормальная архитектура, один жирный бинарник, который умеет кросскомпилировать, а лицензия позволяет не давиться мозолями. И либы. А ещё -Weverything. Оптимизация иногда лучше GCC, иногда хуже. Часто ворнинги более понятные.
>>856906>>856910
41 Кб, 732x251
101 Кб, 1202x677
#6 #856835
Пишу задачу Иосифа Флавия и столкнулся с такой проблемой. Разбил проект на три части - main.c, заголовочный файл и файл с функциями. Код не доходит до третьего захода и в итоге выводит двух выживших вместо одного. Собственно, как видно на пикрелейтеде, из 10 воинов, где должен умереть каждый второй, в итоге должен выжить воин под номером 5. У меня же их остается двое. Компилятор ругается и выдает ошибку. Очевидно, что проблема в освобождении динамической памяти, но я совсем запутался и не понимаю, как это сделать. Помогите дауну.
http://ideone.com/zXxyH5
>>856849
#7 #856849
>>856835

> Очевидно, что проблема в освобождении динамической памяти


Очевидно, что если a - указатель на int, то со звездочкой ты кормишь в free() просто int, а free() хочет указатель на int. Убери звездочку.
#8 #856905
>>856802

>Получается, как java или c# работает?


Как любой компилятор. Просто используется отдельное и документированное промежуточное представление.
#9 #856906
>>856817

> Java и C# компилируются в набор инструкций виртуальной машины


Нередко и прямо в машкод компилят.
gcj для Java и Xamarin под iOS
>>856910
#10 #856910
>>856906

>Нередко


Сильно сказал. Очень. это самая маргинальная хуйня что только можно найти.
>>856817

>затем, при выполнении программы


Тут вообще нужна ремарок чтобы не путать нюфагов: ява занимается этим при каждом запуске, дотянет — только при первом и переводит дело в машинный код, а не интерпретирует как жява.
#11 #856921
Анон, помоги с этой хуйнёй, возможно для тебя это пустяк, но я не осилил.

>>392651

#12 #856995
Решил на досуге изучать СИ по всяким кинжкам и интернетам. Задача такова.
while (scanf != EOF) туда вбиваются цифры, дальше в этом лупе я проверяю кажде число на четность/нечетность, положительное\отрицательное и т.д-
Далее всё это дело я естественно printf.
Но, нужно ещё вывести все цифры, которые я там вводил, через запятую. Окей, не проблема. Но как убрать запятую у последней цифры?
>>856996>>857032
#13 #856996
>>856995
Ах да, массивы не использую.
#14 #857032
>>856995
Выводи запятую перед следующим числом, а не после предыдущего.
>>857039
#15 #857039
>>857032
Только тогда запятая появляется перед первым числом..
>>857041
#16 #857041
>>857039
Чтобы этого не было, ты заводишь переменную, которую меняешь после первого числа, и проверяешь ее значение при выводе.
>>857053
#17 #857053
>>857041
Что-то я туплю совсем.
Код:
http://pastebin.ru/C9zXlvg7

Может я вообще плохо написал и то, что мне нужно, вообще никак не выйдет?
>>857102
203 Кб, 1366x571
#18 #857094
Аноны, что я делаю не так, почему получается эллипс, а не ровный круг?
>>857096>>857561
#19 #857096
>>857094
Ты забываешь, что символы в консольке у тебя не квадратные, а вытянутые.
#20 #857097
Только начал изучать прогу и у меня возникла проблема: в начальных легких задачках обычно нужно вводить какие-либо цифры, а затем уже происходит их подсчет и бла бла бла. А если я ввожу буквы, происходит зацикливание программы.
Как сделать защиту ввода в си, чтобы при введении любой хуйни, кроме цифр, минуса и точки програ не заедала?
Я пытался найти в интернете, но там только по с++ есть.
>>857105
Какашечка #21 #857098
мозголомство:
из большого набора данных строится связанный список. при изменении данных список перестраивается, что очень плохо. есть идея запилить кэш, при изменении данных проверять на наличие в кэше, если попадает, перестраивать список, иначе ничего не делать. кэш реализовать как хэш) но как то это все громоздко. есть идеи/примеры получше?
#22 #857102
>>857053
Если в двух словах, то чтобы выводить числа, их надо сначала где-то хранить - в массиве или динамически выделенной памяти. Однако в твоем конкретном случае можно воспользоваться грязным костылем тем фактом, что у stdin есть свой буфер, в котором хранится строка, пока ты ее печатаешь, и в scanf она попадает только после того, как ты нажимаешь энтер (или ввел оче много символов), так что вывод ты можешь написать прямо в цикле scanf'а.
>>857103
#23 #857103
>>857102
Вот спасибо. Я то как раз и пытался понять, как и куда вообще эти числа без массива сохраняются.
#25 #857399
Я тут столкнулся с необходимостью быстро сортировать. А так как ничего быстрее пузырька написать не могу, хочу использовать встроенную функцию c++.
Например задача:
разноцветные склянки в a[10] хранится цвет.
А в b[10] их вес.
Как мне их так отсортировать, по весу, чтобы цвета тоже поменялись?
>>857416
#26 #857416
>>857399
У нас тут как бы сишечка, а не кресты. В сишечке ты можешь объединить вес и цвет каждой склянки в единую структуру, хранить массив таких структур, и уже его сортировать (например, с помощью qsort()). Если тебе религияпрепод запрещает складывать свойства одного объекта в единую структуру, ты можешь объявить третий массив, int sorted[10], заполнить его индексами объектов (от 0 до 10), и заставить qsort отсортировать его, чтобы упорядочить индексы в sorted по возрастанию веса соответствующих им склянок. Так как оригинальные массивы останутся неотсортированными, ты сможешь иметь несколько таких "вьюшек", отсортированных по разным параметрам, не дублируя при этом сами данные. http://ideone.com/Uu7Ia3
>>857455
#27 #857455
>>857416

>У нас тут как бы сишечка, а не кресты.


Привыкай, пока плюсовой тред не перекаты все нюфаги будут спать здеся.
#28 #857561
>>857094
Один по горизонтали стоит двух по вертикали. Это для дефолтного шрифта.
#29 #857683
Нашел годную статью про то, чем лучше sublime напичкать разработчику c/c++, но сам еще не пробовал. Может, пригодится кому: https://izevg.ru/blog/2015-04/gotovim-sublime-text-3-dlya-razrabotki-c-cplusplus-koda
>>858598
#30 #857820
Как записать в Си d = e^-1 mod m?
'e' и 'm' у меня известно, e^-1 равносильно 1 / e, но что делать дальше?
#31 #857824
>>857820
double d = (1/e) % m;
>>857825>>857835
#32 #857825
>>857824
СМЕХ
#33 #857826
>>857820
Крептографея, что ли?
>>857827
#34 #857827
>>857826
ага, RSA пишу
>>857828
#35 #857828
>>857820
>>857827

>d = e^-1 mod m


Это значит что надо найти такое e, что
e*d = 1 mod m

>>857820

>e^-1 равносильно 1 / e


В каком смысле "равносильно"? Это всё целые числа, там нет 1/e
#36 #857830
>>857828
* найти такое d
#37 #857835
>>857824
Ответ всегда будет 0, ведь 1/e будет 0. ......
Значит неправильно :(

>>857828
ага, понял. Но ведь 1 mod m всегда будет равно 1, я правильно понимаю? m всегда будет целым числом. Как и с e / 1, я просто беру об. калькулятор и считаю там.
>>857844
#38 #857838
сап, я школь, мне 13. учителя по ИКТ, которая началась у нас два года назад, забивали на нас болт и давали делать задания для аутистов. понимаю, что программирование пригодится мне в жизни, но не знаю с чего начать. думаю: чем раньше начну, тем будет лучше. подскажите с чего начать
#39 #857840
Ладно, попробую сделать так: Допустим m = 8;

буду умножать на его любое число и добавлять единицу. Из результата буду смотреть 2 множителя, которые и будут ключами.

8 1 + 1 = 9 >>> 3 3 // не подходит (одинаковые)
8 2 + 1 = 17 >>> // правильное число
8
3 + 1 = 25 >>> 5 5 // не недходит
8
4 + 1 = 33 >>> 3 * 11 // подходит. e = 3, d = 11.

Правильно ли я поступаю?

Спасибо анону >>857828 за наводку
>>857845>>859469
#40 #857844
>>857835

>1 mod m всегда будет равно 1


ed = 1 (mod m)
Т.е. остаток от деления e
d на m равен 1
#41 #857845
>>857840

>Правильно ли я поступаю?


https://en.wikipedia.org/wiki/Modular_multiplicative_inverse
Есть стандартный алгоритм для этого
#42 #857863
>>857838

>подскажите с чего начать


http://wiki.nsunc.com/haskell
56 Кб, 300x300
#43 #857920
>>857838

> подскажите с чего начать

>>858535
5 Кб, 748x90
9 Кб, 700x127
#44 #857950
Аноны, помогите с дебагером. Запускаю в IDA отладку x64 приложения, отладчиком выбираю Bochs. Не идёт отладка. Где-то надо конфиг править? На первом скрине - как выглядит в IDA дизассемблированный файл, на втором - что получается при отладке. Что за stosb инструкция появляется? Должно быть jmp start_0_0. Ida (или bochs) пытается запустить эмулятор как 32 битный?
6 Кб, 333x125
#45 #857958
>>857950
Ну вот чего ему не хватает? Функция под 380 ординалом есть и в 32, и в 64 битной версии.
#46 #857979
>>857950
А с другим отладчиком работает? Или может в отлаживаемой программе дело?
>>858140
#47 #857981
>>857950
Может быть, ты расскажешь немного больше, чтобы мы тут не занимались гаданиями по скриншотам?
>>857984
#48 #857984
>>857981
Нет. Вы тупые, если не понимаете, что там. Пойду отсюда лучше.
#49 #858140
>>857979
Дело не в отлаживаемой проге. Скрин от 64 битного калькулятора из стандартной поставки. Библиотеку Ida(или bochs) загружает нормально, а функцию не находит. В первом случае нормальная инструкция jmp addr вдруг превращается в stosb. 32 битные приложения так же нормально не отладить. Не так всё просто с bochs, как мне казалось. Сейчас посмотрел на выполнение функции GetStartupInfoA.
mov eax, offset kernel32_GetStartupInfoA
call bochsys_BxUndefinedApiCall
Это нужно каждую функцию в настройках описывать, как выполнять?
>>858153
#50 #858153
>>858140
Bochs предназначен не для отладки обычных программ, а для эмуляции относительно небольших кусков кода. Например, декрипторов у малвари - встал на декриптор, получил расшифрованный код / ключ / расшифрованный урл, откуда оно качает payload, анализируешь. И да, конечно же, для этого тебе придется описывать вызываемые API.

Если ты не знаешь, почему тебе нужен именно Bochs - например, тебе хочется отладить калькулятор, отлаживай обычным отладчиком (Local Windows Debugger). Алсо, чаще всего, если ты опасаешься плохого поведения программы, проще (возможно, удаленно) отладить ее внутри VM, чем ебаться с Bochs.
>>858163
#51 #858163
>>858153
Хотел раздебажить программу, защищённую протектором. Протектор завершает программу, если обнаруживает hardware breakpoint, точки останова на системных функциях и прочие вещи. Не знаю, как он это делает, нет опыта работы с протекторами. Думал, что bochs может подойти для этого. Теперь понятно, что у него более узкие цели использования.
#52 #858186
Как не обсираться с памятью в сишечке? Есть какой-то мануал на все случаи жизни?
>>858188>>858568
#53 #858188
>>858186

>Как не обсираться с памятью в сишечке?


Не писать на сишечке, когда можно
>>858190
#54 #858190
>>858188
Но я хочу писать на сишечке всегда, так как писать на ней очень приятно. А ещё я хочу писать хорошо, освобождать память когда надо, выделять память когда надо, что читнуть?
>>858220>>858537
#55 #858219
soC i bolshe ne proC
#56 #858220
>>858190
жабку читни
#57 #858247
Объясни добродвач почему этот код нормально работает?

int main (argc, argv )

int argc; char argv;
{
return EXIT_SUCCESS;
}
>>858249>>858325
#58 #858248
fix
char argv;
#59 #858249
>>858247
А что не так?
#60 #858250
2fix
char argv[][];
#61 #858252
Хочу понять тонкость этого синтаксиса.
>>858256
#63 #858325
>>858247
Потому что твой компилятор поддерживает древний синтаксис. Так писали до принятия стандарта ANSI C'89.
#64 #858529
Ананасы, как можно для sublime 3 скачать пакеты и поставить их без инета? С анакондой просто дома установить и скопировать потом файлы на работе прокатило, с плагинами для c/c++ вообще нихуя. Пиздец, какое же уебанство, когда все думают, что везде есть доступ в интернет, и можно нужные пакеты/документацию подтянуть. Все, кроме твоего работодателя, блять.
#65 #858530
>>858529

> Все, кроме твоего работодателя, блять.


БЕГИ ОТТУДА, ДУРАК, ПОКА ЕСТЬ СИЛЫ
>>858531
#66 #858531
>>858530
Вся ирония в том, что я две недели назад только туда устроился. Когда устраивался, собеседовался в отделе N, там инет был, я видел. А устроили меня в итоге в отдел M, и вот тут началось самое веселое.
#67 #858535
>>857920
Ох этот пда.
#68 #858537
>>858190
Си пляс пляс читни.
#69 #858567
>>858529
У тебя нет инета на работе? А что если нужно что-то загуглить по работе? Сосать хуй?
>>858575
#70 #858568
>>858529
Поставь дома, скопируй профиль Sublime целиком (в portable-режиме это папка Data). Можешь вручную пакеты выкачать и скинуть в Data/Installed Packages, алсо в пакетах есть .json-ы, в них могут быть описаны зависимости.

>>858186

> Как не обсираться с памятью в сишечке?


Всегда помнить, что ты пишешь на сишечке. Писать на сишечке. Это навык, как ковырять в носу. Если не будешь ковырять - не научишься.
>>858575
#71 #858575
>>858567
Есть отдельный комп в отделе, с него можно гуглить.
>>858568

>в portable-режиме


Я не знал, что его портабельным можно поставить. Как это сделать? Не помню, чтобы я видел такую опцию при установке.
Я думал, может, пути разные - пакеты лежат ведь в AppData пользователя, а у меня разные имена пользователей на компах.
А как вручную пакеты скачать? Не нашел у многих такой возможности.
>>858591
#72 #858591
>>858575

> как это сделать


https://www.sublimetext.com/3dev - есть ссылки на zip-архивы, которые установки не требуют.

> пакеты лежат ведь в AppData пользователя, а у меня разные имена пользователей на компах


Похуй должно быть, там обычно не используются абсолютные пути.

> А как вручную пакеты скачать?


Сходи на https://packagecontrol.io/, найди пакет, на странице описания есть ссылка на гитхаб, на гитхабе просто .zip сохраняешь (Clone or download) и меняешь расширение на .sublime-package. Или
https://packagecontrol.io/channel_v3.json распарси чем-нибудь. Но лучше не занимайся хуйней, а сделай что-нибудь с интернетами на работе. Модем под пряжкой ремня протащи, хуй знает.
>>858598
#73 #858598
>>858591
О, вижу, спасибо.

>Похуй должно быть, там обычно не используются абсолютные пути.


Тогда очень странно. Видимо, в реестре что-то прописывается или в других каких-то местах, потому что у меня анаконда с ошибкой стартует, но работает, а из >>857683 списка ни один не заработал. Дома, естественно, всё работает нормально.

>на гитхабе просто .zip сохраняешь (Clone or download)


Просто у некоторых есть именно zip, но я не понял, как его скормить саблайму, а где-то просто сборище сорцов, я думал, он такое не схавает.
Инет на работе не замутить - пизды дадут скорее всего. Я думаю, там из-за секретности разработок его нет.
#74 #858634
Ананасы, обязательно ли использовать fPIC?
Я щас скомпильнул либу без него, и все нормально работает.
Или либа будет работать только на моем компе?
>>858640
#75 #858640
>>858634
32-битные либы можно без PIC, будут использоваться релоки, как у нормальных людейв Windows.
>>858643
#76 #858643
>>858640
Ну а вообще? Лучше с фпиком?
>>858648
#77 #858647
Лан ананасы я узнал. Лучше с пиком.
#78 #858648
>>858643
На x86 спорно, компилятору приходится делать немного больше телодвижений и по сути лишиться одного из регистров для достижения этого самого PIC, но зато системе не приходится ничего патчить при старте, и дублировать из-за этих патчей страницы кодовой секции между разными пользователями либы.
#79 #858820
void bump(void);
#80 #859194
Как нормально считать строку с пробелами? Используя gets() CLion просто перечеркивает функцию, и говорит что использовать её неправославно.
>>859210>>859225
#81 #859210
>>859194
Разобрался. Вся проблема в Clion. В code::blocks и VS все отлично работает. CLion почему-то не любит gets, и напрочь отказывается работать с fgets. Просто скипает её.
sage #82 #859225
>>859194

>Используя gets() CLion просто перечеркивает функцию, и говорит что использовать её неправославно.


И он прав. В C11 функцию вообще выпилили. А вот fgets() остиалась, ее и используют.
#83 #859226
Антуаны, есть строка {a, b, c}
Как мне сделать массив int со значением этой строки в аскии-коде? То есть {a, b, c} = {97, 98, 99} ?
>>859227
#84 #859227
>>859226
Поясни. Строка "abc" или "{a, b, c}"? Если первое, то это массив char, просто скопируй в цикле ints[n] = string[n]. Если второе, то тебе нужен синтаксический разбор. Используй strtok, чтобы найти запятые.
>>859233
#85 #859233
>>859227
Давай разберем по частям мною написаное

Есть массив char*, который заполняется пользователем:
char text [100];
fgets (text, 100, stdin);

Допустим пользователь вводит abc

Мне нужно добавить к каждому значению его ввода 10. То есть a, b и с представить в Аскии-коде (97, 98, 99), и сделать (107, 108, 109). Результат записать обратно в другой массив char. В нем должно быть (k, l, m) по аскии.
>>859236>>859246
#86 #859236
>>859233
Я сначала подумал просто сделать массив интов со значениями, но потом понял что надо именно второй массив делать чаровский. Проблема как раз стоит в переводе числа. Если например вывести text[1] в "%i", то получу не аски-код, а мусор типо 1274863
#87 #859246
>>859233
Так текст и так всегда представлен числами, тебе не нужны дополнительные телодвижения.
for (size_t j = 0, n = strlen(text); j < n; j++) {
printf("before: %c (%i); ", text[j], text[j]);
text[j] += 10;
printf("after: %c (%i)\n", text[j], text[j]);
}
>>859252>>859253
sage #88 #859252
#89 #859253
>>859246
Спасибо, так получилось. Только вылез другой трабл. Добавить 10 это я просто сделал такой пример. По задаче мне надо каждую бувку поднести в n степень и поделить на число m. Остаток от деления и будет результат. При маленьких числах всё работало, но с такими уже ествественно не хочет.

При
for (int i = 0, n = strlen(text); i < n; i++) {
secretText = pow(text, e) % m;
printf ("%c", secretText);
}

получаю error: invalid operands of types ‘__gnu_cxx::__promote_2<char, long unsigned int, double, double>::__type {aka double}’ and ‘long unsigned int’ to binary ‘operator%’|
#90 #859256
>>859253
Забыл добавить, что у меня 'e' это 3, а 'm' это 8.
#91 #859257
>>859253
secretText = pow(text, e) % m;
проебалось при копипасте
#92 #859287
>>859253
А, ты RSA пилишь? Ты делаешь это неправильно. pow предназначен для вычислений с плавающей точкой и не гарантирует тебе точный результат для таких маленьких чисел, на самом деле, гарантирует, но лучше напиши свой целочисленный modpow(n, e, m): умножай n саму на себя, сколько нужно раз, и при каждом умножении, чтобы не переполнить переменную, сразу делай % m (потом допилишь это до полноценной длинной арифметики). Алсо, твой m должен быть произведением двух простых чисел, а у тебя сколько в нем множителей и какие?
>>859469
21 Кб, 343x363
#93 #859346
Почему в данном случае name выделяется память, а path нет?
>>859356>>859371
78 Кб, 1145x190
#94 #859350
Обратите внимание, почему такая разность кривая получается? Он что, не умеет вычитать два double-числа?
>>859371
sage #95 #859356
>>859346
man 3 getenv
#96 #859371
>>859346
Потому что создается новый, свой собственный объект name, а уже существующий path, созданный кем-то раньше, получают извне. Конкретно в случае с getenv(), память для значения переменной окружения выделяется во время запуска программы. В какой-то другой реализации getenv() могла бы так же внутри себя вызывать malloc().

>>859350
Он-то умеет. Ты - нет. Числа с плавающей точкой по определению не могут хранить любые значения, поэтому они хранят приближенные значения, достаточно точные относительно порядка числа. И с такими огромными числами, как у тебя (а они больше, чем максимальное целочисленное значение, которое влезает в double без потерь), тыщей меньше или больше - особой разницы нет. Если тебе зачем-то нужна большая точность, попробуй long double.
>>859374
37 Кб, 928x245
#97 #859372
Помогите, аноны. Несколько дней мучаюсь.
Почему-то scanf, вместо того, чтобы считать новый символ с потока, пишет в переменную предыдущий введеный, и программа впадает в бесконечный цикл.
http://pastebin.com/6jqmBT05
>>859379
#98 #859374
>>859371

> long double.


А вот с ним та же хрень
>>859379
#99 #859379
>>859374
Может и long double не хвтать. А %lf указываешь? Если тебе нужно фиксированное число знаков после запятой и большие числа, посмотри в сторону fixed-point.

>>859372
После того, как scanf() сфэйлилась, пользовательский ввод еще в буфере ввода. И поэтому вот там, где ты просишь пользователя выбрать correct menu item, прочитай весь остаток текущей строки (просто вызывай getchar() в цикле, пока не встретишь \n).

Более правильный метод - нигде, кроме laba1.c, не пользоваться этим говном. Вместо этого лучше читать предварительно целую строку ввода с помощью fgets() или еще как-нибудь, а потом уже парсить - хочешь, тем же sscanf(), а хочешь - strtod()/strtol() и прочими. Тогда, при ошибке, ты просто выбросишь строку и сделаешь fgets() снова.
>>859380>>859382
#100 #859380
>>859379

> А %lf указываешь?


Блин, такого не должно быть...
Ладно, мои траблы.
>>859381
#101 #859381
>>859380
Ну, всмысле указывал
>>859383
#102 #859382
>>859379
Большое тебе спасибо!
#103 #859383
>>859381
Там заглавная L. Всегда путаюсь, извини.
1840 Кб, 2976x2976
#104 #859420
Аноны, помогите дауну. Есть пикрилейтед программа. Как сделать так, чтобы какому-нибудь новому массиву типа char присваивалось значение, которое в данной программе является выводом, то есть как, сделать так, чтобы создавалась новая строка (например) str3[]="cccdd". Желательно, напишите работающую программу (я в программировании месяц, постараюсь поумнеть).
>>859421
#105 #859421
>>859420
rez на пике указывает на нужный тебе кусок строки. Все, что тебе нужно сделать, это создать буфер достаточного размера и скопировать туда этот кусок:
char str3[16];
strcpy(str3, rez);
#106 #859469
>>859287
Да, это RSA. Спасибо что подкинул идею, сегодня на парах попробую реализовать.

>вой m должен быть произведением двух простых чисел



У меня m = (p-1) + (q - 1), где p и q целые простые числа, и p != q.
Поиск скрытого и открытого ключа я реализовал как тут >>857840. Допустим при вводе 3 и 5, m = 8, потом через функцию поиска ключей получаю e = 3, d = 11.
http://pastebin.com/pFBUuEEi
>>859562
#107 #859562
>>859469

> у меня m = (p-1) + (q - 1)


Это стандартная путаница. В математике про вычисления по модулю говорят как о (mod m), а в терминах RSA у тебя должно быть mod n, где n - произведение p и q.
#108 #859747
http://pastebin.com/dWg1Njc9

Есть инжектор функции в память процесса, и четыре функции, которые я пытаюсь заинжектить. Проблема в том, что инжект каждой из них происходит успешно, но приводит к крашу приложения.
В чем тут проблема, почему даже пустая функция крашит все?
>>860127
1437 #109 #859904
Подскажите, в Си есть функции min, max, random? Если нет, то какие аналоги есть?
>>859912>>859915
#110 #859912
>>859904
min и max надо делать макросами препроцессора, потому что иначе придется заводить такую функцию под каждый тип, причем с разным названием. Рандом есть, смотри rand, srand и т. п.
#111 #859915
>>859904
#define min(a,b) ((a<b)?a:b)
#define max(a,b) ((a>b)?a:b)
rand()
#112 #859917
>>859915
азаза, в скобочки не обернул
#113 #859920
>>859915
А если a=b?
>>859921
sage #114 #859921
>>859920
Не знаешь, чему в этом случае равно условие a<b ?
>>859922
#115 #859922
>>859921
False
>>859923>>859924
#116 #859923
>>859922
*0
сишкофикс
sage #117 #859924
>>859922
Тогда в чём вопрос?
#118 #859925
>>859915
#define min(a, b) ((a<b)?a:(a==b)?a: b)
>>859926
sage #119 #859926
>>859925
Зачем 2 условия?
1437 #120 #859940
А как сделать рандом из промежутка?
>>859972>>860127
sage #121 #859972
>>859940
reinterpret_cast<рандом>(промежуток);
>>859976
297 Кб, 300x199
#122 #859976
#123 #860127
>>859747
Нужно больше кода.
1) Так не инжектят. Вставляют джамп, чтобы не затереть остальные фунции (и даже с джампом бывают проблемы). А ты пишешь 250 байт. Мало того, что ты наверняка затираешь дохуя всего, так ты еще тупо копируешь кусок своего кода в чужое адресное пространство.
2) Ты уверен, что твоя целевая функция - cdecl, а не stdcall?

>>859940
Используй школьную арифметику, Люк. Например: ((double) rand() / RAND_MAX) даст тебе случайное значение из промежутка 0..1, назовем его rnd. Ты можешь сделать start + (int) ((end - start + 1) * rnd). Или можешь сделать start + (rand() % (end - start + 1)), но распределение будет гораздо хуже, и работать это будет только если диапазон меньше RAND_MAX.
>>860490
#124 #860336
Может быть, кто-то ещё не видел: “Arguing about Undefined Behavior” с CppCon 2016. Да, это про кресты, но код по большей ничем не отличается от сишного.

https://www.youtube.com/watch?v=yG1OZ69H_-o
sage #125 #860339
>>860336
Вот ещё питушня про UB
https://www.youtube.com/watch?v=g7entxbQOCc
sage #126 #860345
>>860336
Неплохой доклад, да. Меня, как и докладчика, заебали эти идиотские заявления "при UB может произойти что угодно, например, отформатироваться твой диск" и т.п.
>>860346>>860348
sage #127 #860346
>>860336
>>860345
И да, эта петросянская шуточка про demons out of your nose. Не знаю, что больше раздражает. То ли сама шутка, то ли то, что с неё каждый раз все ржут.
sage #128 #860348
>>860345

> Меня, как и докладчика, заебали эти идиотские заявления "при UB может произойти что угодно"


Ну, например, обычный use after free может привести к очень интересным последствиям, особенно если программа работатает с файлами. Хотя сознательно компилятор ничего тереть не будет, конечно же.
#129 #860490
>>860127
http://pastebin.com/xynv2ZaM

Я выделяю 511 в самом начале. Потом туда все записываю каждый раз и вызываю тред (так делает автор, я бы сделал по-другому, факт в том, что крашится пустая функция.
2. Не уверен.

да, там msvc, если что

Как бы ты заинъектил функцию, которая ничего не делает? Я думаю, что все-же в коде асм проблема, ибо делфипацаны так (почти так) инъектят уже много лет.
>>860958
#130 #860958
>>860490

> PAGE_READWRITE


Где VirtualProtectEx(PAGE_EXECUTE_READ) после записи? Или или хотя бы PAGE_EXECUTE_READ_WRITE при аллокации.

Алсо, нет смысла выделять 511 байт (почему такая константа?). Минимальный размер страницы 4К, меньше 4К VirtualAlloc тебе не выделит в любом случае.

Алсо, ты бы ошибки обрабатывал, что ли. Может, у тебя вообще процесс не открывается, или что-то не пишется.

> CreateRemoteThread(..., m_injFunction, ...)


Функция должна быть stdcall. Ей передается один параметр, поэтому либо ты либо помечаешь ее как __stdcall (WINAPI, CALLBACK, PASCAL), либо не забываешь retn 4.

Алсо, отключаешь ли ты проверки стека (/GS, /RTC и т. п.) при компиляции? Потому что та же 2015 студия в отладочный билд втыкает call stack_check, даже в пустую функцию. А функцию stack_check ты не копируешь, и получается call вникуда. Посмотри дизасм, удостоверься, что все ок.

> Как бы ты заинъектил


> которая ничего не делает


Ничего не делающую функцию инжектить незачем. А что-то делающую - целой DLL-кой. По крайней мере, не нужно будет задумываться о других функциях и переменных и пытаться заставить компилятор собрать position-independent код без лишнего говна. Если есть античит, то все, конечно, не так просто.
>>861285
#131 #860964
http://pastebin.com/fmHXYeef
Как сделать, что бы при делении на 0 в консоли выводилось не
inf, а "Деление на 0" например?
Cкорее всего, можно изи сделать через if, но я не понимаю как
Пытаюсь проверять через insinite но нихуя не получается
мимо месяц в программировании попалась самая сложная задачка в группе сдавать завтра утром
>>860967>>860986
#132 #860967
isfinite*
>>860964
быстрофикс
#133 #860986
Решил уже, через if и правда было слишком легко
>>860964
1 Кб, 458x34
#134 #861002
На хую я вижуаловский копилятор вертел, блядь

Поясните, как без мозгоебства на винде на связке C+SDL писать/
>>861004
#135 #861004
>>861002
Код покажи. Ты явно что-то очень странное делаешь.
>>861009
13 Кб, 593x205
#136 #861009
>>861021>>861056
#137 #861021
>>861009
Ну оно же собирается без ошибок. А баги в проверке орфографиисинтаксиса у них часто, особенно когда с clang/c2 собираешь - компилируется ок, а ошибки подчеркивает. Там рядом с кнопочкой сворачивания окна можно тыкнуть и описать проблему. Сделай мир лучше.
sage #138 #861056
>>861009
Если очень раздражает, раздели декларацию структуры player и декларацию переменной player - оно перестанет ругаться. Судя по всему, во время определения переменной оно почему-то считает, что текущая структура struct player - анонимная, как бы странно это не звучало.
#139 #861061
Объясните, где ошибся, уже который раз пытаюсь написать функцию перевода дробной части числа в другую систему счисления и нихуя не выходит, всегда какая-то ошибка, просто не понимаю, что я делаю не так.
http://ideone.com/CCzhlI (первая попытка),
http://ideone.com/isdbLH (вторая попытка).
На самом деле, попыток было гораздо больше, чем две.
>>861063>>861071
#140 #861063
>>861061
Мне кажется, что эти нолики в результате пытаются рисунком передать какое-то послание.
#141 #861071
>>861061
У тебя запятые в пользовательском вводе, а scanf() не ожидает их увидеть. Оставь только пробелы, и все заработает.
>>861081
#142 #861081
>>861071
Спасибо, анон.
что-то я туплю на ровном месте
#143 #861089
Сети и Си, что почитать?
Проблема: обмен пакетами между клиентом и сервером.
Нужно разобраться в вопросе как все устроено, и какие инструменты доступны в Си.
#144 #861092
>>861089
Попробуй википедию, потом, когда поймешь основы нагугли статейки или хабр. Там уже будешь иметь конкретные вопросы и список литературы.
31 Кб, 416x500
#145 #861097
>>861089
Для обмена пакетами в Си, как и в других языках, используют сокеты. Если у тебя Windows, возьми что-то типа пикрелейтед. Если Linux - есть Cтивенс с его Unix Network Programming (его же TCP/IP Illustrated и для винды стоит почитать, чтобы понимать, как вообще сеть работает). Простые хелловорлды с блокирующими сокетами заработают с минимальными правками в любой ОС, а когда дело дойдет до неблокирующих сокетов - читай книжки, статьи, ну и маны, конечно.
>>861099>>861202
#146 #861099
>>861097

> Если у тебя Windows, ставь Linux


Не благодари.
#147 #861159
>>861089
Хз, то или нет о, вчера анон ссылкой кидался, а я схоронил
#148 #861160
А ссыль то и позабыл
http://beej.us/guide/bgnet/
>>861202
#149 #861161
Уна делла вопросо:
Читаю Hacking: The Art of Exploitation
Естественно, дизассемблированные листинги оче разные, у автора одни мнемоники идут, у меня другие. Как думаете, это компилятор оптимизирует, или оттого что компиляторы разных версий?
>>861162
#150 #861162
>>861161
Показал бы хоть. Попробуй с -O0 компилировать, тогда компилятор точно не будет ничего оптимизировать.
>>861165
#151 #861165
>>861162
Да, спасибо. Я думаю, это изза того что книга 2003 года, и в ней GCC version 3.3.6 используется. Я лучше погуглю как поставить две разные версии компилятора
>>861166
#152 #861166
>>861165
Ставь сразу на виртуалку и остальной линукс тех лет. А то несколько тредов назад кто-то тут на ASLR напарывался с этой книгой.
>>861168
#153 #861168
>>861166
Да, ты прав. Погуглил - только это и работает, приложенный iso надо использовать
>>861255>>861276
#154 #861202
>>861160
>>861097

спасибо, то что нужно.
Причем второй коммент - вообще самый сок в сжатом виде по тому, что необходимо + там в конце учебника полно другой литературы которую бегло посмотрел, и меня заинтересовала так же. Спасибо.
#155 #861255
>>861168
Довольно потно идет книжка, должен сказать, от адресов в глазах рядит лол
#156 #861276
>>861168

>приложенный iso надо использовать


В той ебаной системе курсор мышки глючит.
>>861284
#157 #861284
>>861276
Да? Чот не заметил, хотя я мышой не сильно елозил. Вся проблема была в том, что я диск скачал с нашего русского издательства, по фтп. Он не хотел ставится в виртуалбокс, ну я и полез хуй пойми куда старые компиляторы, оптимизации. А нужно то всего было скачать диск с нормального места
98 Кб, 1920x1080
#158 #861285
>>860958
Было PAGE_WRITE, заменил на PAGE_EXECUTE_READWRITE
Какой смысл в VirtualProtectEx, мы аллоцировали память, про которую клиент не знает, получили все права и делаем что хотим.
Ошибки я обрабатываю, для теста я считываю значение ХП из клиента. А инъектирование возвращает успех. Мне нужно заинжектить не один раз, а делать это постоянно. Память аллоцируется при старте под все возможные функции и соотетствующим образом используется.

Тем не менее исправив твои замечание, свершилось чудо, которое я не мог узреть три года, пустая функция заинжекшена успешно без краша.
Разреши еще немного заебать парой вопросов:
1. Я попробовал инжектить более продвинутую функцию simpleF(). В дампе передо мной находится то, как msvc перепихнул simpleF() ? По какой причине в асм коде появилась строчка, которая вызывает краш? Какого черта код сам забирает параметры, хотя это же должна делать по идее функция, которую мы вызовем?
2. Если предположить, что функция

MOV ESI, 0x007F4C80
CALL ESI

Должна попать два аргумента со стека, семантика верна, и краша не должно быть? всмысле ошбика уже в предугадывании характера функции, а не в коде ассемблера
3. ВНЕЗАПНО на вирустотале данный код уже помечен 5 антивирусами, на какое апи они триггерятся?
4. Автор статьи также предлагал более универсальный метод по инжекту - прямое записывание функции. Он бинарно копирует асм код из олли, и инжектит уже фиксированное количество байт для каждой функции

void Skill(DWORD id)
{
char fdata[39]="\x60\x6A\xFF\x6A\x00\x6A\x00\x68\x00\x00\x00\x00\x8B\x0D\x00\x00\x00\x00\x8B\x89\x00\x00\x00\x00\x8B\x89\x00\x00\x00\x00\xB8\x00\x00\x00\x00\xFF\xD0\x61\xC3";

DWORD func=F_SKILL;
DWORD ba=BA;
DWORD dga=D_GA;
DWORD ps=PERS_STRUCT;

memcpy(fdata+8,&id,4);
memcpy(fdata+14,&ba,4);
memcpy(fdata+20,&dga,4);
memcpy(fdata+26,&ps,4);
memcpy(fdata+31,&func,4);
InjectFunction(fdata,39);
}

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

http://pastebin.com/ZWXYGJF0
98 Кб, 1920x1080
#158 #861285
>>860958
Было PAGE_WRITE, заменил на PAGE_EXECUTE_READWRITE
Какой смысл в VirtualProtectEx, мы аллоцировали память, про которую клиент не знает, получили все права и делаем что хотим.
Ошибки я обрабатываю, для теста я считываю значение ХП из клиента. А инъектирование возвращает успех. Мне нужно заинжектить не один раз, а делать это постоянно. Память аллоцируется при старте под все возможные функции и соотетствующим образом используется.

Тем не менее исправив твои замечание, свершилось чудо, которое я не мог узреть три года, пустая функция заинжекшена успешно без краша.
Разреши еще немного заебать парой вопросов:
1. Я попробовал инжектить более продвинутую функцию simpleF(). В дампе передо мной находится то, как msvc перепихнул simpleF() ? По какой причине в асм коде появилась строчка, которая вызывает краш? Какого черта код сам забирает параметры, хотя это же должна делать по идее функция, которую мы вызовем?
2. Если предположить, что функция

MOV ESI, 0x007F4C80
CALL ESI

Должна попать два аргумента со стека, семантика верна, и краша не должно быть? всмысле ошбика уже в предугадывании характера функции, а не в коде ассемблера
3. ВНЕЗАПНО на вирустотале данный код уже помечен 5 антивирусами, на какое апи они триггерятся?
4. Автор статьи также предлагал более универсальный метод по инжекту - прямое записывание функции. Он бинарно копирует асм код из олли, и инжектит уже фиксированное количество байт для каждой функции

void Skill(DWORD id)
{
char fdata[39]="\x60\x6A\xFF\x6A\x00\x6A\x00\x68\x00\x00\x00\x00\x8B\x0D\x00\x00\x00\x00\x8B\x89\x00\x00\x00\x00\x8B\x89\x00\x00\x00\x00\xB8\x00\x00\x00\x00\xFF\xD0\x61\xC3";

DWORD func=F_SKILL;
DWORD ba=BA;
DWORD dga=D_GA;
DWORD ps=PERS_STRUCT;

memcpy(fdata+8,&id,4);
memcpy(fdata+14,&ba,4);
memcpy(fdata+20,&dga,4);
memcpy(fdata+26,&ps,4);
memcpy(fdata+31,&func,4);
InjectFunction(fdata,39);
}

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

http://pastebin.com/ZWXYGJF0
>>861628
#159 #861366
У меня есть библиотека .lib, написанная на ассемблере. Как написать к ней хедер на си, чтобы подключать в си-проектах? Основной тип данных в этой библиотеке - DWORD (unsigned long), в хедере я пишу что-то вроде:

#define DWORD unsigned long

DWORD func(DWORD arg);

Но когда я подключаю этот хедер к проекту, он не компилится: Undeclared identifier 'DWORD' (did you mean 'argv'?)
Undeclared function 'func

Что делать? Объявлять функции как extern? А с двордом что?
>>861628
#160 #861398
Привожу свои попытки написать хедер (два кодеса в одной пасте): http://pastebin.com/HsNbAKXY

Мануал:

_BigCreate (dword)InitValue
[LIBcore.asm]
creates a bignum and initializes it with the value InitValue
returns a pointer to the bignum

_BigDestroy (big )Big
[LIBcore.asm]
destroys the bignum Big

_BigCopy (big
)BigSrc, (big )BigDest
[LIBcore.asm]
copies BigSrc to BigDest

_BigCompare (big
)BigA, (big )BigB
[LIBcore.asm]
compares BigA and BigB
returns 1 if BigA > BigB
0 if BigA = BigB
-1 if BigA < BigB

_BigCompare32 (big
)BigA, (dword)Value
[LIBcore.asm]
compares BigA and Value
returns 1 if BigA > Value
0 if BigA = Value
-1 if BigA < Value
#160 #861398
Привожу свои попытки написать хедер (два кодеса в одной пасте): http://pastebin.com/HsNbAKXY

Мануал:

_BigCreate (dword)InitValue
[LIBcore.asm]
creates a bignum and initializes it with the value InitValue
returns a pointer to the bignum

_BigDestroy (big )Big
[LIBcore.asm]
destroys the bignum Big

_BigCopy (big
)BigSrc, (big )BigDest
[LIBcore.asm]
copies BigSrc to BigDest

_BigCompare (big
)BigA, (big )BigB
[LIBcore.asm]
compares BigA and BigB
returns 1 if BigA > BigB
0 if BigA = BigB
-1 if BigA < BigB

_BigCompare32 (big
)BigA, (dword)Value
[LIBcore.asm]
compares BigA and Value
returns 1 if BigA > Value
0 if BigA = Value
-1 if BigA < Value
>>861628
1437 #161 #861414
Как задать размер массива переменной?
>>861416>>861516
#162 #861416
1437 #163 #861449
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//=========функциязаполнениямассива=========
int RandVector(int size, int massiv, int max_rand)
{
srand(time(0));
//рандомизация – установка начального псевдослучайного числа
for (int i = 0; i< size; i++)
{
massiv = 1 + (rand() % max_rand);
//случайное число в диапазоне от 1 до 10
}
return 0;
}

//=========функция вывода массива на консоль=========
int PrintVector(int size, int
massiv)
{
for (int i = 0; i< size; i++)
{
printf("%i ", massiv);
}
printf("\n");
return 0;
}
В чем ошибка?
1437 #163 #861449
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//=========функциязаполнениямассива=========
int RandVector(int size, int massiv, int max_rand)
{
srand(time(0));
//рандомизация – установка начального псевдослучайного числа
for (int i = 0; i< size; i++)
{
massiv = 1 + (rand() % max_rand);
//случайное число в диапазоне от 1 до 10
}
return 0;
}

//=========функция вывода массива на консоль=========
int PrintVector(int size, int
massiv)
{
for (int i = 0; i< size; i++)
{
printf("%i ", massiv);
}
printf("\n");
return 0;
}
В чем ошибка?
>>861628
#164 #861516
>>861414
На стеке никак. Только в куче:
int count = 100500;
T ptr = malloc( sizeof(T) count );
>>861517>>861599
#165 #861517
>>861516
парсер звездочки съел
http://pastebin.com/sM7h7FMp
#166 #861599
>>861516
Ну вообще в C можно VLA

Но не нужно.
>>861812
#167 #861628
>>861285

> какой смысл в VirtualProtectEx


Как альтернатива выделению с PAGE_EXECUTE_READWRITE. Выделилить read-write, записать, сделать execute-read. Дело вкуса, но это

> ВНЕЗАПНО на вирустотале данный код уже помечен 5 антивирусами


может снизить градус подозрительности у некоторых антивирусов. А возбуждаться могут даже на OpenProcess+WriteProcessMemory, там все сложно. Иногда и на хелловорлды ругаются. Даже не знаю, что предложить почитать. Васм закрылся, к сожалению.

> В дампе передо мной находится то, как msvc перепихнул simpleF() ?


В дампе код метода класса. Ты можешь легко вычислить методы по обращению к ECX без его предварительной инициализации. В ECX передается this.

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


Не понял вопроса.

> 0x007F4C80


> Должна попать два аргумента со стека


И указатель на объект в ECX.

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


Тоже не совсем понял вопрос. Скопирует, как есть. Были внутри вызовы функций - никуда не денутся. Не было - не появятся.

>>861366
Ну у тебя все правильно, только не стоит объявлять псевдонимы дефайном, для этого есть typedef: typedef unsigned long myDWORD; И не стоит вообще делать тип DWORD, когда можно #include <stdint.h> и использовать uint32_t (если тебе нужен точный размер и 64-битной версии либы не предвидится).

>>861398
В пасте все должно компилироваться. Почему у тебя функции с подчеркиванием в начале? Алсо, extern писать не обязательно, функции по умолчанию и так extern.

>>861449
Если у тебя там massiv[i ] в обеих функциях, то не вижу ошибок. Или ты в PrintVector всегда печатаешь численное значение указателя? https://ideone.com/ позволяет, во-первых, запостить код, не распидорасив его [i ] и звездочками, а во-вторых, показать нам, что идет не так, раз уж тебе лень объяснить самому.
#167 #861628
>>861285

> какой смысл в VirtualProtectEx


Как альтернатива выделению с PAGE_EXECUTE_READWRITE. Выделилить read-write, записать, сделать execute-read. Дело вкуса, но это

> ВНЕЗАПНО на вирустотале данный код уже помечен 5 антивирусами


может снизить градус подозрительности у некоторых антивирусов. А возбуждаться могут даже на OpenProcess+WriteProcessMemory, там все сложно. Иногда и на хелловорлды ругаются. Даже не знаю, что предложить почитать. Васм закрылся, к сожалению.

> В дампе передо мной находится то, как msvc перепихнул simpleF() ?


В дампе код метода класса. Ты можешь легко вычислить методы по обращению к ECX без его предварительной инициализации. В ECX передается this.

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


Не понял вопроса.

> 0x007F4C80


> Должна попать два аргумента со стека


И указатель на объект в ECX.

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


Тоже не совсем понял вопрос. Скопирует, как есть. Были внутри вызовы функций - никуда не денутся. Не было - не появятся.

>>861366
Ну у тебя все правильно, только не стоит объявлять псевдонимы дефайном, для этого есть typedef: typedef unsigned long myDWORD; И не стоит вообще делать тип DWORD, когда можно #include <stdint.h> и использовать uint32_t (если тебе нужен точный размер и 64-битной версии либы не предвидится).

>>861398
В пасте все должно компилироваться. Почему у тебя функции с подчеркиванием в начале? Алсо, extern писать не обязательно, функции по умолчанию и так extern.

>>861449
Если у тебя там massiv[i ] в обеих функциях, то не вижу ошибок. Или ты в PrintVector всегда печатаешь численное значение указателя? https://ideone.com/ позволяет, во-первых, запостить код, не распидорасив его [i ] и звездочками, а во-вторых, показать нам, что идет не так, раз уж тебе лень объяснить самому.
>>861694>>861705
#168 #861694
>>861628

>Васм закрылся, к сожалению


А базу статей/примеров/постов форума админы не выкладывали?
>>861702
#169 #861702
>>861694
Хуй знает. Существуют .chm со статьями и примерами, но я имел в виду форум и живых людей.
>>861707
#170 #861705
>>861628

> Васм закрылся, к сожалению.


Это да, к большому сожалению. Теперь толпы школохацкеров-дегенератов разбежались повсюду и засирают всё своими хуками и прочим говном.
>>861706>>861876
sage #171 #861706
>>861705
Не припомню на васме прямо таких уж толп школьников с читами и хуками. Вот срач и политоту в хипе - помню, это да. И еще помню профи, которые могли ответить на любой вопрос.
#172 #861707
>>861702
tparser находит chm-ку только от 2004го года, которая немного устарела.
>>861712
#173 #861712
>>861707
http://rutrackermirror.org/torrent-62156.html (2006)
http://rgho.st/6Z7bNy4PC 2ch (2007)
Еще на вебархиве есть многое.
>>861714>>868086
#174 #861714
>>861712
О, спасибо, совсем забыл про вебархив. А были же дампы года 2012-14го, или мне кажется?
>>861715
sage #175 #861715
>>861714
Хуй знает. Наверняка где-то и полный дамп продается с прошлого взлома.
#176 #861733
Ананасы, срочно, решительно нужна добрая душа, которая забилдит древнюю libSDL https://www.libsdl.org/download-1.2.php под win32.
>>861741
#177 #861741
>>861733
Чем тебя не устроили готовые билды?
#178 #861812
>>861599
Я вообще не понимаю, нахуя эту поебень добавили в стандарт. Кто вообще в здравом уме будет добровольно размещать массивы произвольного размера на стеке?
>>862051
#179 #861864
Сап двач, программа не проходит так, как хотелось бы, в чем дело?
код - http://pastebin.ru/eSs1eT0W
задание 27 - https://pp.vk.me/c637825/v637825283/1af5c/Km9rz5QQ4Cw.jpg
>>862058
#180 #861876
>>861705
Поставил тебе хук за щеку, проверяй.
>>861903>>862041
#181 #861903
>>861876
Школохацкер-дегенерат, надо полагать?
#182 #862041
>>861876
Проверил, крашнулось с ошибкой 0xc0000005
7 Кб, 583x107
#183 #862050
>>856777 (OP)
Щас буду делать "первую программу". Знаний по с ноль, аноны я долго будут с этим ебаться, если всю инфу буду черпать с учебника?
>>862051
#184 #862051
>>861812
Расскажи, чем код: int length = 100; int array[length]; принципиально отличается от int array[100000]; int length = 100; (ну кроме считающегося в рантайме sizeof и проблем оптимизации)?

>>862050
Если ты формулу понимаешь, и на си не писал вообще, то провозишься пару часов, наверное.
>>862196
36 Кб, 877x515
#185 #862052
Блять, хочу запилить RSA для шифрования сессионного ключа блочного шифра. Очень хочется, чтобы ключ шифрования был 0xDEADFADE, но не получается сделать так, чтобы это число было обратимо по модулю функции Эйлера. Хуле так сложно подобрать параметры?
#186 #862058
>>861864

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


В строках 28-43 после совпадения одного из условий ты проваливаешься в проверку следующего, и получается, что ты считываешь с середины символа, а потом на следующей итерации опять с середины и т. д. Свяжи if-ы через else или воткни continue после каждого printf, выводящего символ.
#187 #862196
>>862051

> принципиально отличается


Тем, что с первым у тебя будет просто переполнение стека и сегфолт, а со вторым еще в придачу и выполнение произвольного кода через подмену адреса возврата.
>>862202>>862235
#188 #862202
>>862196

> подмену адреса возврата


Ну во-первых, это уже малоактуально - компиляторы давно умеют детектить порчу стека. Во-вторых, это аргумент за VLA, но какой-то хуевый, потому что проверка запрошенного размера массива нужна в обоих случаях, и в обоих случаях она одинаковая.
>>862235
#189 #862235
>>862196
>>862202

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


Ну вот тебе подмена адреса возврата с VLA: http://ideone.com/M8agh6 Алсо, сможешь без отладчика пояснить, как работает magic()? Алсо, по техническим причинам это не сработает в Windows, вне зависимости от использованного компилятора.
>>862237
#190 #862237
>>862235
Ваш компилятор слишком тупой и неправильно выделяет память под массив. Если запросить у него пару мегабайт места на стеке, то на винде всё просто упадёт.

>как работает magic()


Никак не работает.
>>862239
sage #191 #862239
>>862237

> Ваш компилятор слишком тупой и неправильно выделяет


Ваш - это чей? А как правильно выделять? На самом деле там ни единой страницы не выделяется - все уже выделено.

> Никак не работает.


Если она не работает, как тогда сообщение печатается? Закомментируй вызов magic() - не будет сообщения.
>>862240
#192 #862240
>>862239
Она нужна всего лишь, чтобы адрес evil затолкался на стек. Возможно, это можно сделать с локальными переменными (или даже просто в массив записать) - мне лень сейчас в голове проворачивать, как оно там выделяется и работает. Сама функция ничего не делает.

>А как правильно выделять?


Явно не sub esp, xxx. Это, в общем, ещё один специализированный инструмент по отстрелу ног. Накой нужна фича с такой-то реализацией?
>>862249
sage #193 #862249
>>862240

> Накой нужна фича с такой-то реализацией?


Но ты ведь понимаешь, что VLA ценны только потому, что они "бесплатные"? Если аллокация массива будет сложнее, чем sub esp,nnn - такая фича будет никому не нужна, потому что тогда проще выделить массив фиксированного размера или сделать malloc(). Собственно я и начал весь этот ээ... разговор, пытаясь доказать, что массивы фиксированного размера ничем не хуже.
#194 #862467
У функции ReadFile есть ограничение на размер буфера? Почему зашифрованный RSA-блок размером 146 16-ричных цифр не считывается целиком моим кодом?

ZeroMemory(rsa_block, RSA_BLOCK_SIZE);
ReadFile(hEncryptedFile, rsa_block, RSA_BLOCK_SIZE, &dwBytesRead, NULL);
RSASetup(&rsa);
RSADecrypt(&rsa, rsa_block, RSA_BLOCK_SIZE, key);
RSAClear(&rsa);
>>862586
#195 #862523
В общем реквестирую какой-нибудь не очень большой материал для повторения по С++. Потому как 2 года до этого писал на С++, сейчас пишу на Objective-C(пришлось временно перейти из-за нехватки проектов, а потом на работе С++ отдел развалился) и хочу перейти на другую работу чтобы писать на С++. И каждый раз на собеседованиях сталкваюсь с проблемами связанными с тем что на С++ давно не писал и то не помню как инициализировать char * строки и какая библиотека нужна чтобы использовать функции strcpy и strlen, то не помню как определять шаблоны, то не помню как определять операторы. Нет, начни я кодить - сразу бы загуглил, но вот с ходу вспомнить не всегда могу.
>>862534
Какашечка #196 #862534
>>862523
эплоблядь, ты заебал со своими реквестами, тебе на топики похуй? или привык через жопу все. пиздуй к плюсанам.
>>862535
#197 #862535
>>862534
Извиняюсь. Я просто тред плюсов и си перепутал.
#198 #862586
>>862467
Возможно, RSA_BLOCK_SIZE у тебя в байтах, а блок текстом? И вообще, где возвращаемое значение ReadFile, где GetLastError?
>>862653
#199 #862653
>>862586

>RSA_BLOCK_SIZE у тебя в байтах, а блок текстом


RSA_BLOCK_SIZE равен логарифму по основанию 16 от модуля RSA, т.е. максимальную длину 16-ричного числа по этому модулю.

Я хочу сохранять в заголовке файла 16-ричные числа как текст, читать их оттуда как текст и расшифровывать, потому что моя либа это позволяет делать.
>>862659
#200 #862659
>>862653
Хм, помогло увеличение RSA_BLOCK_SIZE на единицу. Я немного проебался с логарифмом. Тестовая программа нормально работает.
#201 #862661
Алсо, насколько важно в системном коде проверять коды возврата? Они помогают избежать неопределенного поведения при ошибке, но здорово раздувают размер кода.
>>862664
#202 #862664
>>862661
настолько, насколько тебе важна стабильная работы программы
#203 #862766
https://www.youtube.com/watch?v=MUNRvqpske0 вдрух кому интересно
#204 #862774
Пиздос, читаю Прату. Глава про указатели и многомерные массивы. Вот прочитал - как будто не читал вовсе.
>>862779
#205 #862779
>>862774
Бумажка с ручкой тебе поможет. Зарисовывай. Ну и отладчиком тоже смотри.
#206 #862865
Как на WinAPI узнать расширение файла и проверить его на соответствие всем возможным расширениям из списка? Выглядит как пердолинг.
>>862867>>862868
#207 #862867
>>862865
Как на WinAPI найти сумму элементов на чётных позициях в массиве?
Вот точно так же.
>>862870
#208 #862868
>>862865
PathFindExtension, а на соответствие - это ты как-нибудь сам. С маленьким списком и цикл ок, с большим изобрети хэшик какой-нибудь. Но судя по

> Как на WinAPI


ты тот самый пидор, который пишет криптолокер.
sage #209 #862870
>>862867
Ну, учитывая многобразие поддерживаемых форматов путей в Windows, а также то, что расширения у файла может не оказаться, решения типа strrchr(..., '.') - это не самый правильнный выход, лучше обращаться к уже отлаженной функции ОС.
#210 #863253
>>863262>>863263
sage #211 #863262
>>863253
Содержание выглядит как пересказ интеловского мануала.
#212 #863263
>>863253
ода из миллиарда подобных

по асму читай тома свана, однозначно
>>863322
Какашечка #213 #863286
Встретил слово 'tuple' в алгоритме работы со списком. Это еще че за хуйня? Понятно, что имеют ввиду элемент списка, но в чем семантическое отличие от 'node'?
#214 #863322
>>863263
Блин, книга то древняя Тасм, дос. Хотя пишут что написана суперски.
>>863381
Какашечка #215 #863381
>>863322
ого, а ты сразу на винапи хочешь вкатится, силен хули.
>>863388
#216 #863388
>>863381
Да нет же!Нет!
>>863397
Какашечка #217 #863397
>>863388
ты же понимаешь, что асм под винду и асм под никс и асм под железо на одной платформе схожи только синтаксисом и то невсегда. асм под арм и асм под 86 отличны в синтаксисе. учи хаскел.
>>863405
#218 #863405
>>863397
Все ассемблеры одинаковы. Если знаешь один-два, следующий учится за вечер.
#219 #863454
анон, что я делаю не так? чому не работает?
http://rgho.st/69DgdmLqt
>>863456>>863458
Какашечка #220 #863456
>>863454
а ты хитрюша, ссу тебе в ротешник.
#221 #863458
>>863454

> printf("Wrong");


> system("cls");


У меня от тебя ZEN ENGINEERING.
>>863460
#222 #863460
>>863458
Ну на тролль дауна пожалуйста.
Вставлю паузу сюда, но ведь работать не начнёт.
>>863462>>863465
#223 #863462
>>863460
Блядь, ну ты нормальный вообще? Ты выводишь сообщение, потом очищаешь экран. А потом выходишь из функции, а потом из программы. Убери нахуй все свои cls.
sage #224 #863465
>>863460
Алсо, ты в game() break в switch забыл запомни правило, чтобы не ошибаться с break, у тебя в каждом case должен быть break;, кроме случаев, когда каждый case состоит из простого выражения и return. В menu() тоже воткни везде break, иначе поправишь код и опять напорешься. Алсо, сделай что-нибудь со своей рекурсией - погугли game loop.
#225 #863503
Привет снова, программисты. Студент-даун снова нуждается в помощи. Объясните, какого хуя опять ошибку выдает? http://ideone.com/isdbLH
>>863507
#226 #863507
>>863503
1) accuracy не должен превышать sizeof(k) - 1;
2) В строке 39 завершающий ноль нужно писать по k[ i ], а не по k[i+1] - после записи очередной цифры ты уже делаешь i++, и получается, что после выхода из цикла k[ i ] - это первый незанятый элемент строки.
3) И главное, ты не инициализируешь переменную i, и она может быть равна чему угодно. Если у тебя нет компилятора, которому можно сказать -Wall, то хотя бы выбери на ideone язык не C, а C99 Strict, и будешь видеть предупреждения.
>>863509
#227 #863509
>>863507
Спасибо, изменил accuracy, все заработало, а i у меня была объявлена перед циклом while.
>>863511
#228 #863511
>>863509
У тебя i объявлена, но не инициализирована (ей не присвоено значение до ее использования). Если по счастливой случайности сейчас она у тебя оказывается равна 0, это не значит, что так будет в дальнейшем.
>>863592
#229 #863592
>>863511
Действительно, забыл. Мой косяк. Спасибо еще раз.
#230 #863632
До сих пор использую сишку, чтобы крестоносцы не заругали за неправильные паттерны. Иногда порываюсь написать что-то на крестах, но потом все равно переписываю на сишке. Кресты - это секта. Начиная с вектора вместо массива. Я бы понял, если бы в векторе была специальная индексация, которая позволяет быстро вставить блок в середину здоровенного вектора и одновременно быстро извлекать элементы по индексу. А так, простите господа паттернопоклонники, я атеист.
>>863638
#231 #863638
>>863632
Кресты - это шаблоны, дурачок.
Начиная с определенного момента без них становится очень хуево. Структуры вместо классов, например, и прочая няшнота - why not, а без шаблонов - совсем никак.
>>863643
#232 #863643
>>863638

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


Из-за шаблонов приходится держать код в хедерах, или уже что-то придумали? Потом, ебанутое именование символов в модулях. Из-за этого у старинной сишки РЕФЛЕКТИВНОСТЬ лучше, чем у крестов.
>>863644>>863647
#233 #863644
>>863643
Зато из-за отсутствия шаблонов в сишечке ты вынужден либо изобретать qsort каждый раз, либо сосать по сравнению с крестами из-за колбека на каждый элемент.
>>863657
#234 #863647
>>863643

>Из-за шаблонов


И правда дурачок - или ребенок просто.
Задача: реализовать класс/структуру для инт/флоат/дабл/хуйпизда.
Ты можешь, конечно, набойлерплейтить все комбинации - если совсем дебил наиболее вероятный вариант
Или можно пропердолиться дефайнами по взрослому, без носков. На самом деле вариант - только проблема в том, что они глобальны. То есть придется велосипедить свой неймспейс.
Детский сад, вобщем.
>>863648>>863657
sage #235 #863648
>>863647
Так ты предлагаешь реализовывать свой забагованный qsort в каждом проекте, я правильно понял?
>>863670
#236 #863657
>>863647

>Задача: реализовать класс/структуру для инт/флоат/дабл/хуйпизда.


Это сделано во всех интерпах с динамическими типами и почти во всех почему-то не на крестах. Дурачки делали, вероятно.

>>863644
Почему, берешь какую-нибудь либу с qsort, указатели на функции все решают. Потом, в сишечке можно определить адрес (сорян, матерное слово для крестоносцев) структуры по ее элементу, эта хуйня даже в ядре линупса используется, и сам пользовался сколько раз.
>>863662>>863663
sage #237 #863662
>>863657

> указатели на функции все решают


А в крестах у метода, сравнивающего элементы есть все шансы заинлайниться. О том и речь.
>>863668
#238 #863663
>>863657

>с динамическими типами


Тебе в JS - это твое.

>динамическими типами


>Дурачки делали


Что очевидно.
>>863668
#239 #863668
>>863662

>в крестах у метода, сравнивающего элементы есть все шансы заинлайниться


Во-первых, не у метода, а у класса. В парадигме ООП сравнение, как и все остальное что угодно - это класс/объект. Во-вторых, в сях то же самое. Это вопрос к компилеру. Современные компилеры оптимизируют рекурсию.

>>863663

>Тебе в JS


Кресты и есть нечто гомеоморфное JS. Их прототипы не лучше ваших паттернов.
>>863671>>863672
#240 #863670
>>863648

>реализовывать свой забагованный qsort


Ты нить потерял, дебиленок.
Крестопараша, конечно, говно омерзительное - но иногда няшная хуже. Когда шаблоны нужны, например.
Старенькая она уже.
#241 #863671
>>863668

> Во-первых, не у метода, а у класса


Мне похуй, что там в парадигме. Инлайнится конкретный метод.

> Современные компилеры оптимизируют рекурсию.


А это-то тут каким местом?
>>863673>>863675
#242 #863672
>>863668

>есть нечто гомеоморфное JS


Высеры с *воид твоих собратьев по, хаха, "разуму" - это точно жс, по уровню дегенерации.
Проебать контроль типов, огрести оверхед на своих же костылях - и обосраться по быстродействию даже по сравнению с крестопарашей.
Няшная не для дебилов вроде тебя, вобщем.
#243 #863673
>>863671

>Инлайнится конкретный метод.


Функции еще лучше инлайнятся.

>> Современные компилеры оптимизируют рекурсию.


>А это-то тут каким местом?


Тем же самым. Вместо call получается jmp или инлайн.
>>863676>>863677
#244 #863675
>>863671

>А это-то тут каким местом?


Не обращай внимания, просто он инфантильный дурачок почти как ты
#245 #863676
>>863673

> Функции еще лучше инлайнятся.


Когда дело доходит до инлайна, отличий между методом и функцией нет вообще.

> Вместо call получается jmp или инлайн.


Не получается. qsort() в либе, в середину скомпиленной функции тебе никто jmp втыкать не будет. И вообще компиляторы вызов функций по указателям оптимизируют крайне неохотно.
>>863678>>863680
#246 #863677
>>863673

> >указатели на функции


>Вместо call получается jmp или инлайн.


https://www.youtube.com/watch?v=uB4zwhvaKLE
>>863680
#247 #863678
>>863676

>компиляторы вызов функций по указателям оптимизируют крайне неохотно.


>вызов функций по указателям оптимизируют


То есть все-таки могут заинлайнится, правда?
Да уж, ну и дебилы. А я-то думал тупее чем на хабре не бывает, наивный.
>>863687
#248 #863680
>>863676

>в середину скомпиленной функции


Можно взять нескомпиленную. Как в крестах прямо.

>>863677
Это ты там выше подорвался? Ничего, Чудское Озеро охладит твой зад.
>>863684
#249 #863684
>>863680
Фиксирую отсутствие возражений.
То есть указатели на функции и у этого дегенерата инлайнятся.
Все же большой минус няшной - в комьюнити у крестопараши таких дебилов уровня /бэ все же меньше.
>>863691
#250 #863687
>>863678
Да, gcc это оптимизирует, если у него есть в наличии код функции.
>>863693
#251 #863691
>>863684
Да, господин дегенерат. Они правда инлайнятся, если компилеру известен исходный кот qsort и исходный кот функции сравнения.
>>863694
#252 #863693
>>863687

>gcc это оптимизирует


Пример, пожалуйста.
Указатель на функцию - это, в общем случае, переменная - иначе смысла во всем этом нет.
И знать на какую именно функцию там ссылка компилятор - в хотя бы немного осмысленных случаях - не может.
хелло_лаба1.с не учитываю, конечно.
>>863696>>863718
#253 #863694
>>863691
То есть если ссылка - это константа, по сути.
лаба1, как и было сказано.
>>863697
#254 #863696
>>863693

>Пример, пожалуйста.


То есть результат транслейтинга в ассемблер? Извини, лень что-то.
>>863698
#255 #863697
>>863694
А в крестах что, инлайнится код, полученный из интернета?
>>863700
#256 #863698
>>863696
Маневр номер очередной засчитан.
То есть исходника в качестве примера у тебя нет.
Все ясно.
>>863702
#257 #863700
>>863697

>в крестах что, инлайнится код


Шаблонных классов, например.
То есть можно более-менее генерики с контролем типов и оптимизацией - в том числе инлайнами где надо.
Без позорища с *воид и прочей школопарашей уровня /бэ.
>>863704
#258 #863702
>>863698
То есть ты из исходника собирался определять, объединяет ли gcc код двух функций, исходники которых ему известны, когда одна передается указателем в другую?
>>863703
#259 #863703
>>863702

>ты из исходника собирался определять


Не вижу проблем прогнать гцц и немного подебажить.
Это не так страшно как ты думаешь, не бойся за меня :3
>>863707
#260 #863704
>>863700
А в сишечке инлайнится код функций нормально. Это практически та же ситуация, только проще - без таблицы виртуальных функций.
>>863711
#261 #863707
>>863703
Тогда DIY с -O3 просто.
>>863710
#262 #863710
>>863707
Маневр номер очередной+1 засчитан.
То есть исходника у тебя нет - да и быть не может, что ты вроде бы уже понял.
Хотя может и нет - неисповедимы пути дебилов уровня /бэ.
>>863714
#263 #863711
>>863704

> >генерики


>в сишечке


>Это практически та же ситуация


Тебе лучше попробовать 1с.
Там все твои друзья.
>>863715
#264 #863714
>>863710
Извини, конечно, но по большому счету ты утверждаешь, что компилер заинлайнит метод, но с функцией обосрется.
>>863718
#265 #863715
>>863711
Попробуй JS.
>>863718
#266 #863716
Вы вообще понимаете, господа крестоносцы, что само, блядь, слово inline по отношению к вашей религии это матершина? Какой inline, если паттерны и кроссплатформенность во все поля? Идите грехи замаливать уже.
>>863721
#267 #863717
test
#268 #863718
>>863715

>сам дурак


Ясно.
>>863714
А, понятно - с памятью проблемы и вообще.
>>863693

>Указатель на функцию


Хотя стыдно, конечно - нехорошо смеяться над больными людьми.
>>863722
#269 #863721
>>863716
Что ты несёшь, поехавшее?
>>863723
#270 #863722
>>863718

>и вообще


Что сказать хотел?
>>863723
#271 #863723
>>863721
Такое же как ты, в точности.
>>863722
Читать это существо тоже не умеет, фиксирую признание.
>>863726>>863833
#272 #863726
>>863723

>Читать это существо тоже не умеет


Скорее gcc не сумеет в инлайн метода, чем в инлайн функции :3
>>863785
#273 #863785
>>863726
Дебил натуральный.
Вся ваша проблема в непонимании других.
И не потому что другие дебилы - хотя правило 95% работает всегда, да - а потому что дебилы с отставанием в развитии всего - это вы все, двачеры.
Совсем как маил.ру.
>>863817
#274 #863817
>>863785
Найс, бомбануло:3
>>863830
#275 #863830
>>863817

>бомбануло


Ну так зашивайся, няша.
И держи нас в курсе.
#276 #863833
>>863723

>Такое же как ты, в точности.


Я вообще другой анон, но так и не понял хуиты про паттерны и кроссплатформу: на сях так не пишут?
>>863839
#277 #863839
>>863833

>на сях так не пишут?


Няшная не для всяких извращений.
Хотя крос можно напердолить дефайнами, конечно.
>>863843
#278 #863843
>>863839
Кроссплатформа на плюсах пердолится точно так же как на говняшной. Про паттерны — посмотри ядро линукса или хотя бы GTK.
>>863847
#279 #863847
>>863843

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


Лучше бы ты гомонегров в говне запостил, няша.
#280 #863870
Сап сипипач. Посоветуйте легкую, но хорошую IDE для C++ под Windows. Хочу, чтоб:
1. Быстро открывалась, без модулей sql, git и прочего лишнего. Кодить буду только cpp и winapi.
2. Был нормальный функционал для опытного пограммера. Подсветка, автокомплит, рефакторинг, find usage, goto defination and declaration и т.п.
3. Не нужно ебаться с привязкой компиляторов. Чтоб всё шло из коробки.

Т.е. не Visual Studio (пункт1), не sublime+gcc (пункт2), не Eclipse (пункт3).
Видел кучи рекомендаций CodeBlocks, QtCreator, DevCpp и т.д. - куча, какой наиболее подходит под мои требования?
>>863874
#281 #863874
>>863870
dev-c++
Говнище жуткое, очень нравится.
1437 #282 #864095
Подскажите как определить максимальное из чисел, встречающихся в заданном массиве более одного раза
>>864108
#283 #864108
>>864095
1. Отсортировать массив
2. ???
3. Profit!
#284 #864180
Поясните за битмаски. Нахуя их суют в каждую жопу? Или код вида
int hui = hui1 | hui2;
if((hui & (hui1 | hui2) == (hui1 | hui2))

может быть быстрее кода типа
int hui = 1;
if(hui)

Так какого хуя-то?
>>864184
#285 #864184
>>864180
Экономия места (в сетевых протоколах вполне оправдано), возможность проверить несколько флагов одновременно, удобство (назначить 20 флагов маской через | проще, чем писать 20 присваиваний). Алсо, if((hui & (FLAG1 | FLAG2) == (FLAG1 | FLAG2)) всего лишь на одну инструкцию длиннее, чем if (hui1), а гораздо более частый вариант с одной маской if (hu1 & FLAG1) и вовсе ничем от if (hui1) не отличается с точки зрения количества инструкций на самом деле от платформы зависит, но на x86 разницы нет.
#286 #864261
Допустим, у меня есть некий абстрактный класс, от которого идут наследники. У всех этих наследников есть одинаковые поля, но в каждом классе у них должны быть разные значения, например, максимальное количество здоровья.
Как лучше это реализовать? Объявить поля в базовом классе, а в наследниках присваивать им значения в конструкторе? Или можно как-то более красиво?
>>864275>>864336
#287 #864275
>>864261
1) Это не крестотред;
2) Если не хочешь анальных трещин от архитектуры до рантайма — не суй, блядь, данные в родительский класс. Интерфейс должен обеспечивать только методы т.е. в твоём случае можно объявить в род. классе virtual int max_hp() а в наследниках просто возвращать константу int max_hp() override { return 100; }.
>>864277>>864371
#288 #864277
>>864275
Это не крестотред, но

> override


что это, блять? Им мало было overload в 90х?
>>864285
#289 #864285
>>864277
Это хуитка из жявы, не дающая стрелять в ногу реализовать метод которого нет в интерфейсе (например, ты совсем валет и вместо size_t написал unsigned int аргумент — без этой хуиты такой код компилировался везде молча, но при попытке дёрнуть виртуальный метод на платформе где size_t != uint всё бы жутчайшим образом распидорасило на пустом месте).
#290 #864336
>>864261
Крестоеб уходи!
Какашечка #291 #864362
Котаны, как получить время с 00:00:00 UTC on 1 January 1970?
#292 #864363
>>864362
* timestamp, бистрафик
#293 #864364
>>864362
#include <time.h> time(NULL).
>>864365
#294 #864365
>>864364
пасиб
#295 #864371
>>864275
А если надо не чисто асбтрактный класс, а как шаблон, который делал бы почти всё, а наследникам надо только переопределить некоторые (по усмтотрению) методы, ну и поля?
#296 #864376
Посоны, в K&R их стандарт, не ANSI?
>>864378
#297 #864378
>>864376
Во втором K&R уже ANSI.
#298 #864487
Зачем кулхацкеры, которые пишут на си всякие парсилки PEB, оборачивают ассемблерные вставки в функцию _declspec(naked)? Чем так мешает пролог?
>>864500
#299 #864500
>>864487
Тем, что пидорасит регистры и стек, что не всегда нужно когда надо например вставить свою хуитку в чужой код.
Перейти из скриптовых в С/С++ за полгода #300 #864539
привет, ребята. Ситуация такая.
В универе выбрал не ту дорожку (не имел представления о мире программирования вообще) и пошел по пути веб-программирования, джава спринг и прочее. За год работы в конторе ужасно непонравилось, ушел в скриптинг на питоне/руби. Сейчас все еще думаю о том, чтобы перейти в с++, начал читать сначала С керигана ричи, смотреть лекции Линского, потом планирую какую нибудь книгу по с++. На все про все даю себе полгода до уровня Junior. В универе изучал С++ но, как уже сказал, выбрал не ту дорогу. Как думаете, аноны, реально ли до уровня уверенного джуна за полгода подняться? В программировании, структурах данных и алгоритмах минимально разбираюсь, в универе нормально решал. Спасибо.
>>864544>>864558
#301 #864544
>>864539
Нет.
>>864547
#302 #864547
>>864544
хуево, а реальных цифр не подкинете? Год-два?
>>864551>>864556
#303 #864551
>>864547

>Год-два?


Если начинать с правильного возраста.
Тебе уже поздно, ты уже веб-дебил.
Твой мозг искалечен.
>>864555
#304 #864555
>>864551
ну понятно.
#305 #864556
>>864547
Можно за год выучить и сишечку, и кресты до хуевого, но приемлемого уровня. Только надо въябывать, а не спрашивать на форумах для девочек-анимешниц, получится ли у тебя.
>>864561
#306 #864558
>>864539
Приплюснутые как евреи, у ник ОП-стихоплет ушел, и они лишились родины, теперь кочуют туда сюда балмошаться без ума-толку
>>864560
#307 #864560
>>864558
понял
#308 #864561
>>864556
просто хотел оценку от опытных людей. Спасибо.
>>864984
#309 #864575
Почему приянто мешать си и плюсы в одну колею (я про эти все c/c++, говорим си подразумеваем плючы и наоборот, вот это вот все). Это же разные языки. Плюсы вообще жутко перегруженное чудовище. Это ведь все равно что писать java/javascript общего нихуя, кроме двух слогов в названии.
>>864578
#310 #864578
>>864575
У плюсов с си как раз общего дохуя, а большая часть роектов на плюсах — си с классами и шаблонами вместо макросов.
>>864584>>864985
#311 #864584
>>864578
общего столько же, сколько у жс с жавой

а большинство проектов на жс - жава с динамической типизацией
>>864587
#312 #864587
>>864584
Ты долбоёб какой-то. Жс поддерживает код жявы?
>>864588>>864589
#313 #864588
>>864591
#314 #864589
>>864587
жава поддерживает код жс
>>864591>>864594
#315 #864591
>>864588
>>864589
))) ебать даунич
6 Кб, 479x108
#316 #864593
>>856777 (OP)
Аноны, полный ноль в С на связи, препод дал это задание в С, т.е. создать программу для решения с вводом переменных, как долго я буду с этим дрочиться, если знаний в С тупо нет Только в Паскале еще более менее?
#317 #864594
>>864589
Ты серьёзно долбоёб?
>>864604
#318 #864604
>>864594
Если ты не умеешь в программирование, то кто в этом виноват, мань?
>>864605
#319 #864605
>>864604
Кто виноват что ты пишешь хуйню, сам нихуя не понимая?
>>864607
#320 #864607
>>864605
Но ведь пишешь хуйню ты, хорошо?
>>864610>>864613
#321 #864610
>>864607

>хорошо?


Плохо.
>>864612
#322 #864612
>>864610
Хорошо. Хорошо?
#323 #864613
>>864607
Но ведь долбоёб ты, хорошо? Пруф или соси хуй.
>>864614
#324 #864614
>>864613
Пруф. хорошо?
>>864617
#325 #864617
>>864614
нет(
>>864620
#326 #864620
>>864617
да.ладно?
69 Кб, 1366x768
1437 #327 #864644
http://pastebin.com/60GePxa2
Подскажите в чем ошибка, почему криво заполняет массив с клавиатуры?
>>864651
#328 #864648
Крестотред утонул — теперь дауны и лабодауны собираются здесь.
#329 #864651
>>864644

>в чем ошибка


В ДНК, очевидно же.
#330 #864668
>>856777 (OP)
Ананасы, какую структуру данных лучше всего использовать для записи и хранения в ней логов? Основные требования - отсутствие malloc-ов и возможность добавления записей с помощью snprintf т.е. очевидный кольцевой буффер отпадает
9 Кб, 353x333
#331 #864679
>>856777 (OP)
Что может быть не так с этим?
#332 #864686
>>864668
Прям полное отсутствие malloc-ов, или один раз не пидарас? коли не пидор - выдели при инициализации всё что нужно и не еби мозга, иначе задумайся о своей реализации snptintf
>>864679
ДНК. А вообще - почитай про точки следования, с оптимизациями вычисление i может и покорёжится.
>>864855
#333 #864687
>>864679
Ну и говно.
#334 #864690
>>864668
Кольцевой буфер + промежуточный буфер для печати. Печатаешь в промежуточный, копируешь в кольцевой.
#335 #864733
Соре за тупой вопрос, но не гуглится
Что такое !=?
>>864767
#336 #864747
Ну, <= это меньше или равно например
#337 #864767
>>864733
Товсто
#338 #864851
>>864668

>snprintf т.е. очевидный кольцевой буффер отпадает


Не отпадает.
http://www.gnu.org/software/libc/manual/html_node/Custom-Streams.html
#339 #864855
>>864686

>А вообще - почитай про точки следования, с оптимизациями вычисление i может и покорёжится.


Чтобля? Каким образом?
>>864866
#340 #864866
>>864855

>почитай про точки следования

>>864956>>865144
#341 #864956
>>864866
Ты что-то такое слышал, но не знаешь, что именно? Где у него там i модифицируется, чтобы точки следования повлияли?

>>864679
У тебя код картинкой, перепечатывать его никто не будет, а что тебе в нем не нравится, и что ты вообще хотел сделать - ты не сказал.
#342 #864984
>>864561

>хотел оценку от опытных людей


>опытных людей


>на дваче


>опытных


лол
#343 #864985
>>864578

>У плюсов с си как раз общего дохуя


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

>большая часть роектов на плюсах — си с классами и шаблонами вместо макросов


Ну это явно хуёвый подход к программированию на крестах, ставить его в пример как-то глупо.
#344 #864987
Это я тут вчера хуйню про инлайн указателей на функции гнал. Зато тред сишечки живет и даже висит на видном месте.
>>865044
#345 #865044
>>864987
Молодец, мужественно признался на анонимном формуе.
#346 #865048
>>864668

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


Используй mmap, malloc-ов нет, можно через sprintf писать
#347 #865073
>>856777 (OP)
Все на английцком, дай на руццком
>>865080>>865093
#348 #865080
>>865073
Ну вот выучишь ты синтаксис языка, читая русские учебники, а что дальше? Все интересные статьи на английском, документация к либам на английском, комментарии в коде на английском, тикеты на английском, тз на английском. Намек понял?
Впрочем, если тебя в вузике язык учить заставлют, Керниган и Ричи есть в русских переводах, даже в трех изданиях, вместо каноничных двух.
#349 #865093
>>865073
На хуицком. В поиск научись
#350 #865133
Как проверить число на чередование чёрных и нечётных цифр?
>>865135
#351 #865135
>>865133
Разбей задачу на подзадачи: научись получать цифры числа (snprintf или делением на 10), а потом напиши цикл по цифрам, проверяя это самое чередование. Потом посмотри на свое решение и выкинь лишние шаги.
#352 #865144
>>864866
Прочитал тебе за щёку, даун.
>>865146
#353 #865146
>>865144
ебать Cантехника порвало)
>>865150
#354 #865150
>>865146
Ну так зашивайся, раз порвало.
>>865160
#355 #865160
>>865150
зачем мне тебя зашивать?
#356 #865720
Пиздец я конченый. Решаю задачку 1.13 из KR, вроде написал быстро - НЕ РАБОТАЕТ. Ну сука, ушел курить с тетрадкой и ручкой, возвращаюсь, написал блять точно все как надо, уж точнее не придумаешь. Снова не работает. Я минут 20 с выискиывал логическую ошибку, прежде чем понял, что проблема была в непоставленных скобках для блока if else.
поплакался
>>865723>>865728
#357 #865723
>>865720
Это нормально. Все на это напарывались. В твоей жизни еще будут и = вместо ==, и ошибки на 1 в for, и упущенные break в switch, и много других радостей.
>>866021>>866035
#358 #865728
>>865720
держи нас в курсе
>>865838
#359 #865838
>>865728

Так и будет, не сомневайся. Тебе могу даже на емайл первому писать
>>865863
Какашечка #360 #865863
>>865838
и мне пиши
Какашечка #361 #865864
сисюны, решительно пояснили преимущество енюмов над дефайнами для констант. сам топлю за дефайны.
#362 #865943
>>865864
Дефайны более гибкие: можно делать unsigned, можно втыкать флаги в старшие биты. В целом, можно думать об этом так: если enum подходит в качестве типа переменной или аргумента (например, void foo(enum smth arg)), тогда стоит использвать enum. Если возникают причины так не делать, возвращаемся к дефайнам.
>>866109
#363 #866019
>>865864
просто открой сорцы любого mature опенсорсного проекта
там сразу поймешь где и как перечисления используются
тупо того же линукса
>>866109
#364 #866021
>>865723
кстати, все перечисленное тобой легко предупреждается подключением утилит статического анализа кода..
непонятно, почему разрабы до сих пор ленятся их использовать
>>866030
#365 #866030
>>866021

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


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

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


Встречный вопрос: ты что-нибудь крупное писал, или только на хелловорлдах тестил?
>>866036>>866227
#366 #866035
>>865723

>В твоей жизни еще будут и = вместо ==, и ошибки на 1 в for, и упущенные break в switch, и много других радостей.


Это не то, что статическими анализаторами, это всеми компиляторами ловится.
>>866045
#367 #866036
Другой-анон врывается в тред

>>866030

>Не так уж и легко.


Не легко, а ОЧЕНЬ легко.

> Ловится далеко не все, что хотелось бы


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

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


Осиль grep. 5 фильтров и никаких ложных срабатываний нет.

> ты что-нибудь крупное писал, или только на хелловорлдах тестил?


В проекте 2.3 MLOC C++ + 0.7 MLOC C
>>866045
#368 #866045
>>866035

> это всеми компиляторами ловится.


res = 1;
for (i = 0; i <= e; i++) {
res *= x;
}
Не подскажешь, кем это ловится? И как оно вообще может ловиться?

>>866036

> 5 фильтров и никаких ложных срабатываний нет.


Какие фильтры, ты о чем вообще вон, в PVS-Studio предлагают комментариями с аннотациями срать, чтобы fp подавить? Например, есть одна вижуал студия. Есть глобальный массив структур items, последний его элемент всегда { 0 }. Функция делает: for (ptr = items; ptr->name != NULL; ptr++) { ... } Статический анализатор в студии клинит вроде починили в последнем апдейте, и он говорит, что я выхожу за пределы массива. Что ты будешь грепать? Отключишь сообщение целиком? А в другом месте оно может на баг указать.
>>866195>>866246
#369 #866061
Насколько clang умеет лучше в трансляцию over гцц и студия?
>>866064>>866197
#370 #866064
>>866061
Немного лучше гцц/местами/очень сильно зависит от кода/с каждым релизом обоих соотношение меняется. Собирай свой код и профилируй.
#371 #866071
>>865864
enum {HUITA_RAZ, HUITA_DVA, HUITA_TRI, KOLICHESTVO_HUIT};
struct huita massiv[KOLICHESTVO_HUIT] = { … };

Inogda eto udobno.
>>866109
Какашечка #372 #866109
>>865943
>>866019
>>866071
нашел только один плюс в енюмах, можно задавать выражение и будет подставлен результат. дефайны как то проще и наглядней.
32 Кб, 500x360
#373 #866110
Необходимы УЖЕ готовые функции и алгоритмы поиска пути в двумерном пространстве (x,y)

Пример:
11111011B1
1111001111
1111101111
11A1111011
1111111111

Есть вот плоскость из клеток.
Есть Начальная координата A(x1,y1) и конечная B (x2,y2).
Нужно найти кратчайший путь от A до B и записать все x3,y3 по которым нужно идти в массив walk_x[index], walk_y[index]

Нахуя мне это нужно? Есть 2d MMO в ней уже есть A алогритм поиска пути, но он блядь ограничен всего 32 клеточками, и в зоне 32 клеток от персонажа я могу ходить нормально (алгоритм работает и я обхожу препятствия), но блядь это работает исключительно в зоне 32x32, а карты от 300х400 до 500х500, т.е. мне нужно научится преодолевать препятствия другими способами, либо если существует способ задействовать A алгоритм и разбивать как-то локацию на отдельные участки и чек-поинты по которым можно двигаться (от одного к другому) - то это было гуд.

В общем чуваки, мне нужны ГОТОВЫЕ примеры рабочих функций ЛЮБОГО алгоритма поиска пути и записи всех координат от точки A(x1,y1) до точки B(x2,y2) c обходом препятсвий.

К сожалению я нашел в других языках программирования всех алогритмы которые мне интересны Jump Point Seach, A, D, Lee Algorithm но я слишком тупой что бы их портировать под Си, да и знаний Си особых нет.

Если кто-то может запилить функцию которая принимает find_route(X1, Y1, X2, Y2) (где X1,Y1 = начало где стоит чел, и X2, Y2 куда нужно найти путь если существует и записать его в массив route_x[index] route_y[index] - было бы ахуенно.

====================
Дополнительные вопросы:
====================

Назовите пожалуйста оптимальные алгоритмы для поиска пути которые не жрут систему пиздец как при поиске пути на картах от 300x300 клеток до 500x500 (больше 500х500 возможности сделать карту нет). Лабиринты проходить не собираюсь, 80% карты можно посетить, 20% карты занимают различные препятствия (здания, объекты, и т.п. т.д.)

Накидайте годной инфы и желательно примеры, а еще было бы ахуенно если бы можно было получить функцию в которую скинул бы указатель на свои массивы матрицы карты где уже изначально обозначены все клеточки как проходимые или нет, и получить ответ - можно ли добежать до указанной координаты, или нет, и если можно - записать все клетки (x,y) по которым можно пробежать до точки B с точки А.
32 Кб, 500x360
#373 #866110
Необходимы УЖЕ готовые функции и алгоритмы поиска пути в двумерном пространстве (x,y)

Пример:
11111011B1
1111001111
1111101111
11A1111011
1111111111

Есть вот плоскость из клеток.
Есть Начальная координата A(x1,y1) и конечная B (x2,y2).
Нужно найти кратчайший путь от A до B и записать все x3,y3 по которым нужно идти в массив walk_x[index], walk_y[index]

Нахуя мне это нужно? Есть 2d MMO в ней уже есть A алогритм поиска пути, но он блядь ограничен всего 32 клеточками, и в зоне 32 клеток от персонажа я могу ходить нормально (алгоритм работает и я обхожу препятствия), но блядь это работает исключительно в зоне 32x32, а карты от 300х400 до 500х500, т.е. мне нужно научится преодолевать препятствия другими способами, либо если существует способ задействовать A алгоритм и разбивать как-то локацию на отдельные участки и чек-поинты по которым можно двигаться (от одного к другому) - то это было гуд.

В общем чуваки, мне нужны ГОТОВЫЕ примеры рабочих функций ЛЮБОГО алгоритма поиска пути и записи всех координат от точки A(x1,y1) до точки B(x2,y2) c обходом препятсвий.

К сожалению я нашел в других языках программирования всех алогритмы которые мне интересны Jump Point Seach, A, D, Lee Algorithm но я слишком тупой что бы их портировать под Си, да и знаний Си особых нет.

Если кто-то может запилить функцию которая принимает find_route(X1, Y1, X2, Y2) (где X1,Y1 = начало где стоит чел, и X2, Y2 куда нужно найти путь если существует и записать его в массив route_x[index] route_y[index] - было бы ахуенно.

====================
Дополнительные вопросы:
====================

Назовите пожалуйста оптимальные алгоритмы для поиска пути которые не жрут систему пиздец как при поиске пути на картах от 300x300 клеток до 500x500 (больше 500х500 возможности сделать карту нет). Лабиринты проходить не собираюсь, 80% карты можно посетить, 20% карты занимают различные препятствия (здания, объекты, и т.п. т.д.)

Накидайте годной инфы и желательно примеры, а еще было бы ахуенно если бы можно было получить функцию в которую скинул бы указатель на свои массивы матрицы карты где уже изначально обозначены все клеточки как проходимые или нет, и получить ответ - можно ли добежать до указанной координаты, или нет, и если можно - записать все клетки (x,y) по которым можно пробежать до точки B с точки А.
>>866134>>866181
#374 #866132
Блин, поставил i3wm, теперь я как настоящий хакр
>>866517
#375 #866134
>>866110

>Необходимы УЖЕ готовые функции


50000 рублей
#376 #866181
>>866110
Вот например, загуглил в гугле и нашел курсовик на плюсах:
http://www.twirpx.com/file/998973/
>>866801>>867444
#377 #866195
>>866045

>Какие фильтры, ты о чем вообще


О grep, читать научись.

>вон, в PVS-Studio предлагают комментариями с аннотациями срать, чтобы fp подавить


Так большинство анализаторов требует. Тот же coverity. Кстати, PVS после coverity тонны реальных ошибок выловил.
>>866227
#378 #866197
>>866061

>студия


visual c++ вообще никак в плане оптимизаций. До последней экспериментальной версии, где они наконец реализовали SSA (хотя, как мне кажется, просто сунули внутрь llvm)
#379 #866227
>>866195

> Так большинство анализаторов требует.


Что и требовалось доказать. Ты >>866030

> орально ублажаешь статический анализатор


или несколько разом. И нехуй тут про grep затирать. А знаешь, что будет потом? Потом кто-нибудь напишет еще один анализатор, и ты пойдешь расставлять новые комментарии в файликах, и удалять старые. Что угодно, только бы сразу не писать качественный код. Правильно было бы хранить подавленные предупреждения вместе с контекстом анализатора в отдельном файле, и чтобы статический анализатор знал о системе контроля версий (и желательно, чтобы не только о git). Вот тогда бы можно было включить в билд статический анализ на постоянной основе. Надеюсь, clang к этому придет когда-нибудь.
>>866229
#380 #866229
>>866227
Короче, лалка. Не-систематических (вырезаемых grep-ом) false positive находится две с половиной штуки. И то, если внимательно присмотреться, оказывается, что как минимум одно "false positive" опирается на implementation-defined behavior
>>866235
#381 #866235
>>866229
Я тебе сейчас не могу конкретных примеров из живого проекта привести, но я в свое время заебался читать логи. Алсо, если у тебя богатый опыт, может, напишешь для оппоста абзац со ссылками?
>>866241>>866243
#382 #866241
>>866235
Опыт небогатый. Прогнал PVS, показал результаты ребяткам. Они сказали "ого, coverity пропустил много лажи" (в основном копипейст в логических операторах, одинаковое тело у if и else ветки, невозможные условия типа A > B && A <= B или
if (A) {
if (!A) {
do_something();
}
})

Короче, что этим анализатором обычно находится.
>>866262
#383 #866243
>>866235
Что было из систематических false positive: ссылка очень хитро инициализировалась динамически выделяемой памятью, но завёрнуто это всё было так, как будто из функции возвращается ссылка на локальную переменную.
#384 #866246
>>866045
выход за границу массива не статическими анализаторами проверяется, ты путаешь
>>866262
#385 #866262
>>866241
Если говорить о PVS-Studio, есть еще такая проблема, как русские разработчики, не умеющие в бизнесцена - она абсолютно неподъемная для небольших команд, а cppcat кончился.

> невозможные условия


Не вижу причин вообще это ловить. Оно чаще всего остается после всяких #ifdef DEBUG (иногда напрочь выпиленных до проверки, иногда выпиленных только препроцессором), и отлично вычищается любым, даже самым говенным оптимизирующим компилятором.

>>866246

> выход за границу массива не статическими анализаторами проверяется


Отлично проверяется в простых случаях:
char x[10]; for(size_t i = 0; i <= 10; i++) printf("%i\n", x);
Что говорит нам Visual Studio?

> bounds.c(4): warning C6201: Index '10' is out of valid index range '0' to '9' for possibly stack allocated buffer 'x'.



А вот в том случае, про который я говорил выше, оно как раз не должно было проверять, но проверяло и не осиливало осознать условие прекращение цикла. Сейчас потестил - на простом примере уже не ругается, но может еще что-то влияло.
>>866286>>866314
#386 #866282
>>856777 (OP)
Не осилил даже на уровне установки. Нашёл какой-то MinGW, установил, в меню "Пуск" есть только одна программа, которая вызывает консоль, а на рабочем столе появился ярлык для установки всякого говна. Успешен?
>>866287
#387 #866286
>>866262
Запускаешь ту самую консолю из меню пуск. В консоле пишешь mingw-get --help и читаешь. Не помню, нужно ли ставить gcc, или оно уже есть если что, mingw-get install mingw32-gcc. Пишешь хелловорлд, говоришь cd /d полныйпутькпапкесхелловорлдом. Говоришь cc helloworld.c -o helloworld.exe пока читаешь K&R, можешь писать просто make helloworld, где helloworld - имя .c файла без расширения. Большего тебе знать пока не нужно.

Если не осилишь и это, поставь себе Code::Blocks, там есть версия со встроенным GCC - ставишь, пишешь хелловорлд, мышкой тыкаешь конпелировать, ни о чем нидумоешь.
sage #388 #866287
>>866286
>>866282
Наебался.
#389 #866289
>>866286
Ты очень добрый. Я бы понял, если бы ты просто послал нахуй. Спасибо, но я уже всё удалил.
#390 #866293
>>866286
Но Code::Blocks действительно просто берёт и работает, спасибо большое.
#391 #866314
>>866262
у тебя массив на стеке
конечно его можно проверить стат тулзой
#392 #866342
Котики, кто-то помнит допускаемое количество вложений для switch-case? Пишу функцию, которая зависит от состояния 2ух переменных из 2ух структур. Одна принимает значения 0-1, другая 0-4 это получаеться 10 возможных действий для функции. И что бы не городить 10 if, думаю обойтись switch внутри switch. Можно ли так?

switch(a):
case 0:
switch(b):
....
break;
case 1:
switch(b):
.....
break;
#393 #866351
>>866342

> Можно ли так?


Можно, в лимит стандарт гарантирует минимум 127 ты не упрешься точно. А вот читаться это будет хуево. Уверен, что нельзя по-другому? Что за код ты будешь выполнять в свитче?
>>866357>>866370
#394 #866357
>>866351
Обработчик ошибок. 4 из 10 вариантов запускают функции, 2 из 10 принты, остальные 4 из 10 обнуляют необходимые переменные/счетчики/указатели.
>>866370
#395 #866370
>>866351
>>866357
Ну у меня 2 выбора для этого. Или свитч внутри свитч или 10 if-ов. 1ая переменная из структуры 2 флага всего имеет USE; SLEEP; 2ая 5 флагов. Вот эти 10 вариантов флагов я сравниваю, для определения дальнейших действий. Все объявлено через enum. Я не спал уже 2ой день и возможно мой почерк будет маленько бредовый, а посты будут похожи на поток мыслей, заранее прошу прощения.
>>866445
#396 #866445
>>866370
Сделай композитный флаг по формуле (значение флага один помноженное на количество возможных значений флага два плюс значение флага два) и гоняй свич по одному этому числу. И простейший макрос вида
#define CHOICE(flag1, flag2) ((flag1) * FLAG2_COUNT + (flag2))
#397 #866451
Вариант имеет право на жизнь. Хотя напрашивается if/else для переменной, которая 0 или 1, а внутри два свитча.
#398 #866487
>>866342
не умеешь писать стейт-машины?
пиздуй нахуй из профессии
>>866500
#399 #866500
>>866487
Так я же только учусь. Нет, что бы наставить на путь или кинуть в меня книжкой. А тут сразу на хуй шлют, пичаль.
>>866551
#400 #866517
>>866132
хакеры юзают dwm, который сами допиливают для получения нужно функциональности
#401 #866551
>>866500
Не слушай его, он бака
#402 #866800
>>857838

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

Если ты хочешь быть мартышкой - будь, и учи Си и С++, и потрать хуеву тучу времени и сил, что бы делать то, что делают на других языках программирования уже во всем продвинутом мире за неделю, на что ты будешь тратить все свои самые драгоценные года. Лучше перекатись в python тред, он намного полезнее будет, чем любые начинания с Си. Си чрезвычайно сложный язык, которые требует чрезмерно повышенное внимание и огромный опыт для его использования для каких-то задач. К сожалению при изучении ты не сможешь ничего сделать более чем сортировочку чисел в массиве, либо нарисовать табличку, это не есть программирование.
>>866808
#403 #866801
>>866181

говно это все. Спасибо за ссылку, но это не то.
Алгоритмы поиска пути мне известны, проблема с их реализацией на Си, на других языках программирования с этим особых проблем нет, но из-за различных очень строгих ограничений в Си многое не представляется возможным реализовать простым способом.
#404 #866808
>>866800
Синенавистник!
#405 #866828
>>866342
Я бы сделал битовую структуру, где хранил бы флаги и катался по ней в switch c использованием масок. Из плюсов вижу возможную детекцию множественных ошибок (если оно вообще нужно). Но тк я Сишечку только изучаю, я хз адекватное ли это решение.
#406 #866845
Code from K&R book:
#include <stdio.h>
#define MAXLINE 1000

int get_line(char line[], int MAXLINE);
...

Error:

string.c:2:17: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant
#define MAXLINE 1000
^
string.c:4:31: note: in expansion of macro ‘MAXLINE’
int get_line(char line[], int MAXLINE);

chto ya delayu ne taq?

too lazy to switch language
>>866848
#407 #866848
>>866845
Препроцессор заменяет первый токен, определенный в дефайне, на остальные. Т.е., MAXLINE на 1000. Ты пишешь:
int get_line(char line[], int 1000)
Что ты делаешь не так?
>>866851
#408 #866851
>>866848
Я говорю в объявлении функции "бери вторым аргументом какую-то хуйню 1000 целочисленного типа"
Правильно?
>>866859
#409 #866859
>>866851
И что это должно по-твоему значить? Функции принимают аргументы. Аргумент - это значение, передаваемое тем, кто вызывает эту функцию. Чтобы можно было узнать значение аргумента, у него должно быть имя. А что ты со своей тысячей можешь сделать без имени? #define отрабатывает до компиляции - препроцессор проходит по исходнику и заменяет все дефайны на их значения, поэтому компилятор слово MAXLINE вообще не увидит нигде.

У тебя может быть два варианта.
1) Зафиксировать максимальный размер массива и не передавать его. Ты делаешь (сделал) #define MAXLINE 1000, и внутри функции используешь MAXLINE в качестве лимита. Получается:
int get_line(char line[]) { ... }
и вызов
char buffer[MAXLINE];
get_line(buffer);
2) Ты можешь предоставить вызывающему решать насчет максимального размера. Тогда ты передаешь размер аргументом и используешь этот аргумент в качестве лимита.
int get_line(char line[], int length) { ... }
и вызов
char buffer[12345];
get_line(buffer, 12345);
>>866865
#410 #866865
>>866859
Я понимаю, что препроцессор заменяет дефайны, этот код я перепечатал прямо из книги, а оно не компилируется, вот я и опупел слегка. Так то я уже заменил имя формального параметра в функции, все заработало
>>866871
#411 #866871
>>866865
Поглядел книгу - у тебя либо ошибка распознавания, либо ты просто ошибся регистром (там maxline). Регистр в сишечке имеет значение. MAXLINE и maxline - абсолютно разные вещи.
>>866877
#412 #866877
>>866871
русское издание блядское
>>866885
sage #413 #866885
>>866877
В шапке прямая ссылка на английское. Подглядывай туда, если что.
>>866888
#414 #866888
>>866885
Да я лучше уж на инглише, спасибо.

Блин, мне кажется, или задания тут потруднее вем у Праты
>>866893
#415 #866893
>>866888
Простые, упрощенные до жути примеры и несложные задачки. Хочешь сказать, у Праты совсем дрисня в задачах?
>>866931
#416 #866931
>>866893
Пожалуй нет, мне показалось
>>867257
#417 #867024
>>864362
шли ноль, не прогадаешь
#418 #867047
>>866342
Стараюсь в таких случаях чередовать switch-case и if, иначе адская каша получается
>>867279
#419 #867159
>>857838
Изучи архитектуры компьютеров(процессоров), машинную логику/арифметику, строение *nix, Win систем. На это придеться потратить ~3-4 годика, при необходимом рвении и желании можно уложиться и в 2. После этого любой язык программирования осилишь за пару месяцев. При этом паралельно будет изучение алгоритмов. И к 1-ому курсу будешь первоклассным программистом.
#420 #867257
>>866931
Снова я. Почему может не работать ctrl-d? С клавой все ок, но ввод програамки не воспринимает EOF
>>867274
#421 #867274
>>867257
В Windows - Ctrl+Z. Еще не забудь о том, что ввод по умолчанию буферизированный, и буфер заполняется по Enter, т.е., нужно жать Ctrl+Z (или Ctrl+D в Linux) и потом Enter. Ну или пости код.
>>867290
#422 #867279
>>867047

>switch(a):


>case 0:


>switch(b):


Очевидно, это составное, сложное условие. Либо переделывай на битовую маску, если кончено это возможно, либо переписывай все на if, ищи оптимальную конструкцию. Я считаю switch - зло, прочитать тяжело, всегда стараюсь if использовать, легче вычитывать каждую ветку логики.

>867047


>чередовать switch-case и if


Говнецо тоже.
#423 #867290
>>867274
Спасиб, уже переделал и все заработало.
осталось понять почему
#424 #867444
>>866181
Перезалей на рыгохост какой-нибудь.
#425 #867481
https://habrahabr.ru/company/pvs-studio/blog/314044/
Аноны, поясните нуфагу, что за йобу они тут рекламируют? Это софтина находит плохой код?
>>867492
#426 #867492
>>867481
Выше тред поскролли, мы как раз обсуждали. Плохой код - субъективное понятие. Софтина находит код, который нарушает какие-то положения стандарта. И, что гораздо круче, она находит еще и тот код, который на основании каких-то признаков или исходя из логических выводов программы может содержать ошибки (а может и не содержать). PVS-Studio стоит овердохуя и не продается физическим лицам. Кроме нее существуют и другие тулзы для статического анализа (всякие cppcheck, Coverity и прочие линты), в статический анализ понемногу учатся сами компиляторы (Visual Studio и clang кое-как умеют, например). Но с PVS-Studio, конечно, все это не идет ни в какое сравнение.
>>867619
Какашечка #427 #867619
>>867492

>PVS-Studio стоит овердохуя и не продается физическим лицам.


а сколько стоит и почему не продается? если застартпупить свой анализатор, взлетит?
#428 #867664
>>867619

>а сколько стоит


Для всех по-разному. Где-то была приведена переписка с PVS-Studio, там цена была в районе 5k$ в год.

В принципе, это в примерно равно месячной зарплаты девелопера, так что не то чтобы очень дорого.
#429 #867689
Посоветуйте первую книгу для изучения основ C, я немного мимокрок, хотел почитать что то для обучения, прежде чем читать книгу с оп пика.
>>867699
16 Кб, 150x220
#430 #867699
#431 #867702
>>867619
Взлетит. Если тебе удастся его написать, конечно же - там работы до опизденения.
>>867727
#432 #867727
>>867702
пилю годноту. я любитель эс в частности clips и в сабжевой гуглагруппе пару лет назад появился чел, говорил, что их компания работает над проектом статического анализатора, задавал грамотные вопросы, фирма его в подписи светилась, вроде как с пиндостана. так вот, что в нормальных анализаторах крутится экспертная система, это для меня без сомнения, проблема в базе знаний. если бы можно было набрать паттерны ошибок как здесь http://www.viva64.com/en/w/ то создать анализатор более чем реально. но с другой стороны, анализаторов этих всяких дохуя и даже если застартпупить проектик, вероятность занять место под солнцем милипиздрическая.
>>867738
#433 #867738
>>867727
Да похуй абсолютно на находимые ошибки, вась, просто посмотри на Coverity. Умеет примерно следующее: генерировать красивые отчёты с графиками, конвертировать их в пдфчики/доки и любые другие форматы и... всё. К чему я это: тут главное пиар и количество бабла в него вложенное, как и всегда в бизнесе.
>>867747
#434 #867747
>>867738
тематика интеллектуального анализа текста мне интересна и запилить годноту поимев профит тоже и если бы запахло жирной котлетой, я бы макнулся.
>>867808
#435 #867801
Программач, поясни за gdb. Есть какие-нибудь адекватные уроки для обучения работе с этим инструментом? В инглиш я вери бед, так что желательно всё же русскоязычное что.
>>868075
#436 #867808
>>867619
Вангую, что пока ты пилишь свой, анализатор в clang уже будет допилен до приемлемого уровня.

>>867747
Это не про анализ текста если только ты не правила для cppcheck пилить собрался, лол. Это гораздо больше про компиляторы. Когда компилятор обрабатывает исходник, он анализирует код и применяет разные техники оптимизации (constant propagation, dead code elimination, например), чтобы сгенерить быстрый и/или короткий код. Сгенерив код, компилятор данные анализа выбрасывает, а статический анализатор, наоборот, использует подобные данные для поиска возможных проблем.
>>867812
#437 #867812
>>867808

>Это не про анализ текста


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

> разные техники оптимизации


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

грубо говоря, нужно в соответствии с стандартом искать семантические ошибки.
if (a = 1) <- как банальный пример.
>>867847
13 Кб, 543x264
#438 #867847
>>867812

> if (a = 1) <- как банальный пример.


Фу. Давай лучше поговорим о if ((ptr = malloc(1000))) { ... }?

> > разные техники оптимизации


> это то причем?


При том, что техники используются те же. Если у тебя в коде:
point.x = 1;
point.x = 1;
то статический анализатор после преобразования кода в какую-нибудь SSA-форму находит лишнее присваивание, а потом подключает базу знаний, из которой извлекает вероятное описание проблемы (например, он может посмотреть, что в структуре кроме x есть только y и намекнуть на копипаст), а если не найдет совпадений в базе знаний - рассказывает только о присваивании. Но чтобы увидеть подобную проблему в:
buffer[0] = 1;
buffer[42 * (1 - sizeof(char))] = 1;
ему приходится выполнять те же самые оптимизации, что и компилятору.

Алсо, вот тебе пример того, как студия делает анализ, мне он очень нравится. По сути это false positive (этот конкретный код не содержит ошибок), но если вдуматься, то я должен был использовать do { ... } while.
>>867943
Какашечка #439 #867943
>>867847

>if ((ptr = malloc(1000))) { ... }?


давай, что здесь не так?

и я смысла в твоей простыне не понял, что анализатор и конпилятор в связке могут давать более пролуктивный анализ? вопрос не о деталях и плюшках, а о коммерческом потенциале.
>>867954>>867965
sage #440 #867954
>>867943

> а о коммерческом потенциале.


Шел бы ты в /biz/, барыган, с таким подходом к вопросу. Из-за таких как ты, у которых на первом месте прибыль, а на втором все остальное, мир и катится в пизду.
#441 #867965
>>867943

> и я смысла в твоей простыне не понял


А я про анализ текста отвечал. Анализируется совсем не текст. И вообще это серьезная магия, без соответствующего опыта ты ничего адекватного не напишешь.
#442 #868062
Есть один шеллкод, который просто спавнит мессаге бокс "Хелло, ворлд" я с этого кекну немношк. Хочу по-приколу инжектировать его во все процессы и получить кучу таких окошек. Что почитать об этом? Как сделать инжект в каждый процесс?
>>868076>>868086
23 Кб, 480x551
#443 #868064
Спойлер не там
#444 #868075
>>867801
Нагугли какой-нибудь quick reference (тысячи их), а дальше юзай help и официальную документацию по необходимости http://sourceware.org/gdb/current/onlinedocs/gdb/
#445 #868076
>>868062
сделал по-приколу инжект тебе в рот
>>868084
#446 #868084
>>868076
Приятное теплое распирание и щекотание при выполнении каждой инструкции.
#447 #868086
>>868062

> Что почитать об этом? Как сделать инжект в каждый процесс?


Ну очевидно же. >>861712
#448 #868535
Репост, здесь мне более компетентные люди помогут.

Анон, у меня вопросы по сетям, возможно глупые: при каждом http-соединении программой-сервером создаётся файл-сокет, поскольку http работает поверх tcp?

И ещё: через TCP-сокет можно ответить http-пакетом, но это уже будет вроде как нарушение конвенции?
Как с этим соотносится то, что TCP-бинарный, HTTP-текстовый?
Простейший абстрактный TCP-сервер принимает данные и выводит их. То что они сразу выводятся не в бинарном виде-заслуга либы (<sys/socket.h>, etc)?
>>868601>>869146
#449 #868601
>>868535

> при каждом http-соединении программой-сервером создаётся файл-сокет


Во-первых, не при каждом. В HTTP/1.1 есть такой Keep-Alive, когда после получения одного ресурса с сервера клиент может попросить другой, используя уже установленное соединение. Например, так всякие картиночки с двачей браузеру удобнее грузить. Во-вторых, файлом сокет быть не обязан (в винде у сокета по умолчанию нет файлового I/O). Но в целом, ты прав: создается TCP-сокет, подключается к серверу, отправляется запрос и читается ответ.

> И ещё: через TCP-сокет можно ответить http-пакетом, но это уже будет вроде как нарушение конвенции?


Не совсем понятный вопрос. И не совсем правильно говорить про HTTP "пакеты". Это поточный протокол поверх поточного же TCP, данные могут приходить разными порциями.

> Как с этим соотносится то, что TCP-бинарный, HTTP-текстовый?


Текст - не абстрактная хуйня в вакууме, это просто интерпретация последовательности байтов. В частности, в HTTP используется ASCII.

> То что они сразу выводятся не в бинарном виде-заслуга либы


Данные приходят байтиками, но если ты делаешь какой-нибудь printf, это значит, что ты интерпретируешь эти байтики как символы в кодировке ASCII (в ASCII нет преобразований - порядковый номер символа равен численному значению байта).
>>868949>>868975
#450 #868858
поясните за аргументы командной строки. если что я шиндоусблядь. вот в K&R базар пошел за сабж и несколько примеров программ. вот следующая хуета например должна найти образец в строке.

#define MAXLINE 1000

int main(int argc, char *argv[]) {
char line[MAXLINE];
int found = 0;
if(argc < 2) printf("используйте find для образца\n");
else
while(getline(line, MAXLINE))
if(strstr(line, argv[1]) != NULL){
printf("%s", line);
found++;
}
return found;
}
собственно когда я откомпилировал это и запускаю программу не о какой инициализации аргументов разговора быть не может в окне пишется первый принтф допустимто. ну я открыл просто командную строку и ввел там типо find -"eblo" -n "lo", ввёл всё еще раз по другому. проясните короче за эту хуйню.
>>868859>>868948
#451 #868859
>>868858
ну воще за эти аргументы, как я например указываю количество параметров в argc.
#452 #868910
Суп программач,
поясни за написание драйверов и служб для линукс, насколько хорошо освещена эта тема, какие актуальные годы для книжек, что вообще стоит почитать? Сам я байтоёб, вроде неплохо уже пишу для STM32, но без фанатизма. Посмотрел курсы на степике, но у них задания и вопросы просто дичь какие кривые и нулевая база теории, один упор на практику: что куда подставить, какие команды мы будем сейчас использовать и прочее и прочее. Почитал зарубежные статьи, и чот как-то грустненько они идут, ничего толком непонятно, какие-то корки хуёрки. Материал подается так, что считается что ты должен знать основной материал а разбирают уже нюансы. Вообщем нид сам хелп фром анон хеар.
>>868939>>868979
#453 #868939
>>868910

> драйверов и служб для линукс


Это называется "модули ядра" и "демоны", виндузятник.
>>868941
#454 #868941
>>868939
А по делу что сказать?
#455 #868948
>>868858
Что тебе пояснить? Программа берет командную строку:

> find -"eblo" -n "lo"


разбивает ее на куски по пробелам (куски в кавычках считаются одним целым, даже если внутри есть пробелы). Конкретные детали того, как парсится командная строка, зависят от ОС и/или стандартной библиотеки C. После того, как командная строка разобрана, создается argv, в него кладутся указатели на каждый кусок, а в argc общее количество указателей. А потом еще в argv[argc] кладется NULL.

Если у тебя программа с аргументами не запускается, удостоверься, что ты не ошибся директорией и именем (может, у тебя компилятор собирает какой-нибудь a.exe). В Windows есть команда find, поэтому если в текущей директории нет твоей find.exe, запустится системная команда. Алсо, практически во всех IDE можно указать командную строку для запуска, но в таком случае указывать имя самой программы (find) не нужно, только аргументы.
#456 #868949
>>868601
Спасибо, бро, добра тебе!
16 Кб, 150x220
#457 #868970
Аноны, правда ли стоит начинать вкатываться в программирование (начинать хотел с C) с помощью этой книги, если я мимокрок?
Если литература годная, может вообще стоит начать с "основ программирования для чайников"?
Изначально хотел начать с какой нибудь простой книги о основа C + конспекты лекций институтов по алгоритмам и систем данных, а после перейти на книгу с оп пика.
>>868971
#458 #868971
>>868970
Начни с питона, нет начального гемороя как в Си, куча готового кода, всякие онлайн соревнования и задачи. Как наберешься навыков именно программирования, там уже будешь видеть дальнейший свой путь развития.
>>868974
#459 #868974
>>868971
Питон же относится к web, не так интересно (как мне показалось)
>>868976
#460 #868975
>>868601
А не скажешь, что можно почитать/посмотреть по теме.
Читал Олиферов год назад-ничего не запомнил, Beejs Netwrk Programming нормально зашло.

Сейчас планирую UNIX Network Programming начать.
>>868979>>869011
#461 #868976
>>868974
Питон относится ко всему, в первую очередь к десктопам.
>>868980
#462 #868979
>>868975
Можешь оценить свой навык создания unix приложений? Что читал, что зашло, как оно вообще.
>>868910 - анон
>>868983
#463 #868980
>>868976
Я правильно понимаю, что питон просто будет для меня лучшим началом, так как более дружелюбен к мимокрокам?

И почему в этой пасте советуют книгу Dive into python, когда есть Укус питона, потому используют даже в НАСА!!11

Завтра ищешь в интернете книжку Dive into python. Похуй если ничего не поймешь. Затем идешь на python.org и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию питоньего кода - PEP8, чтобы от зубов отскакивало. Когда напишешь свою первую имиджборду, по пути изучив верстку на html+css, скачиваешь и изучаешь любой питоний асинхронный вебсервер, рекомендую Tornado или Gevent. Как переделаешь имиджборду, чтобы выдавала по крайней мере 5 тысяч запросов в секунду, можешь идти дальше - тебя ждет увлекательный мир хайлоада. Apache Hadoop, сверхбыстрые асинхронные key-value хранилища, MapReduce. Отсос хиккующих выблядков / просто неудачников типа рейфага или сисярп/джава-хуесосов, которые сосут хуй по жизни не заставит себя ждать и уже через пол года ты будешь получать такие суммы, что любая баба будет течь при одном упоминании твоей зарплаты.
>>868982
#464 #868982
>>868980
Да, правильно понимаешь.
Мне питон нравится тем, что в нём можно работать как в командной строке сразу.
#465 #868983
>>868979
Практически нулевой. Кроме того что выше-почти ничего не читал.
Только начинаю вкатываться в низкий уровень, а так пишу всякую сетевую и около-сетевую хуиту на питоне. Хочу глубоко врубиться во все, с чём работаю.
#466 #869011
>>868975
Читай UNIX Network programming, да. Не стесняйся писать мелкие программки, пока читаешь. Собери себе виртуальную сеточку из пары-тройки линуксов в VirtualBox если воткнуть какой-нибудь арчик без гуя, оно будет летать даже на совсем днищепк без аппаратной виртуализации и экспериментируй. Теория, не закрепленная практикой, быстро забывается, а если соберешь все грабли по пути, в голове точно что-нибудь останется.
>>869059
#467 #869059
>>869011
Так и сделаю, добра тебе ещё раз!
#468 #869146
>>868535
Ты походу дела вообще не понимаешь о сетях.
Google: инкапсуляция модели OSI;
google: модель OSI
>>869311
Какашечка #469 #869263
сисюны, поясните за булевые элементы в структуры. ести четыре булевых значения и я пиздец как нехочу их в своей структуре в виде булов, а хочу как флаги. удобно обнулять при инициализации да и места не жрут. а? нахуй булы?
>>869265>>869287
#470 #869265
>>869263

>а хочу как флаги


битовые операции
>>869301
#471 #869287
>>869263

> удобно обнулять при инициализации да и места не жрут


struct { bool foo:1; bool bar:1; unsigned baz:4; } x = { 0 };
#472 #869301
>>869265

>битовые операции


ну и норм

>struct { bool foo:1; bool bar:1; unsigned baz:4; } x = { 0 }


уотаквот malloc(sizeof(YOBAStruct))
>>869303
#473 #869303
>>869301

> уотаквот


Щито?
>>869309
#474 #869309
>>869303

>Щито?


динамически выделяется, вот что.
>>869312
#475 #869311
>>869146
Да, как-то хуёво отложилось.

HTTP-пакет неявно включает в себя заголовки всех нижележащих уровней, ты на это намекаешь?
>>869346
#476 #869312
>>869309
Ну ты же написал "структура" - кто тебе мешает динамически выделять структуры с битфилдами?
>>869324
#477 #869324
>>869312

> кто тебе мешает динамически выделять структуры с битфилдам


никто, просто по району ходит слух, что битфилды не всегда кроссплатформенны и конпиляторозависимы.
>>869326
#478 #869326
>>869324

> что битфилды не всегда кроссплатформенны


Чушь собачья. Разворачиваются в те же самые инструкции, что и логические операции. Ты, наверное, не до конца понял. На самом деле, проблема с битфилдами - интероперабельность. Если твой код будет писать битфилды в файл - ты обязательно их прочитаешь, а вот программа, собранная другим компилятором или под другую платформу - не обязательно - выравнивание и порядок битов в битфилде зависит от компилятора. То же, если битфилды будут торчать в API твоей библиотеки. Если ты соберешь либу одним компилятором, а пользовательский код будет собран другим - может случиться неприятность. Но в своем коде можно использовать битфилды без проблем.
>>869337
#479 #869329
вообщем енюмы это как то слишком молодежно, а буллы это один чар как минимум, а в чар я могу напихать целых восемь флагов. ня.
>>869333
#480 #869333
>>869329
Не пихай в char флаги. Там выше видео про undefined behavior, и там поясняют, что бывает за то, что ты вдвигаешь 1 в знаковый бит.
>>869339
#481 #869337
>>869326

> выравнивание и порядок битов в битфилде зависит от компилятора


а мне нужно более менее предсказуемо да еще максимально кроссплатформенно, вот.
>>869344
#482 #869339
>>869333

>что ты вдвигаешь 1 в знаковый бит.


на ладно, unsigned char. да и что будет? если никто мой байтик не тронет.
>>869342>>869344
#483 #869342
>>869339
Все хотят тронуть твой байтик
#484 #869344
>>869337

> максимально кроссплатформенно


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

>>869339

> unsigned char


С unsigned ничего не будет, с unsigned все ок.
>>869348
#485 #869346
>>869311

>HTTP-пакет


Пиздец. А ничего, что TCP — уже стримовый протокол?
>>869352
#486 #869348
>>869344

>С unsigned ничего не будет, с unsigned все ок.


а без unsigned? поясни.
>>869357
#487 #869352
>>869346
Я нуфаг, не обессудь.
31 Кб, 744x133
#488 #869357
>>869348

> а без unsigned? поясни.


А без unsigned ты можешь сдвигать вправо только положительные числа. На самом деле, ты вряд ли будешь сдвигать влево именно сам char с флагами, так что я зря прицепился.
>>869358>>869364
sage #489 #869358
>>869357
сдвигать влево
фикс
#490 #869364
>>869357

>сдвигать влево именно сам char с флагами


ну там очевидно будет два стула или shl или shr, вот и неопределенность.
>>869365>>869370
#491 #869365
>>869364
shl/sal быстрофикс
#492 #869370
>>869364
Неопределенность там из-за наличия других архитектур, в том числе и еще не существующих. x86 все в порядке, просто порежутся биты слева. Между SHL и SAL вообще разницы нет.

Алсо, я тут подумал, и понял, что зря вообще прицепился. Прошу прощения. Именно с char в принципе все ок, ибо integer promotions до int во время вычислений.
>>869380
#493 #869380
>>869370

>SAL


схоронит выпавший битик в флаг, а shl нет. вроде так.
>>869383
#494 #869383
>>869380
Оба воткнут тот же самый бит в CF.
#495 #869431
Интересует вызов WinAPI по хэшу. Когда мой кодес занимается парсингом таблицы экспорта кернеля, в какой момент останавливать вычисление хэша? Завершаются ли экспортируемый имена нулем? В олли я видел, что эти имена располагаются вплотную без всяких нулей.
>>869559>>869563
#496 #869559
>>869431
Не помню уже, но должны завершаться. Читай описание формата РЕ-файла, там всё написано.
#497 #869563
>>869431
Количество именованных экспортов лежит в IMAGE_EXPORT_DIRECTORY.NumberOfNames. Имена завершаются нулем.
#498 #869854
анончики, я подсел на дефайны. я все хочу задефайнить. у меня есть повторяющиеся участки кода, я хочу их задефайнить, а не выносить в подпрограмму. это норма?
>>869857
#499 #869857
>>869854
Не норма. Если только ты не пишешь для древнего компилятора какого-нибудь, делай inline/always_inline и не выделывайся.
>>869858
#500 #869858
>>869857
вот есть например три цикла подряд, отличающиеся количеством повторений:

c = 10;
while(c--) {
}

c = 20;
while(c--) {
}

c = 30;
while(c--) {
}

хочу тело цикла задефайнить, что в этом плохого? зачем инлайн функция?
>>869879
#501 #869860
Я напейсал прогу, которая зкаменяет табы на пробелы. Я теперь си программист? Заслужил ли я носить бороду?
>>869862
#502 #869862
>>869860

>Я теперь си программист?


да

>Заслужил ли я носить бороду?


нет
>>869867
#503 #869867
>>869862
А что нужно чтобы, бороду заслужить?
Кстати, надо через программку програнть весь мой говнокод на питоне
#504 #869879
>>869858
Сделай инлайн-функцию с циклом, принимающую количество повторений? Или обычную static функцию, компилятор сам разберется.
#505 #869884
Как прописать программу в автозагрузку и что не так в моем коде? http://ideone.com/p8uNtC

Запускаю его как с правами администратора, так и без. Запись в реестре не появляется.
>>869889
#506 #869889
>>869884
GetLastError и прочая диагностика где? 64-битная ОС и 32-битное приложение? В HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run смотрел?
>>869893
#507 #869893
>>869889

>64-битная ОС и 32-битное приложение?


Да, так и есть.

>В HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run смотрел?


Нет, что это за ветка? Завтра посмотрю, батарея разряжена
>>869897
#508 #869897
>>869893
64-битная винда частично редиректит доступ к реестру от 32-битных приложений в отдельную ветку из-за проблем совместимости. Например, чтобы ты случайно не прочитал имя 64-битной дллки какой-нибудь и не плакал, что не получается ее загрузить.
https://msdn.microsoft.com/en-us/library/windows/desktop/aa384232(v=vs.85).aspx
>>869909
#509 #869909
>>869897
И как происходит запуск из той ветки? Почему моя программа не запускается при загрузке системы? Или из той ветки вообще не работает запуск?
>>869910
#510 #869910
>>869909
Нормально происходит. Посмотри для начала, пишется ли. Может, ты все же не под админом запускаешь?
16 Кб, 1200x624
#512 #870043
>>856777 (OP)
Анон, как мне сменить язык с С++ на просто С, я ультраньфаня
#513 #870367
Ребят, помогите, пользуюсь visual studio 2015 и почему то в ней scan, gets считает за ошибки и нужно писать scan_s, gets_s. Как фиксить это? (в 2008 версии все ок). Спасибо.
>>871643
32 Кб, 848x585
#514 #871643
>>870367
gets() официально выпилена из стандарта, пользуйся fgets(). Остальные предупреждения отключаются втыканием #define _CRT_SECURE_NO_WARNINGS (или в старых версиях #define _CRT_SECURE_NO_DEPRECATE 1) в самое начало исходника (перед всеми инклудами). Или при компиляции из командной строки -D_CRT_SECUREблаблабла. Или через GUI (пикрелейтед) ошибки превращаются в варнинги. В любом случае, внимания обращать на это не стоит, пользоваться функциями с _s не стоит тем более.
#515 #871772
анон, а где можно почитать про создание собственного представления int-ов, не влезаю в 64 битный, числа большие, на них потом будет пара алгоритмов из теории чисел?
>>871951
#516 #871951
>>871772

> где можно почитать про создание собственного представления int-ов


В википедии в статье "длинная арифметика". Узнаешь про Карацубу, посмотришь быстрое возведение в степень. Сложение и вычитание в столбик, как в школе (если сумма меньше любого слагаемого, значит был перенос). Хранить лучше в виде структурки с массивом каких-нибудь uint_fast32_t, битность этих самых fast посчитаешь. А вообще, мы уже в новый тред перекатились, сюда вряд ли многие заглядывают.
2481 Кб, 2250x2700
#517 #872144
Привет. Есть говнокод эмулятора на Си: https://github.com/HerculesWS/Hercules/

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

ПЕРЕКАТ >>869911 (OP)
#519 #872882
http://ideone.com/J4CVCA
Подскажите как сложить два массива.
#520 #877947
ананасы, подскажите, можно ли как нибудь способом узнать указывает ли указатель void * на какое либо место в памяти
301 Кб, 2048x1536
321 Кб, 2048x1536
Ошибка в C. Не могу построить цикл. moon #521 #879162
Дело в том что в школе началось программирование, а с этим в свою очередь начались проблемы. Проходим циклы. Я прикрепил задачу и её решение на Си. Но я не понимаю что я сделал не так(( Помогите. Заранее благодарен.
301 Кб, 2048x1536
321 Кб, 2048x1536
Ошибка в Си. Не могу построить цикл. moon #522 #879167
Дело в том, что в школе началось программирование, а В связи с этим-проблемы. Проходим циклы. Я прикрепил два скрина : задачу и её решение. Но выдаёт ошибку. Что я сделал не так? Помогите, заранее спасибо.
Тред утонул или удален.
Это копия, сохраненная 23 ноября 2016 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски