Этого треда уже нет.
Это копия, сохраненная 18 января 2020 года.

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

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

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

Что читать:

- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- Черновик стандарта ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2385.pdf
- man/Dash/zealdocs

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

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

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

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

Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.

Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).

Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.

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

Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)

Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)

MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard и http://web.archive.org/web/20190213011655/homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf

Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C

Онлайн-утилиты:

- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.

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

- №47: http://arhivach.ng/thread/475391/
- №48: http://arhivach.ng/thread/495505/
- №49: http://arhivach.ng/thread/496205/ >>1500890 (OP)
2 1518953
Юбилейный тренд, всем итт шланг и хороший Линукс дистрибутив за мой счёт
3 1518954
алсо, верните наконец wandbox в шапку.
# OP 4 1518981
>>18953
Юбилейный будет еще через 14.

>>18954

> wandbox


Спасибо, в следующий раз будет.
5 1519065
>>18919 (OP)
Нужно сохранить файл.
Так вот, он сохраняется куда-то в "С:\Documents and Settings\User\Application Data\proga\file.ololo"
А надо его сохранить рядом с папкой, откуда exe запускается.
Так вот, вопрос: как из строки С:\Documents and Settings\User\Application Data\proga\file.ololo получить file.ololo
и как правильно его сохранить так, чтобы путь указать относительный, и относительно папки с программой?
Путь содержится в переменной static char Жpath, где вместо Ж - звёздочка, от которой разметка здесь едет.
6 1519154
>>19065

>Так вот, он сохраняется куда-то


Так вот, ты программист или не туда зашел петушок? Файлы не сохраняются сами куда-то, они сохраняются куда ты написал сохраняться.
7 1519351
>>19154
Я спросил о том, как из полного пути в переменной

>const char ☀path = "С:\Documents and Settings\User\Application Data\proga\file.ololo получить file.ololo";


извлечь только имя файла

>char ☀name = "file.ololo";

8 1519353
>>19351
Ну и как правильно сохранить этот file.ololo в папку, рядом с exe-шником.
То есть, какой путь относительный должен быть у файла?
Ну, там "./file.ololo", или "/file.ololo" или же просто "file.ololo", чтобы оно сохранилось и не выёбывалось мне больше.
9 1519360
>>19351
Ты либо толстишь, либо очень очень очень очень очень тупой.
10 1519393
>>19360
Я только вкатился в этот говнокод. Трудно разобраться что к чему там.
Там столько всего изменили - пиздец просто. Нихуя не пашет и крашится.

Вот здесь где-то ошибку бьёт: https://github.com/uTox/uTox/blob/37dba1af57b0b615abd1c649ba551b21e796a9d0/src/windows/filesys.c#L95
И прога закрывается нахуй, засирая дебаггер.

Оно пытается лезть в "С:\Documents and Settings\User\Application Data\Tox\" какого-то хуя.
В то время как предыдущие версии были portable.
11 1519439
Поясните за юнионы, зачем они вообще нужны? Я понимаю что они делают, я не понимаю зачем, где это может пригодиться?
12 1519499
Почему эта адская херня компилится, как вы вообще живете сишники?
https://pastebin.com/9itmEmmz
Правильно лия понимаю что чтобы строки всегда хранятся в переменных под названием "буфер" на топ уровнях? А так же в одном буфере могут лежать разные типы?
13 1519505
>>19499

>Почему эта адская херня компилится, как вы вообще живете сишники?


Ну так это же не жс, а прокладка над ассемблером, понятное дело что тебя в написании подобной хуйни никто не ограничивает.

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


Да в каких хочешь храни, лол, нет.

>на топ уровнях


В скомпилированном бинарнике конечно в отдельную секцию вынесутся компилятором, но в коде — нет.

>А так же в одном буфере могут лежать разные типы?


Да, вопрос только в том как ты эти типы интерпретировать будешь. Си вообще похуй на подобные вещи, это же ебучий кроссплатформенный ассемблер, для него это всё байтики.
14 1519508
>>19499
И именно на подобной хуйне, кстати, базируется 80% "сливательных" уязвимостей и просто эксплойтов всего, что торчит в сеть (если например запихать туда снаружи нужное кол-во мусора, то можно получить доступ ко всем внутренним данным, или просто внедритьсвой код). Так что ты теперь у мамки хацкер, поздравляю.
15 1519509
>>19439
Ну так иди и реализуй какой нибудь variant тип без них, поймёшь, лол.
16 1519544
>>19439
union ieee754dp {
struct {
__BITFIELD_FIELD(unsigned int sign:1,
__BITFIELD_FIELD(unsigned int bexp:11,
__BITFIELD_FIELD(u64 mant:52,
;)))
};
u64 bits;
};
17 1519559
>>19439
помимо вариадиков, при помощи union ты можешь для одного и того же куска памяти иметь разные представления
к, примеру, можно (зная платформу) разобрать вещественное число на мантиссу-экспоненту или как оно там будет представляться
или к примеру, представить 64 разрядное целое как 2 32х разрядных
или представить пакет в бинарном протоколе как целый кусок памяти или как набор полей
или представить битовое поле как целый набор битов, так и как набор битовых полей
ну, в общем, наверное, уже понял, все такие применения (помимо эмуляции variant)
18 1519576
>>19351

> извлечь только имя файла


strrchr('\\'), strrchr('/'), выбираешь тот, у которого адрес больше, прибавляешь 1. Если оба NULL, то у тебя уже имя файла без директорий. Можешь сделать то же самое циклом, будет быстрее.

>>19509
А в чем проблема реализовать? Просто переменные жирные получатся.

>>19559

> зная платформу


> представить битовое поле как целый набор битов


И потом начинаются всякие -mms-bitfields. Нахуй. Если ты начал полагаться на то, как именно лежат биты в битфилде - у тебя уже проблема, просто ты о ней еще не знаешь.

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


А потом ты такой портируешь свой код на мк (сейчас это модно, IoT всякие), а там выравнивание другое сказал бы про endianess, но PowerPC успешно сдох, и эта проблема уже не так актуальна. Пакеты парсят/собирают исключительно struct.field = get_u32() (руками, наколеночной кодогенерацией или какими-нибудь протобуферами). Если ты делаешь не так, у тебя опять же проблема, об которую ты однажды споткнешься.

Поэтому union - это такая хуйня для экономии памяти, не более. Ну еще можно сжав зубы иногда делать type punning (хотя проще -fno-strict-aliasing и скастить кастом).
19 1519585
>>19576

>А в чем проблема реализовать? Просто переменные жирные получатся.


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

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


Михалыч, ну не хватает мужыкам на заводе работы, ну хуле ты докопался?
20 1519600
>>19585

> ну хуле ты докопался?


Потому что мне недавно дали вот такое:
struct smth {
...
union {
long xxx_offset_in_file; // Лежит в файле.
struct something_else ∗xxx_ptr; // Патчится при загрузке.
} some_field;
...;
};
Эта хуйня записана в файлы (тупо fwrite), формат файлов ломать нельзя, файлы обрабатываются софтом, а софт надо собрать под 64-битную машину (ну 2019 на дворе, пора бы уже). А еще эти юнионы не выровнены. Представляешь, как весело править это говно?
21 1519623
>>19600
А что плохого-то? Считай что создали тебе фронт работы, лол.
22 1519632
>>19576
у тебя пожатые структуры будут, без выравнивания..
которые ты будешь на сетевой пакет накладывать..
23 1519634
>>19576

>Если ты начал полагаться на то, как именно лежат биты в битфилде


для внутреннего представления в программе - норм
понятно что наружу это не должно торчать
24 1519636
>>19576

>union - это такая хуйня для экономии памяти


это стандартная ошибка, считать что union для экономии памяти
не для экономии, а для того чтобы представлять один кусок памяти разными способами
25 1519648
>>19632

> у тебя пожатые структуры будут, без выравнивания


Именно. А потом я их читаю там, где выравнивание обязательное, и ко мне приезжает автобус SIGBUS.
26 1519658
Ну и как форматировать ваши ебаные реаллоки, когда они в 120+ знаков получаются (надо 79)?
27 1519668
>>19658

> надо 79


Ты к нам из 79?

> как форматировать ваши ебаные реаллоки


Считай размер заранее, переноси аргументы в соответствии со стайлгайдом (обычно после переноса либо просто втыкают дополнительный уровень табуляции, либо располагают аргументы ровно под предыдущими).
28 1519710
>>19668

>79


Удобно же. Можно лампово кодить в текстовом режиме 720x400 на ЭЛТ.

>Считай размер заранее


Точно! Как только не пробовал, а эта святая простота в голову не пришла.
29 1519749
Рот ебал ваших макросов с бэкслешами! Вот вам приоритетная очередь, крч...
https://pastebin.com/K1E1VmxT
Пользуйтесь. За три бакса могу сделать, чтоб PQpop реаллокал обратно.
30 1519775
>>19749

> За три бакса могу сделать


Проиграл. Типичный сишник с десятью годами опыта ищет работу в реалиях 2020. Выживаете, дедушка?
31 1519785
>>19775
Ебало свое закрой и катись из треда нахуй
32 1519787
>>19775
Какой дедушка, я вообще зумер почти, лол...
15734968168320s.jpg3 Кб, 200x200
33 1519793
>>19785

>ряяяяяяяя

34 1519860
Ух! Я сделял:
https://github.com/PolazhinetsA/algo/tree/master/huffman
inb4 зачем принес?
- лучше спится после ночного бампа
всем ночникам лампового настроения и... >>18953
мимо присоединяюсь к пожеланиям
image.png40 Кб, 200x200
35 1519871
бляяяяяяя..... это хуета не работает нормально. Чем больше файл, тем сильнее его раздувает после закодирования, а после раскодирования вообще пидорасит не по-детски. 50000 байт еще точь-в-точь восстанавливает, а 100000 уже по бороде. ЧЗХЙНЬСКНХЙБЛДЬ??
36 1519872
>>19871

>увеличивает размер


>не восстанавливает исходные данные


ну чисто анекдот про советскую программу для lossless-сжатия
37 1519874
>>19871
Невозможно с первого раза правильно написать хафмана. Смирись.
38 1519876
>>19871
Впрочем, я посмотрел и слегка охуел:

> rewind(fsrc);


> huffman_encode(stdout, stdin);


> rewind


> stdin

39 1519880
>>19871
Впрочем, я посмотрел еще.

> невозможно с первого раза правильно написать хафмана



Знаешь, чем linked list от дерева отличается? И как это связано с тем, что выхлоп вот этой маленькой, но очень известной программы сжимается неверно, даже если исправить предыдущую проблему?

#include <stdio.h>
int main(void){int a=0,b=1,n,i;for(i=34;i--;){n=a+b;a=b;b=n;while(n--)putchar('Q'-i);}}
40 1519882
>>18919 (OP)
Аноны, подскажите по вопросу.
Как правильно делать проверку переменной на превышение ее максимального значения.
Например длинну массива или некий счетчик.

Я всегда пишу <= >= < >
Но часто в другом коде встречаю ==

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

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

Как правильно то?
41 1520074
>>19880
так, эта штука пишет символы от '0' до 'Q':
'0' - fibonacci1 раз
'1' - fibonacci2 раз
и т.д.
С таким распределением получается
0
01
001
0001
00001
000001
...
Ладно, в худшем случае придется за раз класть больше 32 бит. Я предусмотрел 64, но надо бы 256. Фиксится как нефиг делать, и у меня другая проблема. Делал пресловутый дебаг принтфом, чтоб посмотреть, какие самые длинные коды получались (52). И почему именно первые 50000 байтов из Мартина Идена оно восстанавливает нормально, а если взять 100000 - то пиздос?
42 1520077
>>19876
Да лень было test.c красиво писать. Да, кто-то может не знать, не повесить какой-то файл на дескриптор и попробовать закодировать с клавиатуры.
43 1520078
>>19880
бляяяяяяя, я забыл суммировать веса дочерних узлов))))
44 1520079
Ну ты и дон Хуан, анон. Не кормишь сухой инфой, а чистую пищу для размышлений даешь. Увожение.
45 1520954
>>19787
Пиздуй тогда с борды, 18+.
46 1521021
>>19600

>софт надо собрать под 64-битную машину (ну 2019 на дворе, пора бы уже)


Это не причина, а долбоебизм и вредительство - ломание работающего без причин и имитация деятельности этим якобы переписыванием.
47 1521068
>>20954
я сказал

>почти


зумер 20-, я 20+
48 1521205
Анон, можно ли попросить ваш ебучий прекопроцессор логать всякую хуйню в процессе сборки?
49 1521222
Бляяяяяяяяяяяяяяяяяяядь!!!!!!!!!!!!!!!!! Какого хуя __stdcall не декорирует имя процедуры ja_pidoras(int,int) суффиксом @8? Рот ебал это хуйни, тушите мой пердак аноны суканахуйблядь..
51 1521264
>>21205

> прекопроцессор


Не знаю такого слова, но подозреваю, что ты хочешь сс -E.

>>21222
Ну мы-то откуда знаем? Пример тащи, рассказывай, какой у тебя компилятор и т.д. Может у тебя 64-битный код вообще, а ты ему __stdcall пихаешь.
52 1521273
>>21264
Под 32 бита все прекрасно компилилось и работало, а под 64 - хуй!
53 1521275
>>21264
бля, я долбоеб по ходу
54 1521282
>>21264
Все таки тихий час - чудодейственная мера. Там ведь библиотека только в собранном виде уже, а я когда инструментами 2008-й студии компилировал и линковал с ней, все было норм, но на 10-ке работало только в режиме совместимости (оно winsock юзает), и я в ответ на эту жалобу от пользователя решил поступить радикально, поставил на ноут 10-ку, инструменты сборки от новой студии и прописал путь к компилятору с целевой архитектурой x64. Пиздос. А ведь между XP и x64 огромная пропасть, в которой еще ой как много места для x32. Пиздос я кретин, только сейчас это осознал. Всем добра.
55 1521293
>>19505

> для него это всё байтики.


То есть char это основная единица в C? Но ведь существуют только 256 битовых масок для одного байта, то есть можно получить всего ничего букв. А где в комплюктере можно поглядеть какой букве какое число соответсвует? То есть если инт состоит из 4 байт, а в байте у нас три десятичных разряда, то в инте 3x4 десятичных разряда, то если
456 789 987 899 какой либо инт,
из него можно выслюнить 4 char (456, 789, 987, 899) ?
56 1521308
>>21293

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


Компьютеру по большей части похуй. Как запрограммируешь - так и будет. Где и как лежат кодовые таблицы - зависит от ОС. Но у нормальных людей уже юникод давно, юникод смотрят на unicode.org (если хватит усидчивости, чтобы продраться сквозь тысячи страниц стандарта).

> то в инте 3x4 десятичных разряда


Десятичные разряды неудобные, поэтому 32-битный int представляют как 4 char (даже в сишке есть распространенное расширение под это: char c = 'A'; unsigned int x = 'ABCD').
57 1521325
То есть с помощью инта можно закодировать строку из четырех символов?
58 1521361
>>21325
Строку из трёх символов. наверное
59 1521363
А под парсером итт подразумевается вот это вот
c = getchar ();
//
/
/
которое всё в ассемблер переделает или что?
60 1521374
>>21308
Думаю, без расширения можно:
int64_t istr = ∗(const int64_t ∗)"pidoras";
И потом передавать куда угодно без всяких выстрелов в ногу и медленных копирований. А распечатывать так:
puts((const char ∗)&istr);
61 1521379
>>21374
Это не константа, а 'ABCD' - константа.
62 1521380
>>21379
Сортировать на Little Endian неудобно, кстати.
63 1521405
>>21380
Просто сохраняй/загружай символы соответствующим образом.
64 1521406
>>21405
Но это не круто.
65 1521407
>>21405
Хотя с короткими строками один хрен быстрее поразрядная сортировка подсчетом, а не дженерик хуита с operator<...
66 1521424
Аноны, мне тут интересно стало за RAR-архивы. Насколько я понял, сама магия сжатия является секретом фирмы, и опенсорснут только алгоритм декодирования, чтоб пользователи платформ, до которых не дотянулся компилятор разрабов, могли хоть существующие архивы распаковывать. Однако сказано, что этот опенсорс нельзя использовать в целях реверс-инжиниринга заветного сжатия. Вот мне любопытно, как это контролируется. Ведь если таки взломать тему и выдать за собственную разработку, то варианта два: либо WinRAR соснули, либо защита интеллектуальной собственности действительно жесткая, и тогда даже случайно изобрести то же самое нельзя. Но всякие алгоритмы - это целая научная дисциплина, которая в теории способна вскрыть целое множество возможных алгоритмов, и ее не заставишь обходить интеллектуальную собственность, как слепые пятна. Разработал, продал, красавчик, но пора и честь знать, ты ведь не из каменного века все это развил, сам небось юзал достижения дедов, как миленький, вот и свое, будь добр, в достояние общественности, так сказать... А я че спросить-то хотел - неужели никто так и не хакнул? Быть может, ты анон? м?? м??? м???? Или, как вариант, где-то существует сжималка, превосходящая RAR в одни ворота, и на последний знающим людям давно похуй.
67 1521425
>>21424

>А я че спросить-то хотел - неужели никто так и не хакнул


Неуловимый Джо. Нахуя это делать?
68 1521427
>>21424

>магия сжатия


Иагия хуяьия, он не намного лучше зипа
69 1521442
>>21406
Зато кто-то посмотрит в твои строки, а там "DCBAHGFEQLKJI...". Это само по себе немного круто.
70 1521451
>>21427
Намного лучше. Хотя бы тем, что любые архивы не из DOS поддерживают юникод, то есть все. А zip всё еще какашка, корраптящая имена файлов. И это в 2020 году, пиздец, интернету уже 20 лет, а zip всё еще говно говна из каменного века. Да, я знаю что теперь пропатчили, но уже поздно, слишком поздно, мир засран кривым zip дерьмом так что уже не вычистишь.
71 1521453
Сегодня пол дня ебался с тем, что не мог писать в массив (писать то писал, но оно мне возвращало нули) который я статически объявил в хеадере. Где можно почитать про все этого говно чтобы настроить себе понимание как и куда я могу домогаться до данных в программе.
72 1521455
>>21451
ну ты и соня, тебя даже LZMA не разбудил
73 1521456
>>21455
При чем тут я? Ты качаешь из интернета rar и ты уверен что с ним всё в порядке. Ты качаешь zip и нет никаких гарантий что файлы там не попорчены, это русская рулетка. Zip зашкварен, им попросту нельзя пользоваться, т.к. нет никаких гарантий что все пользуются правильной его версией с правильными флагами.
74 1521457
>>21424

>где-то существует сжималка, превосходящая RAR


zpaq
Си для прграммистов.7z.png2,8 Мб, 300x420
75 1521459
>>21453
Вот тут прочитай.
76 1521473
>>21459
int main() {
const char suit[4] = { "Hearts", "Diamonds", "Clubs", "Spades" };
printf ("suit[2]= %s\n", suit[2]);

printf ("
suit= %s\n", *suit);
return 0;
}

Подскажи почему printf ("suit= %s\n", suit);
printf ("&suit= %s\n", &suit); эти двестроки не выводят ничего.
77 1521474
>>19882
Ап, вы охуели, не отвечать.
78 1521476
>>21453
код в студию
79 1521478
>>21473
потому что
const char suit[4] = { "Hearts", "Diamonds", "Clubs", "Spades" }
не совсем верно
80 1521504
>>21476
спасибо, я уже вкурил
тк переменная обьявлялась как static в хеадере, то каждый исходник, импортирующий его имел собственную его копию с одним именем.

теперь мне интересен вопрос по поводу возвращаемых данных, удобно чекать успешность выполнения через логику, те возвращать какой-либо значение отличное от null и 0. то что main() возвращает ноль - так сложилось исторически?
81 1521510
>>21478
у него астериск макаба съела
82 1521541
>>18919 (OP)
Есть тут си-синьоры? Смотрите какая вакансия: офис в Черногории, 10 минут от пляжа, зп 3к$ в месяц.
https://moikrug.ru/vacancies/1000054559
83 1521546
>>21510
Что ты имеешь ввиду? Я к тому что массив чаров это одна строка, он же пытается сделать массив массивов. как то можно это сделать таким образом?
84 1521548
>>19882
Студень, ты задолбал! Иди лабы делай.
85 1521622
>>21548
Кек но я деньги этим зарабатываю. Подрыв на 3... 2... 1...

Я вообще серьезно спрашиваю.
86 1521629
>>19882

> ==


Это правильно. Почему? Гугли.
87 1521633
>>21546
Там звёздочка перед suit[4] , это пример массива указателей из Дейтелов. пробовал значение указателя получить.
88 1521634
>>21629
Я хз как правильно и коротко вопрос сформулировать. Кинь ссылкой хотя бы.
89 1521643
Ау, пацанва, АУЕ
https://pastebin.com/6Bw8rn6d
Чому значение failtobig всегда -24?
90 1521679
>>21643
Тому шо в char помещается цифоры от -127 до 127. Твоя тыща прогоняется по этому диапазону начиная с нуля и останавливается на -24.
56223562.jpg40 Кб, 720x408
91 1521873
Привет, хороший тред.
Поскольку я на си вкатился со скриптовых языков, у меня в голове закрепилась привычка что рантайм в случае чего потом потычет в то место где что то не так. Когда особенно много изменений в код вношу и внезапно программа начинает падать, просто теряюсь, но помаленьку мне вносить изменения тоже некомфортно.
Можно ли какимнибудь дебагером эти драные нульпоинтеры отловить? Потому как остальное вроде как при компиляции отлавливается, особенно с -wall в llvm.
92 1521965
>>21873
дели модули, пиши тесты
93 1521998
>>21873
разрезай приложения на функционально отдельные части, для удобства контроля промежуточного состояния данных. ну и используй дебагер - все нормальные иде могут дебажить искоробки. если работаешь много с кучей - юзай valgrind
94 1522056
>>21873
Рекомендую научиться в https://github.com/google/sanitizers/wiki
95 1522452
Народ, возвращаюсь к Си, давно его изучал. Ничего если я некоторые места в К&R пропускаю, там программы большие, просто лень их смотреть, лучше написать что-то свое. После КР планирую начать прату, и хочу написать какой-то свой проект. Все это делаю для того, чтобы начать изучать реверс инжиниринг. Все нормально у меня или нет?
96 1522532
>>22452
странный вопрос. начал изучение С лет 8 назад, за это время написал игру на спектрум (sdcc+asm), реверсить что-либо желание как не было так и не появилось.
97 1522648
>>22532
Может быть дашь совет какой? Как вкатиться в низкоуровневое программирование? Нравится СИ, вот теперь пересматриваю главы КР 4, чтобы хорошо все запомнить про области видимости, связывание и т.д. (курс на степике прохожу). Куда дальше двигаться, какие проекты писать? Какие проекты на Си написать, чтобы так сказать, был норм уровень, и можно было переходить к ассемблеру?
98 1522664
>>21873

>Поскольку я на си вкатился со скриптовых языков


В си надо вкатывать с архитектуры процессора и ассемблера.
99 1522668
>>22648
Напиши кернел
image.png11 Кб, 602x233
100 1522685
Кому тут Си сложный? Для вас стараюсь, посоны...
https://pastebin.com/Ve1TnrFL
101 1522710
>>22685

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


> #


Fail

> error: macro names must be identifiers


Fail
f3c28fef4f.jpg153 Кб, 560x452
102 1522725
>>22664

> В си надо вкатывать с архитектуры процессора и ассемблера.


Что бы уверенней использовать запрещенные стандартом языка приемы и завязываться на архитектурно зависимые хаки?
Может в каком то ограниченном и архитектурно-зависимом коде это и допустимо, но во всех остальных случаях я бы предложил всем таким людям питаться путем прокачивания еды через трубочку введенную в анальное отверстие, ведь та самая дырка, в отличии от первой которая загружена еще и дыханием, большую часть времени все равно тупо простаивает, а архитектура организма вполне позволяет ее задействовать для подкачивания питания в желудок параллельно.
103 1522872
>>22725

> Может в каком то ограниченном и архитектурно-зависимом коде это и допустимо


Когда подрастешь, ты узнаешь, что весь сколько-нибудь сложный код на Си напрочь непереносим. В лучшем случае непереносимые части лежат в отдельной либе, но они обязательно есть.
104 1522882
>>22710
Пушто CLANG конпелятора здорового человека, а не ваши эти GCC тьху блядь накатят и ябутся потом..
105 1522913
>>22648
для начала ответь себе на вопрос - зачем?
106 1523016
Есть какие-то адекватные практики для написания модулей с дженерик алгоритмами, которые принимают обработчик/предикат - типа лямбду, чтоб эта самая лямбда не была указателем на функцию и не вызывалась по 100500 раз, гоняя стек как дрочер в кустах, а инлайнилась? Очевидно, сам алгоритм должен компилиться отдельно с каждым исходником, юзающим его, то есть находиться в заголовочном файле, а стало быть самому являться inline, чтоб линкер не охуел. Сам прибегал к дефайну перед инклудом, типа макрос-обработчик, но это какая-то лютая дичь, к тому же в одном коде не получиться дважды с разными типами данных использовать. Писать еще и сам алгоритм макросом - какой-то оверкилл, хочется все таки компиляторной семантики, а не препроцессорной. Можно пойти дальше и предусмотреть несколько версий:
#ifdef YOBA_ALGO_CMP_1
inilne void yoba_algo_1(...) {...}
#endif
#ifdef YOBA_ALGO_CMP_2
inilne void yoba_algo_2(...) {...}
#endif
И так далее. Содержимое фигурных скобок идентично, тоже какими-то дефайнами можно его штамповать. Но это же лютая дичь.

Есть мысля, что для бытовых задач сойдет и производительность с вызовами функции, зато чистеньким интерфейсом, а для конкретных сложных высоконагруженных задач все вспомогательные структуры данных реализовывать эксклюзивно, монолитно с основным кодом, не претендуя на реюзабельность этой хуеты, абстрагированной математически, но не технически. Но ведь чувствуется, что вот она, заветная универсальность, всего-то пары синтаксических ништяков не хватает, эх... дискасс.
107 1523017
>>23016

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


она всегда сойдёт. не знаю таких ситуаций когда CALL-RET был большой проблемой. на старых системах это ещё и выигрыш в размере кода.
108 1523022
>>23017
ну, я бенчмаркал, норм так в пару раз скорость выросла, как захерачил инлайнами все
109 1523025
>>23017

>на старых


Противоположность актуальных же. Где-то у Таненбаума читал, что узкие места смещается то в сторону гигагерцев, то в сторону гигабайтов. И вот в наше время предпочтительней загрузить память, которой жопой жуй, инлайнами и прочей векторизацией, чтоб процы, которые бедняжки уже давно уперлись в потолок по тактовой мощности, смог задействовать все свои альтернативные законы Мура вроде первых кешей, конвееров, хуееров и т.д.
110 1523026
>>23016

>а для конкретных сложных высоконагруженных задач


Каких конкретно? Или конкретно напиздел?
111 1523029
>>23016

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


Самое адекватное. Смотри например gnu scientific library. И с типами спокойно используется.

//yoba.inc
inilne void yoba_algo_##YOBANUMBER_##YOBATYPE(...) { if (YOBAPREDICTATE) }

//yoba.h

#define YOBANUMBER 1
#define YOBANUMBER float
#define YOBAPREDICATE(a,b) ((a) < (b))
#include "yoba.inc"
#undef YOBAPREDICATE
#undef YOBATYPE
#undef YOBANUMBER
#define YOBANUMBER 2
#define YOBATYPE double
#define YOBAPREDICATE(a,b) ((a) > (b))
#include "yoba.inc"
#undef YOBAPREDICATE
#undef YOBATYPE
#undef YOBANUMBER

Еще лучше конечно взять С++
112 1523054
>>23022
и что ты бенчмаркал? звучит как разница зависящая от компиляции и позиции солнца в системе - загрузки её другими процессами. давай конкретный воспроизводимый пример.

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

хотя этот тезис я слышу давно, что больше писать давно выгодней. ну хз, я не упираюсь в своих задачах в это.
113 1523075
>>22913
Меня трясет от новых стандартов с++, языков высокого уровня. Я чисто для себя, вот
114 1523102
>>23075
Тебе шашечки или ехать? Меня вот тоже от с++ ажтрясет, особенно от его перегруженности. Я си ковыряю только для хобби поделок, тк что-то серьезное на нем не написать, а для решения личных нужд он не подходит - питон лучше. Если ты хочешь связать с этим свою профессию - дрочить Си тоже не вариант, рынок узкий, вакансий мало, а поработав с любым динамическим языком/удобным статическим (например go или шарп) ты поймешь что нюансы этих языков не значительны на фоне знания фреймворка, и зная один можно с минимальными усилиями перекатываться в другой. Так что просто определись что ты в итоге хочешь получить от языка и нужно ли тебе вкатываться в низкоуровщину или хватит просто тыкать ее палкой для петпроектов.
115 1523167
>>23054

>давай конкретный воспроизводимый пример


Да мне уже неловко как-то свою хуиту светить.
https://github.com/PolazhinetsA/lzwarc
Короче, скармливаю этому говну 212-мебагабайтовую оффлайн версию HTML-справочника по стандартной библиотеке C++ (cppreference.com), оно сжимает до 75, и после того, как захерачил всю хеш-таблицу инлайнами, стало делать это не за 10 сек, а за 5. Вот прям стабильно.

>от позиции солнца в системе


Ровно первый раз. Потом все, что надо, уже в нужных кешах, и жесткий диск перестает быть узким местом.
116 1523340
buf = (char*) malloc (100 байтов);
и
char buf[100];
это абсолютно одно и тоже, да?
117 1523344
>>23340
Нетъ
118 1523345
а мемсетом можно насиловать const char?
119 1523388
>>23340
1 хранится в куче, 2 в стеке
120 1523494
>>23340
const можно сбрасывать, если значение не optimized out
121 1523808
>>23167
прикольно. только я пока не могу скомпилировать без ключа оптимизации. и у тебя варнингов столько, и это ещё без флагов. зачем ты ставишь перед аллоками конкретный тип, если присваиваешь другим типам? тогда уже присваивай к void@
122 1523811
а ну да, вот ещё почему я не использую inline https://www.greenend.org.uk/rjk/tech/inline.html
123 1523824
>>23808

>без -O3


Потому что я поскупился продублировать инлайны из htbl.h для линкера, а без оптимизаций конпелятор такие продвинутые пожелания не выполняет и херачит вызовы.

>каст маллоков


Где конкретно? В макросо-реализованных расширяемых структурах данных с заголовочными интами по отрицательным индексам - для арифметики указателей. Типа, выделил память начиная с этих интов, но взял указатель уже на однородный буфер, что парой слов дальше, ведь к элементам чаще обращаешься, чем к контрольным счетчикам.
124 1523825
>>23811
Ну, я и не хотел их юзать, пока не попробовал и не увидел значительную разницу в скорости. Именно htbl прям стопицот раз/нсек дергается. Не критичные вещи там чистенько по-отдельности идут, с инкапсуляцией (typedef в .c, void в интерфейсе) - так, чтоб потом эти ништяки в любой другой проект стащить можно было.
125 1523826
>>23824

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


он вообще не соберёт проект. ты правила не знаешь, проставь везде static inline .

сегфаулт словил когда сжимал glext.h
lzwarc a ./tmp/arch.lzw ~/dwn/glext.h

компилировал на cygwin32.

./lzwarc x ./arch-inline.huff ./html_book-e.tar
а вот это выдало файл с названием html_book-e.tarhtml_book.tar
126 1523827
вот тебе glext.h https://dropmefiles.com/p22wj
127 1523829
Сука, на днях думал запилить двухплатформенность, запилил ifdef-elif-endif(__linux__,_WIN32) хедер с обертками для pthread_create/_beginthread и т.д., сделал мютексы, добрался до condition variable и подгорела жопа. Почему Microsoft такое говно??? Почему всякие CRITICAL_SECTINO, SRWLOCK, всратые названия функций, которые без автодополнения заебешься печатать??? Почему не предусмотрели использование обычных няшных универсальных мютексов в атомиках ожидания cond.var? По ходу просто выпилю многопоточность, ебать бы и ебать для виндоблядей стараться...
128 1523830
>>23826
дык оно ж не умеет в тары, оно только свои)
>>23827
у меня все норм, сжимает в добрых трое
129 1523832
>>23829
Пиши на C++
130 1523833
>>23830

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


какая разница, это просто файл. я думал можно один файл запаковать, а потом распаковать со своим именем.

>>23830

>у меня все норм, сжимает в добрых трое


я кажется понял что я там повредил.
131 1523834
assert'ы бы проставил. забыл в ините назначить каллбеки.
image.png156 Кб, 814x872
132 1523835
>>23832
Неделю назад переписал на C++, но, не поверишь, только что, вот прям перед этим скрином психанул, взял и rm -rf cpp. Пофиг, она неактуальная была.
>>23833
Аа.. по скрину не понял, в чем прикол.
>>23834
htbl_init? Так там вместо каллбэков макросы перед инклудом. Лямбды через конструктор - на случай использования в менее замороченном и более красивом коде.
133 1523836
>>23826

>./lzwarc x ./arch-inline.huff ./html_book-e.tar


>а вот это выдало файл с названием html_book-e.tarhtml_book.tar


А, ну все правильно, там задается папка назначения, а не имя выходного файла. Ведь файлов в архиве может быть много, они со своими именами распаковываются. А слитно, потому что путь назначением со слешем в конце писать надо. Да, у меня с автоматизацией всех этих пользовательских нюансов вообще тьма-тьмущая, даже вскрывать не стоит)
134 1523837
>>23833
Там еще кое-какие пояснения в комментариях в arc.c - можно не разбираясь в коде все серое // глазами собрать.
135 1523839
Спокойной ночи, анон. Надеюсь, перепилишь по всем правилам и продашь за 300кк.
136 1523840
>>23839
да я тебе патч с тестом дам. хотя я уже вижу разницу всего в 114 на 101 секнд. щас сделаю сборку без каллбеков но и без инлайнов, и думаю, будет тоже что и с инлайном.
137 1523844
>>23840
Думаю, с одним большим файлом не должно быть такой разницы, как с множеством маленьких, потому что словарь до 2^14 забивается и отпадают обращения к хеш-таблице по поводу добавления.
138 1523851
>>23836

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


Типичная олимпиадная пердоля. Даже с командной строкой обосрался сделать нормально, что уж говорить про графические интерфейсы. Вот почему линукс говно и останется говном вечно.
139 1523857
>>23844
этот файл:
https://en.cppreference.com/w/File:html_book_20190607.zip
я его распаковал в ~/dwn/html_book/ и сделал ~/dwn/html_book.tar из содержания

в папке с проектом:
sh ./test.sh ~/dwn/html_book.tar
sh ./test.sh ~/dwn/html_book/

результат1 (cygwin32 на win7 ноуте с отвалом гпу. я плакал когда гонял на нём тест 3тий раз а он издавал истошный гул): https://pastebin.com/R90zydMM

результат2 (lubuntu32): https://pastebin.com/H5jwGHGj

патч: https://pastebin.com/a5cMBvS7

и того:
да хз. разница не значительна, как по мне. не понятно, будет ли она на больших числах увеличиваться. мне кажется тебе лучше задуматься, почему у тебя один файл кодируется в 2 раза дольше и сжимается в 2.5 хуже, чем сотни. я бы вообще не делал поддержку многофайловости - для этого есть tar.
140 1523861
но, разница есть - что-то там работает. наверняка что-то можно переделать.
141 1523862
можно ли из сей (clang) достучаться до гпу?
143 1523877
Довольно давно пишу на Си, но философскими вопросами начал задаваться не так давно.

Понимаю, что в Си нет конкретно понятия "модуль", но всё же хотелось бы понять с философской точки зрения структуру современного приложения на Си с высоты птичьего полёта. Как вообще в этом разобраться? Хотел скачать книжку Си в 21 веке на русском, но петухи поудаляли все ссылки с Вконтакта. Может есть у кого?

Есть ли какие-то принципы типа "Один .c файл - одна ответственность" для Си? Есть что-то типа SOLID для Си?
15682768829290zip.jpg2,7 Мб, 300x420
144 1523920
>>23877
Посмотри эту
145 1523938
>>23877

>современного приложения на Си


На ноль не делишь?
146 1523958
>>23938

Нет, на нем же продолжают писать.
147 1523995
>>23877
Посмотри, как большие опен-сорсные проекты устроены. Блендер, например, или старые версии инкскейпа (до портирования на кресты).
148 1524006
>>23995

А у них есть какие-то документы описывающие архитектуру? Читать миллиарды кода не хочется, хочется взглянуть в целом, с высоты.
image.png167 Кб, 480x360
149 1524019
>>24006

>с высоты


у нас новый мем?
150 1524028
>>24006

>А у них есть какие-то документы описывающие архитектуру? Читать миллиарды кода не хочется, хочется взглянуть в целом, с высоты.


Есть, но придется поискать по сайту. Плюс там обычно не вся архитектура, а какие-то отдельные куски. Да и код обычно не такой уж и сложный, можно за пару дней общее представление составить.
151 1524160
>>23958
Современные приложения? Серьезно? Какие например?
152 1524185
>>24160
обайтоебливание bmp-картинок с ватермаркой "laba2_2019"
153 1524189
>>24160

Работа с аудио и видео.
Работа со всяким компьютер виженом.
Низкоуровневая работа с сетью.
Создание утилит для Линукс.
Да ты ахуел такие вопросы задавать? М? :3
154 1524201
>>24160
Хард реал тайм, где запрещено динамическое выделение памяти. Навигационное оборудование, управление всякими рулями и тормозами, искусственные водители ритма сердца, вощим все от чего зависит твоя жопа ирл.
155 1524204
>>24201
Твой водитель ритма на сишке упадет с переполнением стека
156 1524208
>>24204
Какой стек, там 99% переменных - глобальные. Тот еще говнокод по сути, но по другому нельзя.
160 1524389
Что лучше зайдет для изучения сишечки: дейтелы или стивен прата?
161 1524393
>>24389
Эскобар
162 1524399
>>24389
Очевидный страуструп
163 1524407
>>24399
Хуяуструп. Вы ошиблись тредом.
164 1524432
>>24208
Такое легче в класс обернуть и все.
165 1524437
>>24389
чтение K&R c выполнением всех упражнений, обязательно несколько раз перечитать приложение где описана спецификация языка
166 1524439
>>23877
компонентно-ориентированное прогаммирование, работа через интерфейсы (com, gtk..)
167 1524446
>>23016
а попробуй на крестах
там есть, к примеру, обобщенные лямбда-функции, которые инлайнятся (при включении оптимизирующих флагов компилятора, само собой)
вдобавок ты всегда это сможешь контролировать просматривая ассемблерный листинг (даже онлайн godbolt)
да и обобщенный код приятней писать на шаблонах, чем на макросах
но я не настаиваю, и не ради холивара это написал
168 1524448
>>23857

>патч


Ой, чувствую себя обезьяной. Я и свое-то добро заливаю через кнопку upload, потому что github перестал водить за руку, что в консольке прописать, при создании репозитория. А это вообще хз, как юзать.

>задуматься


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

>для этого есть tar


Дык мне интересно все в комплексе пилить. Так-то без 10 лет опыта, квадратных очков и тельняшки вообще кроме велосипедов мало что сделаешь.
169 1524449
>>24446
Да кресты вообще вкусная штука, позволяет на двух стульях сидеть: и синтаксический сахар со всякими автоматизациями, как у сверхвысокоуровневого языка, и как на сишечке пишешь, где надо. Но у меня пока вкус до чистой Сишечки.
170 1524452
>>24449
попробуй тогда через реализацию интрузитивных структур данных сделать, это позволит реализовать adt без макросов..
15741161729290.png122 Кб, 316x320
171 1524456
Решил написать пару трей куевин для мониторинга на сишном гтк и какой же ебаный пиздец
Работающий раньше в <3.14 функционал полностью помечен как депрекейтед, какая-то часть вообще пидорнута и нужно ролбечиться
На замену добавлен очередной велосипед связанный вообще с уведовлениями, где трей икон это седьмая вода на киселе и вообще ненужно. Еще и анально прикручено к дбусу

Я что-то делаю не так или тут и в правду полемеры проебаны и проще перекатиться на плюсы?
Мимо веб макакич
172 1524458
>>24456
GTK это обоссаный кусок говна.

QT и кресты это стандарт индустрии нынче
173 1524460
>>24458
Ибо нехуй. Напрямую через WinAPI ебашить надо. А под Linux отдельную препроцессорную ветку писать X11.
174 1524468
>>24460
я бы взял тупо sdl.
175 1524469
>>24460

>Напрямую через WinAPI ебашить надо.


Лучше в сибилдере кинуть компонент мышкой на форму, клик, пык, и готово. С винапи можно баловаться если твоя программа уже написана на msvc, тогда уже деваться некуда. А линуксовые либы вроде qt и gtk на винде это как кушать шваброй через жопу.
15741226219940.jpg15 Кб, 400x400
176 1524474
Раз тема про гуи развилась продолжу свой блог

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

Сначала было лень заморчаиваться и пошел ковырять JS
Вспомнив 200мб рам хромиум врапперах и ограниченном системном интерфейсе понял что затея так себе

Питон не люблю но попробовал и его
Накатив бинды на бинды биндов ffi я ибу что
Написал первый хеллоуворлд, скомплюклировал, рам все равно каким-то боком жрало 40мб+
Не люблю питон и решил просто катиться дальше

Поднимаю штангу DSLы в две строчки
Qt5 бинды отсутствуют, приходится пердолить GTK
Вдруг выясняется, что нужно писать свои сишные структы и прочий пездец разворачивая забинженные объекты в фп пердоленье и обратно
Нашел бинды повыше, поковырял формочки но нужным мне systemtray отсутствувал

Решил попробовать С, заодно разобраться в этих поентерах маллоках и прочей куйне
Опять какой-то пиздец с GTK, что указал выше

Похоже выучить кресты - самый простой вариант
177 1524475
>>24458

Qt вроде бы какому-то наебизнесу продали и он ВСЁ. Или это уже устаревшая инфа?
178 1524495
>>24474
вообще, по странному случаю вспоминаю подкаст слушал, там обсуждали это проблему. как не странно, но говорят на дельфи можно норм накросплатформить на эту тему.

а ещё wxWidget и что-то там ещё они упоминали, не помню уже...
179 1524506
>>24448

>А это вообще хз, как юзать.


сохрани в файл. пропиши в гит-директории
git apply путь-до-патча

>Дык мне интересно все в комплексе пилить.


ну, если тебе интересно. я таким способом так ничего и не написал. а только когда начал себя ограничивать.
180 1524521
Анон, который делает трехмерные медицинские приложения тут?
181 1524528
Анон, помоги из оп пика
allocbuf + ALLOCSIZE - allocp >= n
как мы принтер сравниваем с интом?
182 1524551
>>24528
А я понял,если из поинтера вычесть поинтер, то ответ будет количество элементов мнжду ними. Пипец
183 1524565
>>24551
че за поинтер
184 1524570
>>24565
указатель
185 1524608
>>24474
под линуксом? какой de? у каждого de есть не одно приложение, которое позволяет кастомизировать трей, всего лишь пиша высокоуровневые скрипты.. вплоть до однострочников на баше..
186 1524612
>>24608
Сижу на ш3 и знаю про блокс и тд
Хотелось что-то все-таки накодить и может допилить в будущем билдер таких треев
Скопировал хеллоуворлд Qt5 C++, уже допердолелся до парса первой нужной страницы
Доволен как слон
187 1524646
>>24474
Проще взять что-то легковесное вместо GTK.
Если нативные компоненты не нужны, то:
https://github.com/ocornut/imgui
Если нужны, то:
https://github.com/andlabs/libui
А вообще мелкий гуй лучше на Tck/Tk делать.
188 1524666
>>24646

>Tcl/Tk


А вроде неплохо, выглядит полегче WinAPI. Осталось понять, как вообще использовать.
Мимо
189 1524690
>>24646

> А вообще мелкий гуй лучше на Tck/Tk делать.



Не лезь туда няшечка ты кавайная
Она тебя сожерт же, почто ты ...

> puts ААААаааааААаааааааа

190 1524691
Не ну сам по себе Tcl нормальный, но Tk ... Как будто в 90-е попал. Ебаш уж сразу под голый XWindow.
191 1524786
>>24612
если чего то "хочется накодить" то пишешь програмку на си которая будет тебе выдавать инфу по нагрузке на впски в cout, настраиваешь i3status чтобы он подхватывал эту программку и все
вторая програмка будет выдавать твои балансы со счетов, также в cout
НО непонятно зачем, имхо скриптовыми обвязками (которых полно в i3status) либо заменами i3status можно это быстрее сделать
192 1524789
>>24786
или возможно тебе будет удобней выводить информацию не в строку, а вообще иметь системный монитор на экране, тогда и вообще надо conky настраивать
193 1525081
>>24646

>imgui


Прикольная тема. Можно делать окошки интерфейсов прямо в играх с полноценной графикой, и я не заметил тормозов даже на старом ноутбуке.
194 1525415
Пацаны,я ебал,подкиньте идей каким способом найти определить матрицы выраженной блядским бинарным деревом
195 1526092
Вычитал что linux гораздо лучше подходит для программирования на Си чем Виндовз и установил Линукс Минт. Что то пошло совсем не так. Я думал поставлю Clion прокликивая кнопочки далее, в автоматическом режиме там всё найдётся, со всем состыкуется, интегрируется и вот это вот всё и я буду сидеть да прогать свои хелловорлды. Но нет. Оказалось надо поставить cmake, надо поставить gdb, надо поставить libc6-dew и потом я обнаружил что Clion справляется с хелловорлдом, а вот с вычислением квадратного корня уже не справляется. Не знает что такое sqrt() и оказалось что дело даже не в Clion, набрал код в текстовом редакторе, запустил на выполнение консольной командой и ошибка
/tmp/cch0LAjo.o: In function `main':
main.c:(.text+0x4f): undefined reference to `sqrt'
collect2: error: ld returned 1 exit status
(строка #include <math.h> в наличии)
Что это за нахер вообще? Чем же линукс лучше виндовз в контексте программирования на си?
196 1526095
>>26092
Тем что ты юзаешь gcc/make/smth из консоли и добавляешь -lmath
197 1526097
>>26095
И так вот для каждой потребовавшейся мне в программе библиотеки?
198 1526100
>>26097
Нууу, почти.
Стандартную же библиотеку он не требует явно, потому что gcc несколько более интеллектуален в отношения с ld, чем ты.
199 1526107
>>26100
В любой IDE под Windows достаточно всего лишь указать подключаемые библиотеки в самом коде программы, который ещё и проверяется как минимум на синтаксические ошибки и запускай программу на здоровье. А тут пердолинг какой то
В Clion установленной в Windows были непонятные мне и не работающие в Windows опции: профилировщик, валгринд мемчек, чего-то там с гитхабом. Я ожидал что в линуксе это всё заработает само собой, а в итоге получил что теперь данная IDE без пердолинга с терминалом реально ничего сложнее хеллоуворлда не пишет
200 1526109
Ладно, хрен с ним с Clion. Я думал в линуксе присутствует некая стандартная IDE для языка Си, из палаты мер и весов, отполированная десятилетиями, но и тут я оказался неправ. Сразу два проёба, никакой золотой IDE нет и Clion установить в Линуксе оказалось сложнее чем в Windows
201 1526110
>>26107
Я не знаю, попробуй начать свой путь самурая с С, а не с IDE.
Разберись, что делает препроцессор, что компоновщик, а что на твоей совести.
202 1526119
>>26110
Но команды терминала к самому языку не относятся
203 1526124
>>26092
Так ты ставь генту, а не коляски для домохозек.
204 1526155
>>25415
Хелп,плиз
205 1526158
>>26124
LFS же.
206 1526175
>>26158
Нудно, да и ничему тебя не научит, кроме копипаста команд.
207 1526241
>>26119
Команды терминала всего лишь отображают этапы сборки проекта, что в свою очередь относится к знанию языка. Ну, то бишь, знание, как это все конпелируемое работает, есть мастхев именно для Сишника.
Selection011.jpg8 Кб, 310x93
208 1526293
Задачка на ночь.
Правильно ли работает эта функция?
Selection012.jpg13 Кб, 423x116
209 1526295
>>26293

Не ожидал что будет так мелко. Вот покрупней.
210 1526367
Утром иду на лекцию Брайана Кернигана(один из авторов всем известной книжки). Какой вопрос ему задать?
211 1526418
>>26367
хуйцы сосал, бочку делал?
212 1526434
>>26367

>Какой вопрос ему задать?


Что он думает о современных ЯП и смузихлебах?
213 1526435
>>26367
Нравится ли ему борщ.
image.png26 Кб, 592x297
214 1526462
https://pastebin.com/9yrr5X56

Почему это ебаное программирование такое? Почему после вывода одного символа - идёт всё по пизде.
215 1526511
>>26462

>Почему это ебаное программирование такое?


Потому что в него лезут дебилы.
216 1526523
>>26462
Скажи спасибо, что сегфолт не выдает.
217 1526541
>>26511
Си это ебаный язык для ёбнутых, меня знакомый попросил задачку решить а я не могу заставить это дерьмо из функции массив символов передать нормально.
218 1526557
>>26295
Да, не могу найти наёбку.
219 1526563
>>26462

BLYAD - это имя локальной переменной, которая содержит в себе адрес первого элементам массива, память под который выделена в стеке. Функция SUKA завершила своё работу и пямять, которую занимали её локальные переменные в стеке - совободилась. Поэтому, когда ты обращаешься к этой памяти, программа тебе говорит: ТЫ ЧЁ АХУЕЛ ПЕС? ИСПОЛЬЗУЙ MALLOC ЕСЛИ ХОЧЕШЬ СОЗДАТЬ МАССИВ НЕ В СТЕКЕ, А В КУЧЕ!
220 1526564
>>26557

Подсказка: не вызывает ли подозрение аргумент ms и его тип?
221 1526566
>>26541
Чё, хорошо, когда за тебя джава сама управляет ресурсами?
Ты выделил на стеке массив чаров в функции, после выхода за область видимости он удаляется, а ты возвращаешь указатель на эту область памяти.
Ты должен его через new объявлять и не забыть после вызова функции через delete[] удалить.
222 1526568
>>26564
The type suseconds_t is a signed integral type capable of storing values at least in the range [-1, 1,000,000].
Ну и?
Ну юзай useconds_t.
224 1526570
>>26566
это такой троллинг?
225 1526572
>>26568

А ms это что? Тоже от -1 до 1,000,000?
Костанты MSisS (то есть MS in S, то есть MicroSeconds in Second) тоже до 1,000,000?
Микро - это сколько так-то?
226 1526577
>>26572
MicroSeconds in Second?
Ну, в секунде 10^6 микросекунд, кста.
И где ты тип ровно на миллион найдёшь?
Причём тут С, б?
227 1526583
>>26570
Нет, это я долбоеб и на автомате привычный для меня new написал.
Анон выше верно написал, нужен malloc.
228 1526588
>>26583
я просто смотрю ты регулярно так ошибаешься тут.
229 1526590
>>26583
Бля так и знал, пригорел что нихуя не получается и не мог нормально головой подумать. Благодарю.
230 1526599
>>26155
пиши по английски, наверно русский тебе не родной.
Selection015.jpg132 Кб, 1210x663
231 1526601
Если в чем-то неправ, пофиксите, отцы

https://onlinegdb.com/HyfSvQrnH
232 1526609
>>26601
нет. a - это не указатель, это само начало памяти.
233 1526616
>>26601

Лучше второй printf заменить вот на такой, чтобы понятней было, что a и b - это почти одно и то же:

// Выведет 1 1 2 2
printf("%d %d %d %d\n", a[0], b[0], (a + 1), (b + 1));
Selection016.jpg4 Кб, 364x38
234 1526618
>>26616

Ох уж эта разметка в /pr/
235 1526626
>>26588
Да если бы. В си тред я в первый раз пишу.
236 1526632
>>26541
Не ебанутый, просто си это машинный язык, а не алгоритмический. Массивы и другие большие объекты нельзя возвращать, стек обосрется.
237 1526662
>>26241
Есть ли смысл установить вместо Минта Убунту? А то тут плохо про Си на Минте пишут: https://forums.linuxmint.com/viewtopic.php?t=193114
http://mintlinux.ru/forum/thread8974.html
238 1526712
>>26662
устанавливаешь все нужное
239 1526751
>>26662

CentOS либо Fedora.
10 лет сижу на Fedora, полёт нормальный. Никогда ни с чем проблем не было.
241 1526837
Аассс
image.png114 Кб, 1366x768
242 1526850
>>26541
Да ты ж просто рукожоп. Даже такая параша, как пикрелейтед, вполне работает и делает то, что нужно - возвращает массив строк.
243 1526941
>>26810
ээээ мутный какой-то подходи на наш ftp-сервер, побазарим за GNU
sage 244 1526967
>>26632

> Массивы и другие большие объекты нельзя возвращать


Массивы нельзя возвращать, потому что синтаксис не позволяет, а синтаксис не позволяет по историческим причинам. Структуры любого размера (в том числе структуры, внутри которых массив) возвращать можно, там внутри немного магии, но все равно можно.

>>26601

> "a" константный


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

> нельзя написать


Еще как можно. int ∗b = (int[]) {4, 5};
245 1526976
>>26632

>язык программирования


>процедурный

246 1527027
>>26967
ты сабж читал? если ты создаёшь массив внутри функции и вызываешь её, то в стеке инициализируется несколько полей памяти, которые закрепляются за массивом, после того как функция завершается все эти поля изымаются из стека и сразу же занимаются перемнными из следующих команд. Как ты собрался их возвращать?
247 1527159
>>27027
А как ты возвращаешь числовую переменную? Она же тоже в стеке и освобождается при выходе.
248 1527192
>>27159

Тебе стоит изучить как работает вызов функции на ассемблере. Во-первых, значение этой переменной может быть не обязательно в стеке, а может быть в регистре. Во-вторых, у каждой функции есть адрес возврата, куда она возвращает управления по окончанию своей работы и есть специальное соглашение, куда функция записывает то что называется её возвращаемым значением, чтобы это значение можно было использовать в вызывавшем функцию коде.
249 1527248
>>27027
>>27192
что-то ты броток погнал.
sage 250 1527263
>>27027

> ты сабж читал


Ты мой пост читал?

> после того как функция завершается все эти поля изымаются из стека и сразу же занимаются перемнными из следующих команд


Все так. Только тебя это ебет в одном лишь случае: если ты вернул указатель на локальные переменные. Так делать не нужно. Если ты возвращаешь структуру, и эта структура в регистры не влезает, то вызывающая функция неявно создает под нее переменную, и результат в эту переменную копируется, т.е. фактически struct s func(void) { struct s result = {0}; return result; } преобразуется к struct s∗ func(struct s ∗hidden_buffer) {struct s result = {0}; ∗hidden_buffer = result; return hidden_buffer; }. И никаких проблем. Можно было бы возвращать и массивы точно таким же образом, но вот беда: когда ты пишешь return array, сишка видит return &array[0]. Такие дела.
251 1527273
>>27192
Какая мерзость пиздабольная.
252 1527282
Какой стандартный способ вернуть несколько значений из функции в сишечке?
253 1527285
>>27282
обернуть в структуру и передать указатель. возврат оставить для кода ошибки.
254 1527288
Буквально вчера узнал про такое заведение , как школа 21 / 42 и т д. Пишу в этот тред, так как там учат велосипедному Си и интересует мнение блатных анонов. Стоит ли лезть в это болото, если на дворе 21 век, а мне не обязательно знать как мои предки выкапывали сральник на улице? И почему их взгляд остановился на Си, че не Ассемблер?

Конкретно к Си у меня нет никаких претензий или негатива, как может показаться. У меня есть негатив к тому, что я должен делать банальные задачи в каловом редакторе, не используя некоторые дефолтные функции (да-да по типу printf). И кому эти навыки нужны в 21веке, где все стремится к скорости, а не к качеству.

Если что, то это мелкий слив заданий - https://github.com/jraleman/42 . Piscines - бассеин, местный жаргон, прописка в хату. 4 недели по 10 часов в день.

Пока челики пыхтят по 70 часов в неделю, то другие проходят питон+ дата сайенс на курсере и устраиваются через пол года за 100 к девальвированных рублей. И где нуб трапа?
255 1527293

> Стоит ли лезть в это болото, если на дворе 21 век, а мне не обязательно знать как мои предки выкапывали сральник на улице?


мне похуй, можешь не знать.

> И почему их взгляд остановился на Си, че не Ассемблер?


а то ты сам не знаешь ответ на этот вопрос.

> И кому эти навыки нужны в 21веке, где все стремится к скорости, а не к качеству.


> И где нуб трапа?


хуй знает, я не работаю, мне лень.
256 1527321
>>27318 (Del)
А мог бы на нормальном языке писать
257 1527322
>>27321
Не себе пишу, в этом то и дело.
258 1527323
>>27316 (Del)
ЯННП, в чем проблема-то?
image.png5 Кб, 296x86
259 1527330
260 1527334
>>27330
Да напиши уже, что накодить-то пытаешься.
261 1527339
>>27285
Пруф
262 1527340
>>27334
Задаётся строка, заменить все suf1 на suf2.

Главная:
https://pastebin.com/rZKuDSxf
Свои функции для работы со строками
https://pastebin.com/6nnEEwCx

Всё должно быть динамическое. Без ёбли со своими фунциями работает нормально:
https://pastebin.com/VT7GBgbe
263 1527342
Подскажите чому не одно из этих быстрых сортировок не работает?: https://pastebin.com/eqaaQSdp
264 1527351
>>27273

Пиздабольная мерзость - это твой среньк.

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

Или может ты отрицаешь, что когда я пишу на ассемблере ret, то я ПЕРЕХОЖУ по адресу откуда мою процедуру вызвал вызывающий код?

Я хотя бы потрудился чё-то в памяти освежить из универского курса асемблера, прежде чем пукнуть, а ты просто сренькаешь.
CI5fHxS6Cgw.jpg80 Кб, 668x331
265 1527358
>>27340
Как основа пойдет, наверное. Или я не понял, в чем проблема.
https://pastebin.com/grqPsXwm
266 1527359
>>27159
Тут проблем намного меньше. Значение возвращается так же как возвращается указатель, это по факту стандартный тип языка, инт, флот, чар, поинтер, которым язык может свободно оперировать. В C нет механизмов оперировать с массивами как с отдельными юнитами.
> C does not provide any operators for processing an entire string of characters as a unit.
page 87
267 1527383
>>27358
Проблема в том, что есть char и есть char, и к char нужно добавить char, но ещё проблема в том что нельзя из char* взять рандомный элемент и перенести его в другую функцию.
image.png9 Кб, 429x99
268 1527384
269 1527422
>>27383
>>27384
Епт, ну ты хоть ошибки компилятора покидай.
270 1527460
>>27342
Бамп
271 1527461
>>27460
хз, я в сортировки не умею. в любой ситуации пиздярю список и всё.
272 1527463
>>27461
Только не говори мне что ты нашел работу...
273 1527468
>>27463
я её даже не искал. но если бы меня спросили за сортировку, я бы из жопы пузерёк достал и был бы таков. зачем мне это говно запоминать даже? если нужно прочитаю на википедии - освежу в памяти.
274 1527483
>>27468
+1, тем более сейчас всё на генериках. Ну так для общего развития можно пропердолится в рекурсию в отпуске.
275 1527501
>>27468

Мне кажется, что когда спрашивают за сортировку, то они не хотят этим сказать, что ты её будешь писать, а хотят проверить какие ты знаешь методы сортировки и знаешь ли ты как они работают, то есть понимаешь ли какую сортировку в каком случае применять.
276 1527545
>>27501
ничего я не понимаю, я знаю только квиксорт и всё. объяснить я его не смогу. сортировка это узкоспециализированная хуйня, над ней бьются серьёзные математики, а мы просто пользуемся, как мы пользуемся процессором не переизобретая его.

но сколько я программирую, я не понимаю, откуда вообще может взяться массив памяти в один момент который ещё и нужно отсортировать? чаще данные приходят последовательно, или ты их обрабатываешь последовательно. и зачем заниматься свопом данных, быстрей формировать список.
277 1527553
ну я условно - список, хеш-таблица списков, дерево красно-чёрноё-родимое.
278 1527598
>>27545
сортировать то по разному надо
кому то быстро, не учитывая того что в наихудшем случае будет провал по скорости (привет быстрая сортировка)
кому то нужно делать частичные сортировки (например, осортировать только для 5ти первых)
кому то нужно делать стабильные сортировки (те у которых не меняется порядок следования одинаковых элементов)
кому то нужно делать вообще сортировку последовательностей, те данных которые не влезают целиком в доступную оперативную память
и оказывается, что все те виды сортировок, что препод тебе в вузике на втором курсе уныло рисовал на доске, потребны..
279 1527599
>>27598
еще есть и специфичные сортировки, типа сортировки куч, к примеру..
280 1527626
>>26850
и правда, код функции, напичканой внутри мемсетами, реалоками и каллоками иначе как "парашей" не назовешь
281 1527636
>>27358
первый признак непрофессионала: по любому поводу срать маллоками, каллоками, реалоками, мемсетами и прчоей аналогичной парашей
282 1527651
>>27636
ну а что ты имеешь против мемсетов и мемкопи, например?
17.jpg111 Кб, 891x786
283 1527736
Коданы, подскажите ...
284 1527742
>>27736
ты мне лучше скажи, что вас к этому ведёт, заниматься всякой хуйнёй помимо стандарта?
285 1527746
>>27736
и нет блять, это не вопрос производительности.
286 1527748
>>27742

Что ты имеешь ввиду?
Нет, не подумай что я UDP считываю, внутри UDP лежит другой пакет со своим заголовками.
287 1527801
>>27748
ну то есть, и как ты с одной машины на другую будешь передавать типы отличные от char ? а если у них отличаются порядок байт в типах.
288 1527804
>>27801
Сейчас бы в серьез думать о bigendian в своем васянокоде. Какой милый мальчик, играется во взрослого.
289 1527805
>>27736
Сбрасывать память целиком не надо, потому что вписать какой-нибудь char в новую версию структуры, в итоге проебаться в alignment'ом и долго искать баги.
290 1527813
Сложно ли написать свою виртуальную машину в целях обучения? Сам на С никогда не работал (вебмакака та самая я). Но давно уже хотел попробовать что-то низкоуровневое, интересно как это все работает. Вот пока железо изучаю, ассемблер, потом Си подключить хочу
291 1527828
>>27801

В смысле переносить на другую машину? У нас ни каких машин кроме обычных компьютеров из DNS в принципе не было, нет и не будет никогда.
292 1527856
>>27828

>В смысле переносить на другую машину?


На IBM Mainframe.
293 1527860
>>27828
>>27804
да пошли вы оба на хуй. я с такими мудаками в си-треде даже разговаривать не хочу. для вас придумали языки получше.
sage 294 1527877
>>27813

> Сложно ли написать свою виртуальную машину в целях обучения?


Нет, не сложно. Простейшая виртуальная машина это switch(opcode) внутри бесконечного цикла.

>>27736
Если задача - хранить, то можно использовать битфилды (хотя в первую очередь стоит подумать, нужна ли тебе такая экономия на памяти за счет процессора).
Если задача - передавать между машинами, тогда однозначно маски, потому что про битфилды обещаний со стороны языка мало, а компиляторов много.
В крайнем случае, если тебе пиздец как нужна скорость (т.е., если вариант с масками и сборкой из байтиков уже написан и тормозит), тогда можно и memcpy поверх структуры с битфилдами, но с проверкой внутри сборочного скрипта, что компилятор реализует все так, как ты ожидаешь, а не как ему больше нравится.
295 1527907
>>27877

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



О, а я тоже подумал, что хорошо бы написать некий тест, который проверяет всё ли располагается в памяти "как ожидается" и если да, то через указатель, если нет, копируем с масками.
296 1527913
Selection015.jpg107 Кб, 514x854
297 1527929
298 1527941
299 1527962
Как через printf вывести double/float только то что после запятой?
Например при вводе 42.005 должно вывести .005
300 1527970
>>27962
Пока на ум приходит только одна идея, сконвертировать float/double в char через snprinf() или asprinf() найти '.' через strchr() и дальше уже напечатать через %s
Это единственно верное решение?
302 1527975
%0.3f
303 1527977
>>27962

На сколько я знаю, у printf есть модификатор, которые позволяет урезать число цифр после запятой, но не до запятой.

Если написать printf("%1.1f", 13.14);
То вывод будет 13.1
Если написать printf("%10.1f", 13.14);
То вывод будет ________13.1 (где _ - это пробел)
То есть модификатор для целой части может выводить дополнительные пробелы, но не может уменьшать количество цифр в целой части.

Так что выход для тебя - выделить дробную часть и вывести её как отдельное число.

Можешь сильно упороться, разобраться побитово как хранится в памяти число с плавающей точкой и выделить оттуда дробную часть. Погугли, "как хранится в памяти double", слабоумие и отвага!
304 1527979
float f = 42.0976;
int i = f;
float r = f - i;
printf("%.3f", f);
305 1527994
точнее так
float f = 45,676;
int i = f;
float fraction = f - i;
float intermediate = fraction *1000;
int r = intermediate;
printf(".%d", r);
как же клево знать арифметику.
и немножко алгебры
306 1527996
>>27626
>>27636
И чо, мне костылить тысячи циклов? Один хрен я в настоящее программирование на Си не попаду.
Screen Shot 2019-11-23 at 22.21.42.png27 Кб, 315x401
307 1528012
>>27994
Если float > INT_MAX твой код сосет, если после запятой идет 005, то у тебя будет 5 а не 005
308 1528112
>>27996
>>27340
да я хотел просто выебнуться, сейчас признаю свое хуевое поведение
попробовал сделать сам, и в итоге не меньший говнокод получился:
https://pastebin.com/V7mAKBBi
309 1528142
>>27288
"питон+ дата сайенс на курсере и устраиваются через пол года за 100 к девальвированных рублей" Инфа сто процентов или "но есть один ньюанс" ?
310 1528160
Аноны, норм практика объявлять структуры типа
struct {
type1 memb1;
type2 memb2;
...
char stroka[0x1000];
};
но не маллокать для каждого экземпляра все 4+ килобайта? Типа, именно эта строка в конце дается только один раз, и места требует ровно под свою длину, но лежит в виде фиксированного массива внутри структуры, чтоб обращаться по офсету от адреса самой структуры, а не дополнительные указатели разыменовывать. И менеджер кучи вдвое меньше дрочится, когда таких структур 100500, и память экономится...
sage 311 1528166
>>28160
Ты, вероятно, имел в виду:
struct {
type1 memb1;
type2 memb2;
...
char stroka[]; // char stroka[1] в С89
};
Да, абсолютно нормальная практика.
312 1528181
>>28166
ох, мне пора баеньки.. Действительно, к чему это 0x1000, когда никто смотреть не будет, по размеру ли я индексируюсь. Не знал, что в C99 можно без [1]. Спасибо, анон.
313 1528182
>>27359

>В C нет механизмов оперировать с массивами как с отдельными юнитами.


>>26632
Вдумайся в смысл. То что нет способоа это ежу поеятно, капитан, это аообще не вопрос. Проблема в том что само желание возвращать массивы в си это дебилизм, признак незнания языка. Возможности нет не потому что разработчикам было лень или еще что, а потому что и ре должно быть такой возможности, в стек нельзя совать большие объекты. Да, структуру можно, но структура не большая по дефолту, лишь несколько чисел, а массивы большие как правило, их смысл - хранилище данных, база, а смысл структуры лишь обертка для нескольких переменных.

Весь вопрос не в доках к языку, что есть или нет, а в непонимании что си это не алгоритмический язык абстрагированный от железа, в таком случае естественно ожидать возвратов всего, а машинный язык, привязанный к аппаратной архитектуре, чем является стек.
314 1528226
>>21021
Биткоин вот переписали на 11 стандарт.
315 1528242
>>28012
Пипец ты содомит. Вот закостылил проблему с 0,005
https://pastebin.com/jaMAX3pv
дальше лень копаться
316 1528256
>>28226
интересно, биткоин это какой-нибудь фронт енд для ллвм с поддержкой куда?
317 1528259
Сап, Сяч. Глюпий вопрос, но как мне получить значение из регистров вроде r8, r9, r10 итд?
Вот к примеру, чтобы взять значение из rsi, делается так:

asm ("команда" : "=S" (переменная назначения));

Проще говоря, какой дескриптор тут нужен вместо S, чтобы получить пронумерованный регистр?
318 1528375
>>28259
почему это гулпый вопрос? но нужно добавить, это вопрос про gcc(?).

хз как на x86-64, но на 32:

asm ("movl %%eax, %0 \n" :"=m"(x))

гугли там модификаторы, =m - это вроде в глобальную переменную прописать.
319 1528974
>>28375

>это вопрос про gcc(?).


А разве инлайны в гцц и clang обрабатываются по-разному?
320 1529009
чё вообще делает инлайн?
321 1529012
я как понимаю это нужно для ABI stability. А ABI Stability это то что позволяет компилировать .с файлы с уже скомпилированными .o файлами?
322 1529031
>>29009

Это вежливая просьба к компилятору, что хорошо бы чтобы ассемблерный код этой функции был вставлен прямо в ассемблерный код программы в каждом том месте, где функция вызывается. Это, при правильном использовании, позволяет сэкономить на "... passing arguments variables, return address, return value, stack mantle and its dismantle, etc."

https://www.thegeekstuff.com/2013/04/c-macros-inline-functions/
323 1529557
>>18919 (OP)
Где сейчас вообще используется С или это просто по фану?
324 1529608
>>29557
Везде. И если тебе так не кажется - присмотрись! Все в мире пропитано духом Си, и без K&R не видать тебе просветления ни в одной отрасли погроммизма.
325 1529622
>>29608
А духом Си можно пропитаться без Кернигана Ричи? Устаревший типа. Мне напели что там вообще примеры из книги не компилируются
326 1529628
>>29622
Ой, один хуй вводный курс не наденет тебе на голову все детали стандарта, ибо на то он и вводный, чтоб осилить. Так лучше читать годноту.
327 1529647
>>29622
k&r - шедевр, а не книга
образец как надо писать техническую обучающую литературу
328 1529670
Почему все такие мудаки и не хотят запилить <threads.h>? Что стоит просто взять и сделать? Могу сейчас сам обертки pthread набросать и за деньги продать, раз такое дело.
329 1529673
>>29670
так бля, разобрался, у меня glibc 2.27, а потоки c11 завезли в 2.28, но ОС не спешит перекатываться на свежие версии, а накатить прям вместо той, что стоит по-дефолту, чревато поломкой при обновлениях. pizdos
330 1529685
>>29622

>примеры из книги не компилируются


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

>Устаревший типа


Багаж в виде K&R тебе только поможет врубиться в нововведения, обузой он уж точно не будет.
Там всего 200 страниц, остальное справочник.
331 1529761
>>29670

Чем pthreads не устраивает? Вроде ниче сложного.
332 1529781
>>29761
ни в коем случае не жалуюсь, но хотелось бы няшного стандартного интерфейса, переносимого наконец куда-то на винду
333 1529829
>>29761
ооо либераху порвало
Снимок экрана 2019-11-26 в 12.20.17.png330 Кб, 1417x837
334 1529898
Кто помнит книгу, аноны?
Я правильно понимаю что все строки сохраняются в огромный буфер, который мы делали в прошлой главе, и который является екстернал переменной?
335 1529904
>>29898
Нет.
Теперь в буфере сохраняются только указатели на строки, но не сами строки.
Аллок, который ты подсветил как раз выделяет ровно столько памяти, сколько нужно под текущую строчку.
Снимок экрана 2019-11-26 в 12.53.02.png309 Кб, 1433x672
336 1529924
>>29904
Так без этого кода эта программа не будет работать? У нас же есть функция strcpy(char , char ), которая копирует в огромный буфер allocbuf[] наши строчки одна за другой? И указатели, которые лежат в массиве ведут на куски этого буфера?
337 1529938
>>29924
А бля, да, я вперед забежал.
В твоей текущей версии все строки пишутся в один буфер.
338 1530191
>>29938
Всё, я познал C
339 1530193
>>18919 (OP)

>- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download


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


Ролл. От 0 до 4 Мозг и Денис, от 5 до 9 Стивен
340 1530211
>>30193
Что это значит?
341 1530213
>>30193
Глупо роллить вот так на мертвой доске.
342 1530227
>>30213
Так я же не знаю, какой номер у меня будет в любом случае.
>>30211
http://lurkmore.to/Рулетка
343 1530232
>>30193

И то и другое не вариант?
Сначала КНР, он потоньше.

У меня, кстати, ещё вот такая книжка есть:
https://www.ozon.ru/context/detail/id/928388/

Очень мне нравилась, когда по Си угарал. Многое оттуда почерпнул. Если найдешь где скачать без СМС, полистай.
344 1530236
>>30232

>И то и другое не вариант?


Я хотел сначала ролл, потом второе.

>Если найдешь где скачать без СМС, полистай.


Спасибо, обязательно полистаю.
345 1530328
>>30227
Очень легко предугадать по последнему бампу на доске.
346 1530446
>>29898
этаж хуйня не будет работать. == выполняется раньше чем =
347 1530470
>>30328
Так я не знаю, какой тут последний бампер на доске
348 1530485
>>30470
Боже, ты тупой? Мой пост заканчивается на 485 сейчас, например.
349 1530487
Рекурсия, епт.

>>1530487

350 1530614
Так, блядь, я верю, что вы мне поможете. Я написал программу для одной конторы, которая косплеит HTTP на сокетах, и встал вопрос, как именно, без всяких АПИшечек и прочих ништяков, собрать правильную строку "HTTP/1.1 200 OK" и "HTTP/1.1 400 Bad Request" ДА ХОТЬ ПО БАЙТАМ 0xb 0x7 0xJa 0xPidoras вообще похуй, чтоб для браузера клиента это не мусор был. м???? м???????????
352 1530627
>>30625
предвидел эту ссылку
353 1530630
>>30627
сорян, тебе нужен лейаут фрейма? Самому интересно
354 1530634
>>30630
send(_sock, "HTTP/1.1 400 Bad Request\r\n", 26, 0);
Что не так в этой божественной строке кода?
355 1530639
>>30634
мейби что то с портами, типа клиент стучится на сокет порт, и не знает что придёт хттп
356 1530643
>>30634
там же ещё есть аутентификация
357 1530645
>>30634
попробуй 500 ошибку кинуть (ошибку сервера)
358 1530651
>>30634
напиши плагин для браузера который работает с твоим сокетом и радуйся
359 1530697
>>30643
какая аутентификация? Короче, моя программа полностью хавает POST-запрос с JSON-ом в конце, парсит всю хуйню и т.д. и т.п., после чего сразу отвечает 200 или 400. Там еще какая-то промежуточная перекличка должна быть??
360 1530702
>>30697
а как же
361 1530705
>>30702
ух бля...
362 1530713
>>30705
поставь nginx
363 1530832
>>30713
бля, у меня уже все жестко написано по-байтоебски, мне бы только разобраться с последней траблой - чтоб клиент, который не догадывается, что его запросы обрабатываются на уровне laba2.c, видел серьезный такой, усатый в тельняшке респонс
364 1530855
>>18919 (OP)
Как лучше всего (в плане оптимизации - скорость выполнения, количество тактов) заполнять память по указателю?
char offset;
for(offset = 0; ... ; offset++)
{
(char ∗)(0x123 + offset) = data;
}

Или

char ∗ptr;
for(ptr = (char ∗)0x123 ; ... ; ptr++)
{
∗ptr = data;
}
365 1530861
>>30855
Забыл про условия циклов
1) offset < 1337
2) ptr < (char ∗)(0x123 + 1337)
366 1530862
>>30855
Я бы посмотрел как устроен memset

Наверняка самый быстрый способ с использованием 64 бит значения или вообще SIMD

Что-то вроде:
long values; // fill it with 'value'
for (ptr = start; ...; p += 8)
{
(long)ptr = values;
}
367 1530970
>>30485
Нет, я просто зашёл в тред и написал пост, не обращая внимания на циферки.
368 1531179
Анон, N тредов назад советовавший мне делать HTTP сервер велосипедами на сокетах, ебучий ты содомит!

>что ты как джавист


сказал он мне, когда я приперся с вопросами про HTTP Server API для Windows... Нахуй это ваше байтоебство - психическое отклонение.
369 1531183
>>31179

>этот подрыв неосилятора

sage 370 1531225
>>30634

> Что не так в этой божественной строке кода?


У нас TCP. В редких, но все же вероятных ситуациях строка может отправиться не полностью, счастливой отладки. Алсо, где вторая пара \r\n в конце?

>>30855
ptr + offset не всегда возможно оптимизировать до ptr += offset автоматически (алиасинг и все такое).
371 1531239
>>31225
Я уже и \r\n, и \r\n\r\n, и \r\n\r\n\r\n\r\n пробовал. А кейс с разбиением 30-байтовой строки на части (лол) - не моя ответственность, я респонс отправляю, а принимает его полноценная реализация протокола.
372 1531248
>>31179
Так если винда, то чем тебе winhttp.h не нравится?
373 1531252
>>31239
Ты можешь его и не отправить, лол. Буферизация, Нагл.
По tcpdump проверил?
374 1531279
>>31248
В тестовом клиенте (ниже) его и юзаю, но winhttp - это же только для клиентского и есть, нет? Непонятно, как там серверную очередь делать, для этого видимо HTTP Server API существует. Я ошибаюсь?
>>31252
После закрытия дочернего сокета разве не должно флашиться? И нет, проблема не в этом. Мой тестовый клиент все распечатывает (200/400). А нормальным программам почему-то похуй.
sage 375 1531282
>>31239

> пробовал


Хорошо, а что именно у тебя не работает? Какого поведения ты хочешь от браузера, и что происходит? Ты хочешь вежливо послать нахуй браузер? Так отправляй полный респонс: "HTTP/1.1 400 Bad request\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\nGo fuck yourself."
376 1531291
>>31282
А браузер не отображает status line, если кроме нее ничего нет? Вообще, это я с браузером решил поиграться. Там свой клиент, и мне жалуются, что вообще никакого ответа с сервера нету, хотя знающе так говорили, что хватит любой хуйни типа 200/400. Неловко ламповый Си-тредик этим загружать... Пойду спать, забей анон.
377 1531301
>>31291

>получил ответ


>блабла, ну я пойду, забей

sage 378 1531321
>>31291

> знающе так говорили, что хватит любой хуйни типа 200/400


Хватит, чтобы браузер понял, что у тебя ошибка. А чтобы еще и пользователь понял, нужно посылать тело.

> жалуются, что вообще никакого ответа с сервера нету


А ты точно соединение правильно закрываешь? SO_LINGER там или shutdown() какой-нибудь? Может там клиент не хочет неожиданно получать -1 от recv().
379 1531349
Кстати необязательно серверу закрывать соединение после каждого пука. Достаточно на клиенте запустить в паралельном треде цикл который читает из сокета а в главном функцию которая в него пишет.
380 1531482
>>31301
>>31321
Я выспался, и сейчас обязательно попробую с телом.
>>31349
Не похоже на мой случай.
381 1531484
>>31482
попей сладкий чай с бтером
382 1531496
>>31484
Ценный совет, замечу. Вчера пренебрег, что привело к полету стеклянной бутылки в стену и метлы в монитор РОТ ЕБАЛ ЭТОЙ ВИНДЫ ССУУККАА
383 1531687
>>31496
Дядь, лечи нервы, я не представляю, как бы ты на реальной работе прогером психовал.
384 1533263
>>31496
Установи линукс, там всё просто и понятно.
385 1533277
>>33263
Только им и пользуюсь для себя.
386 1533278
>>33277

>КО-КО-КО! Ебусь консолькой в срачельничек!

387 1533373
>>33278
Да я и на винде в консольке.
388 1533427
>>31687
Линуксоид это не лечится.
389 1533552
>>33427
Ой, иди ты нахуй, я умный и красивый.
inb4 пруф - мать подтвердит
390 1533618
>>33552
хуй сосёшь?

гентушник
391 1533972
392 1534226
>>33552

>я умный и красивый


И что? Это ни как не связано с тем, на что ты отвечаешь. Видимо не такой уж и умный, раз не понимаешь, что "ум" - вещь многогранная, в зависимости от ситуации и контекста означающая совсем разные вещи. Видишь, в данном контексте ты довольно тупой, но в других можешь быть и умным.
393 1535571
Ну это, мне надо буффер символов, в который с одной стороны можно класть символы, с другой вытаксивать. Как такое заебенить? Дабл линкед лист очевидно говно мочи, т.к. пойнтер занимает больше места чем символ.
394 1535587
>>35571
ну, к примеру, у тебя будут так называемые "чанки", это массивы фиксированной длины, связанные между собой в список, память под чанки же может выделяться через организацию пула
это один из вариантов реализации, коих много
395 1535588
>>35587
возможно, подойдет и простейший кольцевой буффер..
396 1535594
>>35587
>>35588
то есть обычно очереди реализуют как подвид дек, а деки в свою очередь имеют несколько возможных реализаций, к примеру через кольцевой буфер, либо как набор чанков, связанных списком или еще как..
посмотри на википедии, лол
397 1535764
Я маллочу память в указатель, и затем опять маллочу, не подчищая его перед этим.
Так можно?
398 1535902
>>35764
а первое кто освобождать будет?
399 1535905
>>35764
Ну, если, например, в цикле маллочишь и передаешь указатель функции, делегируя ей ответственность за free, то ок, какие проблемы.
400 1536207

>malloc


Орнул
2019-12-0317-45-10.png9 Кб, 461x221
401 1536869
https://ideone.com/4bcVv1#stdin
Аноны, поясните, пожалуйста, что не так?
Выходит пикрил.
Думал что это из-за того что использую i-1 в строке, которая с нуля идет, но попробовал переписать с начальным i - единицей, все равно эта ошибка вылазит, в чем проблема?

(на сайте не компилируется, т..к не открывает string.h, через vs19 компилируется, но выходит пикрил при попытке ввода слов)
sage 402 1537094
>>36869

> Аноны, поясните, пожалуйста, что не так?


1) Пользуешься уебищными функциями с _s.
2) gets_s() хочет два аргумента, передаешь один.
3) Не проверяешь конец строки (не ввел точку в конце - получил вот эту самую С0000005). И во внутреннем цикле тоже не проверяешь.
4) Не проверяешь, что symb сам пробел.
Остальное вроде ок.
403 1537372
как вы обозначаете тип указателя
char^ alloc(int n)
или
char ^alloc(int n)

в книге настаивается на втором варианте, так как это мнемоник который показывает нам что чтобы его развернуть надо поставить перед переменной звёздочку. Но я никак не могу привыкнуть как не пытаюсь (после плюсов) и подмывает юзать первый вариант.
404 1537376
>>37372
Писать звездочку слитно с типом кажется хорошей идеей ровно тогда, когда объявляешь одну переменную, являющуюся простым указателем (или указателем на простой указатель). Как только начинаются указатели на функции, указатели на многомерные массивы, много указателей char ∗p, ∗q; сразу приходит понимание, что первый вариант - полная хуета.
405 1537396
>>37376
Не приходило в голову, что при одной переменной, правильнее слитно с типом, а с несколькими правильнее слитно с переменной?
406 1537479
>>37396
А зачем мешать? Что за двоемыслие? Смысл всех этих декорирующих звездочек, скобок и прочего в том и только в том, чтоб отобразить последовательность операций, приводящих к описанному типу. Нечего тут косплеить.
407 1537874
Привет. Вопрос про кодогенерацию. Есть ли какие-то нативные средства, чтоб вместо
ja[0] += pidoras[0],
ja[1] += pidoras[1],
ja[2] += pidoras[2]

Писать
YOBA_MACRO(ja, +=, pidoras, 3)
?
Отдельно для трех, например, легко сделать
#define COMBINE3(dst, op, src) \
(dst[0] op src[0], dst[1] op src[1], dst[2] op src[2])

Но умеет ли препроцессор генерировать N аналогичных строк по шаблону?
sage 408 1537882
>>37874

> Есть ли какие-то нативные средства


Да. Внешний кодогенератор на питоне, перле, баше или даже на самой сишке.

> Но умеет ли препроцессор генерировать N


Сорт оф. Ты можешь дважды вызывать combine3 из другого макроса, тот другой тоже вызывать дважды, и... тридцати двух уровней вложенности тебе точно хватит.
409 1537888
>>37874
если не нужна помтоянная автоматизация, то такое генерится в экселе или блокноте++ за пару минут
410 1537895
>>37882
>>37888
В принципе, можно цикл в макросе сделать, а его уже конпелятор векторизует. Но меня привлекает именно через запятую в круглых скобках, чтоб можно было таким же элементарным выражением где угодно вставлять, как настоящий вызов функции. Хотя, на практике мне это не нужно...
411 1537917
>>37479
Смысл написания чтобы было натурально человеку. Это машинному парсеру удобнее единообразие, но не человеку. Если у тебя ведро с болтами на плечах, тогда вопросов нет.

>>37874
Цикл for
412 1537959
Хочу взять все файлы из дериктории и скормить силангу
ls ../LearnC/ | clang
ЧОМУ ЭТА ХЕРНЯ НЕ РАБОТАЕТЙ
413 1537963
>>37372
оба варианта говно, делай тайпдеф pchar
>>37376

>char ∗p, ∗q;


а с pchar p,q; ни у кого не будет сомнений в семантике и тупых ошибок
асло больше одного обьявления на строку в большинстве случаев - говнокод
мимокрестовик
1575493132192042723.jpg704 Кб, 700x1244
414 1537988
>>37963

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


>мимокрестовик


Всегда стараюсь объявлять переменные одной строкой и в самом начале подпрограммы.
415 1538056
почему не работает
моя утилита которая выковыривает юрл | clang

clang не может быть частью пайпа?
416 1538144
>>37372
Если объявляется переменная, то звезда относится к этой переменной, соответственно и место ей рядом с именем переменной.
Если объявляется функция, то звезда относится к типу возвращаемого значения, а переменной как таковой нету, соответственно ее уместнее приклеить к типу.
Так подсказки intellisense более внятно читаются, на мой взгляд.

Алсо, в с++ не во всех контекстах возможно придерживаться строго одного стиля.
417 1538277
Объясните, чем отличается размер от выравнивания в памяти?
418 1538294
>>38277
Разные понятия
419 1538374
>>38144
Нет таких условностей, анон. Функция тоже может возвращать указатель на многомерный массив или указатель на функцию, например. Только отображение последовательности операций, чтоб получить тип слева, и никак иначе. Остальное от гуманитариев. Привыкнув к написанию слитно с типом даже в отдельных случаях, неизбежно будешь путаться, столкнувшись, скажем, с
typedef float (EdgeList ∗)[2][3];
Если в голову приходят мысли писать иначе, значит логика Сишных деклараций НЕ ОСИЛЕНА, поциент не мыслит верными категориями, и каждый нетривиальный случай для него мини-головоломка, что есть совсем не айс.
420 1538377
>>38277
Ну, например, ты хранишь какие-то 24-битовые штуки по адресам, кратным dword. Размер 3 байта, выравнивание 4 байта. А еще в многомерных массивах бывает выравнивание начал строк. В bmp каждый пуксель - 3 байта (RGB), но даже если шириника картинки - 611, все равно каждая строка будет начинаться с адреса, кратного 4.
image.png216 Кб, 590x518
421 1538380

>шириника

422 1538382
>>38144

>c++


Тут не понял. Ссылки?
423 1538383
>>38374
typedef float (∗EdgeList)[2][3];
перепрошую, панове, трошки обiсрався
424 1538385
Бля, ладно, я никто, на самом деле. Хз, как там у седых усатых дядь в тельняшках принято промышленный код оформлять. Всем добра.
425 1538424
сап сикуны! посоветуйте видеоуроки по С годные на русском плз.
426 1538425
>>38424

>видеоуроки


Плез
427 1538428
>>38425
ну да видеоуроки
я с книжки засыпаю
на рутрекере уроков C нет
428 1538447
>>38377
Не совсем понял
ок 24 битовая штука.. 24 / 8 = 3 байта
пусть есть массив
ХХХOOOOO|XXXOOOOO|XXXOOOOO|...
То есть X это полезная нагрузка, O это пустые байты, чтобы
блок XXXOOOOO делился на dword ?
То есть XXX - размер (3)
OOOOO - выравнивание (4)
а что тогда XXXOOOOO ?
sage 429 1538449
>>37959
Используй find, а не ls.

>>37963

> тайпдеф pchar


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

>>38447
Почему у тебя так много O? 24 бита = три байта, размер дворда 32 бита = четыре байта. XXXO.
430 1538456
>>38447
Выравниваем по 4 байтам. Включая полезную инфу. Количество O - это не шаг выравнивания, а пэддинг.
431 1538457
>>37959
Ты хочешь дать шлангу в stdin имена файлов через пробел? Я понимаю, если бы единственный исходник распечатать в пайп, это еще логично (тоже не работает). Короче, палю годноту. Обратные кавычки есть.
$ clang `find ../LearnC/`
Команда внутри выполняется и ее вывод встает заместо кавычек. Да, анон выше поправил, потому что ls папки не печатает путь, а конпелятор не знает, где ты ls-ил. Алсо, хз зачем даже find, когда можно просто
clang ../LearnC/∗.c
432 1538459
>>38428
Естественный отбор.
433 1538461
>>38449

>венда = плохо


петух безработный, ты?
sage 434 1538470
>>38461
Я не говорил, что винда плохо. Я говорил, что к тебе LPCTSTR прилип.
435 1538471
>>38461
Хуя ты от первоначального тезиса оторвался в 2 хода... Говно - интерфейс сишных библиотек от мелкомягких. Используются они на винде. Чувствуешь? Анон назвал X говном, потому что X говно, обозначив то, что имеет ввиду, более кратким названием Y, где используется X. Ты же обвинил его в предвзятости к Y. Трагически погибни. Добрый вечер.
436 1538473
>>38470
проиграл
437 1538475
>>38461
Тем не менее, венда то еще говно. ГНУ Операционная Система Имени Профессора Компьютерных Наук Ричарда Столлмана - выбор здоровых людей.
438 1538572
>>38475
Софта тонет, игор тонет, на ноуте не пашет. Лучше я на семерке сидеть продолжу.
Мимо
439 1538585
>>38572

Чё там у тебя нет?
10 лет на Линуксе сижу, всё есть.

И даже игори Габен завез, играй-нехочу. Накатил Стим и погнали.

Жалею только что WoW работает только через Wine, а да и хрен с ним, давно пора отказаться от этой ммо наркомании.

Линукс - топовая платформа для программиста - моё личное мнение.
440 1538603
>>38585
Т-с-с, тему разбудите! Она у нас такая, храпит-храпит, как вдруг ХУЯК 4 БАМПЛИМИТА!!!
441 1538665
>>38603

Ага, вот бы так Си обсуждали :3
442 1538715
>>38382
Шаблоны, например
443 1538722
>>38715

>Шаблоны


Препроцессорные макросы, что их обсуждать
444 1538784
>>38715
Ну, в Си тоже есть касты, где приходится всю матрешку без имени описывать. И что? Абсолютно та же логика. Имя предполагается под первоприоритетным оператором.
image.png1,1 Мб, 1080x1051
445 1538786
или я не о том?
446 1538811
>>38786
хз, пример покажи
447 1538829
>>38811
(int (∗[])(char ∗, const char ∗))ptr
Интерпретировать ptr, как массив указателей на функцию, принимающую две строки и вовращающую целое число. Такое же "анонимное" обозначение типа применяется в шаблонах
std::vector<int (∗[])(char ∗, const char ∗)> v;
Вот и вектор таких массивов. В обоих случаях логика описания типа та же, что и при объявлении переменной
int (∗pfunc[])(char ∗, const char ∗)
448 1538909
>>38665
Нельзя обсуждать совершенство, его надо познавать.
449 1538968
>>38829

>std::vector<int (∗[])(char ∗, const char ∗)> v;


Думаю в 2019 году нормальный человек напишет
using proc = int(string, const string);
vector<vector<proc>> v; // опционально array
а не вот это легаси бяку
450 1538997
Brian Kernighan, Dennis Ritchie "The C Programming Language

Перевод на русский какого года самый лучший?
451 1539011
>>38968
Нормальному человеку вряд ли понадобится многомерный массив функций, но речь не об этом.
452 1539030
А, ну я о том же, только под другим нубским углом.
453 1539038
>>38997
У которого обложка как на оп-пике. Он тоже не идеален, но ошибки там обычно очевидны. Можешь держать под рукой на всякий случай оригинальное издание.
454 1539055
Как в C распечатать бинарное представление переменной?
455 1539061
>>39055
а так же задать через переменную,
например
char c = 0b00001111
456 1539066
>>39055
Вот, блядь, не знаю, почему в Си не завезли двоичные литералы из ассемблера. Просто рофл какой-то. Они даже в Java есть, Карл!
457 1539070
Где-то читал маняоправдания, что HEX с головой, и компактнее, и у бородатого сишника спинной уже научен мысленно превращать bbc1a23 в нули и единицы, и то, и сё, но это БЛЯДЬ не оправдания! Это ж пиздос какой-то.
458 1539073
>>39066
то есть можно только десятичное распечатать %d ?
image.png230 Кб, 1280x960
459 1539081
Нет, я конечно восхищен чистокровностью языка, насколько его серьезно оберегают от избытка фич и все такое, но... seriously?!?! Это же базовейшая хуйня из ассемблера!!
460 1539082
>>39073
%o - 8
%d - 10
%x - 16
461 1539095
>>39081
А у меня робит на маке
https://pastebin.com/YRT8VxFR
462 1539114
>>39095
Расширение компилятора.
463 1539120
>>39114
А если я скомпилю либу и дам на какую нибудь винду, она будет работать?
464 1539123
>>39120
Это всего лишь integer константы, которые, как и любые другие, превращаются в 010010110.
465 1539132
чому
char 11110000 это 15
а unsigned char 11110000 это 240
хотя 00000001 и сигнед и унсигнед это 1?
466 1539368
>>39132

Мне кажется (пусть аноны поправят, если что) что когда ты пишешь:

char c = 0xF0;

то происходит переполнение, так как char может принимать значения от 1111 1111 = -127 до 0111 1111 = +127 И из-за этого переполнения у тебя вместо 0xF0 в "c" оказывается 0x0F но почему это так происходит, вместо того чтобы в char оказалось число 1.111 0000 = -112, я не знаю.
467 1539374
>>39132

>char 11110000 это 15


Это 240
468 1539377
>>39132
>>39374

Если написать

char c = 0xF0;
printf("c=%d", c);

То вывод будет c=-16
469 1539386
>>39374
char не может быть таким большим

но да я ошибся, то есть
char 11110000 это -16
а unsigned char 11110000 это 240

но например 00001111 и сигнед и унсигнед чар это 15
470 1539391
просто где логика мапа бинарника в унсигнд чар, когда 0 мапится в 0
471 1539397
>>39011
да легко, например надо по разному обрабатывать данные в зависимости от айди источника и приемника, причем набор обработчиков задается динамически
>>39132
отрицательные числа кодируются в дополнительном коде, гугли
472 1539407
>>39386

>char не может быть таким большим


Чего бля? чар 8 бит, один байт, открой калькулятор и посчитай
473 1539408
>>39407
>>39386

>это -16


P.S.
Крайний левый бит это флаг знака у сигнед.
474 1539412
>>39407
ну давай посчитай... ты не поситаешь, а я нарыл формулу уже посчитал
nk
где n количество состояний, k количество бит
475 1539416
>>39412
ты так тралеш?
476 1539419
>>39397

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



И-и-и-и-и-и у нас победитель!
477 1539420
>>39416
кажется такая простая задача, посчитать сколько состояний может закодировать 8 последовательно расположеных бит, но вот хуй ты сможешь обьяснить как это сделать и посчитать.
Если сомневаешься, скажи мне слёту как посчитать сколько состояний может закодировать 2 байта
Безымянный.png250 Кб, 664x749
478 1539424
>>39420

>2 байта


Первый и последний раз показываю малолетним дебилам как пользоваться калькулятором.
479 1539441
>>39424

>не учел 0000 0000 0000 0000


проиграл с тебя
480 1539451
>>39441
За исключением тебя, все это прекрасно понимают
image.png603 Кб, 794x798
481 1539455
>>39132
Как же я с вас хуею. Значит так, бля! Слушаем внимательно. Сначала был унцыгнед:
00000000 = 0
. . .
11111111 = 255 (= 256-1 = 2^8-1)

Потом появился цыгнед:
XXXXXXXX
цыгн подчеркнут. Если цыгн=0, то все как обычно, а если цыгн=1, то берется значение унцыгнед минус мощность типа 2^8. Таким образом, 11111111 из примера выше превращается в 0-1. И таким же образом мы по-христиански делим весь набор на негатительные и позитительные, при чем операции сложения и вычитания дрочат биты точно так же, выдавая корректный результат после всех переполнений.
482 1539456
>>39451
я другой анон
483 1539461
>>39456

>я другой анон


к тебе это тоже относится
484 1539462
>>39461
Да нет, я умный. Честно-честно.
485 1539466
>>39424
пфф взял программистский калькулятор. ну ты и даун
486 1539519
И как это работает? Почему длина везде одинаковая? Всего занято 60, на 15 элементов получается по 4 на элемент, он среднее пишет что ли?
487 1539524
>>39081
Типичное пердольное "нинужно". Сидят царьки и командуют. А как реализовывается власть? Конечно через угнетение: не даешь что плебсам надо и получаешь удовольствие от их мучений и беспомощности исправить положение.
488 1539527
>>39519
Указатель 4 байта
489 1539529
>>39519
32 бит, так скомпилирована твоя программа.
490 1539536
>>39519

>Почему длина везде одинаковая?


это длина указателей на строки, естественно она везде 32 битная
длину строк считает strlen
491 1539537
>>39527
>>39529
То есть int sizeof(TW) / sizeof(TW[0]) равно sizeof(TW) / sizeof(char*)&
492 1539550
>>39537

>sizeof(TW[0]) = sizeof(char*)

1.png32 Кб, 520x380
493 1539585
Какой же убогий в Windows калькулатор. Что только делает с интерфейсом этот материал спид. Как излечить от него дизайн интерфейсов?
494 1540049
Как из инта
int z 00001000 00001001 00001011 00001111
получить 4 чара
char a 00001000, char b 00001001, char c 00001011, char d 00001111 ?
496 1540162
>>40111
Спасибо, хотелось бы без дополнительных либ и на чистом C
497 1540168
>>40049
a = z & 0xff;
b = (z >> 8) & 0xff;
...
498 1540169
>>40111
Я не понял
499 1540172
а как из
char a 00001101 и char b 00001011
слепить
int c 00000000 00000000 00001101 00001011 (xxab)?
500 1540175
>>40172
Не спеши постить, подумой
501 1540178
>>40175
ну мам
Копия photo2019-12-0718-19-57.jpg71 Кб, 800x600
502 1540217
ух, теперь я тоже байтотрах
503 1540219
>>40169
лучше зделать and 0xff с этим интом чтобы получить последний байт присвоить его в чар. потом сдвигай вправо на 8 бит и опять делай этот and. получиш второй байт и так далее в цикле ебони 4 раза
504 1540220
>>40219
да в цикле пиши байты в массив из чаров
после цикла присвоиш их в тдельные переменные если нужно
505 1540402
>>40175
Я сделал. Пипец

https://pastebin.com/1m61jRUM
507 1540434
>>40402

>u = u + x;


Пиздец...
508 1550511
>>40434
if (x >= 0)
for (Int32 i = 0; i <= x; i++) { u = u + 1; }
else
for (Int32 i = 0; i >= x; i--) { u = i - 1 }
Тред утонул или удален.
Это копия, сохраненная 18 января 2020 года.

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

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