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

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

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

Пожалуйста, пользуйтесь https://ideone.com/ или http://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 (драфт)
- 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://www.iso-9899.info/wiki/Books#Learning_C

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

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

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

- №31: https://arhivach.cf/thread/366210/
- №32: https://arhivach.cf/thread/375538/
- №33: https://arhivach.cf/thread/383767/
main-qimg-685d77f19927f9a46ee205442495b014-c.jpg16 Кб, 420x407
2 1269833
Странное дело - Сишка не предоставляет больших абстракций, всё надо ручками, ручками, даже строк из коробки нет в том понимании, в котором многие другие языки работают.
При этом я продолжаю колоться и есть кактус. Языки с виртуальной машиной как Джава и До-диез брать не хочется (До-диез вообще завязан на инфраструктуру мелкомягких), интерпретируемые языки тоже (не скрипт же я пишу), Голанг вроде бы фичастый, но сейчас они в очередной раз что-то меняют, вдпцг генерики появятся, Руст мутный и так толкался во все щели, что и знать не хочу, остаётся C++, в котором если без классов писать (строка там тоже класс, емнип), то на выходе тот же C.
Вопрос: что я тут делаю и почему оставаться тут - это неплохо? Мог бы в конце концов выучить уже C++ и ебашить код со скоростью света.
3 1269844
>>69833

>что я тут делаю


Уходи
4 1269845
>>69833

> C++ и ебашить код со скоростью света.


Это в каком веществе так свет движется?
5 1269858
enum types {
NON_TYPE = (uint8_t)0x0,
FIRST_TYPE = (uint8_t)0x1,
SECOND_TYPE = (uint8_t)0x2,
};

typedef struct __attribute__((__packed__)) _my {
enum types type;
} __attribute__((__packed__)) my;

printf("size: %u\n", sizeof(my));

Мне нужно чтоб enum весил 1 байт, т.к. у меня место сильно ограниченно, как запилить такое? Сейчас, результат кода выше, выдает size: 4, а нужно чтоб было size: 1
6 1269866
>>69858
А все, уже сам нашел ответ
https://stackoverflow.com/questions/49723430/gcc-enum-is-not-packed-as-expected

Не знал что атрибут __attribute__((__packed__)) в структуре, не упаковывает enum, нужно юзать enum c упаковкой __attribute__((__packed__)) отдельно
7 1269882
>>69844
Я хочу остаться.
>>69845
Вакууме.
8 1269896
>>69833

> При этом я продолжаю колоться и есть кактус.



Ты прям моими словами разговариваешь, у меня точно такаяже проблема, и я точно также продолжаю жрать этот кактус
9 1269920
Кстати, а можно в одной программе совмещать синтаксис и С и С++?
10 1269925
>>69920
Можно.
11 1270169
>>69824 (OP)

>- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!


А как определить ты гуманитарий или технарь?
12 1270194
>>70169

А для этого на доске специальный тред есть: >>1263759 (OP)
13 1270197
>>70194
Я сразу понял, что 50%.
Но потому , что я изучал теор.вер сам лично и знаю что 1 из 2 это фифтик шанс. Если бы мне дали эту задачу в 18 лет, может я бы ошибся, потому что всю школу я тупо игнорил математику и все что с ней связано. Ну то есть, я сейчас говорю о том что нужно иметь некий базис, как минимум хоть раз где-то пообщаться на тему соотношений, процентов и тд. Разве это показатель того логично устроен твой мозг или нет*?
14 1270201
>>70197

>1 из 2 это фифтик шанс


1 из 1000 тоже 50% шанс, либо вытянешь, либо нет. Остальное матанопетушиное говно.
15 1270204
>>70197
>>70201
1/2, т.к. какой будет вторая монета мы определяем тем, какой сундук мы выбрали, мы знаем, что сундуков, где есть золотая монета всего 2, то есть шанс 1/2, либо мы взяли сундук с 2 голдами, либо нет.
поправьте, если обосрался
16 1270205
>>69858

> Мне нужно чтоб enum весил 1 байт


И не надейся. Тебе в кресты, у них есть enum class, которому можно задать размер. Но никто тебя не заставляет в сях писать enum foo variable, пиши uint8_t variable и присваивай ей свои значения безо всякой типизации.

>>70169

> А как определить ты гуманитарий или технарь?


Если ничего другое не помогает, , читай хардвей. Если хоть как-то можешь читать Прату, даже если читается от силы страница в день, да и та с болью - лучше читай Прату.
17 1270206
>>70201

>50% шанс, либо вытянешь, либо нет.


Ну окей, а то что вероятность 1\2 , в этом я прав?
А то там в треде такие беседы идут, что я начинаю сомневаться.
Алсо, там люди начинают писать проги с функцией rand()
даже не зная,что все компьютерные рандомы- это псевдослучайные числа, а не тру рандомы
18 1270208
>>70204
Это с точки зрения теорвера имеющим место только в больном мозгу математика. В реальности только 50/50. Все эти математические подходы знатно сосут на примере покера ну иои прогнозов рынка.
19 1270209
>>70204
>>70205

>Если ничего другое не помогает, , читай хардвей


Это утверждение логическая ошибка. Типо раз тебе не помогли другие книги , то ты гуманитарий. Во- первых они могли тебе не помочь лишь потому, что ты ленивый и мало практиковался. Во-вторых, книга еще может не помочь, если ты не понимаешь стиль текста его автора, либо язык автора в плохом переводе. В третьем у тебя могут быть другие парадигмы обучения и методы.
Поэтому я так и не получил точного определения как определить гуманитарий ли я, или нет.
20 1270211
>>70208

> 50/50


Ну ты тоже щас не прав, мне кажеться.
Для ТЕБЯ ДА все что ты вытаскиваешь 1 раз - 50 на 50 шанс.
Но если бы ты вытаскивали не 1 раз, а несколько. То ты заметил, что найти шарик в двух ящиках намного быстрее, и шанс выше, чем найти шарик среди 1000 ящиков, и шанс что ты найдешь его с 1 попытки очень мал.
21 1270212
>>70208
Потому что покер и рынок это частотная вероятность, а не теоретическая, если бы ты бесконечно играл в покер, то увидел бы ту самую вероятность.
22 1270216
>>70209

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


Ты гуманитарий.
23 1270218
>>70216

>Ты гуманитарий.


ПОЯСНИ
24 1270220
>>70212

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


А если бы не увидел? Ты так говоришь, словно кто то бесконечно что то подсчитывал. Математика не имеет отношение к реальному миру, да же больше того, она вредна, ибо зашоривает мозг.
25 1270221
>>70211

>ты вытаскивали не 1 раз, а несколько


Ах если бы да кабы. Даже без математики понятно, что чем меньше помех, тем больше шанс вытащить. Но вероятность 50/50. Даже если будет миллиард зеленых шариков и один белый, то ты его либо вытащишь либо нет, но шанс не большой, да.
26 1270265
>>70221
Фигню несешь, какой-то полемикой или софистикой занимаешься. Конечно вероятность вытащить 1 шарик из 1000 коробок(не зная в какой он) явно не 50\50.
50 на 50 это именно для тебя иллюзия относительно слов "вытяну" или "не вытяну"
27 1270267
>>70220

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



Если человек не долбаеб, то математика не зашорит его мозг. Ведь он будет понимать что это лишь инструмент для вычислейний\поисков чего-либо\измерений.
28 1270345
>>70267

>инструмент для вычислейний\поисков чего-либо\измерений.


Математики здесь при чем? Инструмент создают те, кто им пользуется.
29 1270360
>>70345
Я говорю ,что математика Это инструмент
30 1270365
>>70360

>инструмент


Хуемент. А язык это инструмент придуманный лингвистами?
31 1270367
>>70365
Нет, народом. Хотя есть искусственные языки которые придуманы лингвистами
32 1270384
>>69824 (OP)

>>1270213
>>1270215
О! Пасибки.
Если это всё, то это дожно работать правильно:
http://rextester.com/BAD13339
Может можно и короче как-то, но у меня так получилось, и вроде таки получилось.
33 1270387
>>70220
Ты туповат, не так ли? Математика это фундаментальная наука. На ней основано всё. Весь мир ей подчиняется.
34 1270389
>>70387

>Весь мир ей подчиняется.


В голосяндру
35 1270441
Ежемесячная стипендия студента составляет А руб., а расходы на проживание превышают стипендию и составляют В руб. в месяц. Рост цен ежемесячно увеличивает расходы на 3%. Составьте программу расчета суммы денег, которую необходимо единовременно попросить у родителей, чтобы можно было прожить учебный год (10 месяцев), используя только эти деньги и стипендию.
Помогите на Си, нихуя не понятно. Учитель не объясняет нихуя
36 1270442
>>70441
Реши эту задачу на бумаге, потом поймёшь, как написать программу.
37 1270454
>>70205

> И не надейся.



Чем плохо использование в enum __attribute__((__packed__)) ?

>пиши uint8_t variable и присваивай ей свои значения безо всякой типизации.



Не очень понял, это как? Просто объявить uint8_t types, и без всяких енумированных констант, просто юзать циферки (0x0 - 0x7)?? Ну этоже совсем говно код, неуправляемый, выйдет
38 1270456
>>70441

> Рост цен ежемесячно увеличивает расходы на 3%.


> на 3%.


Очевидное занижение уровня инфляции и сокрытие реальной ситуации в экономике страны
39 1270458
>>70456
Это 42% в год, гуманитарий.
40 1270470
>>70458
блин, я прочитал как 3% в год, вообще инфляцию всегда в годах считают, и только иногда в кварталах
41 1270540
>>70441
К примеру расходы равны 10 000\месяц.
Через месяц уже +3% , получается 10300. Через еще один месяц + еще 3%, получается 10609. Через еще один месяц +3% к сумме = 10 927.27. И так далее.
Получается все больше и больше, потому что мы прибавляем +3% к сумме предыдущего месяца.
42 1270541
>>70540
В конце : SUM =SUM - A
У конечной суммы за 10 месяцев отнимаем А (стипендию).
43 1270673
>>70454

> Чем плохо использование в enum __attribute__((__packed__)) ?


Тем, что это расширение гцц.

> Не очень понял, это как? Просто объявить uint8_t types, и без всяких енумированных констант


typedef enum MyEnum {
MY_FOO = 1, MY_BAR = 2,
} MyEnum;
Используешь uint8_t x = MY_FOO там, где размер важен, и MyEnum y = MY_BAR там, где ты можешь себе позволить использовать int. Неупакованный enum быстрее (особенно на архитектурах, отличных от x86) за счет отсутствия телодвижений по расширению байтов до полного слова. Дополнительной безопасности enum type сам по себе не дает твоему коду, MyEnum y = 100 - это полностью валидный код. Поэтому все, что ты теряешь, используя uint8_t - это хинт в виде имени типа, но это можно решить банальным typedef uint8_t MyEnumPacked, вот и все.
44 1270695
>>70197

>Я сразу понял, что 50%.


Значит Zed A. Shaw "Learn C the Hard Way" (2015) - для тебя.
image.png131 Кб, 1248x642
45 1270713
Обьясните тупому, как установить вижуал залупио под ваш си ебаный. Там только с++ и с# вижу в пунктах.
46 1270714
>>70713
Тебе в веб тхред.
47 1270715
>>70713
зачем тебе VS? есть Pelles C, к примеру
48 1270716
>>70714
>>70715
Почему в веб? У нас в шараге препод сказал, что именно с него будем начинать изучение, вы блядь просто ответить можете?
49 1270718
>>70716
С него - с Си, не с веба блядь
50 1270722
>>70716
это будет как отдельный диалект, параша ебаная
тебе нужен чистый си или залупа крокодила?
если первое, то нахуй VS
если второе (по-любому VS to est'), то тогда хуй его знает
там по идее какую-то строку в .cpp файле нужно дописать и будет как будто .с
51 1270725
>>70722
Там в настройках проекта надо выбрать си компилятор.
52 1270726
>>70716
Ты даже установить студию не можешь, ну или хотя бы погуглить.
давай скажи, что ничего не нашёл
53 1270748
>>70713
Разработка классических приложений на C++. Создашь C++ проект, создашь файл, укажешь расширение .c, будешь писать на Си.

>>70715
Pelles C все. Несколько лет назад Pelle дропнул поддержку ARM в качестве таргета, теперь, после двухлетнего молчания он дропнул поддержку 32-битной версии компилятора, а когда он появится в следующий раз, он скажет, что его все заебало, и даже исходников после себя не оставит. Можешь скринить.

>>70725
У MS один и тот же компилятор для C и C++, называется cl.exe.
54 1270754
>>70695
В чем я не прав
55 1270815
>>70748
Там есть какая-то галочка типо си-проект, там в компилятора просто какие-нибудь флаги используются, хз.
56 1271089
>>69896
Мимо та же ситуация.
57 1271111
>>70815
Не помню галочек, язык детектится по расширению файла, ничего дополнительно делать не нужно. А вот если ты извращенец, и хочешь компилировать .cpp как .c или .c как .cpp, то есть /TC и /TP соответственно.
58 1271118
>>69824 (OP)
Новую конфу треда добавьте в шапку в некст треде @hcdev
59 1271120
>>71118
Телеграмодебил, свали.
60 1271125
>>71118
О, прямо сегодня думал не создать ли такую. А тут ты. Ща чекну
61 1271130
>>71118

>139 чел.


Эм, че так много. Явно не с Си треда
62 1271137
char *ch; - указатель короче, если вакаба сожрёт звёзды
scanf ("%s", ch);
printf ("%s", ch);

Ананасы, обесните мне, куда строка попадает? Массив же не объявлен. Где эти байты?
63 1271138
>>71137
В лучшем случае программа выпадет в сегфолт.
В худшем - будет работать так, как есть.
64 1271141
>>71138 я прост где то подобный пример видел, то ли в крестах такое было то ли ещё где. Меня мучал вопрос что за хуйня. Я так понял что ТАК ДЕЛАТЬ НЕЛЬЗЯ?
Алсо gcc сожрал это без претензий и на рантайме все работало.
65 1271146
>>71141

>я прост где то подобный пример видел, то ли в крестах такое было то ли ещё где.


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

>Алсо gcc сожрал это без претензий и на рантайме все работало.


Формально претензий нет, но у тебя указатель не инициализирован. То, что он не указал на мусор - повезло.
66 1271150
>>71138
Собственно с чего бы? Он просто присваивает указателю какой-то адрес, и потом его распечатывает, пока он не обращается к памяти на которую указывает переменная, а она очевидно не выделена, все валидно работает.
sage 67 1271153
>>71150
А да, лол.
68 1271158
>>70713

>вижуал залупио


Зачем тебе эта параша, очевидно тебя анально пытаются заманить в сисярп, и сломать тебе жизнь...

Есть же божественный CLion, больше ничего не нужно же.

хотя я сам обхожуть Vim`ом, Sublime`ом, и только если чтото замороченное то Clion запускаю, он сразу все подсказывает
69 1271180
>>71158

> Есть же божественный CLion


> тормозящее платное джаваподелие

70 1271227
>>71180

>тормозящее платное джаваподелие


Может у того анона сервернвя стойка с блейдами специально да КЛиона выделенная.
71 1271245
>>71130
пидоры какие-то с другого района - даже смотреть теперь не буду. почему не в дисе? - в него и с браузера заходить можно!
72 1271263
>>71245
В телегу тоже.
мимо
73 1271264
>>70713
Поставь LLVM и хуячь через терминал
74 1271367
Помогите с Makefile:
Есть переменная и массив:
DIR = ./test
TEST = test1 test2 test3 test4 test5
нужно получить массив TEST_DIRS вида:
./test/test1/test1 ./test/test2/test2 ./test/test3/test3 ./test/test4/test4 ./test/test5/test5
75 1271385
>>71180

> тормозящее платное джаваподелие



У меня ноут i5, 16Гб рам, Ubuntu 16.04, все летает, вообще никаких тормозов.

> платное


КОМУНИТИ ЕДИТИОН
да и вообще какая проблема заплатить немножко денежек за ОЧЕНЬ годный продукт?
Неговоря уже про то что можно в докере поднять лиценз сервер и самостоятельно активировать если такой бомж...
76 1271497
>>71245
Есть местный дис канал?
77 1271561
>>71385

>ОЧЕНЬ годный продукт?


Который напоминает дауненку названия операторов? make уже прикрутили, лол?
78 1271564
>>71385

> все летает


laba1?
79 1271576
>>71385
Юзаем еклипс для девелопа, годнота.
мимо-кернельщик
80 1271580
>>71576

>еклипс


Тоже тормознутое говно. ИДЕ для пидоров.
81 1271588
>>71580
Зависимости и колбеки заебись показывает, тем более, что ещё использовать?
линукс кернел жи
82 1271617
>>71588

>что ещё использовать


OpenGrok для навигации и поиска
si.png123 Кб, 1284x778
83 1271622
>>71617

> OpenGrok для навигации и поиска


В браузере, фу. Труъ посаны используют пикрелейтед, его так никто и не смог превзойти.
84 1271625
>>71622

>В браузере, фу


А мне наоборот норм, можно сразу в инторнеты переходить, да и много чего у меня локально через браузер работает
Снимок.PNG1 Кб, 907x30
85 1271687
Наконец-то сделал 1.19 из K&R (нужно принять с клавиатуры ввод и заменить все табуляции на суммарно эквивалентное по длине количество пробелов -- в данном случае на "х", чтобы видно было). Получилось 100 строк, писал несколько часов, ощущение, что я даун, но всё равно приятно
86 1271689
>>71687
Сколько кодишь уже?
87 1271690
>>71689
Полгода назад попробовал в первый раз, неделю покодил, надоело, заб и так каждый месяц. Вот опять. Но на этот раз я точно, хех мде
88 1271691
>>71690

>заб забил,


slffx
89 1271702
>>71690
У меня тоже так, 1 раз бросил спустя недели 2. А сейчас во второй раз , уже подсел походу _(идет 2 месяц)_.
Почему Си выбрал?)
90 1271962
>>71702
Люблю структурное программирование. Ну и сишка это классика, это как латынь среди языков программирования, это знать надо. Еще у языка богатая история, он крепко занимает свою нишу, мне интересно железо, меня привлекает его строгость, простота и то, что он близок к корням программирования как промышленной отрасли, он очень портабельный и на нем можно запустить какую-нибудь крутую железяку. Люблю си. Кореш говорит, что я дебил и лучше бы за джаваскрипт скорее взялся, чтобы работать со смузи в коворкинге
91 1271969
>>71962
Прав твой кореш, на сишке вероятность найти работу крайне мала
1537902533781.jpg806 Кб, 1280x720
92 1272045
>>71962

> лучше бы за джаваскрипт взялся


Не скажу конкретно за твоего друга, но обычно так говорят люди которых программирование это лишь профессия для заработка. Либо это люди которые себя считают умнее других, и им кажется что они очень хитрые, раз выбрали сразу самый модный и популярный язык и сэкономили время. Но это на самом деле смешно звучит, когда речь идет о программировании как о любимом деле.
93 1272106
>>72045
Я с ассемблера на JavaScript перешёл. Нормально, считаю годится для изучения. Сейчас листаю свои бумажные книжки по программированию C++\C#\pascal всё стаёт понятно, раньше пытался учить и не понимал. Мне было сложно смотреть на код где столько писанины, с непривычки наверно.
94 1272118
>>71561
make с самого начала был, ололо
95 1272136
>>72118
С cmake не путаешь? Ололол
96 1272166
https://repl.it/repls/PiercingAppropriateMicrostation

Я правильно понимаю, что мы передаем указатель(то есть адрес нашего массива mas) в нашу функцию, а там он печатает ее, Но! Возникает вопрос.
получается, что массив это соединенные блоки памяти и байты с этими данными:
H
E
L
L
O
идут друг за другом? Именно поэтому имея адресс 1 ячейки, а именно 'H' мы итерацией идем по массиву?
держу в курсе.PNG69 Кб, 1337x667
97 1272169
Практически готовая метода для задания 1.20 из K&R. Нужно, где возможно, заменить пробелы на табуляции в принятой с клавиатуры строке так, чтобы ничего не разъехалось фпезду. А пацаны говорили, что математика кодерам не нужна...
98 1272171
>>72169
if mas == 'space' && mas(+1) == 'space'
delete mas(+1)
Вот и вся суть твоей задачи
99 1272172
>>72171
эй , куда мой ай(буква) делся
100 1272175
>>72171
Ну, почти
101 1272177
>>72166

> массив это соединенные блоки памяти и байты с этими данными


Круто, правда?

>>72169
Для замены пробелов на табы математика не нужна. И первые пять лет тоже не нужна. А потом оказывается, что ой как нужна, если ты, конечно, не посвятишь жизнь созданию шаблонного говна, используя чужие либы.
102 1272180
>>71962
Латынь это лисп.
103 1272182
>>72180

> Латынь это лисп.


Только по мнению лисперов и только потому, что сдохло и пахнет.
Псевдокод.PNG24 Кб, 1063x467
104 1272186
>>72169
Продолжаю. Сделал задание с учётом этой штуки на псевдокоде посредством рекурсивной функции. Круто, да?
105 1272187
>>72177

>Для замены пробелов на табы математика не нужна.


Ну, понятно. Но как бы ты сделал? Смешно, но мне показалось, что это путь наименьшего сопротивления. Буду рад узнать более очевидные решения, потому что задачка (для меня) интересная.
106 1272190
Забавно, что кто-то написал про лисп незадолго до того, как я запостил эту хуйню. Ладно, выкатываюсь из треда, а то заебал, небось
107 1272191
>>72187

> Но как бы ты сделал?


Да так же в общем-то. Просто описывается это простым человеческим языком, потому что само по себе простая и логичная вещь. Копируешь символы из входного потока в выходной. Если встретил пробел - не копируешь, а считаешь пробелы. Если дошел при подсчете пробелов до очередной позиции табуляции или встретил по пути таб - выводишь таб, если не дошел и не встретил - выводишь подсчитанное количество пробелов. Считать можешь внутренним циклом, можешь сделать флажок, с флажком меньше дублирующегося кода типа контроля границ.
108 1272204
>>72191
Это ты, конечно, просто и логично придумал, но сложность этого задания в том, что позиция табуляции постоянно смещается туда-сюда, потому что таб может представляться от 1 до 8 пробелами включительно, т.е. от 1 до 8 элементов в массиве у тебя могут быть заменены на один элемент табуляции в хитровыебанных местах, и если ты заранее не знаешь ввод, то и индексы элементов, под которые подгоняется табуляция, так по-простецки выяснить не получится.
109 1272206
>>72204

> т.е. от 1 до 8 элементов в массиве у тебя могут быть заменены на один элемент табуляции


Какие нахуй массивы, какие элементы и индексы? Ты читаешь посимвольно, можешь getchar() использовать (собственно, в K&R от тебя вроде бы getchar() и ждут).

> что позиция табуляции постоянно смещается туда-сюда


Позиция табуляции никуда не смещается, она фиксирована, она всегда кратна n (1n, 2n, 3n, 4n и т.д., для таба шириной 8 это будет 8, 16, 24, 32), в этом вся суть использования табов в тексте. Ты точно знаешь, сколько символов (похуй, каких) ты прочитал в текущей строке, оно равно количеству твоих getchar() забудем пока про табы во входной строке, пусть там только пробелы и не-пробелы, и поэтому ты точно знаешь, что после очередного символа ты оказался на позиции табуляции. И если ты оказался на позиции табуляции, а перед этим ты прочитал пробелы, ты выводишь сраный таб. Только в этом случае. И единственное, что тебе остается: считать ебаные пробелы и запоминать их количество вместо того, чтобы их выводить сразу.

Вот на входе у тебя "a......byyyy....z", точки - пробелы, а позиции табуляции я тебе жирным выделил. Вот ты прочитал a, вывел a, увидел пробелы и начал их считать (не выводя), насчитал 6 и прочитал b. Эта b не на позиции табуляции, поэтому ты вывел 6 пробелов, которые ты запоминал (только поэтому ты их и считал), вывел b, прочитал y. Ты на позиции табуляции, но пробелов перед y не было, поэтому ты вывел y, а потом прочитал и вывел еще три y. И опять начал считать пробелы. И прочитал 4 штуки, и такой - опа, z на позиции табуляции, и у тебя до нее было... абсолютно похуй, сколько, но у тебя БЫЛИ пробелы, поэтому ты высрал таб, высрал z и на этом закончил. И ничего хитровыебанного в этом нет. Конечно, тебе нужно бы обрабатывать концы строк и табы во входном потоке, тебе стоит попробовать не считать символы до бесконечности (а вдруг тебе 8 гигабайт скормят, а int 32-битный, а размер таба не кратен 2^32), но в целом это десять ебаных абсолютно очевидных строк.
109 1272206
>>72204

> т.е. от 1 до 8 элементов в массиве у тебя могут быть заменены на один элемент табуляции


Какие нахуй массивы, какие элементы и индексы? Ты читаешь посимвольно, можешь getchar() использовать (собственно, в K&R от тебя вроде бы getchar() и ждут).

> что позиция табуляции постоянно смещается туда-сюда


Позиция табуляции никуда не смещается, она фиксирована, она всегда кратна n (1n, 2n, 3n, 4n и т.д., для таба шириной 8 это будет 8, 16, 24, 32), в этом вся суть использования табов в тексте. Ты точно знаешь, сколько символов (похуй, каких) ты прочитал в текущей строке, оно равно количеству твоих getchar() забудем пока про табы во входной строке, пусть там только пробелы и не-пробелы, и поэтому ты точно знаешь, что после очередного символа ты оказался на позиции табуляции. И если ты оказался на позиции табуляции, а перед этим ты прочитал пробелы, ты выводишь сраный таб. Только в этом случае. И единственное, что тебе остается: считать ебаные пробелы и запоминать их количество вместо того, чтобы их выводить сразу.

Вот на входе у тебя "a......byyyy....z", точки - пробелы, а позиции табуляции я тебе жирным выделил. Вот ты прочитал a, вывел a, увидел пробелы и начал их считать (не выводя), насчитал 6 и прочитал b. Эта b не на позиции табуляции, поэтому ты вывел 6 пробелов, которые ты запоминал (только поэтому ты их и считал), вывел b, прочитал y. Ты на позиции табуляции, но пробелов перед y не было, поэтому ты вывел y, а потом прочитал и вывел еще три y. И опять начал считать пробелы. И прочитал 4 штуки, и такой - опа, z на позиции табуляции, и у тебя до нее было... абсолютно похуй, сколько, но у тебя БЫЛИ пробелы, поэтому ты высрал таб, высрал z и на этом закончил. И ничего хитровыебанного в этом нет. Конечно, тебе нужно бы обрабатывать концы строк и табы во входном потоке, тебе стоит попробовать не считать символы до бесконечности (а вдруг тебе 8 гигабайт скормят, а int 32-битный, а размер таба не кратен 2^32), но в целом это десять ебаных абсолютно очевидных строк.
110 1272256
>>72177

>Круто, правда?


Дыа) в интерпритируемых языках такое хуй узнаешь
111 1272257
>>72180
тогда уже Haskell
112 1272258
>>72190
Не уходи, нас и так мало..
113 1272259
>>72177

> А потом оказывается, что ой как нужна


А математика какого уровня нужна? Я знаю 9 классов тока
114 1272379
>>72256

> в интерпритируемых языках


Ты просто думаешь об указателях, как о чем-то особенном. Представь, что адресное пространство - это огромный массив байтов, а указатель - это индекс в нем (так оно и есть в большинстве случаев), и все будет точно так же, как и в любом другом языке программирования. Хоть в питоне, хоть в жаваскрипте. Странно было бы, если было бы как-то по-другому.

> байты с этими данными: H E L L O идут друг за другом


Ячейки в массиве идут друг за другом, вот неожиданность! Алсо, можешь выделить в жс Uint8Array побольше и работать с ним, как с сырой памятью, можешь даже маллок написать, который будет оттуда байты куски выдавать и еще strcpy запилить заодно, чтобы все охуели, как ты можешь (так вм пишут на самом деле).
115 1272390
>>72379

>Ты просто думаешь об указателях, как о чем-то особенном


Да, есть такое.. Ну яж ноВиЧоК.
А побайтовые сдвиги есть в других языках?
116 1272393
>>72379

>вм пишут


Что за вм
117 1272396
>>72390
Побитовые? Да, как правило есть. Если нет, легко заменяются умножением и целочисленным делением на степени двойки (привет, Visual Basic).
118 1273099
Доброй ночи. Есть классическая задача

while(условие первое)
{
while(условие второе)
{
Как отсюда выскочить наружу без goto?
}
}

Я знаю всякие штуки с exit(), abort() и return; Но теперь собственно вопрос. Можем ли мы как-либо задействовать сигналы, например запилить SIGALARM или что-то еще с таймером, чтобы внутренний цикл покрутился, но по происшествии времени процесс прервало по сигналу и поток передался в колбек-обработчик этого сигнала?
119 1273100
>>72045
Я встряну, ибо вопрос немного больной для меня. Сам вот учил программирование с си чистого и теперь освоить плюсы могу без проблем (вообще с ними, но в целом норм), а вот в сторону джаваскрипта даже смотреть не могу. Ну нинраицца и всё тут. Синдром утёнка у меня? Чё делать?
120 1273125
>>73099
А нахуя ты делаешь бесконечный цикл?
121 1273142
>>73099
Ну ты можешь в оба условия добавить volatile-переменную (да, volatile плохо, я знаю), которую будешь ставить в обработчике сигнала. А в чем вопрос-то?
122 1273147
>>73099
Чем тебе не нравится goto?
вскукареки аля это плохой стиль не принимаются, если использовать goto грамотно, то код не становится менее читабельным, один из таких примеров как раз у тебя, когда нужно из вложенного цикла уйти во вне внешнего цикла.
123 1273174
>>73099
А что у тебя за цикл такой который сам по себе не заканчивается?
sage 124 1273177
>>73174
Он походу брут пишет и хочет выводить статистику периодически. Собственно, тоже классическая задача.
125 1273183
>>73177
Так тогда в самом цикле можно сделать чтоб каждый 10к шаг выводил нужную статистику. В чем проблема?
Снимок.PNG6 Кб, 509x255
126 1273242
K&R 1.23 хотово. Удаляет комментарии из кода. (Пример на пике)
127 1273270
>>73242
Зачем спойлеришь тут, червь?
128 1273272
>>73270
Захотел
sage 129 1273433
>>73183
Ну так это не масштабируется. С 1 PPS ты статистики не дождешься, а с сотнями тысяч наоборот буксовать из-за лишнего IO. Хотя можно в зависимости от скорости считать, и все такое, но по сигналу гораздо красивее.

>>73242

> удаляет комментарии из кода.


printf("/ Все не так просто. /");
sage 130 1273434
>>73433
>>73242
Блядская макаба звездочки пожрала, ну ты понял.
sage 132 1273485
>>73442
// Точно-точно \
все продумали?
133 1273507
>>73485
Бля, проиграл люто
134 1273607
>>73100
Если он не нравится, но при этом есть необходимость учить.
То учи через силу. Во-первых если ты знаешь си, то тебе любой другой язык уже будет проще учить т.к суть везде одна, только "слова разные" и пару функций.. Во-вторых, чем больше учишь, тем потом легче учить дальше.
15385083078194.webm8,9 Мб, webm,
853x480, 5:10
135 1273623
>>71158

>Есть же божественный CLion


>>71180

>> тормозящее платное джаваподелие


>>71561

>Который напоминает дауненку названия операторов?


>>71576

>Юзаем еклипс для девелопа, годнота.


>>71580

>Тоже тормознутое говно. ИДЕ для пидоров.



IDE это быстро и удобно!
136 1273630
>>73485
Да.
LionsCommentaryonUNIX6thEditionwithSourceCode.jpg28 Кб, 300x232
138 1273656
>>73654

Все на месте, инженеры.
44222.PNG5 Кб, 363x166
139 1274427
Почему когда я создаю указатель на массив, который имеет с ним схожий тип int , выдается ошибка

assignment from incompatible pointer type (назначение из несовместимого типа указателя)
Не хочу постоянно юзать тип поинтера *void
должно же по идее работать, когда схожие типы.
140 1274435
>>74427

> я создаю указатель на массив


Ты создаешь указатель на первый элемент
141 1274441
>>74435
Он берет АДРЕС указателя на первый элемент. Хуйню делает, короче.
>>74427
Строка Pmas = &mas;

Либо замени на Pmas = &mas[0];
Либо замени на Pmas = mas;
142 1274452
>>74435
>>74441
А разве, когда мы берем адрес 1 элемента массива мы не можем работать с массивом ? Все элементы массива разве не идут друг за другом? То есть 1 элемент если увеличить на единицу по итерации (++) то мы не попадем на 2 элемент?
143 1274456
>>74452
mas уже указывает на первый элемент.
mas[0] это значение первого элемента.
&mas[0] это адрес первого элемента.

&mas[0] и mas это одно и то же.

А ты вместо этого делаешь &mas, что даёт тебе адрес, который указывает на адрес, который указывает на первый элемент.
144 1274458
>>74452
Попадём, mas это указатель на первый элемент.
mas[0] это сам первый элемент.
15355750213200.jpg771 Кб, 3672x2866
145 1274462
>>74458
>>74456
Спасибо братки
sage 146 1274469
>>74441
>>74435
Вы оба не правы. В языке есть тип "указатель на массив". Указатель такого типа численно равен указателю на первый элемент, у него, но тип у него другой. И вообще, поведение языка чуть сложнее, чем "указатель на первый элемент". Вот вам: https://ideone.com/huAMFl
147 1274475
>>74469
Я знаю, но ошибка того чувака была более грубой, а не в том, о чём ты говоришь.
sage 148 1274478
>>74475

> ошибка того чувака была более грубой


Он сказал, что создает указатель на массив. Он и создавал указатель на массив, но неправильно.

>>74456

> А ты вместо этого делаешь &mas, что даёт тебе адрес, который указывает на адрес


А вот это неправда, меняется лишь тип.
149 1274481
>>74478

>А вот это неправда, меняется лишь тип.


Да, действительно.
150 1274489
>>74469

>Вы оба не правы.


Лол, ошибку я нашел сразу, а вот как попытался сам себе объяснить, так охуел, в пизду короче, я сегодня на такое не способен
sage 151 1274492
>>74489

> а вот как попытался сам себе объяснить, так охуел


Ну вот я попытался по ссылке на ideone.
152 1274506
>>74492
Ты молодец
153 1274540

>Zed A. Shaw "Learn C the Hard Way


На русиш не переводили? А то тут братишке нужно помочь с С (не спрашивайте зачем), а у него настолько плохо с англицким, что он карту МТГ прочитать не может.
154 1274587
Сап я студент, объясните почему код не выводит 6000 чисел через пробел?

#include <stdio.h>

int main() {
int x = 4294956830;
while (x > 71585) {
printf("%d ", x);
x -= 71585;
}
printf("%d", x);
}
155 1274589
>>74587
Самое интересное что он вроде работает, но не с этими числами
156 1274591
>>74587
У тебя, как минимум, X принимает отрицательное значение, так как твоё числе в signed int не помещается.
Соответственно, он никогда не бывает больше 71585.
sage 157 1274592
>>74587
У тебя 32-битный знаковый int с диапазоном от -2147483648 до 2147483647 включительно. Очевидно, что (int) 4294956830 = -10466 никак не больше 71585.
158 1274602
>>74592
Значит достаточно int заменить на unsigned int?
159 1274607
>>74602
В данном случае — да, так как в unsigned int он помещается. Но помещается еле-еле, так что если возьмёшь X побольше, то снова работать не будет.
160 1274609
>>74607
Спасибо, ты мне очень помог, в инете инфы не нашел
161 1274647
>>74609
Ты просто не знал, что искать.
162 1274679
запустил тут из цигвина меднафен (он не сконфигурирнован на цигвин), так: mednafen.exe "$(cat /cygdrive/d/segapath.txt)"Gods.zip

в файле путь до папки с ромами, в пути есть кириллица, а файл в формате ютф-8 (сигнатура убрана). так вот, я не очень понимаю, почему это работает? виндовс 7.

причём кириллицей имя пользователя - я так понял какая-то специальная папка-сущность в винде. в плане, это либс подстраивается под кодировку и дёргает нужный винапи вызов (с юникодом или без), или имена файлов в семёрка в ютф8, или у таких папок много имён-линков в разных форматах?
163 1274709
Ребята, зачем вся библиотека написана с помощью следующих конструкций:

static int f(параметры)
{}

int libname_f(параметры)
{return f(параметры)}
164 1274713
>>74709
почему бы и нет. декларируешь внешнее имя, а дальше пишешь как хочешь. хочешь аргументам типы поменяй, хочешь раздели на две функции. мне так кажется.
sage 165 1274726
>>74679

> это либс подстраивается под кодировку


Нихуя не понял, что тебе не нравится. В винде путь хранится в UTF-16, неюникодных апи не существует (внутри -A функций просто MultiByteToWideChar с CP_ACP и обратно), получаешь и кодируешь куда тебе нужно. Каким местом тут кодировка самого файла - совсем непонятно.

>>74709
1) Долбоебы.
2) Долбоебы решили, что когда-нибудь захотят изменить реализацию, но на самом деле никогда этого не сделают.
166 1274752
>>74726

>Каким местом тут кодировка самого файла - совсем непонятно.


так и пиши: мне не понятно. в приведённом скрипте из файла берётся путь, склеивается (как есть) с Gods.zip и передаётся в программу.

и разве в винде ютф16, там же нет парных кодов.
167 1274760
>>74726
и ты говоришь пути, это значит и имена фалов? ну вообще логично, просто забыл немного. наверно цигвин свою либс подсовывает, которая ожидает ютф-8.

или если он компилируется мингв, то тот либс предполагает ютф-8 в fopen.
168 1274767
хотя это бред. cmd же в однабайтовой кодировке. все мысли как-то перепутались.
169 1274790
>>74726

> Долбоебы


Вообще это кусок одного (относительно) известного гнушного проекта. Не знаю, уменьшает ли это вероятность долбоебизма, но изменения у них иногда происходят.
sage 170 1274814
>>74752

> и разве в винде ютф16, там же нет парных кодов.


Давно уже есть. В 2000 вроде еще UCS-2 был, но потом осилили полноценный UTF-16.
171 1274885
Доброй ночи.
Я тут заметил у себя с недавних пор привычку, которая возможно вредная и вообще плохо, хочу спросить у вас, что скажете.
Привычка следующая, при работе со строками делать как-то так ( вместо звездочки):
char str; // строка полученная в аргументе, ее же, допустим, нужно вернуть, так что куда указатель показывал, там и останется

for(char i = str; i; ++i)
{
А тут всякие дела делаются. Смысл в том, что мы пользуемся свойствами си-строк, что они заканчиваются нулем, а указатель на нуль разыменовывается как 'ложь'.
Можно было сделать while и завести лишнюю переменную, но мне не хочется.
}

Итак, какие подводные камни? Я спрашиваю, т. к. нигде больше не встречал такой штуки. Может тут где-то нарушение нюансов стандарта или слишком неочевидный подход для того, кто будет это поддерживать?
172 1274886
>>74885
Мумь пожрал и тот символ тоже.

char ^str; // строка, указатель не менять

for(char ^i = str; ^i; ++i)
{
Работа со строкой. Проходим по ней через временный указатель i.
}
173 1274918
>>74540
Я бы настороженно относился к этому автору.
174 1274921
>>74885
Я здесь вижу только все проблемы, связанные с тем, если нуль случайно проебётся.
sage 175 1274951
>>74885
Это нормальный подход. Особой разницы между for (size_t i = 0; str[​i​]; i++) и for (char ∗ptr = str; ∗ptr; ptr++) нет, пиши, как тебе нравится. Вариант с указателем может оказаться даже быстрее. Или тебя смущает, что в for что-то отличающееся от классического i = 0; i < n; i++? Ну так это тоже нормально, в for делают все сорта извращений вплоть до for (int c; (c = getchar()) != EOF; putchar(tolower(c)));
176 1274970
>>74427
Если ты элементы массива явным перечислением задаёшь, то нулевой символ сам не ставится, кстати
177 1274990
>>74970
А как его ставить?
178 1274993
>>74990
У тебя целочисленный массив, какое '\0'? Это только в строках ставится.
179 1274994
>>74970
>>74990
Ой, не то спросил.
Точнее а как делать, если я не в курсе входных данных?
И не уверен,что там будет нуль-символ. Всегда увеличивать на 1 ячейку в массиве и пихать нульч?
180 1274996
>>74993
А как тогда понять ,где конец инт массива? Если не знаешь размер?
181 1274999
>>74996
sizeof(mas)/sizeof(int)
182 1275036
Как в C90 распечатать юникодную строку символ за символом?
183 1275038
>>74993
char это на самом деле int, поэтому хуй знает
184 1275041
>>75038
char - 1 байт, int - 4 байта это раз
Во вторых у тебя массив чисел, а не символов, у тебя число из массива может совпадать с кодом символа '\0' ты об этом не подумал а? а?
185 1275042
>>75041
Ну так-то да.
Вообще, я читал где-то, что нуль-терминейшн строк это чисто конвенциональная херня, нужная потому, что некоторые функции стандартной библиотеки опираются на нулевой символ как конец строки
186 1275227
>>74587
Что ещё за -=? Я до этого ещё не дочитал.
187 1275265
>>75227
a <operator>= b
то же самое, что и
a = a <operator> b
188 1275387
Почему с FILE из popen, функции fseek, rewind и т.д выдают ошибку illegal seek? Как тогда перемотать его?
куча-мета-о-ома-61077703.jpg219 Кб, 1300x913
189 1275409
Посоны, обесните мне. Например есть у нас многомерный массив, допустим трёхмерный.
int ar[8] [8] [8]
и делаем, например в динамической памяти ещё один массив, но на базе указателей.
int *dinar // тут должно быть три звезды если макаба не сожрёт.
ну потом я короче как бы создаю массивы указателей на указатели потом ещё массивы указателей на массив и маллокаю всю эту порашу в динамической памяти.
Так вот вопрос, поскольку массив по сути указатель на первый элемент массива, то первый массив тоже тащщит на себе в нагрузку несколько комплектов массивов указателей.
sibo01.png77 Кб, 300x300
190 1275417
>>75409
Ты вопрос не задал.
В первом случае у тебя один указатель на массив.

А если у тебя 3 звезды, то у тебя не многомерные массив, а массив массивов массивов.
Что во многих случаях плохая идея.

Ты должен был прочитать введение в си массивы, организация памяти обязательно должна быть объяснена в любом учебном пособии.
sage 191 1275443
>>75387

> Как тогда перемотать его?


Это не файл, это поток, пайп не хранит данных ну почти, там есть небольшой буфер, и у FILE еще свой небольшой буфер есть, а лишь передает их от производителя к потребителю. Поэтому seek не имеет смысла - назад ты не можешь пойти, потому что данных уже нет, вперед не можешь, потому что ты еще текущие данные не доел, а rewind не имеет средств попросить производителя начать производить с начала, да и у производителя не всегда есть такая возможность в принципе.

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

>>75409

> Так вот вопрос, поскольку массив по сути указатель на первый элемент массива, то первый массив тоже тащщит на себе в нагрузку несколько комплектов массивов указателей.


Массив - не только указатель, это тип. Обсуждали недавно, вот сюда глянь >>74469.

Допустим, у нас int arr[10][11][12] (чтобы не путать измерения). Этот массив ничего никуда не тащит, это непрерывный кусок памяти на 10 ∗ (11 ∗ (12 ∗ sizeof(int))) элементов. Когда ты индексируешь массив [], компилятор превращает твои arr[1][2][3] в арифметику указателей. Он точно знает тип (а значит и размеры) массива. Он делает ∗((int ∗) arr + ((11 ∗ 12 ∗ 1) + (12 ∗ 2) + (3))) (не забывай, что тут арифметика указателей и полученный офсет еще домножается на sizeof(int)). Все числа, кроме индексов, выделенных жирным - константы, поэтому они явно нигде не хранятся, а сворачиваются и попадают в виде непосредственных значений прямо в инструкции умножения. В самом массиве никакая размерность не хранится, она известна только на стадии компиляции. Это если не брать в расчет VLA, c VLA все сложнее.

Поэтому в случае нормального массива никакие промежуточные указатели не нужны. В случае с динамическим массивом int ∗ не несет никакой информации об измерениях, поэтому для доступа к элементам ты либо самостоятельно используешь формулу выше (например, классическое ptr[y ∗ width + x] для динамического двумерного массива), либо делаешь промежуточные указатели.

Алсо, если у тебя лишь первое измерение динамическое, например, массив из некоторого количества строк, состоящих из заранее известного количества (допустим, 11) столбцов, состоящих из заранее известного количества (допустим, 12) символов, ты можешь использовать указатель на массив char (∗arr)[][11][12] и заставить компилятор делать всю адресную арифметику (т.к., в таком виде компилятору известны все измерения, кроме первого, которое не нужно для вычисления офсета).

>>75417

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


Синонимы в Си и во многих других языках тоже.
sage 191 1275443
>>75387

> Как тогда перемотать его?


Это не файл, это поток, пайп не хранит данных ну почти, там есть небольшой буфер, и у FILE еще свой небольшой буфер есть, а лишь передает их от производителя к потребителю. Поэтому seek не имеет смысла - назад ты не можешь пойти, потому что данных уже нет, вперед не можешь, потому что ты еще текущие данные не доел, а rewind не имеет средств попросить производителя начать производить с начала, да и у производителя не всегда есть такая возможность в принципе.

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

>>75409

> Так вот вопрос, поскольку массив по сути указатель на первый элемент массива, то первый массив тоже тащщит на себе в нагрузку несколько комплектов массивов указателей.


Массив - не только указатель, это тип. Обсуждали недавно, вот сюда глянь >>74469.

Допустим, у нас int arr[10][11][12] (чтобы не путать измерения). Этот массив ничего никуда не тащит, это непрерывный кусок памяти на 10 ∗ (11 ∗ (12 ∗ sizeof(int))) элементов. Когда ты индексируешь массив [], компилятор превращает твои arr[1][2][3] в арифметику указателей. Он точно знает тип (а значит и размеры) массива. Он делает ∗((int ∗) arr + ((11 ∗ 12 ∗ 1) + (12 ∗ 2) + (3))) (не забывай, что тут арифметика указателей и полученный офсет еще домножается на sizeof(int)). Все числа, кроме индексов, выделенных жирным - константы, поэтому они явно нигде не хранятся, а сворачиваются и попадают в виде непосредственных значений прямо в инструкции умножения. В самом массиве никакая размерность не хранится, она известна только на стадии компиляции. Это если не брать в расчет VLA, c VLA все сложнее.

Поэтому в случае нормального массива никакие промежуточные указатели не нужны. В случае с динамическим массивом int ∗ не несет никакой информации об измерениях, поэтому для доступа к элементам ты либо самостоятельно используешь формулу выше (например, классическое ptr[y ∗ width + x] для динамического двумерного массива), либо делаешь промежуточные указатели.

Алсо, если у тебя лишь первое измерение динамическое, например, массив из некоторого количества строк, состоящих из заранее известного количества (допустим, 11) столбцов, состоящих из заранее известного количества (допустим, 12) символов, ты можешь использовать указатель на массив char (∗arr)[][11][12] и заставить компилятор делать всю адресную арифметику (т.к., в таком виде компилятору известны все измерения, кроме первого, которое не нужно для вычисления офсета).

>>75417

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


Синонимы в Си и во многих других языках тоже.
192 1275592
Актуально ли под x86 проверять указатели на NULL после malloc, calloc, realloc и т.д? Или это стереотип из времен когда 640кб должно было хватит ь всем?
193 1275644
>>75443

>Синонимы в Си и во многих других языках тоже.


Внезапно, нет.

Сам же, пишешь

> Он точно знает тип (а значит и размеры) массива. Он делает ∗((int ∗) arr + ((11 ∗ 12 ∗ 1) + (12 ∗ 2) + (3)))



В случае же массива массива массивов, происходит вот что.
1. arr2 = (arr1 + index1)
2. arr3 =
(arr2 + index2)
3. result = *(arr3 + index3)
194 1275645
>>75592

>Актуально ли под x86 проверять указатели на NULL после malloc, calloc, realloc и т.д? Или это стереотип из времен когда 640кб должно было хватит ь всем?


Используй rust!
195 1275653
>>74469
// arrptr - указатель на массив неопределенного количества int.
int (★arrptr)[] = &arr;
Какой-то извращенный способ написать две звездочки.
196 1275744
>>75644

> Внезапно, нет.


Внезапно да. Есть два варианта: либо многомерные массивы поддерживаются как отдельная сущность, т.е., int foo[1,2,3], либо они конструируются из существующих, т.е., массив массивов int foo[1][2][3] - массив из 1 массива из 2 массивов из 3 int. Третий же вариант, когда у тебя массив указателей на массив указателей на int - это вообще строго говоря не массив.

>>75653

> int (★arrptr)[] = &arr;


> Какой-то извращенный способ написать две звездочки.


Две звездочки - это указатель на указатель на инт. Процитированный синтаксис - это указатель на массив интов. Это разные вещи: если посмотришь адреса в выхлопе программы, осознаешь, что во втором случае никаких промежуточных указателей нет.
197 1275755
>>75592
я как-то задавал такой вопрос тут же, скинули код, когда осталась ещё память, но всё равно возвращался нулл и тогда писал в память с константами, поэтому я проверяю всегда, и тебе советую
198 1275872
#include <stdio.h>
// сильно ток не бейте
int print_bars(int len) {
for (int i=0; i < len; ++i)
printf("%c", 'X');
}

int main() {
int test_array[10];

for (int i=0; i < 10; ++i)
test_array;

print_bars(test_array[9]);
}

Если test_array[9] - куча иксов, если что-либо другое, то или ничего, или бесконечный луп.
Чому так?
199 1275875
200 1275877
>>75872
Ой все, джва часа думал, а как только запостил, сразу все понял.

>test_array = i же


можете бить сильно
201 1275903
>>75872
printf воспринимает нулевой символ, поэтому можно распечатывать его без функции print_bars, а просто вызвать массив как строковый: printf("%s", test_array); Ну это так
202 1275906
for (int i=0; i < 10; ++i, test_array=i);
Алсо, for можно вот так вот задать вроде, олды, помохите, для краткости
sage 203 1275907
>>75906

>test_array=


slffx
sage 204 1275908
>>75907
Да сука.
test_array[ай] = ай
sage 205 1275910
>>75906
for (int i=0, test_array[ай] = i; i < 10; ++i, test_array[ай]=i);
всё, вот так
206 1276025
есть ли в си возможность инициализировать массив где к элементу можно обратиться не по номеру элемента а по строке например или символу, видел такое в паскале
например массив capitals типа bool хранит информацию о странах и столицах capitals[Russia][Moscow]==1, тогда москва-столица
207 1276046
>>76025
Только проинициализируй значения Russia и Moscow
208 1276047
>>76046
можешь примерчик ебануть, или ткнуть где их посмотреть?
209 1276048
>>76025

> обратиться не по номеру элемента а по строке например


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

> или символу


elem_type everychar[256];

> capitals[Russia][Moscow]==1


У одной страны может быть несколько столиц? Нахуй такое делать? Делаешь словарик страна -> столица (ассоциативный или даже обычный отсортированный массив, сложность лукапа от O(1) с удачной хэш-функцией до O(log2(n))). Но можешь и просто пронумеровать страны и столицы и сделать capitals[russia_index][moscow_index].
210 1276050
>>76047
#define Russia 988
#define Moscow 1147
211 1276053
>>76048
ну вот индексацией и решил воспользоваться, спасибо
image.png21 Кб, 660x374
212 1276057
алсо, неужели в сях так не ебануть?
213 1276085
>>76057
Можно все, если реализуешь соответствующую структуру данных. Но не жди, что Си будет что-то делать за тебя, как компилятор паскалей.
214 1276093
>>76048

>У одной страны может быть несколько столиц?


Амстердам и Гаага в Нидерландах например.
215 1276103
>>76093

> Официальной столицей государства, согласно конституции Нидерландов, является Амстердам

216 1276121
>>76048
В ЮАР три столицы.
sage 217 1276123
>>76121
- Я поехал в столицу, одна нога здесь, другая там, а третья...
Неспособность некоторых стран определиться, какой мухосранск лучше другого никак не влияет на то, что страна и столица - это 1:1 маппинг.
218 1276131
>>76123
Ну хотят иметь три столицы, пусть имеют, места в базе полно.
Или, может, год лучше хранить в двух цифрах?
sage 219 1276145
>>76131
Проблема Y2K была по большей части надуманной, почти ничего нигде не сломалось. Ломаться начнет примерно лет через 40, а к тому времени дат из двух цифр уже в работающем коде уже точно нигде не останется.
220 1276164
>>76145

>222ch.hk/pr/, 2058 год


>Проблема 32-битногг была по большей части надуманной, почти ничего нигде не сломалось.

sage 221 1276175
>>76164

> 2058


2038.

> была по большей части надуманной


Именно так. Еще почти 20 лет до переполнения 32-битного signed time_t и еще овер 80 лет до переполнения unsigned. 32-битные машины за это время спокойно вымрут сами, и насильно тащить в 32-битный код 64-битный time_t было совершенно незачем. Такие дела.
222 1276345
>>76175

>32-битные машины за это время спокойно вымрут сами


А ПО - нет.
sage 223 1276352
>>76345
А где ты его запускать-то будешь, свое ПО? Вон дистры линукса один за другим дропают 32-битные ядра, скоро и о /lib32 позаботятся.
224 1276363
>>76352
Эмулировать.
225 1276365
>>76352
>>76363
Но вообще на самом деле я только за.
226 1276441
Ребят, прошу помощи, с синтаксисом более менее разобрался, но никак не могу придумать как решать следующие задачи:
1)Поменять местами столбцы матрицы так, чтобы элементы первой строки оказались упорядоченными.
комментарии к заданию:
Массив создается динамический, работа с элементами массива происходит через указатели (т.е. в программе полностью отсутствуют квадратные скобочки). В главной функции (main) происходит только запрос размера массива (ввод пользователем с клавиатуры), задание элементов матрицы вручную или случайным образом (выбор пользователем), и вызов двух функций а)та, которая выполняет задачу; б)функция печати матрицы.

2) Дана строка. Если слова в ней упорядочены по алфавиту, то вывести 'yes', иначе вывести первое слово, нарушающее алфавитный порядок.
комментарии к заданию:
Строка записана в текстовый файл. Необходимо считать ее, после чего результат выполнения задания записать в другой текстовый файл. Слова могут быть разделены между собой пробелами, знаками препинания.

Да, они очень подробно расписаны, но я всё не могу взять в голову, с чего начать. Опытные аноны, помогите аутисту, натолкните на путь истинный.
227 1276458
>>76441
Вторая задача: любой символ, представленный как int, имеет свою кодировку, при этом алфавит идёт в таблице кодов одной такой большой лепёхой подряд, в алфавитном порядке, т.е. ты можешь сравнивать их на порядок в алфавите через арифметические операторы сравнения. Сам алгоритм проверки я бы так сделал: первую букву слова можно находить по индексу табуляции, пробела и таба + 1, вторую -- то же самое, но + 2, и так далее. Сравниваешь первые буквы попарно, если первая буква как int меньше второй буквы (потому что код у более поздней буквы в алфавите больше, понятно да), то всё норм, потом вторые буквы, и так далее. Условие, при котором процесс останавливает работу и как он обрабатывает слова с разной длиной, придумай сам это легко
228 1276465
>>76458
спасибо, стало чуточку яснее. Я правильно понимаю, что такие задания это ультраизи фигня, но не стоит отчаиваться, если они не получаются на начальном лвле или путь в прогеры уже закрыт? Ну и что можешь сказать по первой задаче?
sage 229 1276528
>>76441
1) В смысле, просто отсортировать по первой строке? Притащи что угодно, хоть selection sort, хоть пузырек и сортируй, там два с половиной вложенных for, но это медленно, потому что при сортировке столбцами ты будешь тратить время на перестановки второй и последующих строк в столбцах. Поэтому лучше сделай из первой строки матрицы пары массив пар (value, original_index), отсортируй его банальным библиотечным qsort-ом по value, а потом пройди по этому массиву и на основании original_index точно в таком же порядке переставь местами столбцы в матрице.
2) Наговнокодь динамический массив (или просто достаточно большой статический массив), разбей strtok-ом строку на слова и положи туда, пройди по массиву, сравнивая слова strcmp-ом. Если на каком-то шаге strcmp(item[-1], item) вернула 1 - массив не отсортирован.
sage 230 1276529
>>76528

> вернула 1


Вернула >= 1, прошу прощения.
231 1276745
>>76528
>>76529

>Помощь с сагой


Ты дебил или да?
sage 232 1276756
>>76745
Если анону помощь по-прежнему нужна, он и так в тред зайдет, а бампать этими хелловорлдами я не хочу.
233 1276790
>>76745
Сагающий анон главный источник информации итт уже несколько лет, он отлично знает тонкости байтоебства, стандарты и их различия.
А ты петух залетный.
235 1277050
>>76910
Кекнул
calloc.png15 Кб, 429x286
236 1277240
Может кто-нибудь объяснить, как работать с массивом, заданным через calloc? Задать-то я его задал, вот только нихуя туда не записывается (проверил его принтами, не принтит вообще ничего, мб в for'е ошибка, но amount(file) число выдает, проверял). Просто не могу найти где нормально об этом написано, и указатели все натыкал просто по ругани от компилятора.
sage 237 1277259
>>77240
А, сори , не надо отвечать, тут перестала резко работать функция amount.
238 1277277
>>77259
Тебе не жалко файл столько раз подряд насиловать своей amount? Она же там у тебя наверняка что-то читает внутри каждый раз?
239 1277286
Чо не так? https://ideone.com/9yhy2Q

>Write a program to print a histogram of the frequencies of different characters in its input.



Хуй с ним с хистограмом. Как тут по-нормальному сделать?

Думал так, но чот не выходит.
for character in stdin:
array[int(character)]++
for i in array:
print(char(i): array)
240 1277287
>>77286
ты в тот тред пишешь?
241 1277290
>>77287
Да. Это псевдокод же.
242 1277295
>>77286

> Чо не так?


Вот это:

> histogram[​i​] >= 'a'


Ты считаешь в массиве, индексируемом кодом символа количество символов, а сравниваешь количество с кодом символа. Не знаю, зачем ты вообще сравниваешь, но если уж хочешь ограничиться только буквами, сравнивай 'a' с i. Алсо, введя какой-нибудь UTF-8, ты попортишь память из-за размера массива в 128, а не 256 символов.

> Как тут по-нормальному сделать?


Что сделать? Что значит print(char(i): array)?
243 1277299
>>77295

>Ты считаешь в массиве, индексируемом кодом символа количество символов, а сравниваешь количество с кодом символа.


Спасибо.

>Что сделать?


Там вакаба скушала.
Чтобы было:
с: 15
a: 27
b: 12
и т.д.
244 1277301
>>77299
Чтобы вакаба не кушала, в оппосте есть магия. Чтобы получился такой выхлоп, исправь в printf %3d на %c.
245 1277336
>>77277
Да, наверное это не очень рационально, ввел туда равную ему переменную, теперь компилятор segmentation core dumped выдает, пойду покопаюсь в указателях.
246 1277368
>>77336
А тебя не смущает, что ты вот выделил массив указателей на double, выделил calloc-ом, они нули, а потом ты делаешь scanf("%lg", meas1[​i​]), т.е., scanf("%lg", NULL)? И чего ж оно сегфолтится? Тебе нужен простой массив даблов, т.е., double ∗meas1=calloc(...); и scanf("%lg", &meas1[​i​]...
247 1277417
>>77368
Спасибо.
248 1277436

>Exercise 1-19. Write a function reverse(s) that reverses the character


string s. Use it to write a program that reverses its input a line at a time.

https://ideone.com/obvjq7

Вместо ожидаемого выплевывает пустоту. Защо?
249 1277441
>>77436
Ну в который раз, только стоит запостить и сразу видишь свою ошибку.
Надо было return last_letter; сделать.
250 1277489
>>77436

> https://ideone.com/obvjq7


Тестируй тщательнее - ты наебался с индексами.
1) Строки из одного символа считаются за пустые, потому что return last_letter возвращает последний индекс, а последний индекс для строки из одной буквы - ноль.
2) Параметр у reverse называется len, а передаешь ты все тот же индекс. Но логика кривая, и поэтому оно работает. Вообще <= в цикле - это хороший признак, что у тебя либо 1-based индексы, либо ты где-то наебался на единицу.
3) Цикл заканчивается, когда i > len, т.е., указывает на следующий элемент после строки, но ты зачем то делаешь i + 1 при присваивании '\0', что приводит к test -> tsetx, где x - какой-то мусор из стека.
251 1277683
>>69833
Еще есть божественная Дишечка, в ней все сделано по-человечески.
Снимок.PNG30 Кб, 1129x588
252 1277685
>>77436
хелоу ворлд
253 1277702
>>77683
Есть сборщик мусора = не может считаться ни системным языком, ни вообще упоминаться радом с Си.
254 1277717
>>77702
Прожженные байтоебы могут убирать за собой мусор сами, за нормальных людей это делает уборщик.
255 1277727
>>77717

> за нормальных людей это делает уборщик


Про этих нормальных людей целый тред есть >>1274731 (OP).
256 1277737
Привет, Анон. Расскажи мне пожалуйста, есть ли в языке си способ разместить функцию в коде таким образом, чтобы при компиляции не происходил вызов этой функции, с перекладыванием переменных в стек и переходом на адрес функции, а чтобы компилятор затолкал эту функцию непосредственно в функцию из которой она вызывается. С меня как обычно.
257 1277771
>>77737
inline.
258 1277849
>>77771
Напомню, что компилятор имеет право класть на этот атрибут любые свои части. Поэтому обычно делается зависимый от компилятора дефайн на __forceinline или __attribute__((always_inline)).
259 1278302
это вечная история. каждый раз находятся люди, считающие что они умней компилятора.
260 1278304
>>78302

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

261 1278307
>>78304
О, да тут и искать не нужно. Всего три буквы: Г, Ц, Ц.
262 1278313
>>78307
Clang тоже, разве нет?
263 1278324
>>78302
-O0
и никаких гвоздей
264 1278490
>>69824 (OP)
Использую while(!kbhit()) для пауз в программе, но после нажатия любой клавиши соответсвующий символ печатется на экране, как этого избежать?
265 1278494
>>78490

> после нажатия любой клавиши соответсвующий символ печатется на экране


Ты читай символ-то. Он же от _kbhit() никуда из буфера ввода не девается. Делай _getch() после цикла.
266 1278523
>>78494
А зачем мне тогда вообще while(!kbhit()), ведь getch() далет то, что мне нужно и без while(!kbhit())? Почему тогда все советуют использовать while(!kbhit()), аргументируя тем, что getch() не всегда бывает надёжен?
267 1278559
>>78523
Я не знаю, зачем тебе нужно while (!_kbhit()). Его сфера применения - когда тебе нужно делать в теле этого while, _getch() сам по себе в таких случаях не подходит, потому что блокирует поток, в котором вызван. Насчет надежности ничего не знаю, максимум там будет проблема с непустой очередью ввода, ну так она и _kbhit() тоже затронет.
268 1278733
Аноны ,я блять тупой.
Мне препод дал задачу "вывод чилса в двоичной\8чной\16чной системе"
Для 2чной написал цикл с выводом остатка деления на 2 и возвратом каретки
А эта ебучая каретка когда возвращается ,то заменяет все ,что было выведено до этого.Че за залупа блять?я быдлокодер с 10-ю минутами стажа в visualstudio
sage 269 1278751
>>78733
в винде перевод каретки - \r\n
270 1278842
>>78751
Да я через cout выводил ,через printf заработало все
271 1279139
>>78733
Ставь линукс.
272 1279199
Подкиньте материалы на тему как скомпилировать свое ядро нужной версии, свой glibc под эту версию ядра, и свой gcc под эту версию glibc, чтоб дальше собрать свою Си программу под это окружение
273 1279208
>>73623
Пользуюсь Emacs'ом, посмотрев это видео ужаснулся :')
274 1279214
>>78842
Для cout конец строки std::endl
275 1279684
Друзья, обычно для инициализации бинарного дерева узлы перечисляются в префиксном порядке, как инициализировать дерево если порядок постфиксный или инфиксный
276 1279698
>>79684

>постфиксный или инфиксный


обрати строку
277 1279699
>>79698
тобиш без обработки строки не вар?
278 1279705
>>79699
ты что в узлах хранишь то?
279 1279708
>>79699
дерево* ф(строка){
дерево д;
д->val=символ_строка;
д->лево=ф(строка);
д->право=ф(строка);
return д;
}
ну вот для префикс а как изменить функция шоб можно было пост/ин фиксный порядок взять
280 1279710
>>79708
читай строку с конца
281 1279712
>>79710
так тогда зацикливание, фия начинается с рекурсии
282 1279713
>>79712
отрезаешь по буковку справа
283 1279714
>>79713
просто считывая с конца не катит, строки не зеркальные ведь
284 1279716
Ну используй явный стек вместо рекурсии, будешь туда пихать недоеденные ноды.
285 1279717
>>79714
какая то хуйня, где ты ее взял? что это за строки, какова цель?
286 1279718
>>79717
перечисления узлов, /-значит шо возвращаем null
287 1279719
>>79718
коких узлов, что в них? чем fca отличается от a/c/f?
288 1279720
>>79716
я вижу шо со стеком постфиксная катит, но инфиксная как тогда
289 1279725
>>79719
3 строки это обзывательства одного и того же дерева, правила чтения ток разные, более подробно хз как
290 1279727

>>1>>79725


/ значит для обозначения листьев
in.png4 Кб, 381x308
291 1279736
>>79720

> но инфиксная как тогда


А вот так. Обойди вот это дерево и сравни со своим обходом (кружочек - NULL). И что ты будешь делать c этим?
292 1279746
>>79736
бля а чо делать то ебать как так то вообще
293 1279747
>>79705
тупа char
294 1279754
>>79746

>бля а чо делать то ебать как так то вообщ


грамотно поставь задачу
295 1279757
>>79754
тоесть имея инфиксный порядок узлов дерева может быть несколько деревьев?
296 1279768
>>79757

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


какой нах порядок? у тебя массив символ, если ты колдуешь со строками, то очень похоже, что велосипедишь trie
297 1279769
>>79768
Давай ты уже сходишь и прочитаешь про обходы дерева?
https://en.wikipedia.org/wiki/Tree_traversal
298 1279771
>>79769
ладно, как осознаешь, что строкам там не место, приходи.
299 1279773
>>79771
дурик, я вопрос задал, а на вики тя другой челик отправил
300 1279796
>>79754
надо создать дерево зная его инфиксный и постфиксный обход, вот
301 1279798
>>79796
сохраняй конечные узлы в массив и делай двунаправленные ссылки
302 1279829
2ch, мне нужно считывать данные с другой запущенной программы (процесса), с помощью cheat engine нахожу адреса нужных мне данных, программно считываю, с этим всё нормально, но адреса каждый раз меняются. Что мне нужно делать, в какую сторону копать? 14 летние какиры с ютуба мне не помогли.
303 1279831
>>79829

> но адреса каждый раз меняются



ASLR

>Что мне нужно делать, в какую сторону копать?



HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\MoveImages
304 1279896
>>79831

>ASLR


Ой, блядь, там у него обычный динамический мемори-менеджмент, просто он ищет сами данные, а надо искать указатели на них.
305 1279904
>>79798
не понятно(
306 1279940
Хочу поизучать С для общего развития. Читать на русском буду. Что лучше навернуть? Кернигана или Фомина? Какая книга проще?
msdn.png6 Кб, 276x317
307 1279945
>>79940

> Читать на русском буду. Что лучше навернуть


Учебник английского. Если книгу по Си на русском ты еще найдешь, до всевозможную документацию, которая понадобится тебе, чтобы писать на Си, никто для тебя переводить не будет, а если и будут, то тебя ждут лабораторные занятия пикрилейтед.
308 1280038
>>79945
Я не буду писать на Си. Я хочу поизучать его для общего развития.
309 1280069
>>80038
В смысле, как сказку на ночь? Тогда надо бы Фленова, но он только про кресты писал. Возьми K&R, Фомина я сейчас поскроллил - там натуральный бред.
310 1280118
>>80069
Просто хочу с низкоуровневым программированием познакомиться и решил что си идеален для этого.
311 1280146
>>80069
Ок k&r так k&r. Прост в картинке закрепленного треда в списке рекомендуемой литры в разделе Си только эти две книги и я так и подумал что мало обучающей инфы по Си.
111.jpg60 Кб, 458x582
312 1280257
Сап, аноны. Почему у меня по несколько раз выводится строка. Я понимаю, что она агрится на количество введённых символов. Как пофиксить? Сорри, что не через идеон, чёто не разобрался как.
313 1280275
>>80257

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


Ну так ты сам написал: в цикле выводить сообщение и читать символ, пока он вне 'A'..'Z'. Ты вводишь 100\n (\n - это Enter), оно получает эти символы последовательно, ни один не подходит.

> Как пофиксить?


Выводи сообщение один раз до цикла, например.
Или читай строку fgets, а потом уже разбирайся с ней хоть вручную хоть посимвольно, хоть sscanf.
Или ты можешь очистить буфер ввода. Например, существует магия типа scanf("%*[^\n]");, она поглощает весь остаток строки вплоть до, но не включая \n, а уже следующий вызванный scanf("%c") сожрет, если есть, сначала все пробельные символы, включая \n, а потом уже получит первый встретившийся непробельный символ).
Или можешь делать ту же самую очистку буфера после неверного ввода, но руками: while ((c = getchar()) != EOF && c != '\n');
314 1280392
>>80275
Спасибо.
315 1280460
>>80257
Я не понял - а зачем он пишет do? Ведь можно и без него просто написать 2 строки с пинтф и сканф?
316 1280499
>>80460
Ну do while гарантирует что то что находится в теле цикла выполнится хотя бы один раз...

Если бы там было не do while, а просто while, то при попытке использовать letter в логическом выражении поидее был бы вылет или вообще ничего бы не запустилось, ибо она изначально ничем не инициализирована, тогда надо инициализировать её до цикла, в этом конкретном случае с этим проблем нет, но даже тут это лишнее, если можно сократить через do while, при первом заходе в do while letter гарантированно получает значение и все работает.

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

Может хуйню несу, не то чтобы прям силен в С.

мимо студент
317 1280500
>>80460
Чтобы если ввели не букву, то повторится просьба со вводом заглавной буквы
318 1282079
чуваки, правильно я понял, что feof и ferror устанавливаются после каждого чтения, например fread'ом?

и наверно, существует ситуация, когда достигается конец файла-стрима, но и происходит ошибка?

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

всегда читал read'ом всё. щас подумал - нафиг я так привязываюсь к позиксу. а сами функции fread/fwrite почему-то считал только файловыми.
319 1282264
>>69824 (OP)
Анон, пожалуйста, не гони ссаными тряпками, помоги разобраться. Первый язык, как-никак.
Как начать писать на C в Visual Studio 2017 Community Edition? Скачал, добавил с вкладки "Отдельные компоненты" Clang/C2 (экспериментальный), установил. Открываю новый проект, Clang/C2, динамическая/статическая библиотека, что дальше? Куда [CODE]Hello, World![/CODE] пихать?
320 1282268
>>82079

> и наверно, существует ситуация, когда достигается конец файла-стрима, но и происходит ошибка?


Нет. У тебя три стула: ты либо не смог ничего прочитать (ошибка), либо ты попал на EOF и прочитал 0 байт (EOF - не ошибка!), либо ты прочитал байт и более. Для отличия первой ситуации от второй придумали feof/ferror. Функций две, потому что ты мог использовать какой-нибудь fscanf, он возвращает количество присваиваний, не позволяя отличить неверный ввод от ошибки или EOF, поэтому, чтобы отличить эти три вещи, приходится действовать методом исключения, проверяя и EOF, и ошибку.

> странная тогда функция clearerr. почему нельзя что-то одно сбросить тогда?


Потому что можно. EOF сбрасывается через fsetpos/fseek. А при наличии ошибки нет смысла сбрасывать EOF и оставлять ошибку.

Стандартная библиотека в Си сломана, не пытайся найти в ней логику.
321 1282275
>>82264

> добавил с вкладки "Отдельные компоненты" Clang/C2 (экспериментальный), установил


"Desktop development with C++"

> динамическая/статическая библиотека


Нет. Новый проект, Visual C++, Empty project, новый файл C++, в имени файла заменяешь расширение .cpp на .c. В этот файл пихаешь свои хелловорлды. Тулчейн clang можно выбрать в свойствах проекта.

У меня скриншоты валяются где-то. Если не разберешься, вечером вброшу.
322 1282286
>>82275
Вроде бы работает. Огромнейшее спасибо и сотен нефти тебе.
323 1282651
От скуки накатал на коленке такую хуету.
Покритикуйте.
pastebin.com/0uNJgsLQ
324 1282678
>>82651
А что тут критиковать? Типичный смари бля как я умею. Синтаксический сахар который заебешься разбирать.
325 1282680
>>82678

>синтаксический сахар


>в си


Ох мальчик, здесь мы идём опять.
326 1282684
>>82651
Называй свое? говно как хочешь, мальчик.
327 1282685
328 1282768
>>82651

> pastebin.com/0uNJgsLQ


Критикуем: использование Windows API ничем не оправдано, если использовать сишную CRT, кода будет строк десять, а если взять еще и какой-нибудь TCC, то еще и бинарник по размеру будет меньше твоего, причем безо всяких директив линкеру в коде. Ну и там всякие мелочи вроде ∗dest_ptr = NULL вместо ∗dest_ptr = '\0' выдают ньюфага, отключившего предупреждения у компилятора, с головой. Алсо, если используешь GlobalAlloc, делай это "правильно", с GlobalLock, каждую секунду думая о бессмысленности этой функции родом из 3.1 в современных ОС, а лучше осиль HeapAlloc уже. Но для начала норм.
329 1283046
>>82768
Хорошая попытка, но нет. gcc выдаёт около 40 килобайт, вижла порядка 15 (без этих директив).
С ними 2560 байт.
330 1283075
>>83046
А ты не используй гцц. Используй тцц, он с MSVCRT линкуется.
maxresdefault.jpg145 Кб, 1920x1080
331 1283106
>>83075

>не используй гцц

332 1283671
>>83075
гцц тоже линкуется. Попутно таская за собой статическую либу своих костылей. Это именно в сишке.
В случае плюсов туда линкуется (опять же статически) свой рантайм c++, несовместимый с msvcp вообще никак, отчего экзешник пухнет до ужасающих размеров.
333 1283685
>>83671
Кроме костылей гцц еще срет своими символами и прочими строками, которые даже с -s до конца не стрипаются, в то время как tcc делает маленький няшный бинарник совершенно без говна. Но особого смысла в погоне за бинарниками в 4-8 КБ нет (ну демки, разве что), а в больших программах отличия не настолько значительны. Я посоветовал tcc лишь потому, что анон выше криво, без обработки ошибок писал на Windows API, вероятно, именно в попытке уменьшить размер бинарника.
334 1283703
CLion под виндой возможно научить использовать cmd вместо своего встроенного терминала? Мне как бы надо курсор гонять, через винапи, а пердолиться с созданием консольного окна в коде желания нет.
335 1283852
>>83703

> а пердолиться с созданием консольного окна в коде желания нет.


А что, так сложно собрать как GUI-приложение и дернуть AllocConsole?
Снимок экрана 2018-10-25 в 2.30.27.png364 Кб, 1138x793
336 1284065
Аноны, помогите. Писал полгода в вижаке/gcc в линуксе. Поставил Xcode на macOS. В общем, при вызове scanf происходит какой-то пиздец. На пике все видно (смотрим атпут - нижний правый угол). Что за хуйня?
337 1284076
>>84065
А что тебе не нравится? 54.5999? Ну так флоаты же. Или то, что распидорасило порядо строк? А попробуй fflush(stdout) сделать перед выходом?
338 1284094
>>84076

>А что тебе не нравится? 54.5999? Ну так флоаты же


Было бы странно, если бы я за полгода коддинга не знал, как флоаты хранятся в памяти

>Или то, что распидорасило порядо строк?


This

>А попробуй fflush(stdout) сделать перед выходом?


Только не stdout, а stdin. Не помогло. Да и разве не видно, что это не тот случай, когда \n остается в буфере ввода с предыдущего сканф? Тут какая-то иная хуйня - видно же, что переменная инициализируется правильно (как ввел пользователь), да и все последующие принтфы все корректно выводят. Но почему-то Program ended with exit code: 0 появляется сразу после ввода переменной (хотя отображается в аутпуте вообще раньше, чем 54.6). Да и так, думаю, очевидно, что это сообщение должно быть в самом конце аутпута, когда main завершил работу.
Еще баг(проблема): если сделать прогу типа
int a;
scanf("%d", &a);
printf("%d", a);
то при запуске (кнопка Run) аутпут окно вообще не появляется, хотя программа is Running и, очевидно, ждет ввода.
Похоже на какой-то баг/фичу Xcode, но в гугле ничего похожего не нашел. Может, я просто что-то упускаю/не включил какую-то опцию?
339 1284101
>>84076
>>84094
Сам нашел ответ на свой вопрос. Хотя, как сказать. Нашел тред на форуме эпл, где у ОПа и комментаторов такая же проблема. Оказывается, это баг 10-й версии xcode (сообщение о завершении программы появляется посреди вывода). Фиксится сменой размера шрифта окна вывода. Но это такой себе фикс, ибо шрифт нужно менять вручную при каждом экзекуте - сам он его не сейвит. Собственно, вот тред, можете почитать, кому интересно https://discussions.apple.com/thread/8543709
Пиздец, у меня горит жопа с этого ебучего мак ос и ебучего баганного проприетарного эпловского софта, но зато своё!
Аноны, которые пишут на маке, предложите достойную альтернативу, пожалуйста. Visual Studio под Wine, например, нормально запустится?
340 1284115
>>84101

>Пиздец, у меня горит жопа с этого ебучего мак ос и ебучего баганного проприетарного эпловского софта


Ну так собери себе нормальную пеку а не макоговно
341 1284235
>>69824 (OP)
С или С++?
342 1284239
>>84235
Тян или кун?
343 1284249
>>84115
Почему двачеры так радикально решают проблемы? Все же xcode - единственная возможность писать приложения для айос, эпл вотч, эпл тв.
344 1284273
>>84249
swift?
objectove-c?
345 1284285
>>84273
При чем тут эти яп?
346 1284331
>>84101
Юзай visual studio code и будет тебе счастье. Там и дебаггер есть.
347 1284339
>>84249

>Почему двачеры так радикально решают проблемы?


Смотри, ты жрешь говно, сам это понимаешь, когда я тебе говорю прекратить жрать говно, ты говоришь мол зачем так радикально. Я делаю вывод: тебе нравится жрать говно. Ну окей, ебись с икскодом, а лучше компиль из под терминала.
348 1284345
>>84339

>лучше компиль из под терминала.


Двачую.
349 1284548
>>84094

> Только не stdout, а stdin


Не stdin, а stdout!

> то при запуске (кнопка Run) аутпут окно вообще не появляется


Что опять же намекает на то, что stdout почему-то не флашится (он line-buffered, а \n у тебя нет, поэтому строка остается в буфере FILE). В любом случае, это баг реализации.
350 1284746
>>84094
>>84094

>Да и разве не видно, что это не тот случай, когда \n остается в буфере ввода с предыдущего сканф?


Ты пробовал написать "scanf("%f\n", &b);" вместо того что у тебя?
351 1284891
>>84746
Следующий scanf отлично пожрет все пробельные символы, в том числе и \n, а на отображение в консоли этот \n не влияет, потому что к тому времени, как scanf начал что-либо матчить, stdin уже прочитал к себе в буфер строку целиком, включая \n.
352 1284894
>>84891
Ну так ты пробовал так или нет?
353 1284934
Насколько C трушный легче ассемблеров в освоении?
354 1284974
>>69824 (OP)
С хуя ли инструкция goto настолько презираема в Си?
У тебя блять в распоряжении есть огроменный елдак, которым ты можешь болтать во все стороны и способен отъебать кого угодно, но ты сука намеренно прячешь его в штаны и как ебучий куколд юзаешь покупной самотык. Че это блять за хуета?
355 1284975
>>84974
Давай тоньше. У тебя получится.
356 1284979
>>84974

>Че это блять за хуета?


Goto это охуенная тема, просто смузипидоры начили его лепить везде где не нужно и зашкварили саму идею
357 1284983
>>84934
Ассемблеры гораздо проще любого более высокоуровневого языка. Си сам по себе несложный, но в нем есть множество тонкостей типа сахарка не совсем к месту и прочего undefined behavior, которые нужно знать и понимать. Зато, в отличие от ассемблеров, простые вещи не занимают два экрана кода.

>>84974

> С хуя ли инструкция goto настолько презираема в Си?


А ты меньше говностатей читай. goto CLEANUP и goto EXIT_LOOP - нормальные, часто используемые вещи. Остальное можно выразить с помощью других конструкций, и это будет более читаемо.
358 1284999
>>84979
Двощую.
359 1285001
>>84239
Я просто хочу понять во что проще вкатится, в с или в с с плюсиками.
Ибо про плючихи дохуя комиксов как выучить плючики за джве недели, а про с такого нету. Думаю что он проще и пытаюсь узнать так ли это.
360 1285008
>>85001

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


Лол. На самом деле Си за год и кресты (после Си) за три.
361 1285016
Господа, платина на барабане. Поясните за float-хуиту, какого хера компьютер не в состоянии сохранять числа как они есть? Это связанно с тем, как комп хранит числа в памяти, в двоичном виде? Вот простой пример : сижу, кодю, и требуется умножить введенное с клавиатуры 1.6 на 100 - получаем 1.60000002 %%и так далее???%. Туда же - умножаем введенное с клавиатуры 4.2 на 100 - получаем 4,19999981, что сказывается на результате выполнения программы.
Почему так происходит? Что почитать по данной проблеме? Как ее избегать? Не всегда же можно округлить до целого.
Спасибо!
На пикрелах видно, справа, где дебаггинг, видно что i равняется тому-то тому-то, как я и описал
362 1285027
>>85016

>Что почитать по данной проблеме?


Это не проблема, это операции с плавающей зяпятой, про низх и читай
363 1285029
>>85016

> Что почитать по данной проблеме?


Уже рекламировал тут: https://randomascii.wordpress.com/category/floating-point/

> Не всегда же можно округлить до целого.


Можно округлять до нужного количества знаков после запятой после окончания вычислений.
364 1285031
>>85016

>Это связанно с тем, как комп хранит числа в памяти, в двоичном виде


пиздец
365 1285037
>>85031
Ну а что он не так сказал? Да, связано. Да, числа с плавающей точкой - тоже суммы степеней двойки. Только в отличие от целых чисел, не только положительных, но и отрицательных. Если дробь нельзя представить суммой степеней двойки, выбирается ближайшая, которую представить можно.
got Hot-Men.jpg71 Кб, 467x542
366 1285039
>>85016
Бог Питона снизошел до челяди
Ебошу В Анаконде (numpy+ scipy). Хуярю в интерпретаторе double значения. Хоть в матрицах, хоть где еще. Никогда не жаловался
367 1285041
>>85039

> Никогда не жаловался


a = pow(2.0, 53)
if a == a + 1: print('Шел бы ты отсюда, скриптоблядь!')
368 1285042
>>85037
блять весь компьютер это мешанина из нулей и единиц
если не в двоичном формате то блять в чем? в виде псионической энергии?
369 1285044
>>85016

>Не всегда же можно округлить до целого.


А я храню с фиксированной точкой и не жалуюсь.
370 1285045
>>85042

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


Ты теперь достаточно большой, чтобы узнать страшную правду о том, откуда берутся дети. Не весь. https://en.wikipedia.org/wiki/Three-state_logic

> если не в двоичном формате то блять в чем?


Есть овердохуя способов хранить дроби. Да, они все рано или поздно сводятся к битам. Но спецэффекты у этих способов разные.
371 1285047
>>85045

>Не весь


>кидает ссыль на голимые буферы с 3мя состояниями, которые рассматривают на 2м курсе технической шараги



Ахуеть блять. Еще приведи мне в пример std_logic из VHDL. Информация хранится и передается в виде нулей и единиц, даже если разобьем сигнал на много логических уровней, компьютер все равно будет оперировать 0 и 1. Никаким Z и Х-состояниям там места нет
372 1285055
>>85047

> передается в виде нулей и единиц,


Верно, поэтому современная информатика это ебаный каменный век
373 1285067
>>85027
>>85029
>>85044
>>85037
От души, аноны, спасибо
374 1285097
>>85047
Ты не прав, есть разработкиещё советские, где есть реально три состояния на уровне железа именно.
375 1285102
>>85097
И где теперь эти разработки вместе с Советами?
376 1285103
>>85102
Но тем не менее, реальный тристейт существует.
377 1285104
>>85097
АНАЛОГОВНЕТ в треде
378 1285105
>>85103

>The term tri-state should not be confused with ternary logic (3-value logic).

379 1285120
>>85016
100/3 сколько будет, не подскажешь?
380 1285121
>>85120
33 остаток 1.
381 1285150
>>85016
Дурачек, ты же поставил брейкпоинт, он останавливает программу до того как выполнен код в строчке, АЛЛО! Поставь его на следующую строчку и ты сильно удивишься. Либо если я не прав, то скрин в студию, я себе лицо обоссу без пруфов в таком случае, но не может быть такого, что в СИ внезапно для всех сломано умножение, блять, сам подумай.

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

Алсо, никто не запрещает, но я бы на твоём месте не писал "i = i 100", а "i=100".
382 1285153
>>85150
Ебаная вакаба.

Вместо "i = i умножить 100" - "i*=100".
383 1285184
Сап, аноны. У меня проблемка вот. Подскажи, пожалуйста, куда нажимать. Решил поотлаживать под GDB и когда дохожу до scanf(), то не знаю как передать коду значения. Что делать?
384 1285288
Помогите решить задачу, и, если не сложно, приведите пример решения.

С клавиатуры вводятся два числа (n<=255). Если оба числа чётные, то выводится их сумма, если хотя бы одно число нечётное, то выводится 0. Запрещается использовать условный оператор.

Как это реализовать без if?
385 1285290
>>85288
самофикс
(a, b <=255)
386 1285298
>>85288
Оператор case, не? Проверяй остаток от деления
387 1285301
>>85288
Чето пришло в голову:
int mul1 = 1 - a % 2;
int mul2 = 1 - b % 2;
printf("%d", (a + b) mul1 mul2);

--------------------
// 3 + 4
// mul1 = 0
// mul2 = 1
// prints 0

// 3 + 3
// mul1 = 0
// mul2 = 0
// prints 0

// 4 + 4
// mul1 = 1
// mul2 = 1
// prints 8
388 1285302
>>85301

>printf("%d", (a + b) mul1 mul2);


printf("%d", (a + b) mul1 mul2);
fix
389 1285303
>>85302
сука, куда оно звездочки девает, там короче умножить на mul1 умножить на mul2
390 1285308
>>85301
Неплохо, но смотри, что делают дети в Украине в твоём возрасте.
printf("%d", (a+b)умножить(1xor a%2)(1xor b%2))
391 1285315
СУК... Какого хера другому анону на раз-два решаешь задачки, а себе
@
сидишь неделями, думаешь над простой обработкой строк.
392 1285316
>>85315

>обработкой строк


>Си


Ты зашел не в свой район, петушок
393 1285318
>>85316
Ну, вроде как ничто так хорошо не поможет понять массивы, как работа со строками. Можно же как-то так вообще сделать вроде
typedef string *char;
И особо не маяться. Только я не понимать, что эта строка делает.
394 1285319
>>85288
Числа целые? Если да, то в двоичном представлении у чётных младший бит = 0, у нечётных младший бит = 1.
Дальше сам думай
395 1285320
>>85318

>массивы


Статические массивы - рудимент
Им не место в 2к18
396 1285322
>>85320
А если у меня статическое количество элементов? А?
397 1285323
>>85319
Ты предлагаешь вытаскивать младший бит за каким-то хуем, когда можно сделать в одну составную инструкцию используя лишь '%' и лог операторы?
398 1285325
>>85323

>printf("%d", (a+b)умножить(1xor a%2)(1xor b%2))


Если заменить на :
printf("%d", (a+b)умножить(1 ^ (a & 1))(1 ^ (b &1))),
может быть быстрее.
399 1285330
>>85325
Ну, это уже вообще прям уровень godlike казахов, которые вместо кофе потягивают кумыс.
400 1285331
алсо... анонче... Может поможете 1.19 Кернигана&Ритчи сделать? Как написать функцию реверса строки?
401 1285334
>>85331
Ну бле берешь находишь /0, берешь цикл до середины и свапишь первые элементы с последними, хулит там реверсить?
402 1285351
>>85334
void reverse(char line[], int length)
{
//printf("%s", line);
int j=0, max=0;
char i;
for(max; line[max]!='\0'; max++);
for(j; j<=(max/2); j++)
{
i=line[j];
line[j]=line[max-j];
line[max-j]=i;
}
}
Вот со свопом тут дрисня немного. В итоге у меня всё исчезает из line.
403 1285357
>>85351
Это потому, что ты и /0 свапишь.
404 1285358
>>85351
s=str(input())
s=s[::-1]
print('сосать, бомжи')
405 1285359
>>85357
ваааааааау. Спасибо, анон, а то я сам в глаза долблюсь. И впрямь заработало.
>>85358
поех даже не знает сколько его строки в этом случае весят.
406 1285360
>>85358
питонопараша в другой стороне
407 1285371
Не понимаю анон, почему не работает. Вроде же идеально.

https://ideone.com/tFr59S

Что делает код: берет все подряд параметры из терминала, и внутри каждого параметра сортирует символы по asc2 таблице.

например ./progname cba 231
Lолжен выдать: abc 123
408 1285375
>>85323
Я предлагаю тебе использовать побитовые операции, вместо арифметики. И не вытаскивать младший бит, а фигачить xor с маской.
409 1285384
>>85308
Видим как дети на украине пишут говнокод.
410 1285387
>>85384
Такой говнокод используют по всяких там SIMD, чтобы избежать дорогих бранчей.
411 1285392
>>85308
Так индусы пишут за 2$ в час
412 1285394
>>85392
а как пишут люди за 300кк/сек?
413 1285397
>>85394
Как я
414 1285398
>>85397
А как ты написал решение той задачи?
415 1285399
>>85398
еще не писал
416 1285401
>>85399
Ну, и иди нахуй неиндус.
417 1285403
>>85371
Бамп вопросу
418 1285406
>>85371
Ну, вывод я у тебя переписал вот так. А то геморойно же по букве выводить.
while(j<argc)
{
printf("%s\n", argv[j]);
j++;
}
прокомментировав сортировку этот код отработал как надо. Значит трабла в сортиров_очке.
419 1285410
Привет. Что значит слово, в контексте программирования. В памяти слово это типа 32 бита или 64 или что? Объясните чайнику, вы же тут шарите полюбас, в инете нихуя не понятно
420 1285412
>>85406

>прокомментировав сортировку этот код отработал как надо. Значит трабла в сортиров_очке.


Ну я не вижу где там косяк(
421 1285413
>>85410
https://ru.wikipedia.org/wiki/Машинное_слово
скорее всего у тебя анон 64х архитектура, так что слово будет восьмибайтное. Хотя я помню из реестра виндоуз там словом обозначается два байта.
422 1285415
>>85401
Хохол, плес. Выкатил тебе белый человек сразу на блюдечке кошерное решение. Своими мозгами научись думать. А то начитается как там в SIMD кто-то наговнокодил, а ты и рад в массы вытащить и выдать за оптимизированный код, а потом ну покажи как у тебя ну покажи, ну че ты, ну иди нахуй тогда. Тьфу на тебя попрашайка.
423 1285416
>>85415

>найс маняоправдания во время обтекания


Проиграл с клоуна, который думает, что тут 1,5 анона сидят.
424 1285418
>>85406
Может argv параметры по умолчанию const?
И их нельзя менять внутри?
425 1285422
>>85418
Ну, как бы по хорошему кодстайлу да не стоит менять формальные аргументы. Единственное что из иснтитута запомнил. Но я сейчас его запустил и нулевой аргумент у меня отсортировался. И точку вытолкнул в начало. Всё как положено. Второй аргумент просто написал и зациклился на третьем.
426 1285425
>>85422
А через что ты прогоняешь, что бы видеть на какой ступеньке прога падает?
427 1285429
>>85425
А все, понял
428 1285437
>>85425
Да прям в терминале. Ещё printf() почаще вставляю, чтобы отслеживать состояния буфферов. Так например:
fprintf(stderr, "%d:%s", __LINE__, argv[1]); ну, и комментирую в коде, чтобы не удалять на всякий пожарный случай.
image.jpeg298 Кб, 640x654
429 1285439
>>85416

> >найс маняоправдания во время обтекания


> Проиграл с клоуна, который думает, что тут 1,5 анона сидят.

430 1285440
431 1285442
>>85415
Какой SIMD, что ты несёшь.
Что тут, по-твоему, можно векторизовать? Задачка на уровне парочки побитовых инструкций и системного вызова для вывода, а ты тут пальцы гнёшь и изображаешь из себя не пойми что. Типичный малолетний дебил.
432 1285448
433 1285476
>>85288
(a + b) * ((a | b) & 1)
434 1285517
>>85323
% это те же битовые операции, умник.
435 1285525
>>85476
Только после того, как & отработает нужно отрицание.
По условию, если оба числа четные, то сумма, а у тебя получится 0, если оба четные.
А так хорошее решение, простое и понятное.
мимо-крокодил
436 1285550
>>85476
почему-то я высчитываю какждый раз отсос. Вроде бы
(a+b)*((a|b)^1)&1
должно быть.
437 1285551
>>85288
Тернарный оператор, например.
438 1285552
>>85550
(a+b)(((a|b)^1)&1)
фикс
439 1285554
>>85371
Анон. Я тебе тут попрограммировать принёс. Всё программируют и ты попрограммируй. Ох и поломал я мозги. Добавил сортировку пузырьком. Только надо было назвать не args parsing а arg_values sorting. А теперь со спокойной душой можно и на боковую.
440 1285555
>>85554
Сук... Самое главное забыл
https://pastebin.com/cju4SSYT
441 1285575
>>85555
>>85554
Хорош
442 1285644
>>85550
Лучше так, без умножений:
(a + b) &~-((a | b) & 1)) (лол, я изобрел новый оператор &~-)
443 1285678
Анон, а как можно проверять чтоб сканф на разные паттерны вызывал разные функции?
ну тоесть есть паттерн { f,f,f} и есть паттерн { [f;f],[f;f],[f;f] } , где f - float - как сделать чтоб первое вызывало функцию 1, а второе функцию 2 при этом любые другие паттерны вызывали ошибку( по типу {f,f} или { { [f;f],[f;f],[f;f] } или {char,f,f}. )
444 1285709
>>85678
Напиши свой парсер на основе strtod или возьми prce какую-нибудь. scanf - глючное говно, которое нужно, чтобы по-быстрому прочитать числа и буковы из файла.
445 1285710
>>85709
в задании настоятельно рекомендуют использовать scanf, так что простое решение должно быть. Окей, облегчу вопрос: как используя один scanf считать 1 или 2 переменных - подаю одну переменную - записывает её в А подаю две - запичвает их в B и C
446 1285714
>>85710

> в задании настоятельно рекомендуют использовать scanf


Скажи им, что они пидарасы. Но ты можешь:
fgets(); if (sscanf(шаблон1)) { ... } else if (sscanf(шаблон2)) { ... } else { ошибка }

> как используя один scanf считать 1 или 2 переменных


Главный вопрос тут: откуда считать? Оно даже о понятии строки не знает. Ты можешь scanf("%f %f") и проверить, вернуло ли 2, или после первого присваивания сломало зубы о какой-то не-float и вернуло 1. Или не смогло распарсить вообще ничего и вернуло 0. Но более сложные (особенно вложенные как у тебя) паттерны этим не распарсишь.
447 1285984
>>85714

>fgets


угу, в случае если данные, удовлетворяющие условию паттерна лежат каждый в новой строке
если же встроены в текст, то нужно чутка по другому сделать
448 1285986
>>85714

>Но более сложные (особенно вложенные как у тебя) паттерны этим не распарсишь


ты шутишь? это на изичах делается через scanf семейство функций
449 1286119
>>85986
Несколькими вызовами sscanf - да. Одним вызовом scanf - нет.
450 1286417
>>69824 (OP)
Драсьте, объясните пару вещей, код пижжен с другого сайта. Почему размер константы для буфера (SIZE 100) меньше unsigned char buf[SIZE] буферного массива символов?
Что такое sizeof(buf[0]) -- размер первого элемента? Не понимаю что за размерность у while (..)

#define SIZE 100

int main()
{
FILE in1 = fopen("cz.exe", "rb");
FILE
out1 = fopen("cz.txt", "wb");
unsigned char buf[SIZE];
size_t count;
while (count = fread(buf, sizeof(buf[0]), SIZE, in1)) {
int i;
for (i = 0; i < count; ++i) {
printf(" %02X", buf);
fprintf(out1, " %02X", buf);
}
}
fclose(in1);
fclose(out1);
system("pause");
return 0;
}
451 1286425
>>86417

>размерность у while (..)


а такая размерность, что while(!EOF);
пока fread работает по байту, а конкретнее по sizeof(buf[0]) и не получит конец файла, то будет продолжать работу. Хотя я не знаю что fread возвращает в конце, когда заканчивает работу. Но, видимо, нуль, или -1 для EOF.
sizeof(buf[0]) - размер не содержашийся в первом элементе, а вообще размер самого элемента массива, собственно можно написать в этом случае любой номер элемента, но размер у него в любом случае будет unsigned char1. Это делается для портируемости, а то вдруг кто-то в конпеляторе выделили несколько байт для char, хотя это что-то на уровне хтонического пиздеца.
А вот почему константный SIZE меньше массива буффера - я хз. Попробую предположить, что в винде выделяется в массивах char на символ больше, для знака перевода строки \r\n. Но скорей всего это неверное преположение. Вот моё объяснение. Но олды сишные меня могут засмеять, так что не сильно прислушивайся к моему посту.
452 1286584
>>86417

> Почему размер константы для буфера (SIZE 100) меньше unsigned char buf[SIZE] буферного массива символов?


Вот это стоит перефразировать. Размер константы sizeof(100) 4 байта, потому что, если не указано иное (100ULL, например), то оно целочисленная константа считается signed int-ом (если влезает). Каким местом это относится к размеру, непонятно. Если ты почему-то решил, что у тебя sizeof(buf) != SIZE, то ты мерял как-то неправильно, потому что размер массива sizeof(buf) по определению равен sizeof(buf[0]) ∗ SIZE (т.е., размер одного элемента умноженный на их количество, т.е., в случае unsigned char, 1 ∗ SIZE, т.е., SIZE).

>>86425

> пока fread работает по байту


Не совсем. Он читает разом максимум SIZE элементов по sizeof(buf[0]) и возвращает количество прочитанных в штуках размером sizeof(buf[0]).

> Это делается для портируемости


Вот только упс, sizeof выдает размеры в символах, т.е., sizeof(char), даже если это 32-битный char, будет всегда равно 1. А делается это для единообразия, потому что если читать массив интов, это будет иметь смысл, так что лучше делать везде одинаково.

> что в винде выделяется в массивах char на символ больше


Конечно же нет. Все отличия винды заканчиваются на уровне стандартной библиотеки, а на сам язык это не влияет.
453 1286650
Аноны, не знаю, правильный ли это тред для такого вопроса, все-таки по всем возникающим у меня проблемам, связанных с Си, я отписывался сюда, всегда получая ответ. В общем, я студент, на Си пишу больше полугода. Не могу сказать, что я отлично знаю весь язык, но есть понимание большей его части. Писал всякие алгоритмы сортировки, писал алгоритмы для графов (типа Краскала, Дейкстры). Писал свой архиватор с помощью алгоритма Хаффмана. Сейчас читаю K&R. Умею в bash. Реально ли с такими знаниями найти какую-нибудь работу джуном? Или пройти стажировку, чтобы после нее была возможность устроиться проггером? Если этого мало, тогда что еще я должен знать? Нахожусь в спб
warosu.png301 Кб, 1920x1080
454 1286690
>>86650
Языка мало. Например, я бы хотел увидеть знание посиха или винапи (на уровне "осилил apue/рихтера"), хотя бы что-нибудь про сети, хоть какой-нибудь опыт использования zlib/libjpeg/libusb/sdl/чегоугодно, просто чтобы чтение документации не было проблемой, а "уменянилинкуется" не вызывало панику. На джуна проще всего немного пороллить пикрилейтед в свой гитхаб. Но вообще, с наличием работы на сишке все очень непросто.
455 1286705
Создание указателя.
Почему некоторые пишут : charstr;
А некоторые char
str;
разве 1 способ нельзя спутать с разименовыванием?
Ведь если есть указатель и мы потом пишем о нем так str = 5;
Мы меняем значением той переменной, на которую указывает str (хроня адрес)
Так вот пример:

char
str;

len = 0;
while (src[len])
len++;
str = (char)malloc(sizeof(str) (len + 1));
Вот тут я могу в 1 строчке написать char
str; ?я правильно понял?
Снимок.PNG5 Кб, 604x122
456 1286707
>>86705
Бля.
Вот правильнее
457 1286712
>>86690
Спасибо, годнота, схоронил. А с эмбеддедом ты не сталкивался? Есть какие-то похожие советы ньюфагам на эту тему?
Дурацкая просто ситуация - меня взяли в связанную с автомобилями контору, при этом не кодером, но с условием разобраться с сишечкой и немножко кодить в свободное от основных обязанностей время. Вот я и в растерянности немного от того, куда дальше долбиться после основного синтаксиса и стандартной библиотеки.
мимо другой анон
458 1286739
>>86690

>Например, я бы хотел увидеть знание посиха или винапи (на уровне "осилил apue/рихтера")


А, собственно, что предпочтительнее? Знание POSIX API или WinAPI?

>хотя бы что-нибудь про сети


Можно поточнее? В этом я вообще профан

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


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

>На джуна проще всего немного пороллить пикрилейтед в свой гитхаб


А какое количество проектов нужно иметь в своем портфолио с пикрила? Штук 10 было бы достаточно, да?
459 1286743
>>86705
Платина. Да, разницы, с которой стороны ставить пробел, нет. Некоторые с обеих ставят. Более корректно ставить с правой, чтобы не напороться на char∗ foo, bar. Вторая причина - в Си объявление отражает использование, и если ты обращаешься к указателям так пробел после звездочки: ∗ foo = 1, смело пиши звездочку слева. Алсо, каст значения, которое вернул malloc() - признак крестобляди, в Си указатель на void стоит кастить только тогда, когда добавляешь/убираешь квалификаторы (volatile/restrict/const).

> разве 1 способ нельзя спутать с разименовыванием?


Разве int array[10] нельзя спутать с обращением по индексу 10?

>>86712

> с эмбеддедом


Покупаешь макетку и отладку на STMF1 или лучше сразу на STMF4 (чуть дороже) - это самые попсовые, удобные и дешевые варианты с кучей периферии, пишешь в гугле "проекты на STMxx", выбираешь вкусный, разбираешь. Будет сложно особенно сложно заставить себя продолжить разбираться, уже помигав светодиодом. Ну и Mastering STM можно почитать. Ардуины и прочие сорта AVR категорически не рекомендую, но сейчас кто-нибудь обязательно набежит и пояснит, что я ошибаюсь.

>>86739

> что предпочтительнее? Знание POSIX API или WinAPI?


Оба, но POSIX нужен сильно чаще.

> Можно поточнее?


Того же стивенса полистай. И я уже не помню, есть ли про сокеты в APUE, но по идее должно быть.

> А какое количество проектов нужно иметь в своем портфолио с пикрила?


С этим в перезвоним-тред.

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


Именно.
460 1286746
>>86743

> Более корректно ставить с правой


ставить пробел справа от типа, т.е., прилеплять звездочку к имени переменной без пробела.
Снимок.PNG575 Кб, 1239x666
461 1286752
Вот нихуя не понимаю почему его прога запустилась щас.
Если он создает char массив 10 мегабайт, то как он потом заполняет его полностью цифрами?
Ведь в какой-то момент итерации i будет равна :10 000 к примеру, а char может уместить от 255 только же
462 1286762
>>86743

>Более корректно ставить с правой, чтобы не напороться на char∗ foo, bar


В данном случае ведь не будет разницы, ставить звездочку у char или у переменной foo, т.к. эффект будет одинаковый - указателем на char будет только переменная foo. Так что не понял, о какой корректности идет речь
Дп
463 1286763
>>86762

>Дп


Другой анон*
464 1286767
>>86752

> char может уместить от 255 только же


-128..127, там signed. В компьютерах нет настоящей арифметики, используется арифметика с переполнением. Если что-то куда-то не влезает, просто берется остаток от деления на 2n. Не влезает 10485759 в char? Ок, 10485759 % 2 = 10485759 % 256 = 255 (на самом деле всего лишь 10485759 & 255, да и то неявно - фактически просто не учитываются все байты значения, кроме младшего), преобразуем в signed char, получаем -1, остальное обрезалось.

>>86762

> указателем на char будет только переменная foo


Именно поэтому справа и ставят: char ∗foo, bar; наглядно демонстрирует, что только одна переменная будет указателем, а char∗ foo, bar; гораздо проще случайно прочитать как "указатели foo и bar".
465 1286779
>>86767
Чувак, ты охуенен. Все твои ответы однозначны, понятны и не оставляют вопросов. Если не секрет, сколько тебе лет? Сколько уже знаком с C?
466 1286780
>>86767
То есть имеешь ввиду , что в тот момент когда i будет равна например 10 000, то она просто будет разделена на кусочки состящих по 255 ?
Или ты имеешь ввиду, что массив не имеет по сути типа, туда пихают любые значения под любые типы, лишь бы хватило памяти?
467 1286781
>>86780
Возьму на себя ответственность ответить за того анона.
Допустим, нам надо поместить число 261 в unsigned char. 261 в двоичном виде представляется как 0000 0001 | 0000 0101. Т.е, чтобы записать 261 в двоичном представлении, нам, как минимум, нужно 2 байта памяти (16 бит). Для типа unsigned char выделяется 1 байт памяти, следовательно, максимум, что мы можем в него поместить - это число 255, т.к. 255 в двоичном виде = 1111 1111. Тогда, если написать unsigned char a = 261, происходит то, что описал анон выше, а именно: т.к. возникает переполнение, то в данном случае младший БАЙТ числа 261, а это 0101, побитово умножается на 255, т.е. на 1111 1111.
0000 0101&1111 1111= 0000 0101. Значит, переменная a инициализируется числом 5.
Если не понятно, почему в примере анона получилось -1, то почитай про дополнительный код (представление отрицательных чисел в двоичном виде).
image.png542 Кб, 1239x666
468 1286784
>>86743
>>86767
Спасибо, перцы

>>86781
Спасибо, все предельно понятно.. Алсо, получается , вот этот чув на пике ,грубо говоря, записал мусор в свои 10 мегабайт char массив? Ну то есть там уже после 255-ой итерации все цифры искажатся?
469 1286785
>>86781

>а это 0101


0000 0101
быстрофикс
470 1286787
>>86780

> 10 000, то она просто будет разделена на кусочки состящих по 255


Я имею в виду, что 10000dec = 10011100010000 -> 10011100010000 (зачеркнутое при присваивании int к char не влезает и просто отбрасывается) = 00010000 = 16.

>>86779
Много мне лет, и ответы мои говно. Но все равно спасибо.
15401559633081.jpg270 Кб, 1280x960
471 1286788
>>86787
В наше время получить ответ на интересующий вопрос, без иронии - дорогого стоит.
x.jpg1 Кб, 256x128
472 1286789
>>86784
Ну может он и хотел мусор. Там будет 0, 1, 2, ... 254, 255, 0, 1, 2, ... 254, 255, 0... Например, давай просто будем считать, что он там картинку с градиентом генерит?
473 1286790
>>86789
Нифига вы кодеры хитрые ребята. Даже такие аппаратные ограничения используете в свою выгоду
474 1286792
>>86784
Записал не мусор, а вполне обычные числа. Только диапазон всех чисел, которые хранятся в массиве ограничен 0..255. Т.е., после 255 итерации, когда A[255] = 255, будет A[256] = 0, A[257] = 1, A[258] = 2 и т.д.

>Ну то есть там уже после 255-ой итерации все цифры искажатся?


Можно и так сказать. Хотя правильнее будет сказать, что массив инициализируется числами i%256 - остатком от деления на 256
Правда, в данном случае, у него массив не unsigned char, а char (signed char). Поэтому массив будет инициализирован числами из диапазона -128..127
475 1286794
>>86789
О, а можно мне пояснить идею с градиентом? Что-то я не допер
Мимоанон
477 1286799
>>86767

>10485759 % 256 = 255


но ведь ответ будет далеко не 255,
а 40к+
Снимок экрана 2018-10-30 в 4.23.00.png32 Кб, 635x357
478 1286804
>>86799
Деление с остатком же
479 1286807
>>86804

>Деление


>%


В каком классе учишься, ребенок?
480 1286812
>>86807
Очевидно, имелся в виду остаток от деления. Не надо грубить. Все-таки 5 утра, могу и хуйню сказать
x.jpg4 Кб, 270x60
sage 481 1286815
>>86790
>>86794
Да я пошутил просто. Если у нас картинка в оттенках серого (8 бит на пиксел) шириной 256 пикселов, то цвет (яркость) очередного пиксела будет index % 256: самый темный 0 % 256 = 0 в начале строки, самый яркий 255 % 256 = 255 в конце строки, и следующий будет снова темным 256 % 256 = 0 в начале следующей строки и так далее. Если ширина картинки не 256, то переход к 0 случится не на правом краю, и картинку распидорасит. Естественно, никто так градиенты не рисует.
482 1286817
Может, вопрос простой, но сам понять не могу.
char a[10] = "Hello";
Почему это вообще работает?
Было бы логичнее и правильнее писать:
char a[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };
Тут все понятно - указатель разыменовывается, нулевой элемент инициализируется 'h', указатель++, первый элемент инициализируется 'e', указатель++, 2-й элемент - 'l'... указатель = указатель на нулевой элемент. Как-то так ведь это работает "внутри"?
Однако, как я уже сказал, строка char a[10] = "Hello" вызывает у меня вопросы. Вообще, как я считаю, здесь нулевому элементу должен присваиваться адрес временного указателя на массив "Hello". Конечно, выходит нехорошая штука, что char = char *. Но я лишь пытаюсь следовать логике ЯП.
А еще, если сделать так:
char a[10];
a = "Hello";
И в этом случае я хочу не инициализировать массив a словом Hello, а присвоить указателю a на массив char'ов адрес временного указателя, который указывает на массив Hello.
Но тогда компиль ругается. По-моему, пишет что-то про то, что слева ожидался lvalue. А у меня что, не lvalue что ли? Я же объявлял массив как char a[10], а не const char a[10]. К сожалению, точной ошибки не помню, но вроде было именно про то, что ожидался lvalue слева от оператора присваивания. Сейчас чекнуть возможности нет, извините.
По поводу первого случая (char a[10] = "Hello") - может это специальное исключение?
483 1286822
>>86815
Капец интеллектуально. Закодить-то несложно, но сама концепция сделать именно так - круто. Хочу тоже научиться такие прикольные и практические решения находить
484 1286824
>>86817
Если не совсем понятно, о чем я вообще говорю, могу попытаться перефразировать и переформулировать. А сейчас пойду спать. Всем спокойной ночи
485 1286828
>>86817
Что тебя смущает? Это такая же инициализация массива, просто строковым литералом. Синтаксический сахар.

>Вообще, как я считаю, здесь нулевому элементу должен присваиваться адрес временного указателя на массив "Hello". Конечно, выходит нехорошая штука, что char = char .


Это очевидно чушь. Подумай потом еще раз.

>char a[10];


>a = "Hello";


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

> я хочу не инициализировать массив a словом Hello, а присвоить указателю a на массив char'ов


char
a = ""
В этом случае строка будет храниться где-то в другом месте, а у тебя будет адрес.

>А у меня что, не lvalue что ли?


Нет, не lvalue. Массив. Это особый случай, для массивов свои правила.
486 1286829
>>86828
двач зохавал звездочки, но должно быть и так понятно.
487 1286837
>>86817
Если хочешь понять, как это работает внутри, читай, что генерирует компилятор (без оптимизаций):
https://gcc.godbolt.org/z/sfAyZ5

char a[] и char* a - очень разные вещи, хоть и массив неявно приводится к указателю. Массивы имеют свои специальные правила.
char a[10] = "Hello" честно конструирует строку-массив символов на стеке, никаких присваиваний указателей не происходит.
char a[10] = {'H', ..., '\0'} делает ровно то же самое, но побайтово.

>char a[10]


>a = "Hello"


>И в этом случае я хочу не инициализировать массив a словом Hello, а присвоить указателю a на массив char'ов адрес временного указателя, который указывает на массив Hello.


a - это не указатель на массив, а массив. Присваивание массивов друг другу не разрешено.
425DE991-0DCD-4B30-B6B8-A8C13806C112.jpeg205 Кб, 1136x412
488 1286838
Кто нибудь может объяснить нахуя это сделали?
489 1286840
>>86838

> нахуя это сделали?


Так получилось, что в этом языке все, что может влезть в int, стремится им стать. Если не нравится, касти к (signed char) явно, но это будет иметь значение только для sizeof. В любом арифметическом выражении оно превратится обратно как минимум в int. Алсо, 'FADE' - это расширение, которое может не поддерживаться (например, gcc 4 на винде точно не умел).
490 1286841
>>86838
это для 32 разрядных, в 64 int = 64, 8 разрядных процев нет
491 1286844
>>86841

> 8 разрядных процев нет


Нет - купи! https://eu.mouser.com/8-bit-MCU/_/N-a86lo
492 1286845
>>86844

>https://eu.mouser.com/8-bit-MCU/_/N-a86lo


вот там инт точно 8 битный
493 1286855
>>86815
>>86822
Это был не сарказм, если что. Правда, прикольная реализация градиента
494 1286859
>>86840
Да, только там не fade а fate, и видимо это просто для примера сделано
495 1287241
>>86767

>255 ,преобразуем в signed char, получаем -1, остальное обрезалось.


Как этоп реоброзщоывывается? Есть формула?
496 1287247
>>86781

>то в данном случае младший БАЙТ числа 261, а это 0101


А как узнать какой из двух байтов младший, а который старший?
497 1287257
>>86804
Спасибо
498 1287258
>>86812

>могу и хуйню сказать


Не держи в себе ) мыж на дваче
499 1287263
>>86817
Ты не всегда ищи логику в синтаксисе,
она иногда просто для удобства. Для твоих глаз.
За твоими глазмами, в компиляции и одно и второе представление массива будет создаваться в одинаковым способом. Это просто ты общаешься с компилятором, дня него
char a[10] = "Hello";
и это
char a[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };
Одно и тоже
500 1287264
>>87241
Никак, ничего не меняется на самом деле. Память не знает, что хранит: 255 = 11111111bin, хранятся биты. Процессор по большей части не знает, что обрабатывает (инструкции пересылки данных, сложение/вычитание, всякие побитовые операции не отличают signed/unsigned). В тех случаях, когда различие важно, компилятор генерирует соответствующие инструкции (например, div vs. idiv для unsigned/signed деления, которые по-разному интерпретируют биты). Интерпретировать unsigned как signed можно так: если старший бит (седьмой для char, пятнадцатый для short, тридцать первый для int и т. д.) не установлен, то это положительно значение, и оно равно тому же для unsigne. Например, (signed) 01111111 = +127. Если старший бит стоит, значение отрицательное и равно -(~n + 1). Например, (signed) 11111111 = -(~11111111 + 1) = -(00000000 + 1) = -1.

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

>>87247
Точно так же как в десятичной системе счисления есть младшие и старшие разряды, младший байт содержит менее значимые биты (меньше влияет на значение). В 0x1234 младший байт 0x34.
501 1287266
>>87264

>"Код. Тайный язык информатики", там все более чем подробно


Благодорю
502 1287288
>>86840

>касти к (signed char)


Что значит касти
503 1287305
>>87264
Ааа вот как. биты это оказывается тоже позиционное система счисления
504 1287306
>>87305
биты имеют* поц с\с
505 1287309
>>87288
Это значит пиши ((signed char) 'x'). Вот та хуйня в скобках слева от символа - оператор преобразования типа, тип выражения (во внешних скобках) становится signed char.
506 1287322
>>87309
спс.
Любые типы на любые можно менять?
507 1287324
>>87322
Нет. Типы должны быть совместимы. Например, ты не можешь скастить инт к структуре.
Тред утонул или удален.
Это копия, сохраненная 5 декабря 2018 года.

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

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