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

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

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

Что читать:

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

Шапка: http://piratepad.net/bJ1SdmkZyu
>>850421
sage #2 #837607

>2016


>C


/thread
>>837611
#3 #837611
>>837607

> 2k14+2


> /thread

#4 #837660
Есть гайд для тупых как комить на gcc?
а то слишком СЛОЖНА.
Тем более я только начал учить, не бейте.
>>837662>>837663
sage #5 #837662
>>837660

>а то слишком СЛОЖНА


???
#6 #837663
>>837660

> как комить на gcc?


Кодить? Компилировать? Если второе, то cc file.c (или даже make file). А если первое, то книжки у нас в шапке.
#7 #837686
Есть литература на родном языке? Уровень знания английского низкий, особенно без понимания базовых вещей.
>>837693
#8 #837693
>>837686
K&R есть на русском (ищи третье издание перевода), Прата тоже. Обе книги гуглятся.
>>837769
#9 #837769
>>837693
Нашел & Схоронил. Спасибо.
#10 #838039
Закину и сюда, вдруг это какой-то подводный камень и в ньюфаго треде о нём не знают.
Есть один цикл
while ( read(client_socket, &c, 1) > 0)

Теперь тело. Варианты:
putchar(c) - всё окей, результат устраивает.

putchar(c)
printf("%d ", c)
После каждого символа он ещё и код поясняет.

А теперь внимание:
printf("%d ", c) выдает совсем другой результат. По крайней мере, коды последних символов не совпадают с вариантом, в котором есть putchar(c). Что за говно? С сокета гарантировано постуают одинаковые символы.
>>838056
#11 #838056
>>838039
Никаких подводных камней, просто я не сбрасывал буфер.
>>838437>>838474
#12 #838437
>>838056
лошара
61 Кб, 512x317
#13 #838474
>>838476
#14 #838476
>>838474
Там должно быть написано setbuf(stdout, NULL);
>>838893
#15 #838838
Пацаны, скиньте пожалуйста ссылку на пак с VS.
>>839175
#16 #838893
>>838476

>setbuf


чё за говно? опять парашка, в стили винами или позикс?
>>839087
#17 #839087
>>838893
Не, вполне себе стандарт.
#19 #839206
Какого черта, уже несколько дней одну главу про указатели читаю и перечитываю, хоть бы чего в ней осталось.
>>839217>>839218
#20 #839217
>>839206
Если не достигаешь полного понимания, попробуй посмотреть отладчиком или порисовать ячейки памяти на бумаге.
>>839233
#21 #839218
>>839206
https://www.youtube.com/watch?v=6pmWojisM_E

Вот попробуй, мне зашло
>>839233
#22 #839233
>>839218
Не, мне не очень зашло именно это видео, хотя все что я услышал на этих лекциях про указатели я понял сразу же. У меня теперь другая проблема, хорошо запомнить это., усвоить, и свободно использовать, и я не могу придумать как этого достичь. Читаю сейчас рекомендованную литературу для этого курса, хоть и просрочил все их "сроки" на джве недели уже.
>>839217
Спасибо, именно так всегда и делаю. Когда не ищу отговорочки.
>>839239
#23 #839239
>>839233
Там в задании на сервер (6 сет) наебешься с указателями на указатели
#24 #839245
Мимо-студент вкатился. Dev c++ хватит пока для лабораторок ?
>>839249>>841458
#25 #839249
>>839245
Если забыть, что он древний и слегка течет GDI-хэндлами, то да, хватит.
>>839250
#26 #839250
>>839249
А вообще gcc самый оптимальный вариант я так понимаю?
>>839251
#27 #839251
>>839250
Да, но у шланга местами лучше диагностические сообщения.
#28 #839814
Привет, анон.

Поясни пожалуйста про регистры и RAM model.
К примеру, у меня есть регистры размера w и слова размера w.
Насколько я понял, то чтобы добавить 2 числа мне нужно:
1. Из памяти по указателю достать первое значение
2. Записать его в регистр
3. Из памяти по указателю достать второе значение
4. Совершить арифметическую операцию
5. Выгрузить результат из регистров в память

Что будет если у меня будет регистры размера w и слова такие, что l > w ?
Смогу ли я их записать в регистры?
Насколько я понял, то могу передавать на указатель на начало ячейки и размер самого слова.
>>839819
#29 #839819
>>839814

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


Не совсем понятно, о чем ты спрашиваешь. Ты не можешь записать слова размером l в регистры - получатся только остатки от деления, если у тебя little endian или частные, если у тебя big endian.

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


Кому передавать?

Если числа не влезают в регистры, ты складываешь по кускам, используя аппаратный флаг переполнения (если у процессора он есть) или вручную (если сумма меньше одного из слагаемых, добавляешь в следующий раз 1 к слагаемым).
#30 #839928
Из предыдущего треда.
Антуаны-железячники и мимопроходящие, подскажите, может быть кто-то знает, как решить мою проблему. Есть один CRC32, реализованный в железе. Соответственно, доступа к алгоритму нет. Есть файл и хеш к нему. Как узнать алгоритм, чтобы рассчитать контрольную сумму для других файлов? Перебором полинома? Может быть, какие-то методики есть?
Брутфорс - крайне медленное, но, похоже, единственное решение.
>>840239>>840898
#31 #840072
сисюны, есть ли стандартная функция для вывода на консоль подстроки из массива, не оканчивающейся на ноль но с известной длиной (типа printf %★s но без спотыка на 0).
#32 #840092
>>840072
Есть, putchar внутри for.
>>840126>>840193
#33 #840126
>>840092
ты серьезно?
нет, блядь, ты серьезно так стал бы делать?
>>840211>>840222
#34 #840130
>>840072
еще раз почитай описание printf, она позволяет так делать
>>840170
#35 #840170
>>840130
не, если есть нулевой байт в середине подстроки то пиздос
>>840175>>840214
#36 #840175
>>840170
Ну а ты как хотел? Другого способа найти конец нет сроки нет, ты же не передаешь длину.
>>840183
#37 #840183
>>840175
еще раз. есть подсторка, ее длину я знаю, как ее распечатать то? с чотом того, что внутри нее можеть буть нуляка
>>840188>>840214
#38 #840188
>>840183

>840072


>Есть, putchar внутри for.

#39 #840190
з.ы. вот такую ебу предлагают
fwrite(string, sizeof(char), length, stdout)
чето я не думал, что все так с принтф хуево
>>840194
#40 #840193
>>840092

>putchar внутри for


не самый хуевый вариант
#41 #840194
>>840190
С printf все хорошо. Просто не нужно от него ждать волшебства.
>>840201
#42 #840201
>>840194
где тут волшебство? нахуй на ноль проверять если длину строки я ее в ебало тычу?
>>840203
#43 #840203
>>840201
нет бля, длина сторки мне похую, у тебя нолик в серединке. ненавижу
>>840214
#44 #840211
>>840126
Почему бы и нет?
#45 #840214
>>840072
>>840170
>>840183
>>840203
По определению, строка — это последовательность символов, оканчивающаяся нулём.

Или ты из тех, кто лезет кодить даже не выучив определений?
>>840219
#46 #840219
>>840214

>По определению, строка — это последовательность символов, оканчивающаяся нулём.


нет, ты пытаешься умничать про лексические строки
>>840220>>840226
#47 #840220
>>840219
и да, как насчет 'превед'?
#48 #840222
>>840126
да конечно
#49 #840224
или "жо\0пко" лол
#50 #840226
>>840219

> лексические строки


Что такое "лексический строки"?
>>840227
#51 #840227
>>840226

>Или ты из тех, кто лезет кодить даже не выучив определений?


кек
>>840230
#52 #840230
>>840227
Страницу в стандарте, где приведено определение "лексическая строка"
>>840233
#53 #840233
>>840230
я ссу в ротешник твоему стандарту. лексическая строка это строка доступная на этапе конпиляции и вычисляемая по sizeof.
>>840312
#54 #840239
>>839928
Стандартные способы расчета пробовал?
>>840324
#55 #840312
>>840233
А вот если бы ты не читал кривые переводы, то знал бы общепринятый термин string literal. Алсо, string literal - не строка, а последовательность символов. И если ты не хочешь следовать формату строк, который ожидает printf, можешь тупо вывести свою последовательность символов через fwrite, который как раз и предназначен для вывода последовательностей элементов.
>>840330
#56 #840324
>>840239
Что значит "стандартные"?
>>840905
#57 #840330
>>840312

> вывести свою последовательность символов через fwrite


спасибо кэп
36 Кб, 838x549
#58 #840369
Сап. Объясните ньюфагу, почему на втором круге цикла программа дважды выводит строчку "ЗАГАДАННОЕ ВАМИ ЧИСЛО %число%? (пикрелейтед). Не могу разобраться, аж бесит.
Вот код: http://pastebin.com/04TWJ0Vg
>>840370>>840379
#59 #840370
>>840369
flush buffer
#60 #840379
>>840369
добавь ещё один scanf("%c", &answer); в конец цикла (после 26ой строки)
>>840381>>840761
#61 #840381
>>840379
или при работе с программой жми Ctrl+D (или что там в винде нужно жать, чтобы дать знать, что ты закончил input) вместо Enter, а то получается, что ты ещё вводишь знак переноса строки и он также считывается scanf'ом
#62 #840433
Аноны, чот я соснул, не омгу запилить функцию чтобы добавляла новый элемент в линкед лист. Укажите, где ошибка в коде? про ошибку в моих генах я уже знаю

https://ideone.com/FH1jwK
>>840437
#63 #840437
>>840433
Давай разберем:
1) В строке 27 ты ебешь list_pointer, пока он не станет NULL. В строке 31, где ты вызываешь insertEntry, он, удивительное дело, все еще NULL.
2) В строке 43 ты определяешь автоматическую (локальную) переменную. Автоматические переменные "живут", пока не выйдут из области видимости. Т.е., после выхода из insertEntry все указатели, которые у тебя указывают на newEntry уже указывают на мусор. Тебе нужен malloc() или пусть вызывающий создает новый элемент, а insertEntry будет его только втыкать (допустим, ты в main создал элемент, вызвал insertEntry, она его воткнула, и пока выполняется main, жив и элемент, все ок).
3) В строке 50 ты зацикливаешь список (нарисуй и увидишь). Тебе бы нужно присваивать list_pointer->next.
4) Там же после вставки уже нет смысла крутиться в цикле. Воткни break или return.
5) Подумай, что ты передашь, если захочешь элемент в начало (сделать его первым). Алсо подумай, как в таком случае ты уведомишь вызывающего о том, что его начало списка - уже не начало списка (можешь либо всегда возвращать указатель на правильное начало списка, либо принимать указатель на указатель на начало и модифицировать его по необходимости).
>>840438>>841046
#64 #840438
>>840437
Грандмерси! Все тепреь работает, вот я олух
#65 #840761
>>840379
Пасиба большое :3
#66 #840898
>>839928
Бамп. Ну же, нерды-матанщики, дайте мне волшебную формулу.
>>841377
#67 #840905
>>840324
Дебил, стандартные, значит описанные в литературе, значит те о которых ты прочитаешь на вики.
>>841377
#68 #841042
Сап. Поясните нюфане, что значит "error: address of stack memory associated with local variable 'array' returned"

У меня есть функция
int toArray (int length, int number) {
int array[length];
for (int i = length-1; i >= 0; i--) {
array = (number % 10);
number = number / 10;
}
return array;

в методе main делаю так: int
array = toArray(5, 13542);

Как фиксить? не бейте только
>>841043>>841046
#69 #841043
>>841042
int* toArray (int length, int number) {

быстрофикс. Указатель проебался при копипасте
>>841045
#70 #841045
>>841043
Такс, все равно все спят или всем похуй, но я всё таки нашел решение. Если возвращать не array, а создать новый массив в функции, например ar, и сделать
ar=array;
return ar;
то всё будет работать. Стоит ли в это вникать новичку, или забить?
#71 #841046
>>841042
Смотри сюда >>840437 пункт 2, копипастить лень.
>>841048
#72 #841048
>>841046
Понял, спасибо. Пошел изучать malloc()
#73 #841377
>>840905
>>840898
Ничего не хочешь делать, хочешь, чтобы за тебя все анон сделал?
#74 #841458
>>839245
Pelles C хватит с головой.
14 Кб, 802x179
#75 #841529
Нужно написать программу, считающую периметр квадрата (знаю, что для даунов задача, язык учить начал буквально пару дней назад, а программы нужно писать уже сейчас). Объясните, где проебался, что не так, а то я понять не могу.
#76 #841536
>>841529
1) В строке 6 scanf хочет указатель на int, а не int.
2) В строке 8 printf хочет первым аргументом форматную строку (%d), а не int.
#77 #841590
>>841529
Почитай как правильно работает scanf и printf.
Аноним #78 #841692
>>841529
man scanf
#79 #842111
тут опять приуныл, что нельзя никак проверить вместимость члена структыры в статик ассерте. как же, всё-таки, хуёво. но придумать что-то надо, а то этож пиздец, забудешь, изменишь, и в переполнение.
>>842113
#80 #842112
ещё было бы ништяк, иметь сравнитель членов разных структур по имени, чтобы они совподали или нет. или проще, чтоб одна структура была подмножеством другой. иногда так нужней, ведь меньше оверхеда, ну, определить значения, чем в оболочке структуры пребывать.

всё это заставляет меня пить, пить много. хотя не это, а воля. попёр ка я до ночного незаконного
>>842114>>842115
#81 #842113
>>842111
Ну есть sizeof на худой конец и всякие UINT_MAX. Нормальным людям этого достаточно, а ненормальные могут посмотреть в сторону _Generic.
>>842116
#82 #842114
>>842112

>совподали


по смещениям, естественно. может, даже, с от аргументного смещения.
#83 #842115
>>842112
Это вам в кресты, батенька. Алсо, вот сколько пишу, никогда из-за этого проблем не было. Из-за == были, на единичку ошибался, маски неправильно писал, промоушены эти блядские опять же. Но вот чтобы структуры перепутать - это надо суметь!
>>842117
#84 #842116
>>842113
всё это для бедных, и не как не поможет от ошибки. поможет, только от ошибки во второй части выражения.
#85 #842117
>>842115
идиот. ну в общем-то чтец жопой и не должен быть умным.
#86 #843356
ну ладно,чё вы сразу, ну понаписал я хуйни, поругался, всеж мы люди. возвращайтесь.
#87 #843357
возможно ли сделать инлайн функцию, не в хедере, но чтоб также работало? чёт как-то не красиво получается. нихуя не понимаю как оно там работает, везде леплю static inline
>>843360
#88 #843360
>>843357
Я тебе сейчас очередной секрет открою: когда компилируешь с высоким уровнем оптимизации (в современных компиляторах не обязательно) от этой директивы не зависит вот совсем нихуя.

Погугли про weak функции в си, насколько я помню инлайн так же для этого используется.
>>843448>>843636
#89 #843448
>>843360
разбазариватель секретов, плеаз. статик функция ограничивает область видимости функции в файле, а вот инлайн да.
#90 #843453
Хочу посимвольно обработать строку из кириллицы.
Однако, даже когда просто вывожу символы, выходит лютая хуита.
Что почитать, чтобы разобраться?
>>843611
#91 #843517
Аноны, какие есть годные туториалы по ncurses?
В гугле ничего толкового не нашёл.
sage #92 #843611
>>843453
Узнай, что такое "кодировка".
#93 #843636
>>843360
Есть всякие __forceinline компиляторозависимые.
#94 #843656
Как на win api отредактировать, например, 24 байта заголовка файла, не копируя файл никуда и не читая его хвост?
>>843671
#95 #843671
>>843656
fopen(..., 'rb')/fseek по вкусу/fwrite/fclose или CreateFile(..., OPEN_EXISTING, ...)/SetFilePointer по вкусу/WriteFile/CloseHandle.
>>843672>>843679
sage #96 #843672
>>843671

> rb


rb+, конечно же.
#97 #843679
>>843671

>CreateFile(..., OPEN_EXISTING, ...)/SetFilePointer по вкусу/WriteFile/CloseHandle


Что-то не работает. https://ideone.com/mXM6HC
sage #98 #843682
>>843679
Уебывай отсюда нахуй.
>>843687
sage #99 #843683
>>843679
Солидарен с предыдущем ананасом.
#100 #843687
>>843679
А, не, все нормально, лол.
>>843682
Ссыкнул тебе в ротик.
(Автор этого поста был забанен. Помянем.)
#101 #843690
Ох как заебись заработало.
#102 #843692
Просто охуенно заработало!
#103 #843786
test
21 Кб, 668x739
#104 #843959
Анон, прошу помощи:
Прога должна выделять заголовки функций в тексте программы
Пикрил - результат работы
Подкинете тестовых примеров? Какие подводные камни? Что не учтено?
#105 #844000
>>843959
Затести вот это.
http://pastebin.com/1wsRwXEr
>>844007
#106 #844007
>>844000
Так, я вас понял и благодарю..
Невалидного объявления не может же быть в правильно написанной программе?
Заголовок может находиться в одной строке с объявлением глобальных переменных, да?(

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

>Невалидного объявления не может же быть в правильно написанной программе?


Это да. Но ведь твоя программа только исходник получает на вход и не может знать, правильная программа или нет. Или я что-то не так понимаю?

>Заголовок может находиться в одной строке с объявлением глобальных переменных, да?


Компилятору все равно. Главное, чтобы это было разделено точкой с запятой.

>без регулярных выражений


Синтаксический анализ. Если не хочешь заморачиваться вручную, то найди описание синтаксиса сишки в формате БНФ, возьми оттуда правила, которые описывают объявление функций (со всеми зависимостями, разумеется) и задействуй ебическую силу flex+yacc.
>>844049>>844115
#108 #844014

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



Выделяешь формальные грамматику, атомарные и не очень структуры и описываешь все через ооп.
>>844115
#109 #844049
>>844012

>ебёшься такой с генераторами парсеров и лексеров


>целуешь писос когда они генерируют этот самый посимвольный перебор с милиардами goto



А вообще, есть куча более современных и функциональных генераторов, чем это говно зверя с логотипа ГНУ.
>>844064
#110 #844050
>>844115>>844116
#111 #844064
>>844049
Ну какбе выхлоп генератора тебя волновать не должен, вне зависимости от его вида. В этом же весь его смысл. Другое дело, если имеется требование наговногодить парсер вручную. В таком случае надо получше смазать анус и попытаться сесть им на дерево грамматического разбора, попутно теребя лексемы и надрачивая на алгоритм сортировочной станции.
>>844070
sage #112 #844070
>>844064

> Другое дело, если имеется требование наговногодить парсер вручную.


Все парсеры сколько-нибудь не-хипсторских языков "наговнокожены" вручную.
>>844073
#113 #844073
>>844070
Насколько я понял, у анона была задача написать детектор объявлений функций, а не полноценный язык. Поэтому я и говорю, что в данном случае проще воспользоваться генератором, если не стоит жесткого условия ручной реализации.
>>844115
#114 #844115
>>844012
>>844014
>>844050
>>844073
Спасибо каждому анону за сочувствие , но я почти ничего не понял
Условия задачи: тестовая программа написана правильно, а сама задача - лаба (2 курс), стандартные библиотеку подключать можно
>>844116
#115 #844116
>>844115
Для лабы сойдет, а в реальности ты обосрешься об макросы >>844050.
>>844123
sage #116 #844123
>>844116
Макросы — это не C.
>>844128
#117 #844128
>>844123
Чет орнул.
#118 #844171
>>843959
Задача гораздо сложнее, чем ты думаешь. http://pastebin.com/Gf25Psct - абсолютно валидный синтаксис, хоть и бессмысленный. Для лабы норм и то, что у тебя.
>>846648
#119 #844629
Господа сишники, помогите найти легковесную реализацию md4 или md5.
>>844646
sage #120 #844646
>>844629
Бывают не-легковесные?
какшечка #121 #844741
Сисюны, абасыте меня, а то я ща йобнусь с гцц. Почему не изменяется значение по указателю в функции?

http://pastebin.com/wyYEPvQZ

вывод:
1->one
2->one

хочу:
1->one
2->two
sage #122 #844745
>>844741

>Сисюны, абасыте меня


Зделано.
#123 #844747
>>844741
Ты не значение по указателю меняешь, а сам указатель
>>844750
#124 #844748
>>844741
Ты передаешь по значению указатель на массив символов. Внутри функции ты присваиваешь указателю адрес другого массива символов. После выхода из функции этот указатель перестает существовать. Чего же ты ожидал? Тебе нужно две звездочки, а не одна.
>>844750>>844752
#125 #844749
>>844741
уатаквот работает http://pastebin.com/4tC7vYEX

ебать... указатель на указатель? хм...
>>845125
#126 #844750
#127 #844752
>>844748

>Тебе нужно две звездочки, а не одна.


а вот нихуя, утаквот тоже работает http://pastebin.com/RaYwCp6v
>>844753>>844755
#128 #844753
>>844752
з.ы. тока конпилятор ругаецо сильно
#129 #844755
>>844752
Работает лишь по недоразумению. По счастливому совпадению указатели на две строки отличаются только младшим байтом: 0xaaaaaa10 и 0xaaaaaa14, например. И внутри функции ты пишешь единственный char, и этим char ты правишь младший байт указателя с 0x10 на 0x14, например. Но если конфигурация (количество строк в программе, компилятор, опции компиляции) изменится, магия может не случиться, и на выходе будет мусор. Не делай так больше никогда.
#130 #845125
>>844749

>ебать... указатель на указатель? хм...


привыкай к такой разработке своего очка
#131 #845142
С какого стандарта начать? С первого или сразу читать C11?
>>845145
#132 #845145
>>845142
Начинать изучать язык с чтения стандарта не стоит. Возьми Прату сначала хотя бы. Если язык знаешь, и хочешь почитать именно стандарт, читай C11.
#133 #845831
Подскажите нюфагу.

char *str;
scanf("%s", str);
printf("%s placed on %p and contains %i\n",str, &str, sizeof(str));

Как бы я не пытался, sizeof выдает 4 (очевидно, размер указателя).
Как получить всё-таки размер строки?
>>845834>>845907
#134 #845834
>>845831
strlen
#135 #845907
>>845831
Заодно подумай, а куда у тебя scanf строку-то пишет? Вот str - указатель, а НА ЧТО он указывает?
>>845947
#136 #845947
>>845907
Первый элемент массива, который заканчивается на '\0'?
Я же правильно понимаю, что ОС просто выделяет адрес памяти, начиная с которого я могу что угодно сохранить, но не задену ли я что-то другое в памяти, если введу слишком большую строку?
>>845951
#137 #845951
>>845947

> Первый элемент массива, который заканчивается на '\0'?


Ну да, только если ты этот массив в str присвоил. Ты присвоил?

> Я же правильно понимаю, что ОС просто выделяет адрес памяти, начиная с которого я могу что угодно сохранить


Неправильно. По счастливой случайности str указывает на какую-то область данных, в которую у scanf получается насрать без видимых последствий. В следующий раз может повезти меньше. Алсо, ОС тебе ничего не выделит, пока ты не попросишь. Тебе нужно char str[скольконадо] или str = malloc(скоканадо) или char buffer[скольконадо]; str = buffer.

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


Заденешь. Поэтому стоит указать максимальный размер строки, которую scanf скопирует по твоему указателю (%32s, например).
>>846033
#138 #846005
Анонче, скастуй указатель туда, где мне ошибку искать? Решил cs50 пройти 2016го года, решаю шифр вижненера. Очевидно, что с вычислениями где-то напортачил, двоешник
https://ideone.com/IlQ4GL
>>846006
#139 #846006
>>846005
Нашел, неверно вычисляю индекс для буквы из k
#140 #846033
>>845951
Спасибо, даже не ожидал от двачей таких ответов, лол.
#141 #846111
Вопрос, как в консоли выводить псевдо/графику/символы в режиме реального времени и строго в пределах одной границы. Например, что бы полоса бегала в пределах [ ] квадратных скобок. Или символ в скобке менялся в той же строке. В сторону какой библиотеки смотреть? Пробывал бесконечные циклы, так они мне засирали весь терминал
>>846153
#142 #846148
Хочу написать процедуру, где на вход подаются координаты точек (float x, float y). А в теле производится серия вычислений с заранее известными точками. Таких точек будет 475 (соотвественно у каждой будет 2 координаты). Каким образом мне в самом коде программы ввести это точки, чтобы было удобно и работать и вводить? Массив?
>>846152>>846170
#143 #846152
>>846148
Вот так?
float myArray[950] = { 0.1, 0.2, -0.56345, ...};
Все уже забыл нахуй.
sage #144 #846153
>>846111
curses
#145 #846170
>>846148
typedef struct {float x; float y} Point;
Point yoba[] = {{0.0f, 0.0f}, {0.0f, 0.0f}...}
>>846356
6 Кб, 229x391
Аноним #146 #846312
По учебе пришлось установить visual studio
Установил, не могу найти Си, только шарп и плюсы
Что делать?
В гугле не могу найти
>>846317
#147 #846317
>>846312
Создавай пустой проект C++, создавай файл, сохраняй с расширением .c. Компилятор там один и тот же, язык определяет по расширению (ну или в свойствах можно насильно указать).
>>846318
Аноним #148 #846318
>>846317
Я и так создал сначала С++, написал свою программку на Си и мне выдало тип
int не поддерживается
Думаешь, если сохранить и запустить, поможет?
>>846319
#149 #846319
>>846318

> тип int не поддерживается


Лолшто? Скриншот?
>>846326
16 Кб, 1004x633
Аноним #150 #846326
>>846319
Да забей, я даун
Нажал консольное приложение С++, а не пустой проект
Вот пустой проект, сори за тупой вопрос, но куда тут писать? Ахахахаахах
#151 #846328
Проект создал, теперь файл создавай. Ctrl+N.
>>846331
#152 #846330
PellesC ругается на Unresolved external symbol '_WinMain'. Создавал консольный проект, в исходнике определил функцию WinMain, после этого в настройках проекта включил расширения майкрософта и прописал точку входа WinMain. Не помогло. Изменил тип проекта на Windows - тоже не помогло. Как тут это настраивается?
17 Кб, 954x568
Аноним #153 #846331
>>846328
Этот?
>>846333
#154 #846333
>>846331
Да, сохранишь потом как .c только, и всё.
>>846341
17 Кб, 1039x177
Аноним #155 #846341
>>846333
Оййй
Бля, можешь помочь немного? Просто завтра надо сдать кое-что, а я вообще хз
>>846344
#156 #846344
>>846341
Не спрашивай. Код выкладывай.
>>846347
Аноним #157 #846347
>>846344
да это вряд ли можно кодом назвать

int a, b, c;
a = 14; b = 15; c = 14;
if (a==b) printf(3); exit;
if (a==c) printf(2); exit;
printf(1); exit;

это просто вообще первое, что я написал, ахххахахх
а через 7 часов уже сдавать
>>846349>>846355
#158 #846349
>>846347

>exit;


А это чего?
>>846352
Аноним #159 #846352
>>846349
Ну тип если первая строка не выполняется, то дальше
Убрать?
>>846354
#160 #846354
>>846352

>printf(1)


Вот это не будет работать. Откуда ты знаешь про эту функцию, ты видел как она используется?
>>846358
#161 #846355
>>846347
Ох, как все тяжко. Нагугли хелловорлд что ли, вставляй код в функцию main(), а не просто в файл.

> exit


Для вызова функций надо () обязательно указать. А у exit() еще и аргумент есть - код возврата. 0, например.

> if ... printf(3); exit;


if действует только на первое после скобочек выражение. Если хочешь условно выполнить несколько выражений, заключи их в {}: if (a==b) { printf(...); exit(...); }

> printf(3)


Принтф не печатает числа, он их форматирует, и ему нужно указать, как именно. Например, printf("%d\n", 3), чтобы отформатировать 3 как целое число (со знаком, если есть), а \n добавляет переход на новую строку.
>>846358
#162 #846356
>>846170
И написать простейший скрипт, который конвертит координаты из того формата, в котором они у тебя сейчас, в сишный код. А то заебешься вручную.
Аноним #163 #846358
>>846354
Нет, ну я типо знаю что в паскале вывод это println, тут printf
Поэтому и написал

В общем, вся суть:
Даны три числа, одно из которых отлично от двух других, равных между собой. Определить порядковый номер числа отличных от остальных.

Нам просто нихуя не показали в универе, даж за компы не пускали ещё, хахх

>>846355

Хелловоорлд запускал кстати, сразу как установил. Все работало в консоли.
>>846364>>846371
#164 #846364
>>846358
printf("%d\n, 1);
Нужно указывать шаблон строки для вывода
семен
>>846367>>846373
#165 #846367
>>846364
Обосрался с закрывающей кавычкой
#166 #846371
>>846358
>>846358
Тебе надо пару глав Праты того же прочитать в темпе вальса, сразу все напишешь
26 Кб, 935x561
Аноним #167 #846373
>>846364
Бляя, крч я рил хз, совсем не разбираюсь в этом
Так лучше? И сюда тоже надо "%d\n, ?
>>846375>>846376
Аноним #168 #846374
Было 9 ошибок, стало 108, норм
#169 #846375
>>846373
iostream - это кресты. Тебе нужно #include <stdio.h>. Алсо, одинарные кавычки - для символов. Для строк - двойные. А у тебя еще и открывается одинарной, а закрывается двойной. Так даже в этих ваших паскалях нельзя.
Аноним #170 #846376
>>846373
Это не я написал, просто единственное что я нагуглил по этой задачке на Си
>>846378
#171 #846378
>>846376
Не сегай тред великого языка современнсоти
>>846380
Аноним #172 #846380
>>846378
Я и не сегал, лул
>>846382
#173 #846382
>>846380
А ну лан
23 Кб, 992x541
Аноним #174 #846383
Ну рил, подскажите что тут не так
(Устранил все ошибки которые мог)
>>846384>>846386
#175 #846384
>>846383
Тебе майкрософт свою функцию с рюшечками впаривает. Тоже мне ошибка
>>846387
#176 #846386
>>846383
Напиши #define _CRT_SECURE_NO_WARNINGS в самой первой строке файла (перед #include). Алсо, оно обычно предупреждение, а не ошибка, как ты это сделал?
>>846390
Аноним #177 #846387
>>846384
Ахахха, что?
Бл, ну дедлайн серьёзный, если не сделаю то заказчик завтра уволеееееет!!
>>846389
#178 #846389
>>846387
Да забей ты, сходи в армейку
21 Кб, 1010x534
Аноним #179 #846390
>>846386

>как ты это сделал?


Что именно?

>Алсо, оно обычно предупреждение, а не ошибка


Если ты про это, то я хз

Спасибо, помогло
Теперь 0 ошибок, вроде все должно работать
13 Кб, 740x313
Аноним #180 #846392
Аххахха, так и должно быть?
>>846395
Аноним #181 #846393
Странно, сначала поодумал, что тип введите нужно на транслите написать
Написал - не помогло
#182 #846395
>>846392
#include <locale.h> в начало файла
setlocale(LC_CTYPE, "Russian"); в начало main(). Или латиницей пиши. И переконпелировать не забудь.
11 Кб, 583x287
Аноним #183 #846397
>>846395
Так?
>>846496
Аноним #184 #846399
>>846395
Накосячил немноого с setlocale
Пофиксил, русский язык работает, спасибо
Аноним #185 #846403
>>846395
А как сделать, что бы консоль не сразу закрывалась?
Она выдает ответ на секунду после ввода чисел и закрывается
>>846566>>846572
#186 #846404
Раз тут такая нюфаго-движуха началась.
Вот я, например, студентота, 2 курс.

Узнал от старшекуров, что С на кафедре очень востребован, и есть смысл его учить к дополнению к преподающимся предметам, чтобы участвовать во всяких кафедральных движухах, преподских проектах и прочем ботанстве

И, собственно, вопрос: насколько чистый С востребован сейчас, и сложно ли потом перекатиться на плюсы(который сейчас, думаю, всяко популярней)?
#187 #846494
>>846404

>


>Узнал от старшекуров, что С на кафедре очень востребован, и есть смысл его учить к дополнению к преподающимся предметам, чтобы участвовать во всяких кафедральных движухах, преподских проектах и прочем ботанстве



Ты уверен что тебе по пути с этими чуханами?

>И, собственно, вопрос: насколько чистый С востребован сейчас,



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

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



Легко перекатываться
#188 #846495
>>846404

>насколько чистый С востребован сейчас


Скорее всего будет востребован всегда, покуда архитектура кампуктеров не будет меняться. Язык простой. Можно за месяц выучить целиком и полностью. В отличии от крестов писать на нем приятно. Хоть и гемморно местами.
sage #189 #846496
>>846397
Пишу на Си больше десяти лет, и до сих пор его не знаю. За короткий срок можно научиться только писать наполненный UB и зависимый от платформы код, который сломается в следующей версии компилятора. Ну и тривиальные хелловорлды, состоящие из библиотечных функций, в которых налажать просто негде.
>>846537
#190 #846515
Сисюны, накидайте ссылы на скоростные библиотеки реализующие динамические массивы.
#191 #846537
>>846496
+1
same shit
от себя добавлю: положим, я вот в собственном кодинге не юзаю вещественные типы (не та прикладная облвсть в общем), дак вот скажу честно - что и не знаю всех подводных камней с плавающей точкой
или вот, в принципе, на нелокальных переходах можно сэмулировать исключения (в потрохах постри, например, так сделано), но я не делал так, так чтож не могу сказать что я знаю это
то есть сишка хоть и выглядить маленьким языком (строк нет, встроенных средств работы с массивами нет, управления динамической памяти нет и прочее и прочее), но в ней хватает тех областей, которые ты не будешь знать, тк это не будет покрывать круг твоих практических испльзований
#192 #846566
>>846403
system("pause");
В конце пропиши
#193 #846572
>>846403
Sleep(10000);
#194 #846573
>>846404
Работаю разрабом электронных девайсов, кодю на сях контроллеры и под венду в среде лабвиндовс, для моих потребностей хватает с лихвой. Мой коллега тоже сишник, недавно вкатился в плюсы без проблем.
>>846576
#195 #846576
>>846573

>кодю на сях контроллеры


Аноны, посоветуйте книгу по архитектуре и программированию ARM с акцентом на практику.
>>846603
#196 #846584
Когда используете винапи в программах на си, какой стиль именования переменных и функций используете? Такой же, как принято в winapi, или snake_case?
>>846589
#197 #846587
Эта вкусовщина в именовании всякий раз доставляет мне баттхерт.
#198 #846589
>>846584
Динамически менять стиль в зависимости от либы? Да ты охуел. Будь последователен: или пиши всю программу, как майкрософт заповедал, или используй свой стиль везде. Я вот, например, camelсase предпочитаю даже в сишечке (fooBar для переменных и функций, FooBar для типов), брат жив, на хейтеров похуй.
>>846595>>846649
#199 #846595
>>846589

>Будь последователен: или пиши всю программу, как майкрософт заповедал


Тогда не получится определять функции с именами типа ReadFile. Использование read_file стиля здесь бы выручило.
>>846600
#200 #846600
>>846595
Иметь ReadFile и read_file в одной программе? Да ну его нахуй. Если это какой-то конкретный тип файлов, я бы отразил это в имени - ReadConfigurationFile, например, а если это просто обертка, то это тоже стоит как-то показать. Ты же почему-то ее пишешь вместо вызова ReadFile, вот и называй соответственно.
#201 #846603
>>846576
Вообще не читал книжек, всë по примерам и руководствам различным. На сайтах производителей контроллеров обычно тысячи примеров, как правило привязанных к периферии. Компилишь пример, проверяешь работоспособность на железе, а дальше уже смотришь что из него взять в свой проект, что доработать.
242 Кб, 664x891
#202 #846642
Посоны, посоны, снова та студентота со всё той же подгорающей лабой и кое-чем ещё
Условие: в тексте правильно написанной программы на С выделить заголовки функций.
Пикрил - результат работы. Очевидно, что 4-ая непустая строка не обрабатывается (а очень бы хотелось)
Прога: http://pastebin.com/nEdEyQC7
Возможно, более важную роль должны играть круглые скобки, но я просто вот ни..чего не могу заделать :(

Мб кто поможет

Можно разбивать строку на части от ; до ; и проверять эти части.. Но так у меня получается правильно только для 4-й строки пикрила, а всё прочее через кое-что подгорающее
>>846648
#203 #846648
>>846642
Какой курс-то? Препод тебя затроллил скорее всего. В таком виде это нереализуемо (алсо, >>844171). Да даже просто для такого вот:
int foo
= 1;
и
int foo
(void);
тебе придется заглядывать вперед, и ты никак подсветку на лету не сделаешь.
>>846651
#204 #846649
>>846589

>Я вот, например, camelсase предпочитаю даже в сишечке (fooBar для переменных и функций, FooBar для типов), брат жив, на хейтеров похуй.


Бро, я ещё и отступы по Оллману делаю, все смеются и показывают пальцем.
#205 #846651
>>846648
Курс 2, Си 2-й семестр идёт.
Я был бы рад, будь это троллинг, но на то не похоже. Как мне кажется, ему надо, чтобы были рассмотрены случаи, что у меня на пике, но как бы не то чтобы у меня и они все получились
>>846663
#206 #846663
>>846651
Ну попробуй немного другой алгоритм (он тоже кривой, но словит чуть больше функций). Тебе надо прочитать весь файл, удалить (или скипать по ходу дела, что сложнее) все комментарии и директивы препроцессора. Дальше идешь по тексту в поисках открывающих top-level { и ; top-level - значит, что ты увеличиваешь счетчик фигурных скобок всякий раз, когда найдешь открывающую, и уменьшаешь, когда найдешь закрывающую, и тебя интересуют { и ; только когда этот счетчик равен 0. Варианты развития событий:
1) Ты встретил по пути =, это инициализированная глобальная переменная, ищешь точку с запятой. Если этот вариант не проверять, сломаешься на int foo = (1); .
2) Ты встретил { - это либо struct/union/typedef/массив/итд, либо это начало функции, узнаешь это по наличию ) прямо перед {. Пробелы и переводы строк, разумеется, игнорируешь. Затем ищешь закрывающую } этой функции.
3) И, наконец, ты встретил ; - это какая-то декларация, проверяешь по наличию ) перед ; . Вот как-то так.

Как это сломать: атрибуты гцц, old-style (K&R) functions, static_assert, на программах с синтаксическими ошибками тоже сломается, но в целом, наверное, должно работать. Хотя хуй знает, я не пробовал.

Естественно, выводить очередной блок текста ты начинаешь, когда встретил ; у декларации (1, 3) или } у функции (2).
>>846665
sage #207 #846665
>>846663
Алсо, вариации вот такого void foo(char a[1+(sizeof((int){1})==2)]); сломают и условие про =, и условие про ){, а код, между тем, вполне валидный.
>>847184
#208 #847182
>>846404

>И, собственно, вопрос: насколько чистый С востребован сейчас


Платиновый вопрос. Пока будут существовать UNIX-like системы, этот язык будет востребован. Но работу на нём (особенно в рашке) ты в лучшем случае найдёшь только для эмбедеда.
#209 #847184
>>846665

>(int){1}


Что означает эта конструкция? В первый раз вижу.
>>847201
#210 #847189
Ну это бесполезно в приведенном примере, но вообще, это compound literal. Оно создает безымянный int равный 1. Слева тип, справа инициализаторы для него. Как если бы ты сделал:
int foo = {1};
но только без имени. Для int оно нахуй не нужно, но, например, у тебя есть функция, принимающая указатель на вектор, и ты можешь не создавать лишнюю переменую явно, а сделать:
result = some_function(&(Vector) { 1.0f, 0.0f, 0.0f });
Это C99, если что.
#211 #847201
>>847184
массив, который приводится к int, видимо
#212 #847203
Привет, программачик, я ньюфаг в C. Поясни, можно ли сделать в нём адекватный гуй? С чего начать? Я спермоблядь, на линукс нет места в данный момент. Сейчас я поставил Code::Blocks IDE и вроде как запустил свой первый хэлловорлд. Как мне высрать окошко, формочку, кнопочку? Какую библиотеку для этого посоветуешь использовать?
#213 #847206
>>847203
Из худо-бедно кроссплатформенных гуев есть только GTK. Но я бы порекомендовал сделать либу, а морду нарисовать на крестах с Qt.
>>847207>>847208
sage #214 #847207
>>847206
Ну в крайнем случае, ты можешь нарисовать интерфейс на Windows API, а чтобы не ебаться с созданием окошечек вручную и прочиими циклами обработки сообщений, используй dialog manager (загугли DialogBoxParam), тогда диалоги сможешь рисовать в любом редакторе ресурсов.
#215 #847208
>>847206
Я знаю, C++ для этого куда больше подходит, но я бы всё же хотел именно на сишечке.
Что такое GTK? Как его установить? Сам я пытался, но ничего не вышло.
>>847224>>847358
#216 #847223
>>847203
Первый свой гуй под винду писал в среде лабвиндовс. Правда это весьма специфичная среда, для разработки виртуальных приборов.
>>847226>>847303
#217 #847224
>>847208

>Сам я пытался, но ничего не вышло.


тебе здесь не место. пиздуй к плюсанам и юзай божественеый кьют для гуя
#218 #847226
>>847223

>лабвиндовс


это еще что за параша? винапи?
>>847367
#219 #847303
>>847223
поясни за нее, подойдет ли она для прикладных задач?
>>847367
sage #220 #847358
>>847208

>Как его установить?


apt-get install libgtk-3-dev
>>847527
#221 #847367
>>847226
>>847303
Визуальный конструктор со своей библиотекой контролов типа показометров, индикаторов, тумблеров, кнопок. Есть также текстовые элементы, таблицы, графики, обработка данных, сеть, многопоточность, еще куча всего. Можно и для прикладных задач использовать, почему бы и нет. Винапи поддерживается, но для своих задач я только Sleep использовал из винапи, больше не потребовалось. Куча примеров есть в дистре и на сайте.
>>847441
#222 #847441
>>847367
Есть бесплатная версия? Или только пиратить?
>>847767
#223 #847527
>>847358
Сказано ведь, я спермоблядь. Зачем мне твои прыщи?
>>847529
#224 #847529
>>847527
В Windows 10 теперь есть apt-get. В младших версиях Windows есть MSYS2 и pacman.
#225 #847531

>xor ebx, ebx // clear ebx


>mov ebx, fs:[ 0x30 ]



Для чего здесь сначала обнулили регистр, а потом записали в него адрес PEB? Зачем тратить байты на обнуление, когда и так адрес займет весь регистр?
>>847537
#226 #847537
>>847531

> Для чего здесь сначала обнулили регистр


Ни для чего. Скорее всего, код написан вручную, и человек НИРАЗБИРАЕТСЯ.
#227 #847556
>>847203
mfc (в vs 2015 community бесплатен)
связка alt + wtl
builder c++
>>847562>>847565
#228 #847562
>>847556
также на крестах можно писать winrt приложения, gui включительно, доступные с windows 8
также на крестах можно писать UWP приложения, доступные с windows 10
>>847565
#229 #847565
>>847556
>>847562

> также на крестах


Ты тредом ошибся. Алсо, если уж выбирать кресты, то сразу кутэ.

> WinRT, UWP


Нинужно. Это такой сервелат, который в отличие от сервелата еще не стух.
#230 #847639
Пишу такой кодес, гайз: https://ideone.com/HqB6WC

Что почитать о деклараторе __declspec(naked) и для чего он используется? Я его заюзал просто потому, что нужна была функциональная обертка для моего ассемблера. Но возникла проблема при компиляции FindGetProcAddr: error #2202: 'auto' not allowed in function with __declspec(naked)

Почему так? Как использовать результат вызова GetKernel32 внутри другой naked-функции?
>>847662
#231 #847662
>>847639
Ты сказал, что тебе не нужно создавать стековый фрейм. Естественно, что теперь компилятор не может выделить KERNELBASE на стеке. Можешь сам выделить, можешь KERNELBASE в регистре хранить. Можешь выкинуть нахуй naked.
#232 #847744
Что за залупа здесь происходит? Как прочитать выражение в левой части присваивания? Зачем там &?

https://ideone.com/IFtNF8
>>847748
#233 #847748
>>847744

> Что за залупа здесь происходит?


Нет такого синтаксиса в си. Видимо, кто-то попытался объявить указатель на функцию, но не смог.
#234 #847767
>>847441
Пиратка онли, на руборде есть активатор.
24 Кб, 640x640
#235 #847940
Сап, первый курс не знающий нихуя язык и его возможности, а лабы делать уже надо, много. С целью экономии времени и более легкого вкатывания в язык, нужен анон, который сможет дописать бегинер уровня лабу в 80 строк и объяснить мне ее в скупе за денежное вознаграждение , либо прямо со мной вместе ее в скупе сделать
http://ipm.ifmo.ru/wp-content/uploads/2016/09/pb-s1-lab2.pdf - лаба, вариант 12
Вот то что успел накатать сам
http://pastebin.com/K3dQy9QM
Skype: atomraspad
>>849597
82 Кб, 576x669
#236 #848377
>>848203
Не совсем (совсем не) по си, но все равно репостну сюда.
Может кто захочет пояснить.
#237 #848378
Как можно получить счет как в виндовом калькуляторе?
Т.е когда я ввожу 480 / 1024 я получаю ноль int foo, bar foo = bar/baz
А в калькуляторе я получаю 0.46875, можно ли получить такой ответ если не делать

foo = bar/baz
foo2 = bar%baz
printf("%d%d",foo,foo2)
?
>>848381>>848402
#238 #848381
>>848378
Ему дали FPU, но нет, он хочет ебаться с интами.
>>848382
#239 #848382
>>848381
И ведь блять логично.
#240 #848402
>>848378
Тыкаешь последовательно: 4 8 0 / 1 0 2 4 | 0
#241 #848823
Поцчему все туториалы для SDL писаны для плюсов, что за несправидлёж
>>848871
#242 #848871
>>848823
Разница минимальна. Читай плюсовые, а если что-то не сможешь переделать на Си - показывай, мы поможем.
#243 #848905
У меня есть такой код, который я скопипастил из своего проекта на C++ и переписываю на си: http://pastebin.com/BZ9yE3mm

Почему-то ничего не компилируется. Выдаются ебанутые ошибки:

error #2001: Syntax error: expected ')' but found 'msg'.
Extraneous old-style parameter list.
Syntax error: expected ';' but found ')'.
Syntax error: expected ')' but found 'msg'
Extraneous old-style parameter list

Что я делаю не так?
>>848911
#244 #848911
>>848905

> LPTSTR


Не вижу, чтобы ты тип определял. Ты забыл #include <windows.h>?
>>848917
#245 #848917
>>848911

>Ты забыл #include <windows.h>


Блять, меня переклинило.
#246 #848979
Почему Крис Касперски хуесосил линуксы и двачевал фри бздю? Это правда, что бздя более стабильна, чем линукс? Как сейчас дела обстоят?
>>848981>>848989
#247 #848981
>>848979
Может быть, ты лучше у него спросишь? Или он уже и на кывте не появляется?
#248 #848989
>>848979
У него и спроси, если он там еще в лепешку не разбился со своими парашютными делами
#249 #849187
сисюны, решительно пояснили за архитектуру. как трушней, чтобы функция возвращала значения установив код ошибки в ссылочном параметре или наоборот, возвращать код ошибки инициализировав значение в ссылочном параметре?
>>849195
#250 #849195
>>849187
Честно говоря, мне представляется только одна ситуация, когда использование первого варианта обосновано. Это когда любое возвращаемое функцией значение может быть интерпретировано как корректное. Но даже в этом случае я не стал бы для кода ошибки заводить отдельный ссылочный параметр, т.к. если функций, потенциально завершающихся с ошибкой, будет много, то это что, каждой такой параметр заводить? И тогда в каждой обособленной части программы должна быть своя переменная для хранения кода ошибки? Или что, делать несколько способов обработки ошибок в одной програме? Ну это 100% отсос и лишняя путаница.
Так что советую второй вариант.
Либо же возвращать значние, а в случае ошибки возвращать некорректное значение.
Например, если программа возвращает указатель, то в случае ошибки возвращай NULL.
Если функция при нормальном завершении возвращает положительные числа, то в случае ошибки пускай возвращает отрицательные.
Если по возвращаемому значению нельзя сказать, произошла ошибка или нет, то код/флаг ошибки можно устанавливать в глобальной переменной или определеить целую глобальную структуру, хранящую состояние программы/модуля и несколько полей внутри нее для хранения кодов ошибок от разных источников. Доступ к полям такой структуры, разумеется, лучше обеспечить через процедуры.
>>849206
#251 #849206
>>849195

>каждой такой параметр заводить?


да. но не каждая функция будет его использовать. зато все API будет выглядеть охуено.

void fun1(int ★param, int ★err);
void fun2(int ★param1, int ★param2, int ★err);
void fun3(int ★param1, int ★param2, int ★rval, int ★err);
void fun3(int ★param1, int ★param2, int ★rval1, int ★rval2, int ★err);
>>849272>>849328
#252 #849272
>>849206
Говно.

int func(int bar, int •rval);

if (!func(1488, &result)) {
pizdec();
exit(1);
}
#253 #849328
>>849206

> зато все API будет выглядеть охуено


Это охуенное API? Я должен в каждую функцию передавать указатель под код ошибки, даже когда мне на него насрать? Притом, мне вообще в большинстве случаев нужно знать, произошла ли ошибка, а какая конкретно - интересно только при взаимодействии с ОС. Если тебе так хочется выдавать вменяемую информацию об ошибках - сделай явный или неявный (per-thread) контекст. В остальных случаях return false/return NULL/return -error/return SIZE_MAX будет вполне достаточно.
>>849424>>849428
#254 #849401
Суп, хеккеры. Где можно почитать о том, что такое extern "C" и для чего это нужно? Как я понимаю, эта штука позволяет объявлять функции так, чтобы их имена были без декораторов.
>>849406
#255 #849406
>>849401
Именно extern "C" в си нету, это плюсовая хуитка, для обратной совместимости. Просто extern – это о линковке и у него дохуя предназначений, открой гугл.
>>849410
#256 #849410
>>849406

> у него дохуя предназначений


У extern в Си одно предназначение - явно указать, что декларация относится к публичному (внешнему) символу.
>>849413
#257 #849413
>>849410
Одно предназначение не всегда означает применения для одной цели.
#258 #849424
>>849328

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


можешь пихать 0, если он не используется. хотя мне такой подход тоже уже разанравился. ща еще пару десятков функций накидаю и буду посмотреть, может действитьльно хуйня выйдет.
#259 #849428
>>849328
и да контекст есть, но он не везде используется, такая же хуйня как с еррорами, только в профиль.
а вот если везде пихать контекст, в нем ставить ошибку и все функции возвращают как бул? хм...
>>849458
95 Кб, 696x775
#260 #849458
>>849428

> контекст есть, но он не везде используется


> если везде пихать контекст


Зачем везде что-то пихать. Я ведь писал уже: сделай его глобально доступным через процедуры (см. пикрел, например).
>>849468
#261 #849468
>>849458
У такого подхода есть недостаток - у тебя может быть только один инстанс (или, если контекст thread_local - один инстанс на поток). Для твоего примера это вполне нормально, но представь, что у тебя не приложение, а либа, которая как-то обрабатывает данные и выделяет память по необходимости. Чаще всего, у тебя будет какой-то стейт, и вот тут-то логично хранить в нем и код ошибки тоже. Стейт придется пихать в каждую функцию или делать его текущим, как контексты в OpenGL/OpenAL.
Алсо, никогда не начинай идентификаторы с подчеркиваний. И других не приучай к плохому.
>>849477>>849613
#262 #849477
>>849468
Ну ясное дело, что тут универсального решения нет. Надо учитывать многие вещи. Для этого и нужна стадия проектирования.

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


А где у меня там такое?
>>849483
#263 #849483
>>849477

> А где у меня там такое?


__APPCONTEXT_H__ же. Да, вероятность проблем в данном случае околонулевая, но лучше раз и навсегда отучиться. И с одного подчеркивания тоже нельзя, если, конечно, ты не пилишь свой компилятор.
>>849491
23 Кб, 668x417
#264 #849491
>>849483
Общепринятая практика же при объявлении хедеров.
>>849609
#265 #849597
>>847940
Нахуй ты в итмо пошёл, если сам кодить не можешь?
#266 #849609
>>849491
двачую, хедеры только так и объявляют
>>849612
#267 #849612
>>849609
Объявляют. И это еще раз иллюстрирует, как в мире линуксов все срать хотели на стандарты.
>>849618>>849662
#268 #849613
>>849468

>как контексты в OpenGL/OpenAL.


поясни по быстрому, чем их подход отличается от других подходов?
>>849629
#269 #849618
>>849612
? с подчеркиваний начинаются еще приватные функции, ничего в этом нет плохого.
>>849629
#270 #849629
>>849613
Там есть глобальный скрытый активный контекст, ты можешь в него писать и читать соответствующими функциями (glClearColor, например), только в него, и только через API, но не напрямую. Ты можешь создать сколько угодно других контектстов и делать их активными по необходимости. Так как основной юзкейс таких библиотек - один контекст, это позволяет упростить код, избавившись от передачи контекста в каждую функцию, но и не проебать возможность иметь несколько контекстов (неосновной юзкейс), пусть и ценой некоторого неудобства.

>>849618
А вот стандарт сишечки говорит, что с __имена и _Имена зарезервированы языком. Приватные переменные и функции с одного подчеркивания начинать можно, если они static (не торчат наружу).
>>849638
#271 #849638
>>849629

>А вот стандарт сишечки говорит, что с __имена и _Имена зарезервированы языком. Приватные переменные и функции с одного подчеркивания начинать можно, если они static (не торчат наружу).


вся это хуйня от приплюснутых блядей, всервано их конпилятор символ '_' приставляет.
>>849642
#272 #849642
>>849638
Нет, эта хуйня, чтобы в новом стандарте могли беспрепятственно запилить _Static_assert, а твой код из-за этого не сломался. И, что важнее, чтобы не сломался код тысяч пользователей твоей либы. И чтобы разработчики компилятора могли без помех для тебя объявлять в хедерах стандартной библиотеки всякие _printf_locked и прочие детали реализации.
>>849644
#273 #849644
>>849642

>_Static_assert, _printf_locked


я вод даже не знаю что это такое, а тем более подстраиваться под эту хуету нет никакого желания.
169 Кб, 1280x800
#274 #849662
>>849612

> в мире линуксов все срать хотели на стандарты


Боюсь, что в данном случае на стандарт насрать абсолютно всем.
На пике хедеры из состава MS Developer Studio, Solaris, OpenBSD и IRIX. Таким образом объявлять хедеры учит даже Таненбаум в своей книжке по разработке ОС.
>>849672
#275 #849672
>>849662
Окей, убедил.
>>849676
#276 #849676
>>849672
Хотя с другой стороны, я тоже не понимаю, почему бы не объявлять хедеры просто заглавными буквами.
>>849685
#277 #849685
>>849676

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


кто тебе мешает?
>>849688>>849689
sage #278 #849688
>>849685
У нас тут был околофилософский срач о том, как правильно, а не кто мешает.
#279 #849689
>>849685
Никто, разумеется. Просто как-то неуютно становится, когда отходишь от общепринятой практики. Все таки, не язык для стандарта, а стандарт для языка.
>>849701
#280 #849701
>>849689

> Все таки, не язык для стандарта, а стандарт для языка.


твоему стандарту пять лет в обед и его еще будут переписывать и переписывать если не забьют, а соглашения пошли когда и с99 небыло.
#281 #850092
Зачем меня студентоту учат хардкорному байтоебству? У вас было такое? Я понимаю реальные задачки - маски, сдвиги и проч, реально нужно для ембедщиков. Но есть абстрактное говно чтобы заебаться. Например проверить можно ли сложить два целых числа без переполнения. Нельзя никаких циклов и операторов вообще (if && || < > и тд) только битовые | & ^ и тп. Это на интервью что ли такие вопросы задают? Ответы легко гуглятся но там какая то тарабарщина из ^ ~() & () , просто пиздец.
#282 #850122
>>850092

> там какая то тарабарщина


Вот чтобы это не было для тебя тарабарщиной, чтобы ты понимал, а не выучивал шаблонные действия, тебе и дают странные задачки. Хотя стоило бы потратить время на подбор реальной задачи, но нашим преподам обычно лень.
#283 #850159
>>850092
а ты думал погромисты с чем ебутся, с пездами чтоли?
>>850206
#284 #850206
>>850159
Программисты ебуться с реальными задачами, а с не битоебством без задач.
#285 #850210
>>850092

Учи все до чего дотянешься не ной, во-первых мозги развивает, во-вторых однажды таки понадобится и будешь хоть иметь предствавление что есть такая штука.
>>850217
#286 #850217
>>850210
Вот смотрите, нужно написать функцию которая сравнивает два числа и возвращает 0 или 1.

То есть вместо простого if (a > b)

нужно как-то так:

return !!(((( ~(x ^ y) ) & (y + ~x + 1) ) | ( y & ( x ^ y ) ) ) >> 31 );

Сириусли? Реальный синьор программер сможет такое написать? Оно нужно ему? Как это развивает? Не ною просто спрашиваю. Анон ты бы устроился на работу, где бы тебя заставили искать баг в таком коде?
>>850250
#287 #850250
>>850217
нытик ебаный, на тебе риал пример, есть сорта вафель 1-325, и есть группы к которым эти вафли относятся, например малиновые: 1, 7, 9, 20, 55, 85, 90, 253...321. на вход поступает вафля и нужно в риалтайме определить входит ли она в группу. вот здесь и начинается битоебство с масками и сдвигом, чтобы было быстро и понятно, а ифы и свитчи в этом случае для таких вот плачущих пидоров как ты.
#288 #850253
>>850250
Надуманный пример. Как думаешь, во сколько инструкций развернется битоебля и что будет быстрее - битоебля или один лукап в таблице?
В общем-то, большинство обоснованных случаев битоебли перечислено здесь: https://graphics.stanford.edu/~seander/bithacks.html А задачки, как раз, чтобы понимать, а не гуглить и копировать.
>>850258
#289 #850258
>>850253

>битоебля или один лукап в таблице?


а вот здесь ты ошибаешься, битоебство дает пасасать свитчу, я тут даже примеры выкладывал, но всем как всегда.
>>850259
sage #290 #850259
>>850258
Помню. Так и знал, что это ты.
>>850260
#291 #850260
>>850259
и к свичу у меня какоето оивращение, наверное перл сказывается.
#292 #850265
>>850250
Покаже пример такого ирл кода. Ты просто пиздишь мне. Зачем? Даже в ассемблере есть условные операторы.
>>850267
#293 #850267
>>850265
ищи в архиваче
#294 #850270
>>850250
Что такое "малиновые" - это сорт или группа? Ничего не понятно из условия, что это за цифры.
#295 #850421
>>837592 (OP)
Ананасы, посоветуйте какие-нибудь анализаторы использования динамической памяти, чтобы получить более-менее интуитивно понятные результаты в виде текста и, может быть, графики.таблицы. Я, конечно, могу LD_PRELOADнуть какой-то свой хук для malloc и сыпать дебажной инфой, но может быть есть какие-то элегантные решения?
>>850458
#296 #850454
Привет, антошки. Допустим есть на локальном компе прога которая обменивается пакетами с сервером. Каким образом можно отловить их и посмотреть содержимое?
>>850458
15 Кб, 655x439
#297 #850458
>>850421
valgrind? http://valgrind.org/docs/manual/ms-manual.html

>>850454
Если тебе нужен софт Wireshark, то тебе в /s/. Если ты сам написать хочешь - гугли pcap для начала.
>>850464>>850473
#298 #850464
>>850458
А если зашифрована информация, как с не работать?
#299 #850473
>>850464
Ты, сука, пентагон собрался ломать?

>>850458

>http://valgrind.org/docs/manual/ms-manual.html


Отлично, спасибо
>>850476
#300 #850476
>>850473
Ах да,

>А если зашифрована информация, как с не работать?


Если что-нибудь вроде AES-128 и выше - никак не работать, только соснуть хуйца.
#301 #850488
>>850464
Если у тебя ключ есть, можешь плагин написать, чтобы парсило. Если нет - отлаживай софт и вытаскивай из него ключ, но если у софта ассиметричное шифрование, и его писали не дебилы, то это тебе ничего не даст.
#302 #851329
>>850464
Реверси прогу, извлекай пакеты из памяти до их шифрования
#303 #851719
Котаны, можно ли в макросах работать с подстановкой?
Например, если второй аргумент макроса не ноль, вызвать выполнить подстановку одной функции, иначе другой:

#define fun1(a, b)
b > 1 ? calla(a) : callb(a)
>>851726
#304 #851726
>>851719
Почему бы и нет? Или выражение можно посчитать на этапе компиляции, то компилятор с любой минимальной оптимизацией ненужную ветку выкинет. Только не забывай скобочки расставлять, а то 2 * func(1, 2) может посчитаться не так, как ты предполагаешь.
>>851727>>851732
sage #305 #851727
>>851726
если выражение можно посчитать
#306 #851732
>>851726
не, мне нужно чтобы макрос разворачивался на этапе препроцессинга в зависимости от условия
>>851734>>851738
#307 #851734
>>851732
типа условный макрос
#308 #851738
>>851732
Опиши, как ты это использовать собрался. Если у тебя константное выражение, то #if expr никто не отменял.
>>851769
#309 #851769
>>851738
смотри, есть функция для получения значения из хеша:
hash_get(hash, key, len)
третий параметр длина строки. в коде, мне нужно иметь доступ как по литеральным строкам, так и по динамическим:
hash_get(hash, "name", sizeof("name"))
hash_get(hash, str, l)

так вот, хочу макрос где если третий параметр равен нулю, то длина будет вычисляться как sizeof(key) иначе использовать переданное значение.
>>851772>>851825
#310 #851772
>>851769
з.ы. или макрос с переменными количествами аргументов, типа перегруженный
>>851785
#311 #851785
>>851772
На _Generic из C11 посмотри. Или сделай:
#define myhash_(a, b, c, ...) myhash(a, b, c)
#define myhash(a, ...) hash_(a, __VA_ARGS__, sizeof(c)-1,)

myhash(hash, "name");
myhash(hash, ptr, strlen(ptr));

Но этот подход не детектит ошибки типа:
myhash(hash, ptr); // Развернется в myhash(hash, ptr, sizeof(ptr) - 1).
>>851812
#312 #851812
>>851785
хм.. variadic macros? как то через жопу.. пожалую сделаю два разных макроса.
>>851825
#313 #851825
>>851812

> как то через жопу


Лол, ты просто не видел, наверное, как препроцессор по-настоящему ебут. Я вот могу тебе сделать то, что ты просил (>>851769 с проверкой на литеральный 0), и вот уж это точно будет через жопу.
>>851939
#314 #851838
Анон, есть такой код:
http://pastebin.com/QR3Q7XXm
http://pastebin.com/qUwxGFmh

Из-за HHOOK h = 0; я получаю ошибки:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2146: syntax error: missing ';' before identifier 'h'
warning C4081: expected 'newline'; found ';'

При этом еще и на выражение HHOOK hHook = NULL; компилятор ругается: не может найти определение NULL. В чем тут проблема?
>>851846>>852121
#315 #851846
>>851838
#include <windows.h>
#316 #851861
Аноны, подскажите
есть
[code]
int revolution = 20;
float Tdr = 1.12345;
float tm = int * Tdr;
printf("T\t%f", tm);
[/code]
Получаю хуйню округленную до сотых! Какого хуя? Собственно вопросы
1. Если умножаю int на float, результать какого типа получаю в итоге?
2. Почему такое дикое округление?
3. Физический смысл, умножаю натуральное число на вещественное, хочу получить вещественное число, как это сделать на си?
4. Где эти моменты описаны в стандарте?
>>851880
#317 #851880
>>851861

> Получаю хуйню округленную до сотых!


Где? http://ideone.com/L2KZNL

1. Указывай нужную точность. Например, %.8f.
3. Просто умножить эти два числа, компилятор сам сконвертирует натуральное до вещественного.
4. С11 (в шапке), 6.3.1.8, Usual arithmetic conversions; 7.21.6.1, The fprintf function.
#318 #851939
>>851825

>как препроцессор по-настоящему ебут.


нет не видел, это наверное мамкины хипстеры, нормальные люди делают без выебонов

>Я вот могу тебе сделать то,


сделай
#319 #851942
>>851939
Открой исходники любого сишного проекта (например исходники питона, за них ручаюсь), папкин нехипстер. Будешь очень удивлён насколько они вымазаны макросами с ног до головы и как ими долбятся во все щели.
>>851952
#320 #851952
>>851942

>питона


так это изначально пидерская параша, еще бы опенэсэсл посоветовал. открой исходники майскюэл и посмотри как нужно писать.
>>852140
#321 #851964
>>851939
К сожалению, Си -это тебе не кресты.
Неймспейсов и енумов там нет. И дохуя чего нет, и шаблонов - не завезли.
Поэтому - макросы там рулят.

Ненавижу эту хуету.
>>851968
#322 #851967
gcc main.c -lpthread -ldl -lstd -lpsockets -ldmd -ltpd -lfcgi_i -o str_cgi_server -Wall -Wl,rpath=/usr/lib

Как вы эту херню терпите только..
>>851969
#323 #851968
>>851964
ну вот шаблонов тока нинадо это же пиздец в кубе.
>>851970
#324 #851969
>>851967
через мэйкфайл
>>851971
#325 #851970
>>851968
Хорошо все в меру.

Это хороший компромис между строгой статической типизацией и обобщенным программированием.

Не пистон, конечно, но в разы быстрее, зато.
И в грамотных руках не так уж и сильно увеличивает время компиляции...
>>851973
#326 #851971
>>851969
Ты еще АВТОТУЛЗ предложи.

Как только можно разродить было это...
Посоны выбирают СиМейк.
>>851974>>852000
#327 #851973
>>851970

>обобщенным программированием.


это практически шаг к ооп, нахуй, нахуй.
>>851975
#328 #851974
>>851971
мне мэйка хватает и всякую отдельную поеботу ставить нинуно
>>851976
#329 #851975
>>851973
Нет, это шаг к динамической типизации.
К ООП оно отношения не имеет.

Шаблоны функций были бы полезны и в чистых Си, тем более с ограничением на их перегрузку,которая однако - синтаксический сахар, опять таки.
>>851978
#330 #851976
>>851974
Ты свыше тысячи строчек не писал, поди.

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

СиМейк более нагладен.

Вот что действительно говно - это сконс всякий.
>>851979
#331 #851978
>>851975

>К ООП оно отношения не имеет.


о до, вначале обобщишь до структур, потом подумаешь чому бы структуры сами себя не приводили к типам
#332 #851979
>>851976
тысячи строчек мэйкфайла? ты ебанутый?
>>851980
#333 #851980
>>851979
Нет, когда у тебя проект из 10 подкпроектов с подпроектами состоит, и в каждом подпроекте таргет - shared object, то становится крайне геморрой мейк писать.Еще проблемы с переносимостью и зависимостями.
У тебя в мейке нет нормального способа определить целевую платформу или компилятор системы.
>>852036
#334 #852000
>>851939

> сделай


Наслаждайся: http://ideone.com/4seDQT
У первого варианта есть очевидные проблемы - оно матчит именно литерал, т.е., если третьим аргументом 0+0 передать, то будет бида-бида. И, что гораздо хуевее, оно в целом не работает, если третий аргумент начинается не с идентификатора.

>>851971

> Симейк


Хуета с синтаксисом похуже сишного препроцессора, с прибитыми гвоздями путями и ключами компилятора, которую не понимают даже ее разработчики. Шаг вправо, шаг влево от того, что оно считает нормальным? Добро пожаловать в ад, снова. Нет макросов для твоего компилятора? У тебя персональный ад. Кросскомпиляция? Нутыпонел.
>>852108>>852164
#335 #852025
Есть тут кто?
>>852026
#336 #852026
>>852025
Да, чего тебе?
>>852028
#337 #852028
>>852026
Можешь хелпануть кое с чем, тут вообще треш
#338 #852033
Можете попробовать объяснить далбаёбу? Не могу понять работу cin.clear(); хотя и прочитал уже много где чего. К примеру почему при неправильном вводе (вводе букв в int переменную) я попадаю в бесконечный цикл?

int main() {

int i = 0;
int j = 0;

while (1) {
i++;

cin >> j;

if (cin.fail())
{
cout << "Fail!" << endl;
cin.clear();
}

cout << "Integer " << i << ": " << j << endl;
}
}
>>852034>>852051
#339 #852034
>>852033
тут ещё и табуляция прописывается, наверное я действительно далбаёб.
#340 #852036
>>851980
Специально для тебя придумали autotools.
>>852039
sage #341 #852039
>>852036
В глаза ебусь.
#342 #852051
#343 #852108
>>852000
насладился. в первом случае variadic macros со всеми вытекающими, во втором не соответствует условию, т.е. нужно разворачивание на этапе препроцессинга. два однострочных макроса с различными именами - вин. хотя очень странно, почему препроцессор не имеет своего полноценного языка, хотябы типа мэйка, с циклами условиями и прочим.
>>852122>>852268
#344 #852121
>>851838
Бамп.
#345 #852122
>>852108
Навесь любой внешний препроцессор.

Я вон на руби генерирую код (в руби удобная подстановка в строках)
#346 #852140
>>851952
Я специально для тебя прошёлся поиском по кучке ведущих сишных ПИДАРСКИХ проектов, итого вымазано в макросах с ног до головы:
- OpenSSL;
- Его БИЖАПАШНЫЙ форк из которого по заверениям авторов вырезано 2/3 всего - LibreSSL (макросов там реальзо заметно меньше, но всё равно дохуени);
- Cpython;
- Ruby;
- Erlang;
- Perl (лол);
- GCC (там от плюсов только перегрузка операторов и отсутствие большинства shadow cast-ов, лол, хз нахуя они вообще с си слезали официально);
- Linux (да, их там дохуя, хотя учитывая кол-во драйверов, хуиток вроде perf и пр. в одной репе нельзя сказать что всё ядро ими измазано, но всё на удивление легко читаемо - и ничего сложнее коротких побитовых смещений из 2-3 действий, вот как действительно надо писать);
- jemalloc;
- gdb;
- а дальше заебался, алсо, во многих кроме того ещё сторонние кодогенераторы/скрипты были.

После этого ты приводишь аргумент о непидорстве mysql - самой обоссаной бд особенно в 2к16 когда настолько уёбищно масшабируемая бд даже вебмартышкам не упала нахуй, которую любят и не поносят только пхпшники, лол. Про долбоебизм людей, которые полностью пишут бд на си, при том что 95% времени своей работы она записывает и считывает что-то с жд: это, конешно, кек.
Алсо, пхп кстати тоже так же писался чисто и без макросов, что как бы намекает.
#347 #852149
>>852140
ой бля, я обосрался, не майэскюэл, а эскюэлайт.
ну во первых, тут разговор не в количестве макросов, макросы это заебись, а в их сложности. второе, в таких проектах много опционального и платформозависимого кода разруливаемого препроцессором.
>>852151
#348 #852151
>>852149

>эскюэлайт


Лол.

>второе, в таких проектах много опционального и платформозависимого кода разруливаемого препроцессором.


Всякую хуиту с условной компиляцией я и не учитывал если что.
>>852164
#349 #852164
>>852151

>Лол


нет, погугли его часто ставят как пример хорошего кода, это можно сказать мем.
так вот, здесь вопрос в том как ебут макросы, ты там много встречал наподобии >>852000, или они все довольно просты? в нормальных проектах, они сходу читаемы и никакого мозгоебства с ними нет.
>>852179
#350 #852174
>>852140
А о чём вообще спор? В любом сишном проекте макросов туева хуча. Сложно найти проект, где бы их не было

>хуиток вроде perf


Это ты хуитка. perf отличная тулза.
>>852179
#351 #852175
Устрою кстати на секундочку хит парад трёхэтажных макросов филиал говнокодру, с примерами кода:

1 место - libjit. Присуждается премия "Самые вложенные макросы в макросах".:
#define x86_mov_memindex_imm(inst,basereg,disp,indexreg,shift,imm,size)\
do {\
if ((size) == 1) {\
(inst)++ = (unsigned char)0xc6;\
x86_memindex_emit ((inst), 0, (basereg), (disp), (indexreg), (shift));\
x86_imm_emit8 ((inst), (imm));\
} else if ((size) == 2) {\
(inst)++ = (unsigned char)0x66;\
(inst)++ = (unsigned char)0xc7;\
x86_memindex_emit ((inst), 0, (basereg), (disp), (indexreg), (shift));\
x86_imm_emit16 ((inst), (imm));\
} else {\
(inst)++ = (unsigned char)0xc7;\
x86_memindex_emit ((inst), 0, (basereg), (disp), (indexreg), (shift));\
x86_imm_emit32 ((inst), (imm));\
}\
} while (0)

2 место - Perl. Присуждаются премии "самое нечитабельное говнокодище" и "лучшее наименование полей":
# define GvNAME_HEK(gv) \
(({ GV const _gvname_hek = (GV *) (gv); \
assert(isGV_with_GP(_gvname_hek)); \
assert(SvTYPE(_gvname_hek) == SVt_PVGV || SvTYPE(_gvname_hek) >= SVt_PVLV); \
assert(!SvVALID(_gvname_hek)); \
&(GvXPVGV(_gvname_hek)->xiv_u.xivu_namehek); \
}))

3 место - GCC. Присуждаются премии "самые длинные макросы" и "самое большое число копипасты":
#define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
case ENUM: return make_primitive_type (ENUM);
#define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 0);
#define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 1, ARG1);
#define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
#define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
#define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, \
ARG4);
#define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, \
ARG4, ARG5);
#define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6);
#define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6, ARG7) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6, ARG7);
#define DEF_FUNCTION_TYPE_8(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6, ARG7, ARG8) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 8, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6, ARG7, ARG8);
#define DEF_FUNCTION_TYPE_9(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6, ARG7, ARG8, ARG9) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 9, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6, ARG7, ARG8, ARG9);
#define DEF_FUNCTION_TYPE_10(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6, ARG7, ARG8, ARG9, ARG10) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 10, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6, ARG7, ARG8, ARG9, \
ARG10);
#define DEF_FUNCTION_TYPE_11(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6, ARG7, ARG8, ARG9, ARG10, ARG11) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 11, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6, ARG7, ARG8, ARG9, \
ARG10, ARG11);
#define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 0);
#define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 1, ARG1);
#define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
#define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
#define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, \
ARG4);
#define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, \
ARG4, ARG5);
#define DEF_FUNCTION_TYPE_VAR_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 6, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6);
#define DEF_FUNCTION_TYPE_VAR_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6, ARG7) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 7, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6, ARG7);
#define DEF_POINTER_TYPE(ENUM, TYPE) \
case ENUM: return make_ptr_type (ENUM, TYPE);
#351 #852175
Устрою кстати на секундочку хит парад трёхэтажных макросов филиал говнокодру, с примерами кода:

1 место - libjit. Присуждается премия "Самые вложенные макросы в макросах".:
#define x86_mov_memindex_imm(inst,basereg,disp,indexreg,shift,imm,size)\
do {\
if ((size) == 1) {\
(inst)++ = (unsigned char)0xc6;\
x86_memindex_emit ((inst), 0, (basereg), (disp), (indexreg), (shift));\
x86_imm_emit8 ((inst), (imm));\
} else if ((size) == 2) {\
(inst)++ = (unsigned char)0x66;\
(inst)++ = (unsigned char)0xc7;\
x86_memindex_emit ((inst), 0, (basereg), (disp), (indexreg), (shift));\
x86_imm_emit16 ((inst), (imm));\
} else {\
(inst)++ = (unsigned char)0xc7;\
x86_memindex_emit ((inst), 0, (basereg), (disp), (indexreg), (shift));\
x86_imm_emit32 ((inst), (imm));\
}\
} while (0)

2 место - Perl. Присуждаются премии "самое нечитабельное говнокодище" и "лучшее наименование полей":
# define GvNAME_HEK(gv) \
(({ GV const _gvname_hek = (GV *) (gv); \
assert(isGV_with_GP(_gvname_hek)); \
assert(SvTYPE(_gvname_hek) == SVt_PVGV || SvTYPE(_gvname_hek) >= SVt_PVLV); \
assert(!SvVALID(_gvname_hek)); \
&(GvXPVGV(_gvname_hek)->xiv_u.xivu_namehek); \
}))

3 место - GCC. Присуждаются премии "самые длинные макросы" и "самое большое число копипасты":
#define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
case ENUM: return make_primitive_type (ENUM);
#define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 0);
#define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 1, ARG1);
#define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
#define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
#define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, \
ARG4);
#define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, \
ARG4, ARG5);
#define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6);
#define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6, ARG7) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6, ARG7);
#define DEF_FUNCTION_TYPE_8(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6, ARG7, ARG8) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 8, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6, ARG7, ARG8);
#define DEF_FUNCTION_TYPE_9(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6, ARG7, ARG8, ARG9) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 9, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6, ARG7, ARG8, ARG9);
#define DEF_FUNCTION_TYPE_10(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6, ARG7, ARG8, ARG9, ARG10) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 10, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6, ARG7, ARG8, ARG9, \
ARG10);
#define DEF_FUNCTION_TYPE_11(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6, ARG7, ARG8, ARG9, ARG10, ARG11) \
case ENUM: return make_fn_type (ENUM, RETURN, 0, 11, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6, ARG7, ARG8, ARG9, \
ARG10, ARG11);
#define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 0);
#define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 1, ARG1);
#define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
#define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
#define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, \
ARG4);
#define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, \
ARG4, ARG5);
#define DEF_FUNCTION_TYPE_VAR_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 6, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6);
#define DEF_FUNCTION_TYPE_VAR_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
ARG6, ARG7) \
case ENUM: return make_fn_type (ENUM, RETURN, 1, 7, ARG1, ARG2, ARG3, \
ARG4, ARG5, ARG6, ARG7);
#define DEF_POINTER_TYPE(ENUM, TYPE) \
case ENUM: return make_ptr_type (ENUM, TYPE);
>>852202>>852268
#352 #852177
>>852140

>mysql - самой обоссаной бд


>особенно в 2к16 когда настолько уёбищно масшабируемая бд даже вебмартышкам не упала нахуй


Такие категоричные заявления могут себе позволить только люди мало что понимающие в БД. Что собственно подтверждается

>Про долбоебизм людей, которые полностью пишут бд на си, при том что 95% времени своей работы она записывает и считывает что-то с жд: это, конешно, кек.


Видно студентика или человека который о БД знает понаслышке.
мимокрокодил
>>852179
#353 #852179
>>852174

>А о чём вообще спор? В любом сишном проекте макросов туева хуча. Сложно найти проект, где бы их не было


Спор о том, что тот госопдин спизданул что-то в стиле "макросами всё вымазывают только пидары".

>Это ты хуитка. perf отличная тулза.


Хуитка по кол-ву кода относительно всего кода в репе.
>>852164

>так вот, здесь вопрос в том как ебут макросы


Мальчик, ты не видел что такое "ебут макросы".

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


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

>или они все довольно просты?


Это как шаблоны в плюсах. Пока их мало - всё хорошо читается, когда разрастаются в вложенные 10 раз хуитки - получается write-only говно с магией.
>>852177

>пук

>>852202>>852203
#354 #852202
>>852179

> "макросами всё вымазывают только пидары".


ой не пизди, господин писал, что

>нормальные люди делают без выебонов


без хитровыебанныз макррсов, капиш
>>852175

>2 место - Perl. Присуждаются премии "самое нечитабельное говнокодище" и "лучшее наименование полей":


Здесь ты обосрался, Sv это скалярный вектор, ну и остальные буковки имеют смысл.
>>852204>>852206
#355 #852203
>>852179

> ядра линукса


>гит


лол, этоже образец говнокодинга и непродуманной архитектуры в одном флаконе
>>852204
#356 #852204
>>852202
Sv это как Gv, только Sv?
Наименование-то может и осознанное, но выглядит как конченное говно из-за экономии на буквально паре символов, как и весь перл.
>>852203
Ну лан.
>>852208>>852215
#357 #852206
>>852202

>без хитровыебанныз макррсов, капиш


У господина "хитровыебанными" считаются генерик-макросы из си11, лол.
>>852208
#358 #852208
>>852204
фигасе пару, я тоже такой подход с буквенным кодированием активно пользую, очень удобно.
>>852206

>из си11


да
>>852218
#359 #852215
>>852204
з.ы. и да, вот смотри как в перл кодируют http://perldoc.perl.org/perlapi.html#svtype
я считаю это охуенчик, главное незабыть документашку.
>>852218
#360 #852218
>>852208

>фигасе пару


Да, пару. Можно назвать хотя бы в стиле s_vec — на клавиатуру нужно нажать на 2 кнопки больше, зато читаемость несравнимо выше.

>да


Бля, а я-то забыл что сижу в си треде с ретроградо-неосиляторами.
>>852215

>главное незабыть документашк


Всегда помнить документацию чтобы знать что это за тип — это блять просто максимальное днище в мире стилей кодирование. Хорошо что перл умер.
>>852224
#361 #852224
>>852218
ну давай, покажи не днище
>>852229>>852233
sage #362 #852229
>>852224
AbstractSingletonProxyFactoryBean.
>>852233
#363 #852233
>>852229
Двачую, кончил.
>>852224
Что угодно из того >>852140 списка кроме перла. Настолько нечитаемого стиля кода нигде блять нету.
>>852259
#364 #852259
>>852233

> AbstractSingletonProxyFactoryBean.


> Двачую, кончил.


скажи мне, что ты угараешь, пожалуйста
>>852265
#365 #852265
>>852259
Скажи мне, что ты не долбоёб и пытаешься меня потралить, а не на полом серьёзе не видишь тут сарказма, пожалуйста.
>>852293
#366 #852268
>>852108

> variadic macros со всеми вытекающими


Какой variadic macros? Там три фиксированных аргумента - hash(a, b, c). Ты __VA_ARGS__ увидел и испугался? Там нам нем if реализован. Но там есть другие проблемы, и я о них уже сказал

> нужно разворачивание на этапе препроцессинга


Впервые слышу. Оно на этапе компиляции разворачивается, зачем тебе именно препроцессором?

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

>>852175
1 место норм код, не вижу никакой проблемы вообще, это идиома. Если платформ полторы, то можно inline/forceinline, если нужно C89, то приходится так.

3 место должно быть на первом.
#367 #852293
>>852265
Если бы я это воспринял на полном серьёзе, я бы не уточнял. Но я рад, что всё не так с тобой плохо.
7 Кб, 567x299
#368 #852655
ребзя, после того, как я отредактировал текст, в консоле в конце иногда печатается пикрелейтед (  a n d l e r f g  ШcXH). причем по разному, иногда просто _ h a n d l e r ШсХН, всякие квадратики, которых там быть не должно например. что за хуета?
>>852660
#369 #852660
>>852655
Чем редактировал? Это линукс? Делал ли clear/reset? Что на самом деле записано в файле?
>>852666
1160 Кб, 3500x2333
#370 #852666
>>852660
Забудь, проблема решена.
#371 #852687
Котаны, как выбрать каждый второй элемент в массиве?
Например дан такой массив -
int arr[15] = {3,7,8,2,8,2,2,4,6,3,1,0,0,0,5};

нужно что бы вывело только = 7,2,2,4,3,0,0
>>852689
#372 #852689
>>852687
for (int i = 0; i < 15; i++) printf("%d\n", arr[++i]);
53 Кб, 554x598
#373 #852692
>>852689
Так просто, спасибо
#374 #852701
>>852689
Ловкач Джэк
#375 #852712
>>852689
i += 2 чем не устроило?
>>852736
#376 #852736
>>852712
слишком очевидно
#377 #852849
В некоторых учебниках по си, пишут main() без int, а в других наоборот.
Мой компилятор ругается если пишу без int.
Как правильно?
#378 #852852
>>852849
clang ругается, а gcc нет.
#379 #852860
>>852849

>Как правильно?


с инт
#380 #852918
>>852849
В последних двух стандартах неявный int запрещен. Поэтому правильно: int main(void) или вариант с аргументами.

> clang ругается, а gcc нет.


gcc -std=c11 file.c
>>852946
#381 #852946
>>852918

>int main(void)


вангую, что void конпилицо как main с нулевыми аргументами. иже есть сахарок
>>852952
#382 #852952
>>852946
void в аргументах по историческим причинам. Раньше в декларациях функций не нужно было указывать типы аргументов. Чтобы отличить древние декларации с какими-то аргументами* от современных функций без аргументов, в сишечке в функциях без аргументов пишут void, а использующих пустые скобки всячески обоссывают за неспособность учиться.
>>853248
#383 #853248
>>852952
вдруг поймал себя на мысли, что практически не встречал функций без аргументов в большинстве исходников
>>853263>>853312
#384 #853263
>>853248
Нормальные программисты минимизируют число побочных эффектов, а функция без аргументов и есть один сплошной побочный эффект.
#385 #853312
>>853248

>не встречал


а они там есть
#386 #853793
Аноны, решил написать JS обертку (node.js модуль) для C библиотеки http://wordnet.princeton.edu/wordnet/documentation/.
Проблема в том, что я незнаю с чего начать, составьте для меня небольшой todo-лист, кто понимает.
Вот даже уже готовый пример есть https://github.com/dariuszdziuk/wordnet, но мне нужно разобраться как это делается впринципе.
>>853891
#387 #853891
>>853793
Вопрос не правильно поставил.
Сейчас более менее вник. Суть API этого - обращение к дб. Т.е если я хочу использовать JavaScript, мне нужно просто переписать все функции на нем.

Другой вопрос, не лучше ли будет написать скрип в JS, который будет запускать С программу (child process) и output из этого С скрипа передавать обратно (через pipe)?
Т.е использовать С библиотеку все-таки.

Это будет экономнее по времени, чем переписывать функции в JavaScript?
По производительности?
#388 #853924
ребят, есть способ посмотреть код стандартных функций? сейчас на обучение часто встречаю задачки из разряда "репродюс такуе то функцию", и иногда не понимаю до конца логику функции из мана (саму идею понял но потом встречаю пару исключений и появляются вопросы)
>>854108
#389 #853934
Ананасы я так понимаю на 32 битной системе указатель будет 32 бита, а на 64 битной 64 бита?
>>853942>>854108
#390 #853942
#391 #854055
когда создаю типа свою библиотеку функций как хедеры подтянуть чтоб потом при компиляции мейна с этой библиотекой функции работали без прототипизации?
>>854120
#392 #854108
>>853934
>>853924
Таки нет. Хотя я не программист.
Я не могу дать определение разрядности процессора, но могу привести примеры.

1) Древний 8-разрядный 6502. АЛУ работает с 8-разрядными числами, адресное пространство 64КБ. Соответственно указатели 16-битные.
2) x86. Адресное пространство ограничено системой команд до 64ГБ. Регистры общего назначения 32-разрядные. Указатели 32-битные. Но есть всякие SSE, в которых есть регистры с большей разрядностью.

То есть разрядностью процессора нельзя назвать ни разрядность АЛУ, ни разрядность шины адреса. Может быть разрядность процессора это разрядность регистров общего назначения, но что называть регистром общего назначения?
Так что по моему нельзя дать однозначное определение.
>>854120
#393 #854120
>>854108

> x86. Адресное пространство ограничено системой команд до 64ГБ


Один дурак сказал, все повторяют. 4 ГБ адресного пространства. Иди еще раз посмотри на картинку дескриптора сегмента из мануалов.

> есть всякие SSE, в которых есть регистры с большей разрядность


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

>>854055
Гитхаб, различные опенсорсные сишные рантаймы. Вижуал студия, исходники CRT в комплекте.
>>854142
#394 #854142
>>854120

>> x86. Адресное пространство ограничено системой команд до 64ГБ


>Один дурак сказал, все повторяют. 4 ГБ адресного пространства.


https://en.wikipedia.org/wiki/Physical_Address_Extension
>>854150
#395 #854150
>>854142
Ты еще про оверлеи расскажи. PAE - это те самые оверлеи, когда ты в разное время маппишь разные участки физической памяти в виртуальную. Адресное пространство остается 4 ГБ, такие дела.
>>854151
#396 #854151
#397 #854161
Здарова всем.

Решил заняться настоящим программированием, но послее ООП головного мозга не очень понятно как в процедурщине реализовать тру шаблоны проектирования.
Существуют ли они вообще? Конкретно шаблоны проектирования под Си, не под си с объектами, а именно в том виде каким он должен быть?
Киньте ссылку на литературу годную. Поиск выдает какую-то поебень типа Objective-C и тому подобное.
>>854203>>854299
#398 #854203
>>854161
Object-oriented ansi c
Cyclone
Все книжкт zmq
>>854299
#399 #854299
>>854203

>Object-oriented ansi c


книга годная, но бля это же пиздец пиздецовый, для ооп есть плюсы и
жаба, зачем страдать хуйней то? >>854161 чем тебя ооп не устраивает
>>854316
#400 #854316
>>854299
П - переносимость.
>>854328
#401 #854328
>>854316

>переносимость.


лол
#402 #854853
Сильно не ссыте на меня, в ВУЗе дали задание:

Разработайте программу,которая вводит целое положительное число в промежутке от 1 до 100 (необходимо предусмотреть обработку ошибок при вводе). В соответствии с этим числом сформировать записи трех видов:
"Ваш возраст 1 год", "Ваш возраст 22 года", "Ваш возраст 75 лет"
''Вам до совершеннолетия 17 лет'',''Вы совершеннолетний 4 года'','''Вы совершеннолетний 57 лет"
"Вам до пенсии 59 лет", "Вам до пенсии 48 лет", "Вы на пенсии 15 лет"

Наваял программку, она компилируется, но ничего не выводит (параша, да).
http://ideone.com/oUP7qD
#403 #854857
>>854853
У тебя в main декларации функций т.е., ты как бы говоришь "сап, гцц, есть одна функция", а не их вызовы. Вызовы делаются так же, как и у всяких библиотечных printf(): имяфункции(тут аргументы, если есть);
>>854874
#404 #854874
>>854857
Не прокатило.
http://ideone.com/oUP7qD
>>854891
#405 #854875
По отдельности все работает, специально отдельно проверял каждую из функций с разными значениями, вот только все вместе не работает, хотя и ошибки не выдает.
#406 #854888
Ананасы, в чём пишете/отлаживаете программы на C под шиндоус? А то я только под мк писал. Насоветуйте что-нибудь легковесное не особо навороченное.
>>854891
#407 #854891
>>854874

> Не прокатило.


Ты так говоришь, как будто это было единственной проблемой твоего кода:

> return dy[3];


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

>>854888
Легковесное: берешь gcc (и msys/msys2 заодно), берешь любой текстовый редактор (например, саблайм). Отлаживаешь чем придется (x64dbg, IDA, gdb). Если хочется IDE, есть Pelles C, там свой компилятор и свой source-level отладчик.
>>854896
#408 #854896
>>854891
Саблайм лучше ноутпада плюх-плюх?

>Отлаживаешь чем придется (x64dbg, IDA, gdb)


Во что проще вкатиться, что удобнее?
Gcc под шиндоус - mingw? Или что?
>>854901
#409 #854901
>>854896

> Саблайм лучше ноутпада плюх-плюх?


Дело вкуса.

> Gcc под шиндоус - mingw? Или что?


Да. Ставится в комплекте msys.

> что удобнее?


Удобнее - нормальный отладчик с человеческим лицом типа студийного но студия весит в районе 5-10 Гб или Pelles C. В принципе, если потребность есть, то и gdb несложно осилить.
>>854911
#410 #854911
>>854901
А легковесные аналоги студии есть адекватные? Помню, в студенчестве пытался угорать по опенсорсу и лабы делал в code blocks. Не особо был от него в восторге. Студия годная, но жирная и платная, я не уверен, что такой софт на работе можно ставить себе. Да и мне по мелочам иногда использовать надо будет, так как я в большинстве случаев под arm/avr пишу, а на пекарне для тестов и облегчения себе жизни проще змею использовать.
>>854915>>854918
#411 #854915
>>854911

> студия ... платная


Есть Community-версия, она бесплатная, но на работе ее использовать действительно нельзя.

Code::Blocks никуда не делся, оброс фичами и, возможно, стал более юзабельным. Есть еще всякие IDE на Java, тот же эклипс и CLion - они достаточно удобные, но как по мне, слишком уж неповоротливые.
>>854917>>854918
#412 #854917
>>854915

>на работе ее использовать действительно нельзя


Ну вот о том и речь.
Code blocks вообще юзабельный? Лет семь назад он мне показался весьма корявым. Но он как раз вроде легкий был весьма.
CLion же тоже вроде платная.
81 Кб, 1280x775
#413 #854918
>>854911
Юзаю NetBeans. Легковесной ее не назвать (ибо Java), но в остальном вполне удовлетворяет моим потребностям.

>>854915

>эклипс


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

>CLion


Платная же. Хотя, я слышал, они еще распространяют какую-то кастрированную версию.
#414 #854934
>>854853 кун на связи.
Я понял, что я полный еблан. Я не знаю, почти нихуя про функции, и в этой программе нагородил полнейшую херню. Как это лечить? Это пройдет? Что посоветуете?
#415 #854950
>>854934
1) Написать функцию, которая выводит правильное склонение год/года/лет (printf) или возвращает указатель на правильное склонение слова.
2) Написать функцию ввода (читать ввод, проверять на ошибки, возвращать 1 int, ты это умеешь).
3) Написать функцию, выводящую информацию о текущем возрасте.
4) Написать/исправить функции совершеннолетия и пенсий.
В результате получится:
int get_age(void) { ... }
void print_years(int age) { ... }; // Или char *get_years_declenision(int age) { ... }
void print_current_age(int age) { ... }
void print_adult_status(int age) { ... }
void print_pension_status(int age) { ... }

int main(void) {
int age = get_age();
print_current_age(age);
print_adult_status(age);
print_pension_status(age);
}

Пиши по-порядку и сразу тестируй написанное. Ничего сложного в задании нет, а все, что тебе нужно знать, уже есть в том коде, что ты постил выше.
#416 #854985
>>854934
Вот твоя программа: http://ideone.com/1KfgB8
Удиви препода. На первый взгляд может показаться, что я издеваюсь. На самом деле я просто не люблю городить многоэтажные if'ы и терпеть не могу наличия в одной функции нескольких return'ов. Но если хочешь, можешь переписать как тебе надо.
>>854996
#417 #854996
>>854985
Баги специально оставил, чтобы >>854934 помучался? grammatic_form показывает нам все, что нужно знать о тернарном операторе. Алсо, твоя enter() сломана - введи a и нажми Enter. Вангую, что ты сам недавно выучил язык. Если будешь писать на нем, то с годами все перекосы пройдут.
>>855004
#418 #855004
>>854996
Один баг уже успел пофиксить (в последней функции). enter() тоже переделал. scanf - зло. Изменения внем прямо на ideone.

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


Лол. Так или иначе связан с Сишкой уже больше 10 лет. Просто внимательность никогда не была моей сильной стороной. Ну и да, прогу через отладчик не прогонял.
>>855005>>855010
#419 #855005
>>855004

>внем


внёс
фикс
sage #420 #855010
>>855004

> Так или иначе связан с Сишкой уже больше 10 лет.


Ну хуй знает. Я не про баги. Я про комментарии с линиями, const int абсолютно ничем не отличается от int с точки зрения компилятора, разве что изменять нельзя напрямую, многострочные тернарные операторы нечитаемы, прототипы в .c, inline на который всем насрать... будем считать, что мой детектор дал сбой.
>>855018
#421 #855018
>>855010

>комментарии с линиями


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

>const int


>inline


Я это не для компилятора пишу, а для себя и для потенциальных читателей кода. Согласен, в маленьких учебных прогах можно забить на все эти нюансы. Как и на static в объявлении функции (файл-то один). Это уже чистая привычка. Я всегда так пишу. Да что там говорить, я даже restrict юзаю.

>прототипы в .c


ideone же. Там нельзя создать отдельный буфер для хедера. Можно было, конечно, определить все функции перед main, но я делал методом "сверху вниз" и, как мне кажется, это затруднило бы чтение.

>тернарные операторы


Ну тут я полностью согласен. Разумеется, в продакшн-коде такому говну не место. Но и давать очевидно наивное решение тоже не хотелось. Мне кажется, что >>854853 не помешает немного напрячь мозг.
#422 #855353
Пока решил забить хуй на SDL, хочу попросить у анона совета насчет ncurses. Читал ли анон что-то по нкурсес охуенное, или ничего охуенней документации не придумано?
#423 #855354
Помогите с кодом на си, условие if (((x - a) != 0) || ((x - c) != 0)) работает через раз.
http://pastebin.com/dK5gYxG3
https://pp.vk.me/c637922/v637922388/16006/V3EM_Qn_rI8.jpg
>>855508
#424 #855473
Поставил msys2 и code blocks. Mingw не заметил, что вместо установщика там менеджер пакетов, поэтому не поставилось. Инета на рабочем компе нет. Code blocks mingw из msys сам не находит, я пути руками указал, жму конпелировать, он пишет, что конпелятор вернул 0, но при этом нихуя не происходит. Как подружить его с msys2?
>>855521
#425 #855508
>>855354
Код не читал, хуй знает, что там считается, а ссылка на дуро^Wмэйлру не открывается. Но раз x и a типа double, то, их разность может быть достаточно малой, и при этом не нулевой. Сравнивать числа с плавающей точкой операторами == и != можно только в очень редких случаях. Используй вместо != 0 что-нибудь типа >= N, где N - достаточно маленькое ненулевое число.
#426 #855521
>>855473

> вместо установщика там менеджер пакетов


> Инета на рабочем компе нет


Можно выкачать пакеты в офлайн (/etc/pacman.d/mirrorlist.*) и поставить с помощью pacman -U.

> жму конпелировать, он пишет, что конпелятор вернул 0, но при этом нихуя не происходит


У Code::Blocks есть окно с логом компиляции. Компилятор там точно правильный и по правильному пути вызывается? Все ли длл оно находит наиболее частая проблема? Попробуй из виндовой консольки руками gcc сказать, проставив все пути так же, как в Code::Blocks.

Алсо у Code::Blocks есть дистр со включенным в него mingw.
>>855524
#427 #855524
>>855521
Скачал пакеты, попробую завтра. Ну и заодно дистр codeblocks вместе с mingw. Спасибо за помощь, анон.
#428 #855932
Тук-тук. Есть кто?
>>855940
52 Кб, 600x600
#429 #855940
>>855932
NIET. A KTO SPRASHIVAYET?
>>855953
#430 #855953
>>855940
Фрилансер 300кк/сек
Нужна небольшая помощь с циколом
>>855956
#431 #855956
>>855953
Ну выкладывай, че там у тебя.
>>855962
29 Кб, 1080x289
#432 #855962
>>855956
Дано натуральное n и действительное a. Вычислить: ПИК

CODE(ОЧЕНЬ КРИВОЙ):

#include <stdio.h>
#include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;
int main()
{
int n;
double a;
cin >> a;
cin >> n;
double result = 0;
for (int i = n; i = n; i++)
{
double temp = a;
for (int j = 1; j < i; j++)
{
temp *= (a + j);
}
result += 1 / temp;
}
cout << result;
return 0;
_getch();
}
29 Кб, 1080x289
#432 #855962
>>855956
Дано натуральное n и действительное a. Вычислить: ПИК

CODE(ОЧЕНЬ КРИВОЙ):

#include <stdio.h>
#include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;
int main()
{
int n;
double a;
cin >> a;
cin >> n;
double result = 0;
for (int i = n; i = n; i++)
{
double temp = a;
for (int j = 1; j < i; j++)
{
temp *= (a + j);
}
result += 1 / temp;
}
cout << result;
return 0;
_getch();
}
#433 #855965
>>855962
Код лучше на pastebin скинь. Или скрин сделай. Так нечитаемо. Но я сразу могу сказать, что твоя программа написана не на Си.
>>855969
#434 #855966
>>855962
double f = 1;
double sum = 0;
for (int i = a; i <= n; i++) {
....f = f / i;
....sum += f;
}
>>855971>>855993
#435 #855969
>>855965
http://pastebin.com/dARRBXbA как это не на си?
На си писал.
>>855972>>855976
#436 #855971
>>855966

>for (int i = n; i = n; i++)


тут опечатался, у меня
for (int i =0; i < n; i++) было, и работала она пплохо
>>855972
#437 #855972
>>855971
В каком смысле плохо? У тебя двойной цикл, который совсем не нужен.
>>855969
В си нет cin/cout.
>>855978
24 Кб, 446x299
#438 #855976
>>855969
Твоя программа написана на C++. Ну это сильно сказано. Потому что если ты пользуешься iostream, то зачем подключать stdio? conio.h, насколько мне известно, не входит ни в стандарт C, ни в стандарт С++. В Си не бывает iostream, cin, cout и using namespace std.
Попробуй мое решение. Оно довольно грубое, поскольку в идеале надо бы проверку на переполнение запилить. А я пока отойду не надолго. Если что, пиши.
#439 #855978
>>855972

>В каком смысле плохо?


Выдавала совсем не тот результат

>В си нет cin/cout.


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

>У тебя двойной цикл, который совсем не нужен


>>855976
Да. Ну крч, мне тут один чел помог именно с циклом, видимо он не так поонял и написал на крестах
но надо на Си
щас чекну твое
>>855980
#440 #855980
>>855978
БФ

>переписать лишнее

#441 #855986
>>855976
Псс, ты ещё тут?
>>855992
#442 #855987
>>855976

>conio.h


ну это точно в Си входит
она у меня чисто для _getch();
#443 #855992
>>855986
Да. Ты пиши сразу, что нужно. Я минут через 10-15 буду.
>>855996
#444 #855993
>>855966 >>855976
Оба ответа неправильные.
>>856003
#445 #855996
>>855992
http://pastebin.com/QXqi1dWH довел прогу до ума, теперь она работает.
Осталось переписать с С++ на Си.
Это возможно?
>>855999
#446 #855999
>>855996
scanf/printf вместо cin/cout, namespace, iostream убрать.
>>856005>>856037
#447 #856003
>>855993
Анон, поясни, где у меня ( >>855976 ) обосрамс?
>>856010
#448 #856005
>>855999
int n;
double a;
scanf("%f,%f", &a, &n);

Так пойдет?
>>856029
#449 #856010
>>856003
1 / a + 1 /a + ...
>>856027
#450 #856027
>>856010
Фиксанул, вроде. Допустим, a = 1, n = 2. Должно получиться 1 + (1/(1∙(1+1))) + (1/(1∙(1+1)∙(1+2))) = 1 + 1/2 + 1/6 ~= 1.667, так ведь?
http://ideone.com/ArHkgC
>>856030
#451 #856029
>>856005
Ясно же что нет.
>>856037
#452 #856030
>>856027
Ошибка быстро будет накапливаться. Ты это понимаешь, надеюсь?
>>856033
#453 #856033
>>856030
Ну я сразу написал, что решение грубое. Я же не буду детально прорабатывать чужую лабу. Эпсилон и проверка на переполнение легко гуглятся.
>>856036
#454 #856036
>>856033
Тут надо не эпсилон, а рациональные числа делать.
>>856041
#455 #856037
>>855999
>>856029
Не понимаю, как написать, что бы printf выводил результат
Хелп плеес
>>856038
#456 #856038
>>856037
scanf("%ld %d", &a, &n)
printf("%ld %d", &a, &n)
Если я не путаю.
>>856044
#457 #856041
>>856036
Лол, я даже не знаю, ожидает ли препод такого решения от >>855962 Обычно же хватает варианта "на отъебись". Если конечно это не лаба по мат. программированию.
>>856044
#458 #856044
>>856041

> Если конечно это не лаба по мат. программированию.


Нет

>ожидает ли препод


Вряд ли, у меня преподша очень странная, я для себя пытаюсь понять просто

>>856038

>l


что это перед d?
Раньше в прогах писал

>scanf("%f,%f", &a, &n)


и работало
>>856045
#459 #856045
>>856044
А ты ман по scanf/printf почитай. Там эротика.
10 Кб, 610x324
#460 #856047
Странно, переделал cin cout, стало выдавать громадные числа.
Где я ошибся?
#461 #856049
>>856047
lf, а не ld
туплю
>>856055
#462 #856054
>>856047
Дебил. Зачем ты поинтеры печатаешь?
>>856055>>856056
#463 #856055
>>856049
Теперь нули выдает.
>>856054
поинтеры?
>>856057
#464 #856056
>>856054
где они тут?
112 Кб, 1000x920
#465 #856057
>>856055

>поинтеры?


Смена растет.
>>856060
#466 #856060
>>856057
я думал, что это *xxxxxxxxxxxx
#467 #856061
аааа, хаххаха, сукаа
#468 #856062
>>856047
Ну так все же, что фиксануть?
#469 #856063
>>856062
Убрать &ы.
>>856065
#470 #856064
>>856062
Прочитать ман по printf и scanf. А еще не копировать бездумно код, который тебе дали на дваче. Понятно, что для тебя это невыполнимо.
>>856073
#471 #856065
>>856063
Теперь с эксепшенном сваливается почему-то.
>>856067
#472 #856067
>>856065
Не везде убрать, только в некоторых местах.
>>856069
#473 #856069
>>856067
Да я троллю, успокойся.
#474 #856070
>>856062
http://ideone.com/YuHA7k
И прочитай все таки доки на stdio.
#475 #856071
>>856070
Вот так и становится тред кормушкой для птушников с их лабами.
>>856073>>856075
#476 #856073
>>856064

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


Ты сам хоть понимаешь, что пишешь?
>>856071
Бляя, я надеюсь ты когда нибудь попадешь на мой факультет
>>856074
44 Кб, 858x540
#477 #856074
>>856073

>Ты сам хоть понимаешь, что пишешь?


Понимаю. Проблемы?

>Бляя, я надеюсь ты когда нибудь попадешь на мой факультет


Зачем?
>>856083
#478 #856075
>>856071
Ну, все таки, вопросы использования stdio - это специфика Сишки. Можно, конечно, было отправить его в ньюфаг-тред, но к чему умножать сущности? Как мне кажется, в данном случае, лучше показать, как решить проблему с printf/scanf, чем тупо отправить читать маны. Чисто чтобы потом у него не возникло отвращения к языку из-за одной единственной говнолабы.
#479 #856083
>>856070

>И прочитай все таки доки на stdio.


Спасибо большое, добра

>>856074

>Проблемы?


Пруфани, что я код с двачей скопировал

Да и вообще, как я могу это знать?
В школе у нас вообще не было информатики (к егэ сам готовился)
В универе на странного препода попал, щас зайду с телефона кину тебе задание на допуск к этой самой лабе
Все, что она обьяснила это int, while, for, do while и как кубриками этими ебаными рисовать блок-схемы

p.s. уже 11ый час сижу за расчетками по математикам, поэтому туплю довольно жестко
>>856088
#480 #856086
>>856070
printf("%.4lf\n", solve(a, n));
fix
#481 #856088
>>856083

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


У тебя в >>856047 вконце printf, а следом scanf. Может это конечно у тебя сделано, чтобы press any key before continue, но что-то мне подсказывает, что просто копирнул.
>>856090
#482 #856090
>>856088

>before


to fix
#483 #856118
test!
#484 #856123
хех чисто тред оживил сегодня хоть немного
>>856124
#485 #856124
>>856123
анус бы себе лучше оживил
>>856129
#486 #856129
>>856124
eto ne vichislimo po turingu
#487 #856247
Пацаны, можно ли в sublime 3:
а) запилить подсказку по функциям (ну типа когда вызов пишешь, чтобы он находил в указанных заранее директориях прототип и писал, какие параметры надо передавать. Ну типа как анаконда для пистона)
б) запилить форматирование всего файла хоткеем?
в) отображение определения макросов, а не названия файла, в котором оно находится
>>856254
#488 #856254
>>856247

> подсказку


SublimeCodeIntel, но оно это одна большая проблема. В целом, проще считать, что нет.

> форматирование хоткеем


Обертки вокруг astyle и clangformat, тысячи их.

> определения макросов


Хуй знает, поковыряй, как оно там индексирует. Мне достаточно Goto definition (назначь хоткей, по умолчанию вроде нету) и потом Jump Back (Alt -).
>>856655
#489 #856274
Вопрос неуча.
Это нормально, что scanf не может прочитать короткое целое число 255>=x>=0 в однобайтовый unsigned char, когда в строке формата стоит %d?
На ideone читает, но не читает в signed. Какое-то непредсказуемое поведение...
>>856276
#490 #856276
>>856278
#491 #856278
>>856276
На том же ideone читает, если вместо %d указать %u, но на моем компьютере по прежнему ведет себя странно.
Хм. Ну и ладно, проще считать в int и привести к char тогда. Наверное. Я же нуб и могу ошибаться.
#492 #856305
http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/attrib.html

Анон, отчего в этом коде Example 5 может быть сегфолт? Очепяток нету, написано вроде все верно.
>>856306
#493 #856306
>>856305
Под gdb запускать не пробовал? Что пишет?
>>856316
#494 #856316
>>856306
Нет пока, не пробовал, только домой сейчас доберусь, где смогу.
#495 #856655
>>856254

>SublimeCodeIntel


Там по-моему нет C, а для пистона анаконда ну просто конфета.

>Обертки вокруг astyle


В смысле, обертки?
Алсо, сниппеты - это типа как code templates в iar? Нихуя только не понятно, как их самому создавать?
>>856685
#496 #856685
>>856655

> SublimeCodeIntel


> Там по-моему нет C


И правда, извини.

> В смысле, обертки?


В смысле, есть много плагинов, у которых внутри бинарник astyle в том или ином виде. Например, SublimeAStyleFormatter, там внутри pyastyle.

> Алсо, сниппеты - это типа как code templates


Ну да. Создавать через Tools->Developer->New snippet, описание http://docs.sublimetext.info/en/latest/extensibility/snippets.html
#497 #856756
Есть одно приложение, которое отправляет DNS запросы. Нужно перехватить момент отправки. Но не пойму, как оно отправляет. Ставлю брекпойнт на send, sendto, WSASend, WSASendTo, gethostbyname - не использует их. Как отловить?
>>856758
#498 #856758
>>856756
getaddrinfo() или, вероятнее, WSAAsyncGetHostByName()?
>>856764
#499 #856764
>>856758

>getaddrinfo


Ох, антоша, тысячи благодарностей тебе.
#500 #856773
Оп, перекатывай давай, хуильник
>>856779
#501 #856779
>>856773
Как скажешь.
Тред утонул или удален.
Это копия, сохраненная 6 ноября 2016 года.

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

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