[Ответить в тред] Ответить в тред

Check this out!


<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
507 | 40 | 171

C Programming Language #34 /clang/ Аноним # OP  25/09/18 Втр 08:02:35  1269824  
C Programming L[...].png (78Кб, 792x1023)
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь 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/
Аноним 25/09/18 Втр 08:47:49  1269833
main-qimg-685d7[...].jpg (16Кб, 420x407)
Странное дело - Сишка не предоставляет больших абстракций, всё надо ручками, ручками, даже строк из коробки нет в том понимании, в котором многие другие языки работают.
При этом я продолжаю колоться и есть кактус. Языки с виртуальной машиной как Джава и До-диез брать не хочется (До-диез вообще завязан на инфраструктуру мелкомягких), интерпретируемые языки тоже (не скрипт же я пишу), Голанг вроде бы фичастый, но сейчас они в очередной раз что-то меняют, вдпцг генерики появятся, Руст мутный и так толкался во все щели, что и знать не хочу, остаётся C++, в котором если без классов писать (строка там тоже класс, емнип), то на выходе тот же C.
Вопрос: что я тут делаю и почему оставаться тут - это неплохо? Мог бы в конце концов выучить уже C++ и ебашить код со скоростью света.
Аноним 25/09/18 Втр 09:24:12  1269844
>>1269833
>что я тут делаю
Уходи
Аноним 25/09/18 Втр 09:24:29  1269845
>>1269833
> C++ и ебашить код со скоростью света.
Это в каком веществе так свет движется?
Аноним 25/09/18 Втр 10:28:10  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
Аноним 25/09/18 Втр 10:49:41  1269866
>>1269858
А все, уже сам нашел ответ
https://stackoverflow.com/questions/49723430/gcc-enum-is-not-packed-as-expected

Не знал что атрибут __attribute__((__packed__)) в структуре, не упаковывает enum, нужно юзать enum c упаковкой __attribute__((__packed__)) отдельно
Аноним 25/09/18 Втр 11:12:39  1269882
>>1269844
Я хочу остаться.
>>1269845
Вакууме.
Аноним 25/09/18 Втр 11:36:00  1269896
>>1269833
> При этом я продолжаю колоться и есть кактус.

Ты прям моими словами разговариваешь, у меня точно такаяже проблема, и я точно также продолжаю жрать этот кактус
Аноним 25/09/18 Втр 12:27:17  1269920
Кстати, а можно в одной программе совмещать синтаксис и С и С++?
Аноним 25/09/18 Втр 12:36:49  1269925
>>1269920
Можно.
Аноним 25/09/18 Втр 19:31:33  1270169
>>1269824 (OP)
>- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
А как определить ты гуманитарий или технарь?
Аноним 25/09/18 Втр 20:20:11  1270194
>>1270169

А для этого на доске специальный тред есть: >>1263759 (OP)
Аноним 25/09/18 Втр 20:24:53  1270197
>>1270194
Я сразу понял, что 50%.
Но потому , что я изучал теор.вер сам лично и знаю что 1 из 2 это фифтик шанс. Если бы мне дали эту задачу в 18 лет, может я бы ошибся, потому что всю школу я тупо игнорил математику и все что с ней связано. Ну то есть, я сейчас говорю о том что нужно иметь некий базис, как минимум хоть раз где-то пообщаться на тему соотношений, процентов и тд. Разве это показатель того логично устроен твой мозг или нет*?
Аноним 25/09/18 Втр 20:30:42  1270201
>>1270197
>1 из 2 это фифтик шанс
1 из 1000 тоже 50% шанс, либо вытянешь, либо нет. Остальное матанопетушиное говно.
Аноним 25/09/18 Втр 20:34:41  1270204
>>1270197
>>1270201
1/2, т.к. какой будет вторая монета мы определяем тем, какой сундук мы выбрали, мы знаем, что сундуков, где есть золотая монета всего 2, то есть шанс 1/2, либо мы взяли сундук с 2 голдами, либо нет.
поправьте, если обосрался
Аноним 25/09/18 Втр 20:34:56  1270205
>>1269858
> Мне нужно чтоб enum весил 1 байт
И не надейся. Тебе в кресты, у них есть enum class, которому можно задать размер. Но никто тебя не заставляет в сях писать enum foo variable, пиши uint8_t variable и присваивай ей свои значения безо всякой типизации.

>>1270169
> А как определить ты гуманитарий или технарь?
Если ничего другое не помогает, , читай хардвей. Если хоть как-то можешь читать Прату, даже если читается от силы страница в день, да и та с болью - лучше читай Прату.
Аноним 25/09/18 Втр 20:34:56  1270206
>>1270201
>50% шанс, либо вытянешь, либо нет.
Ну окей, а то что вероятность 1\2 , в этом я прав?
А то там в треде такие беседы идут, что я начинаю сомневаться.
Алсо, там люди начинают писать проги с функцией rand()
даже не зная,что все компьютерные рандомы- это псевдослучайные числа, а не тру рандомы
Аноним 25/09/18 Втр 20:37:58  1270208
>>1270204
Это с точки зрения теорвера имеющим место только в больном мозгу математика. В реальности только 50/50. Все эти математические подходы знатно сосут на примере покера ну иои прогнозов рынка.
Аноним 25/09/18 Втр 20:38:39  1270209
>>1270204
>>1270205
>Если ничего другое не помогает, , читай хардвей
Это утверждение логическая ошибка. Типо раз тебе не помогли другие книги , то ты гуманитарий. Во- первых они могли тебе не помочь лишь потому, что ты ленивый и мало практиковался. Во-вторых, книга еще может не помочь, если ты не понимаешь стиль текста его автора, либо язык автора в плохом переводе. В третьем у тебя могут быть другие парадигмы обучения и методы.
Поэтому я так и не получил точного определения как определить гуманитарий ли я, или нет.
Аноним 25/09/18 Втр 20:40:52  1270211
>>1270208
> 50/50
Ну ты тоже щас не прав, мне кажеться.
Для ТЕБЯ ДА все что ты вытаскиваешь 1 раз - 50 на 50 шанс.
Но если бы ты вытаскивали не 1 раз, а несколько. То ты заметил, что найти шарик в двух ящиках намного быстрее, и шанс выше, чем найти шарик среди 1000 ящиков, и шанс что ты найдешь его с 1 попытки очень мал.
Аноним 25/09/18 Втр 20:41:05  1270212
>>1270208
Потому что покер и рынок это частотная вероятность, а не теоретическая, если бы ты бесконечно играл в покер, то увидел бы ту самую вероятность.
Аноним 25/09/18 Втр 20:44:18  1270216
>>1270209
> либо язык автора в плохом переводе
Ты гуманитарий.
Аноним 25/09/18 Втр 20:44:55  1270218
>>1270216
>Ты гуманитарий.
ПОЯСНИ
Аноним 25/09/18 Втр 20:54:04  1270220
>>1270212
>если бы ты бесконечно играл в покер, то увидел бы ту самую вероятность.
А если бы не увидел? Ты так говоришь, словно кто то бесконечно что то подсчитывал. Математика не имеет отношение к реальному миру, да же больше того, она вредна, ибо зашоривает мозг.
Аноним 25/09/18 Втр 20:58:02  1270221
>>1270211
>ты вытаскивали не 1 раз, а несколько
Ах если бы да кабы. Даже без математики понятно, что чем меньше помех, тем больше шанс вытащить. Но вероятность 50/50. Даже если будет миллиард зеленых шариков и один белый, то ты его либо вытащишь либо нет, но шанс не большой, да.
Аноним 25/09/18 Втр 22:33:51  1270265
>>1270221
Фигню несешь, какой-то полемикой или софистикой занимаешься. Конечно вероятность вытащить 1 шарик из 1000 коробок(не зная в какой он) явно не 50\50.
50 на 50 это именно для тебя иллюзия относительно слов "вытяну" или "не вытяну"
Аноним 25/09/18 Втр 22:35:36  1270267
>>1270220
>Математика не имеет отношение к реальному миру, да же больше того, она вредна, ибо зашоривает мозг.

Если человек не долбаеб, то математика не зашорит его мозг. Ведь он будет понимать что это лишь инструмент для вычислейний\поисков чего-либо\измерений.
Аноним 26/09/18 Срд 00:40:26  1270345
>>1270267
>инструмент для вычислейний\поисков чего-либо\измерений.
Математики здесь при чем? Инструмент создают те, кто им пользуется.
Аноним 26/09/18 Срд 01:05:59  1270360
>>1270345
Я говорю ,что математика Это инструмент
Аноним 26/09/18 Срд 01:17:45  1270365
>>1270360
>инструмент
Хуемент. А язык это инструмент придуманный лингвистами?
Аноним 26/09/18 Срд 01:28:54  1270367
>>1270365
Нет, народом. Хотя есть искусственные языки которые придуманы лингвистами
Аноним 26/09/18 Срд 03:21:12  1270384
>>1269824 (OP)

>>1270213
>>1270215
О! Пасибки.
Если это всё, то это дожно работать правильно:
http://rextester.com/BAD13339
Может можно и короче как-то, но у меня так получилось, и вроде таки получилось.
Аноним 26/09/18 Срд 04:02:36  1270387
>>1270220
Ты туповат, не так ли? Математика это фундаментальная наука. На ней основано всё. Весь мир ей подчиняется.
Аноним 26/09/18 Срд 04:09:38  1270389
>>1270387
>Весь мир ей подчиняется.
В голосяндру
Аноним 26/09/18 Срд 09:19:05  1270441

Ежемесячная стипендия студента составляет А руб., а расходы на проживание превышают стипендию и составляют В руб. в месяц. Рост цен ежемесячно увеличивает расходы на 3%. Составьте программу расчета суммы денег, которую необходимо единовременно попросить у родителей, чтобы можно было прожить учебный год (10 месяцев), используя только эти деньги и стипендию.
Помогите на Си, нихуя не понятно. Учитель не объясняет нихуя
Аноним 26/09/18 Срд 09:28:48  1270442
>>1270441
Реши эту задачу на бумаге, потом поймёшь, как написать программу.
Аноним 26/09/18 Срд 10:19:34  1270454
>>1270205
> И не надейся.

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

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

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


Аноним 26/09/18 Срд 10:22:55  1270456
>>1270441
> Рост цен ежемесячно увеличивает расходы на 3%.
> на 3%.
Очевидное занижение уровня инфляции и сокрытие реальной ситуации в экономике страны
Аноним 26/09/18 Срд 10:42:06  1270458
>>1270456
Это 42% в год, гуманитарий.
Аноним 26/09/18 Срд 11:11:17  1270470
>>1270458
блин, я прочитал как 3% в год, вообще инфляцию всегда в годах считают, и только иногда в кварталах
Аноним 26/09/18 Срд 15:06:55  1270540
>>1270441
К примеру расходы равны 10 000\месяц.
Через месяц уже +3% , получается 10300. Через еще один месяц + еще 3%, получается 10609. Через еще один месяц +3% к сумме = 10 927.27. И так далее.
Получается все больше и больше, потому что мы прибавляем +3% к сумме предыдущего месяца.
Аноним 26/09/18 Срд 15:09:00  1270541
>>1270540
В конце : SUM =SUM - A
У конечной суммы за 10 месяцев отнимаем А (стипендию).
Аноним 26/09/18 Срд 21:07:17  1270673
>>1270454
> Чем плохо использование в 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, вот и все.
Аноним 26/09/18 Срд 21:52:07  1270695
>>1270197
>Я сразу понял, что 50%.
Значит Zed A. Shaw "Learn C the Hard Way" (2015) - для тебя.
Аноним 26/09/18 Срд 23:16:12  1270713
image.png (131Кб, 1248x642)
Обьясните тупому, как установить вижуал залупио под ваш си ебаный. Там только с++ и с# вижу в пунктах.
Аноним 26/09/18 Срд 23:17:25  1270714
>>1270713
Тебе в веб тхред.
Аноним 26/09/18 Срд 23:18:24  1270715
>>1270713
зачем тебе VS? есть Pelles C, к примеру
Аноним 26/09/18 Срд 23:19:53  1270716
>>1270714
>>1270715
Почему в веб? У нас в шараге препод сказал, что именно с него будем начинать изучение, вы блядь просто ответить можете?
Аноним 26/09/18 Срд 23:21:02  1270718
>>1270716
С него - с Си, не с веба блядь
Аноним 26/09/18 Срд 23:27:08  1270722
>>1270716
это будет как отдельный диалект, параша ебаная
тебе нужен чистый си или залупа крокодила?
если первое, то нахуй VS
если второе (по-любому VS to est'), то тогда хуй его знает
там по идее какую-то строку в .cpp файле нужно дописать и будет как будто .с
Аноним 26/09/18 Срд 23:30:20  1270725
>>1270722
Там в настройках проекта надо выбрать си компилятор.
Аноним 26/09/18 Срд 23:31:15  1270726
>>1270716
Ты даже установить студию не можешь, ну или хотя бы погуглить.
давай скажи, что ничего не нашёл
Аноним 27/09/18 Чтв 00:40:51  1270748
>>1270713
Разработка классических приложений на C++. Создашь C++ проект, создашь файл, укажешь расширение .c, будешь писать на Си.

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

>>1270725
У MS один и тот же компилятор для C и C++, называется cl.exe.
Аноним 27/09/18 Чтв 00:53:24  1270754
>>1270695
В чем я не прав
Аноним 27/09/18 Чтв 08:38:57  1270815
>>1270748
Там есть какая-то галочка типо си-проект, там в компилятора просто какие-нибудь флаги используются, хз.
Аноним 27/09/18 Чтв 18:26:51  1271089
>>1269896
Мимо та же ситуация.
Аноним 27/09/18 Чтв 19:48:54  1271111
>>1270815
Не помню галочек, язык детектится по расширению файла, ничего дополнительно делать не нужно. А вот если ты извращенец, и хочешь компилировать .cpp как .c или .c как .cpp, то есть /TC и /TP соответственно.
Аноним 27/09/18 Чтв 20:13:13  1271118
>>1269824 (OP)
Новую конфу треда добавьте в шапку в некст треде @hcdev
Аноним 27/09/18 Чтв 20:14:37  1271120
>>1271118
Телеграмодебил, свали.
Аноним 27/09/18 Чтв 20:35:46  1271125
>>1271118
О, прямо сегодня думал не создать ли такую. А тут ты. Ща чекну
Аноним 27/09/18 Чтв 20:53:09  1271130
>>1271118
>139 чел.
Эм, че так много. Явно не с Си треда
Аноним 27/09/18 Чтв 21:24:25  1271137
char *ch; - указатель короче, если вакаба сожрёт звёзды
scanf ("%s", ch);
printf ("%s", ch);

Ананасы, обесните мне, куда строка попадает? Массив же не объявлен. Где эти байты?
Аноним 27/09/18 Чтв 21:27:02  1271138
>>1271137
В лучшем случае программа выпадет в сегфолт.
В худшем - будет работать так, как есть.
Аноним 27/09/18 Чтв 21:39:27  1271141
>>1271138 я прост где то подобный пример видел, то ли в крестах такое было то ли ещё где. Меня мучал вопрос что за хуйня. Я так понял что ТАК ДЕЛАТЬ НЕЛЬЗЯ?
Алсо gcc сожрал это без претензий и на рантайме все работало.
Аноним 27/09/18 Чтв 21:49:58  1271146
>>1271141
>я прост где то подобный пример видел, то ли в крестах такое было то ли ещё где.
В крестах можно в функцию отправить ссылку вместо указателя. Это когда ты можешь просто имя переменной отправить, а функция работает так же, как если бы ты отправил указатель в си.
>Алсо gcc сожрал это без претензий и на рантайме все работало.
Формально претензий нет, но у тебя указатель не инициализирован. То, что он не указал на мусор - повезло.
Аноним 27/09/18 Чтв 21:58:17  1271150
>>1271138
Собственно с чего бы? Он просто присваивает указателю какой-то адрес, и потом его распечатывает, пока он не обращается к памяти на которую указывает переменная, а она очевидно не выделена, все валидно работает.
Аноним 27/09/18 Чтв 22:06:35  1271153
>>1271150
А да, лол.
Аноним 27/09/18 Чтв 22:20:09  1271158
>>1270713
>вижуал залупио
Зачем тебе эта параша, очевидно тебя анально пытаются заманить в сисярп, и сломать тебе жизнь...

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

хотя я сам обхожуть Vim`ом, Sublime`ом, и только если чтото замороченное то Clion запускаю, он сразу все подсказывает
Аноним 27/09/18 Чтв 23:14:30  1271180
>>1271158
> Есть же божественный CLion
> тормозящее платное джаваподелие
Аноним 28/09/18 Птн 02:20:58  1271227
>>1271180
>тормозящее платное джаваподелие
Может у того анона сервернвя стойка с блейдами специально да КЛиона выделенная.
Аноним 28/09/18 Птн 05:43:43  1271245
>>1271130
пидоры какие-то с другого района - даже смотреть теперь не буду. почему не в дисе? - в него и с браузера заходить можно!
Аноним 28/09/18 Птн 07:03:23  1271263
>>1271245
В телегу тоже.
мимо
Аноним 28/09/18 Птн 07:23:33  1271264
>>1270713
Поставь LLVM и хуячь через терминал
Аноним 28/09/18 Птн 11:33:15  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
Аноним 28/09/18 Птн 12:08:19  1271385
>>1271180
> тормозящее платное джаваподелие

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

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

Аноним 28/09/18 Птн 15:48:42  1271497
>>1271245
Есть местный дис канал?
Аноним 28/09/18 Птн 19:01:24  1271561
>>1271385
>ОЧЕНЬ годный продукт?
Который напоминает дауненку названия операторов? make уже прикрутили, лол?
Аноним 28/09/18 Птн 19:35:49  1271564
>>1271385
> все летает
laba1?
Аноним 28/09/18 Птн 20:11:09  1271576
>>1271385
Юзаем еклипс для девелопа, годнота.
мимо-кернельщик
Аноним 28/09/18 Птн 20:22:24  1271580
>>1271576
>еклипс
Тоже тормознутое говно. ИДЕ для пидоров.
Аноним 28/09/18 Птн 20:40:54  1271588
>>1271580
Зависимости и колбеки заебись показывает, тем более, что ещё использовать?
линукс кернел жи
Аноним 28/09/18 Птн 21:54:41  1271617
>>1271588
>что ещё использовать
OpenGrok для навигации и поиска
Аноним 28/09/18 Птн 22:04:33  1271622
si.png (123Кб, 1284x778)
>>1271617
> OpenGrok для навигации и поиска
В браузере, фу. Труъ посаны используют пикрелейтед, его так никто и не смог превзойти.
Аноним 28/09/18 Птн 22:09:45  1271625
>>1271622
>В браузере, фу
А мне наоборот норм, можно сразу в инторнеты переходить, да и много чего у меня локально через браузер работает
Аноним 29/09/18 Суб 01:34:01  1271687
Снимок.PNG (1Кб, 907x30)
Наконец-то сделал 1.19 из K&R (нужно принять с клавиатуры ввод и заменить все табуляции на суммарно эквивалентное по длине количество пробелов -- в данном случае на "х", чтобы видно было). Получилось 100 строк, писал несколько часов, ощущение, что я даун, но всё равно приятно
Аноним 29/09/18 Суб 01:52:13  1271689
>>1271687
Сколько кодишь уже?
Аноним 29/09/18 Суб 02:03:29  1271690
>>1271689
Полгода назад попробовал в первый раз, неделю покодил, надоело, заб и так каждый месяц. Вот опять. Но на этот раз я точно, хех мде
Аноним 29/09/18 Суб 02:04:12  1271691
>>1271690
>заб забил,
slffx
Аноним 29/09/18 Суб 03:46:59  1271702
>>1271690
У меня тоже так, 1 раз бросил спустя недели 2. А сейчас во второй раз , уже подсел походу _(идет 2 месяц)_.
Почему Си выбрал?)
Аноним 29/09/18 Суб 18:04:48  1271962
>>1271702
Люблю структурное программирование. Ну и сишка это классика, это как латынь среди языков программирования, это знать надо. Еще у языка богатая история, он крепко занимает свою нишу, мне интересно железо, меня привлекает его строгость, простота и то, что он близок к корням программирования как промышленной отрасли, он очень портабельный и на нем можно запустить какую-нибудь крутую железяку. Люблю си. Кореш говорит, что я дебил и лучше бы за джаваскрипт скорее взялся, чтобы работать со смузи в коворкинге
Аноним 29/09/18 Суб 18:16:27  1271969
>>1271962
Прав твой кореш, на сишке вероятность найти работу крайне мала
Аноним 29/09/18 Суб 20:31:38  1272045
1537902533781.jpg (806Кб, 1280x720)
>>1271962
> лучше бы за джаваскрипт взялся
Не скажу конкретно за твоего друга, но обычно так говорят люди которых программирование это лишь профессия для заработка. Либо это люди которые себя считают умнее других, и им кажется что они очень хитрые, раз выбрали сразу самый модный и популярный язык и сэкономили время. Но это на самом деле смешно звучит, когда речь идет о программировании как о любимом деле.
Аноним 29/09/18 Суб 23:04:41  1272106
>>1272045
Я с ассемблера на JavaScript перешёл. Нормально, считаю годится для изучения. Сейчас листаю свои бумажные книжки по программированию C++\C#\pascal всё стаёт понятно, раньше пытался учить и не понимал. Мне было сложно смотреть на код где столько писанины, с непривычки наверно.
Аноним 29/09/18 Суб 23:15:17  1272118
>>1271561
make с самого начала был, ололо
Аноним 29/09/18 Суб 23:48:18  1272136
>>1272118
С cmake не путаешь? Ололол
Аноним 30/09/18 Вск 00:47:48  1272166
https://repl.it/repls/PiercingAppropriateMicrostation

Я правильно понимаю, что мы передаем указатель(то есть адрес нашего массива mas) в нашу функцию, а там он печатает ее, Но! Возникает вопрос.
получается, что массив это соединенные блоки памяти и байты с этими данными:
H
E
L
L
O
идут друг за другом? Именно поэтому имея адресс 1 ячейки, а именно 'H' мы итерацией идем по массиву?
Аноним 30/09/18 Вск 01:04:22  1272169
Практически готовая метода для задания 1.20 из K&R. Нужно, где возможно, заменить пробелы на табуляции в принятой с клавиатуры строке так, чтобы ничего не разъехалось фпезду. А пацаны говорили, что математика кодерам не нужна...
Аноним 30/09/18 Вск 01:08:30  1272171
>>1272169
if mas == 'space' && mas(+1) == 'space'
delete mas(+1)
Вот и вся суть твоей задачи
Аноним 30/09/18 Вск 01:09:02  1272172
>>1272171
эй , куда мой ай(буква) делся
Аноним 30/09/18 Вск 01:10:36  1272175
>>1272171
Ну, почти
Аноним 30/09/18 Вск 01:35:32  1272177
>>1272166
> массив это соединенные блоки памяти и байты с этими данными
Круто, правда?

>>1272169
Для замены пробелов на табы математика не нужна. И первые пять лет тоже не нужна. А потом оказывается, что ой как нужна, если ты, конечно, не посвятишь жизнь созданию шаблонного говна, используя чужие либы.
Аноним 30/09/18 Вск 01:48:57  1272180
>>1271962
Латынь это лисп.
Аноним 30/09/18 Вск 01:50:31  1272182
>>1272180
> Латынь это лисп.
Только по мнению лисперов и только потому, что сдохло и пахнет.
Аноним 30/09/18 Вск 02:05:55  1272186
Псевдокод.PNG (24Кб, 1063x467)
>>1272169
Продолжаю. Сделал задание с учётом этой штуки на псевдокоде посредством рекурсивной функции. Круто, да?
Аноним 30/09/18 Вск 02:09:01  1272187
>>1272177
>Для замены пробелов на табы математика не нужна.
Ну, понятно. Но как бы ты сделал? Смешно, но мне показалось, что это путь наименьшего сопротивления. Буду рад узнать более очевидные решения, потому что задачка (для меня) интересная.
Аноним 30/09/18 Вск 02:14:16  1272190
Забавно, что кто-то написал про лисп незадолго до того, как я запостил эту хуйню. Ладно, выкатываюсь из треда, а то заебал, небось
Аноним 30/09/18 Вск 02:18:17  1272191
>>1272187
> Но как бы ты сделал?
Да так же в общем-то. Просто описывается это простым человеческим языком, потому что само по себе простая и логичная вещь. Копируешь символы из входного потока в выходной. Если встретил пробел - не копируешь, а считаешь пробелы. Если дошел при подсчете пробелов до очередной позиции табуляции или встретил по пути таб - выводишь таб, если не дошел и не встретил - выводишь подсчитанное количество пробелов. Считать можешь внутренним циклом, можешь сделать флажок, с флажком меньше дублирующегося кода типа контроля границ.
Аноним 30/09/18 Вск 03:41:49  1272204
>>1272191
Это ты, конечно, просто и логично придумал, но сложность этого задания в том, что позиция табуляции постоянно смещается туда-сюда, потому что таб может представляться от 1 до 8 пробелами включительно, т.е. от 1 до 8 элементов в массиве у тебя могут быть заменены на один элемент табуляции в хитровыебанных местах, и если ты заранее не знаешь ввод, то и индексы элементов, под которые подгоняется табуляция, так по-простецки выяснить не получится.
Аноним 30/09/18 Вск 04:27:13  1272206
>>1272204
> т.е. от 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), но в целом это десять ебаных абсолютно очевидных строк.
Аноним 30/09/18 Вск 10:59:38  1272256
>>1272177
>Круто, правда?
Дыа) в интерпритируемых языках такое хуй узнаешь
Аноним 30/09/18 Вск 11:00:23  1272257
>>1272180
тогда уже Haskell
Аноним 30/09/18 Вск 11:01:18  1272258
>>1272190
Не уходи, нас и так мало..
Аноним 30/09/18 Вск 11:10:23  1272259
>>1272177
> А потом оказывается, что ой как нужна
А математика какого уровня нужна? Я знаю 9 классов тока
Аноним 30/09/18 Вск 14:45:41  1272379
>>1272256
> в интерпритируемых языках
Ты просто думаешь об указателях, как о чем-то особенном. Представь, что адресное пространство - это огромный массив байтов, а указатель - это индекс в нем (так оно и есть в большинстве случаев), и все будет точно так же, как и в любом другом языке программирования. Хоть в питоне, хоть в жаваскрипте. Странно было бы, если было бы как-то по-другому.
> байты с этими данными: H E L L O идут друг за другом
Ячейки в массиве идут друг за другом, вот неожиданность! Алсо, можешь выделить в жс Uint8Array побольше и работать с ним, как с сырой памятью, можешь даже маллок написать, который будет оттуда байты куски выдавать и еще strcpy запилить заодно, чтобы все охуели, как ты можешь (так вм пишут на самом деле).
Аноним 30/09/18 Вск 15:18:19  1272390
>>1272379
>Ты просто думаешь об указателях, как о чем-то особенном
Да, есть такое.. Ну яж ноВиЧоК.
А побайтовые сдвиги есть в других языках?
Аноним 30/09/18 Вск 15:19:55  1272393
>>1272379
>вм пишут
Что за вм
Аноним 30/09/18 Вск 15:23:33  1272396
>>1272390
Побитовые? Да, как правило есть. Если нет, легко заменяются умножением и целочисленным делением на степени двойки (привет, Visual Basic).
Аноним 02/10/18 Втр 05:52:22  1273099
Доброй ночи. Есть классическая задача

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

Я знаю всякие штуки с exit(), abort() и return; Но теперь собственно вопрос. Можем ли мы как-либо задействовать сигналы, например запилить SIGALARM или что-то еще с таймером, чтобы внутренний цикл покрутился, но по происшествии времени процесс прервало по сигналу и поток передался в колбек-обработчик этого сигнала?
Аноним 02/10/18 Втр 05:55:42  1273100
>>1272045
Я встряну, ибо вопрос немного больной для меня. Сам вот учил программирование с си чистого и теперь освоить плюсы могу без проблем (вообще с ними, но в целом норм), а вот в сторону джаваскрипта даже смотреть не могу. Ну нинраицца и всё тут. Синдром утёнка у меня? Чё делать?
Аноним 02/10/18 Втр 08:47:47  1273125
>>1273099
А нахуя ты делаешь бесконечный цикл?
Аноним 02/10/18 Втр 09:14:34  1273142
>>1273099
Ну ты можешь в оба условия добавить volatile-переменную (да, volatile плохо, я знаю), которую будешь ставить в обработчике сигнала. А в чем вопрос-то?
Аноним 02/10/18 Втр 09:21:32  1273147
>>1273099
Чем тебе не нравится goto?
вскукареки аля это плохой стиль не принимаются, если использовать goto грамотно, то код не становится менее читабельным, один из таких примеров как раз у тебя, когда нужно из вложенного цикла уйти во вне внешнего цикла.
Аноним 02/10/18 Втр 09:48:43  1273174
>>1273099
А что у тебя за цикл такой который сам по себе не заканчивается?
Аноним 02/10/18 Втр 10:05:19  1273177
>>1273174
Он походу брут пишет и хочет выводить статистику периодически. Собственно, тоже классическая задача.
Аноним 02/10/18 Втр 10:14:45  1273183
>>1273177
Так тогда в самом цикле можно сделать чтоб каждый 10к шаг выводил нужную статистику. В чем проблема?
Аноним 02/10/18 Втр 11:52:37  1273242
Снимок.PNG (6Кб, 509x255)
K&R 1.23 хотово. Удаляет комментарии из кода. (Пример на пике)
Аноним 02/10/18 Втр 12:41:58  1273270
>>1273242
Зачем спойлеришь тут, червь?
Аноним 02/10/18 Втр 12:47:31  1273272
>>1273270
Захотел
Аноним 02/10/18 Втр 16:28:47  1273433
>>1273183
Ну так это не масштабируется. С 1 PPS ты статистики не дождешься, а с сотнями тысяч наоборот буксовать из-за лишнего IO. Хотя можно в зависимости от скорости считать, и все такое, но по сигналу гораздо красивее.

>>1273242
> удаляет комментарии из кода.
printf("/ Все не так просто. /");


Аноним 02/10/18 Втр 16:29:18  1273434
>>1273433
>>1273242
Блядская макаба звездочки пожрала, ну ты понял.
Аноним 02/10/18 Втр 16:41:38  1273442
опа.PNG (1Кб, 473x43)
>>1273433
Аноним 02/10/18 Втр 18:14:00  1273485
>>1273442
// Точно-точно \
все продумали?
Аноним 02/10/18 Втр 19:03:13  1273507
>>1273485
Бля, проиграл люто
Аноним 02/10/18 Втр 22:02:19  1273607
>>1273100
Если он не нравится, но при этом есть необходимость учить.
То учи через силу. Во-первых если ты знаешь си, то тебе любой другой язык уже будет проще учить т.к суть везде одна, только "слова разные" и пару функций.. Во-вторых, чем больше учишь, тем потом легче учить дальше.
Аноним 02/10/18 Втр 22:28:34  1273623
15385083078194.webm (9118Кб, 853x480, 00:05:10)
>>1271158
>Есть же божественный CLion
>>1271180
>> тормозящее платное джаваподелие
>>1271561
>Который напоминает дауненку названия операторов?
>>1271576
>Юзаем еклипс для девелопа, годнота.
>>1271580
>Тоже тормознутое говно. ИДЕ для пидоров.

IDE это быстро и удобно!
Аноним 02/10/18 Втр 22:35:15  1273630
>>1273485
Да.
Аноним 02/10/18 Втр 23:48:25  1273654
Write in C.webm (5670Кб, 450x360, 00:01:52)
>>1269824 (OP)
Олды здесь?
Аноним 02/10/18 Втр 23:58:18  1273656
LionsCommentary[...].jpg (28Кб, 300x232)
>>1273654

Все на месте, инженеры.
Аноним 04/10/18 Чтв 13:57:43  1274427
44222.PNG (5Кб, 363x166)
Почему когда я создаю указатель на массив, который имеет с ним схожий тип int , выдается ошибка

assignment from incompatible pointer type (назначение из несовместимого типа указателя)
Не хочу постоянно юзать тип поинтера *void
должно же по идее работать, когда схожие типы.
Аноним 04/10/18 Чтв 14:06:26  1274435
>>1274427
> я создаю указатель на массив
Ты создаешь указатель на первый элемент
Аноним 04/10/18 Чтв 14:10:23  1274441
>>1274435
Он берет АДРЕС указателя на первый элемент. Хуйню делает, короче.
>>1274427
Строка Pmas = &mas;

Либо замени на Pmas = &mas[0];
Либо замени на Pmas = mas;
Аноним 04/10/18 Чтв 14:16:21  1274452
>>1274435
>>1274441
А разве, когда мы берем адрес 1 элемента массива мы не можем работать с массивом ? Все элементы массива разве не идут друг за другом? То есть 1 элемент если увеличить на единицу по итерации (++) то мы не попадем на 2 элемент?
Аноним 04/10/18 Чтв 14:17:59  1274456
>>1274452
mas уже указывает на первый элемент.
mas[0] это значение первого элемента.
&mas[0] это адрес первого элемента.

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

А ты вместо этого делаешь &mas, что даёт тебе адрес, который указывает на адрес, который указывает на первый элемент.
Аноним 04/10/18 Чтв 14:19:00  1274458
>>1274452
Попадём, mas это указатель на первый элемент.
mas[0] это сам первый элемент.
Аноним 04/10/18 Чтв 14:23:24  1274462
15355750213200.jpg (771Кб, 3672x2866)
>>1274458
>>1274456
Спасибо братки
Аноним 04/10/18 Чтв 14:29:30  1274469
>>1274441
>>1274435
Вы оба не правы. В языке есть тип "указатель на массив". Указатель такого типа численно равен указателю на первый элемент, у него, но тип у него другой. И вообще, поведение языка чуть сложнее, чем "указатель на первый элемент". Вот вам: https://ideone.com/huAMFl
Аноним 04/10/18 Чтв 14:32:43  1274475
>>1274469
Я знаю, но ошибка того чувака была более грубой, а не в том, о чём ты говоришь.
Аноним 04/10/18 Чтв 14:35:20  1274478
>>1274475
> ошибка того чувака была более грубой
Он сказал, что создает указатель на массив. Он и создавал указатель на массив, но неправильно.

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

Аноним 04/10/18 Чтв 14:37:09  1274481
>>1274478
>А вот это неправда, меняется лишь тип.
Да, действительно.
Аноним 04/10/18 Чтв 14:41:47  1274489
>>1274469
>Вы оба не правы.
Лол, ошибку я нашел сразу, а вот как попытался сам себе объяснить, так охуел, в пизду короче, я сегодня на такое не способен
Аноним 04/10/18 Чтв 14:43:09  1274492
>>1274489
> а вот как попытался сам себе объяснить, так охуел
Ну вот я попытался по ссылке на ideone.
Аноним 04/10/18 Чтв 15:05:15  1274506
>>1274492
Ты молодец
Аноним 04/10/18 Чтв 15:40:59  1274540
>Zed A. Shaw "Learn C the Hard Way
На русиш не переводили? А то тут братишке нужно помочь с С (не спрашивайте зачем), а у него настолько плохо с англицким, что он карту МТГ прочитать не может.
Аноним 04/10/18 Чтв 16:32:51  1274587
Сап я студент, объясните почему код не выводит 6000 чисел через пробел?


#include <stdio.h>

int main() {
int x = 4294956830;
while (x > 71585) {
printf("%d ", x);
x -= 71585;
}
printf("%d", x);
}
Аноним 04/10/18 Чтв 16:36:12  1274589
>>1274587
Самое интересное что он вроде работает, но не с этими числами
Аноним 04/10/18 Чтв 16:39:02  1274591
>>1274587
У тебя, как минимум, X принимает отрицательное значение, так как твоё числе в signed int не помещается.
Соответственно, он никогда не бывает больше 71585.
Аноним 04/10/18 Чтв 16:39:41  1274592
>>1274587
У тебя 32-битный знаковый int с диапазоном от -2147483648 до 2147483647 включительно. Очевидно, что (int) 4294956830 = -10466 никак не больше 71585.
Аноним 04/10/18 Чтв 17:16:17  1274602
>>1274592
Значит достаточно int заменить на unsigned int?
Аноним 04/10/18 Чтв 17:21:32  1274607
>>1274602
В данном случае — да, так как в unsigned int он помещается. Но помещается еле-еле, так что если возьмёшь X побольше, то снова работать не будет.
Аноним 04/10/18 Чтв 17:22:43  1274609
>>1274607
Спасибо, ты мне очень помог, в инете инфы не нашел
Аноним 04/10/18 Чтв 18:26:03  1274647
>>1274609
Ты просто не знал, что искать.
Аноним 04/10/18 Чтв 19:06:21  1274679
запустил тут из цигвина меднафен (он не сконфигурирнован на цигвин), так: mednafen.exe "$(cat /cygdrive/d/segapath.txt)"Gods.zip

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

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

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

int libname_f(параметры)
{return f(параметры)}
Аноним 04/10/18 Чтв 19:49:35  1274713
>>1274709
почему бы и нет. декларируешь внешнее имя, а дальше пишешь как хочешь. хочешь аргументам типы поменяй, хочешь раздели на две функции. мне так кажется.
Аноним 04/10/18 Чтв 20:12:02  1274726
>>1274679
> это либс подстраивается под кодировку
Нихуя не понял, что тебе не нравится. В винде путь хранится в UTF-16, неюникодных апи не существует (внутри -A функций просто MultiByteToWideChar с CP_ACP и обратно), получаешь и кодируешь куда тебе нужно. Каким местом тут кодировка самого файла - совсем непонятно.

>>1274709
1) Долбоебы.
2) Долбоебы решили, что когда-нибудь захотят изменить реализацию, но на самом деле никогда этого не сделают.
Аноним 04/10/18 Чтв 20:31:11  1274752
>>1274726
>Каким местом тут кодировка самого файла - совсем непонятно.
так и пиши: мне не понятно. в приведённом скрипте из файла берётся путь, склеивается (как есть) с Gods.zip и передаётся в программу.

и разве в винде ютф16, там же нет парных кодов.
Аноним 04/10/18 Чтв 20:38:44  1274760
>>1274726
и ты говоришь пути, это значит и имена фалов? ну вообще логично, просто забыл немного. наверно цигвин свою либс подсовывает, которая ожидает ютф-8.

или если он компилируется мингв, то тот либс предполагает ютф-8 в fopen.
Аноним 04/10/18 Чтв 20:44:27  1274767
хотя это бред. cmd же в однабайтовой кодировке. все мысли как-то перепутались.
Аноним 04/10/18 Чтв 21:17:56  1274790
>>1274726
> Долбоебы
Вообще это кусок одного (относительно) известного гнушного проекта. Не знаю, уменьшает ли это вероятность долбоебизма, но изменения у них иногда происходят.
Аноним 04/10/18 Чтв 21:49:21  1274814
>>1274752
> и разве в винде ютф16, там же нет парных кодов.
Давно уже есть. В 2000 вроде еще UCS-2 был, но потом осилили полноценный UTF-16.
Аноним 05/10/18 Птн 01:24:35  1274885
Доброй ночи.
Я тут заметил у себя с недавних пор привычку, которая возможно вредная и вообще плохо, хочу спросить у вас, что скажете.
Привычка следующая, при работе со строками делать как-то так ( вместо звездочки):
char str; // строка полученная в аргументе, ее же, допустим, нужно вернуть, так что куда указатель показывал, там и останется

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

Итак, какие подводные камни? Я спрашиваю, т. к. нигде больше не встречал такой штуки. Может тут где-то нарушение нюансов стандарта или слишком неочевидный подход для того, кто будет это поддерживать?
Аноним 05/10/18 Птн 01:26:22  1274886
>>1274885
Мумь пожрал и тот символ тоже.

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

for(char ^i = str; ^i; ++i)
{
Работа со строкой. Проходим по ней через временный указатель i.
}
Аноним 05/10/18 Птн 08:17:48  1274918
>>1274540
Я бы настороженно относился к этому автору.
Аноним 05/10/18 Птн 08:26:31  1274921
>>1274885
Я здесь вижу только все проблемы, связанные с тем, если нуль случайно проебётся.
Аноним 05/10/18 Птн 10:06:55  1274951
>>1274885
Это нормальный подход. Особой разницы между 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)));
Аноним 05/10/18 Птн 11:09:52  1274970
>>1274427
Если ты элементы массива явным перечислением задаёшь, то нулевой символ сам не ставится, кстати
Аноним 05/10/18 Птн 11:45:36  1274990
>>1274970
А как его ставить?
Аноним 05/10/18 Птн 11:46:51  1274993
>>1274990
У тебя целочисленный массив, какое '\0'? Это только в строках ставится.
Аноним 05/10/18 Птн 11:47:09  1274994
>>1274970
>>1274990
Ой, не то спросил.
Точнее а как делать, если я не в курсе входных данных?
И не уверен,что там будет нуль-символ. Всегда увеличивать на 1 ячейку в массиве и пихать нульч?
Аноним 05/10/18 Птн 11:48:08  1274996
>>1274993
А как тогда понять ,где конец инт массива? Если не знаешь размер?
Аноним 05/10/18 Птн 11:50:26  1274999
>>1274996
sizeof(mas)/sizeof(int)
Аноним 05/10/18 Птн 12:50:25  1275036
Как в C90 распечатать юникодную строку символ за символом?
Аноним 05/10/18 Птн 12:51:42  1275038
>>1274993
char это на самом деле int, поэтому хуй знает
Аноним 05/10/18 Птн 12:54:44  1275041
>>1275038
char - 1 байт, int - 4 байта это раз
Во вторых у тебя массив чисел, а не символов, у тебя число из массива может совпадать с кодом символа '\0' ты об этом не подумал а? а?
Аноним 05/10/18 Птн 13:00:02  1275042
>>1275041
Ну так-то да.
Вообще, я читал где-то, что нуль-терминейшн строк это чисто конвенциональная херня, нужная потому, что некоторые функции стандартной библиотеки опираются на нулевой символ как конец строки
Аноним 05/10/18 Птн 17:36:01  1275227
>>1274587
Что ещё за -=? Я до этого ещё не дочитал.
Аноним 05/10/18 Птн 19:01:17  1275265
>>1275227
a <operator>= b
то же самое, что и
a = a <operator> b
Аноним 06/10/18 Суб 00:19:15  1275387
Почему с FILE из popen, функции fseek, rewind и т.д выдают ошибку illegal seek? Как тогда перемотать его?
Аноним 06/10/18 Суб 03:04:47  1275409
Посоны, обесните мне. Например есть у нас многомерный массив, допустим трёхмерный.
int ar[8] [8] [8]
и делаем, например в динамической памяти ещё один массив, но на базе указателей.
int *dinar // тут должно быть три звезды если макаба не сожрёт.
ну потом я короче как бы создаю массивы указателей на указатели потом ещё массивы указателей на массив и маллокаю всю эту порашу в динамической памяти.
Так вот вопрос, поскольку массив по сути указатель на первый элемент массива, то первый массив тоже тащщит на себе в нагрузку несколько комплектов массивов указателей.
Аноним 06/10/18 Суб 04:39:41  1275417
sibo01.png (77Кб, 300x300)
>>1275409
Ты вопрос не задал.
В первом случае у тебя один указатель на массив.

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

Ты должен был прочитать введение в си массивы, организация памяти обязательно должна быть объяснена в любом учебном пособии.
Аноним 06/10/18 Суб 09:56:33  1275443
>>1275387
> Как тогда перемотать его?
Это не файл, это поток, пайп не хранит данных ну почти, там есть небольшой буфер, и у FILE еще свой небольшой буфер есть, а лишь передает их от производителя к потребителю. Поэтому seek не имеет смысла - назад ты не можешь пойти, потому что данных уже нет, вперед не можешь, потому что ты еще текущие данные не доел, а rewind не имеет средств попросить производителя начать производить с начала, да и у производителя не всегда есть такая возможность в принципе.

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

>>1275409
> Так вот вопрос, поскольку массив по сути указатель на первый элемент массива, то первый массив тоже тащщит на себе в нагрузку несколько комплектов массивов указателей.
Массив - не только указатель, это тип. Обсуждали недавно, вот сюда глянь >>1274469.

Допустим, у нас 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] и заставить компилятор делать всю адресную арифметику (т.к., в таком виде компилятору известны все измерения, кроме первого, которое не нужно для вычисления офсета).

>>1275417
> то у тебя не многомерные массив, а массив массивов массивов
Синонимы в Си и во многих других языках тоже.
Аноним 06/10/18 Суб 16:43:30  1275592
Актуально ли под x86 проверять указатели на NULL после malloc, calloc, realloc и т.д? Или это стереотип из времен когда 640кб должно было хватит ь всем?
Аноним 06/10/18 Суб 18:16:41  1275644
>>1275443
>Синонимы в Си и во многих других языках тоже.
Внезапно, нет.

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

В случае же массива массива массивов, происходит вот что.
1. arr2 = (arr1 + index1)
2. arr3 =
(arr2 + index2)
3. result = *(arr3 + index3)
Аноним 06/10/18 Суб 18:17:22  1275645
>>1275592
>Актуально ли под x86 проверять указатели на NULL после malloc, calloc, realloc и т.д? Или это стереотип из времен когда 640кб должно было хватит ь всем?
Используй rust!
Аноним 06/10/18 Суб 18:34:50  1275653
>>1274469
// arrptr - указатель на массив неопределенного количества int.
int (★arrptr)[] = &arr;
Какой-то извращенный способ написать две звездочки.
Аноним 06/10/18 Суб 22:51:58  1275744
>>1275644
> Внезапно, нет.
Внезапно да. Есть два варианта: либо многомерные массивы поддерживаются как отдельная сущность, т.е., int foo[1,2,3], либо они конструируются из существующих, т.е., массив массивов int foo[1][2][3] - массив из 1 массива из 2 массивов из 3 int. Третий же вариант, когда у тебя массив указателей на массив указателей на int - это вообще строго говоря не массив.

>>1275653
> int (★arrptr)[] = &arr;
> Какой-то извращенный способ написать две звездочки.
Две звездочки - это указатель на указатель на инт. Процитированный синтаксис - это указатель на массив интов. Это разные вещи: если посмотришь адреса в выхлопе программы, осознаешь, что во втором случае никаких промежуточных указателей нет.
Аноним 06/10/18 Суб 23:16:47  1275755
>>1275592
я как-то задавал такой вопрос тут же, скинули код, когда осталась ещё память, но всё равно возвращался нулл и тогда писал в память с константами, поэтому я проверяю всегда, и тебе советую
Аноним 07/10/18 Вск 11:56:03  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] - куча иксов, если что-либо другое, то или ничего, или бесконечный луп.
Чому так?
Аноним 07/10/18 Вск 11:58:33  1275875
>>1275872
Аноним 07/10/18 Вск 11:59:02  1275877
>>1275872
Ой все, джва часа думал, а как только запостил, сразу все понял.
>test_array = i же
можете бить сильно
Аноним 07/10/18 Вск 13:19:36  1275903
>>1275872
printf воспринимает нулевой символ, поэтому можно распечатывать его без функции print_bars, а просто вызвать массив как строковый: printf("%s", test_array); Ну это так
Аноним 07/10/18 Вск 13:22:07  1275906
for (int i=0; i < 10; ++i, test_array=i);
Алсо, for можно вот так вот задать вроде, олды, помохите, для краткости
Аноним 07/10/18 Вск 13:22:54  1275907
>>1275906
>test_array=
slffx
Аноним 07/10/18 Вск 13:23:35  1275908
>>1275907
Да сука.
test_array[ай] = ай
Аноним 07/10/18 Вск 13:25:10  1275910
>>1275906
for (int i=0, test_array[ай] = i; i < 10; ++i, test_array[ай]=i);
всё, вот так
Аноним 07/10/18 Вск 16:38:09  1276025
есть ли в си возможность инициализировать массив где к элементу можно обратиться не по номеру элемента а по строке например или символу, видел такое в паскале
например массив capitals типа bool хранит информацию о странах и столицах capitals[Russia][Moscow]==1, тогда москва-столица
Аноним 07/10/18 Вск 17:00:54  1276046
>>1276025
Только проинициализируй значения Russia и Moscow
Аноним 07/10/18 Вск 17:02:32  1276047
>>1276046
можешь примерчик ебануть, или ткнуть где их посмотреть?
Аноним 07/10/18 Вск 17:03:07  1276048
>>1276025
> обратиться не по номеру элемента а по строке например
Нет, тебе придется реализовать ассоциативный массив или какое-нибудь дерево самостоятельно. Это несложно, простая реализация - буквально пара десятков строк.

> или символу
elem_type everychar[256];

> capitals[Russia][Moscow]==1
У одной страны может быть несколько столиц? Нахуй такое делать? Делаешь словарик страна -> столица (ассоциативный или даже обычный отсортированный массив, сложность лукапа от O(1) с удачной хэш-функцией до O(log2(n))). Но можешь и просто пронумеровать страны и столицы и сделать capitals[russia_index][moscow_index].
Аноним 07/10/18 Вск 17:03:51  1276050
>>1276047
#define Russia 988
#define Moscow 1147
Аноним 07/10/18 Вск 17:05:50  1276053
>>1276048
ну вот индексацией и решил воспользоваться, спасибо
Аноним 07/10/18 Вск 17:08:27  1276057
image.png (21Кб, 660x374)
алсо, неужели в сях так не ебануть?
Аноним 07/10/18 Вск 17:40:29  1276085
>>1276057
Можно все, если реализуешь соответствующую структуру данных. Но не жди, что Си будет что-то делать за тебя, как компилятор паскалей.
Аноним 07/10/18 Вск 17:49:10  1276093
>>1276048
>У одной страны может быть несколько столиц?
Амстердам и Гаага в Нидерландах например.
Аноним 07/10/18 Вск 17:54:24  1276103
>>1276093
> Официальной столицей государства, согласно конституции Нидерландов, является Амстердам
Аноним 07/10/18 Вск 18:30:52  1276121
>>1276048
В ЮАР три столицы.
Аноним 07/10/18 Вск 18:37:54  1276123
>>1276121
- Я поехал в столицу, одна нога здесь, другая там, а третья...
Неспособность некоторых стран определиться, какой мухосранск лучше другого никак не влияет на то, что страна и столица - это 1:1 маппинг.
Аноним 07/10/18 Вск 19:00:48  1276131
>>1276123
Ну хотят иметь три столицы, пусть имеют, места в базе полно.
Или, может, год лучше хранить в двух цифрах?
Аноним 07/10/18 Вск 19:22:33  1276145
>>1276131
Проблема Y2K была по большей части надуманной, почти ничего нигде не сломалось. Ломаться начнет примерно лет через 40, а к тому времени дат из двух цифр уже в работающем коде уже точно нигде не останется.
Аноним 07/10/18 Вск 20:28:54  1276164
>>1276145
>222ch.hk/pr/, 2058 год
>Проблема 32-битногг была по большей части надуманной, почти ничего нигде не сломалось.
Аноним 07/10/18 Вск 20:58:23  1276175
>>1276164
> 2058
2038.

> была по большей части надуманной
Именно так. Еще почти 20 лет до переполнения 32-битного signed time_t и еще овер 80 лет до переполнения unsigned. 32-битные машины за это время спокойно вымрут сами, и насильно тащить в 32-битный код 64-битный time_t было совершенно незачем. Такие дела.
Аноним 08/10/18 Пнд 12:36:36  1276345
>>1276175
>32-битные машины за это время спокойно вымрут сами
А ПО - нет.
Аноним 08/10/18 Пнд 12:51:35  1276352
>>1276345
А где ты его запускать-то будешь, свое ПО? Вон дистры линукса один за другим дропают 32-битные ядра, скоро и о /lib32 позаботятся.
Аноним 08/10/18 Пнд 13:37:46  1276363
>>1276352
Эмулировать.
Аноним 08/10/18 Пнд 13:38:58  1276365
>>1276352
>>1276363
Но вообще на самом деле я только за.
Аноним 08/10/18 Пнд 16:47:56  1276441
Ребят, прошу помощи, с синтаксисом более менее разобрался, но никак не могу придумать как решать следующие задачи:
1)Поменять местами столбцы матрицы так, чтобы элементы первой строки оказались упорядоченными.
комментарии к заданию:
Массив создается динамический, работа с элементами массива происходит через указатели (т.е. в программе полностью отсутствуют квадратные скобочки). В главной функции (main) происходит только запрос размера массива (ввод пользователем с клавиатуры), задание элементов матрицы вручную или случайным образом (выбор пользователем), и вызов двух функций а)та, которая выполняет задачу; б)функция печати матрицы.

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

Да, они очень подробно расписаны, но я всё не могу взять в голову, с чего начать. Опытные аноны, помогите аутисту, натолкните на путь истинный.
Аноним 08/10/18 Пнд 17:16:52  1276458
>>1276441
Вторая задача: любой символ, представленный как int, имеет свою кодировку, при этом алфавит идёт в таблице кодов одной такой большой лепёхой подряд, в алфавитном порядке, т.е. ты можешь сравнивать их на порядок в алфавите через арифметические операторы сравнения. Сам алгоритм проверки я бы так сделал: первую букву слова можно находить по индексу табуляции, пробела и таба + 1, вторую -- то же самое, но + 2, и так далее. Сравниваешь первые буквы попарно, если первая буква как int меньше второй буквы (потому что код у более поздней буквы в алфавите больше, понятно да), то всё норм, потом вторые буквы, и так далее. Условие, при котором процесс останавливает работу и как он обрабатывает слова с разной длиной, придумай сам это легко
Аноним 08/10/18 Пнд 17:33:28  1276465
>>1276458
спасибо, стало чуточку яснее. Я правильно понимаю, что такие задания это ультраизи фигня, но не стоит отчаиваться, если они не получаются на начальном лвле или путь в прогеры уже закрыт? Ну и что можешь сказать по первой задаче?
Аноним 08/10/18 Пнд 19:47:38  1276528
>>1276441
1) В смысле, просто отсортировать по первой строке? Притащи что угодно, хоть selection sort, хоть пузырек и сортируй, там два с половиной вложенных for, но это медленно, потому что при сортировке столбцами ты будешь тратить время на перестановки второй и последующих строк в столбцах. Поэтому лучше сделай из первой строки матрицы пары массив пар (value, original_index), отсортируй его банальным библиотечным qsort-ом по value, а потом пройди по этому массиву и на основании original_index точно в таком же порядке переставь местами столбцы в матрице.
2) Наговнокодь динамический массив (или просто достаточно большой статический массив), разбей strtok-ом строку на слова и положи туда, пройди по массиву, сравнивая слова strcmp-ом. Если на каком-то шаге strcmp(item[-1], item) вернула 1 - массив не отсортирован.
Аноним 08/10/18 Пнд 19:49:44  1276529
>>1276528
> вернула 1
Вернула >= 1, прошу прощения.
Аноним 09/10/18 Втр 11:49:08  1276745
>>1276528
>>1276529
>Помощь с сагой
Ты дебил или да?
Аноним 09/10/18 Втр 12:34:34  1276756
>>1276745
Если анону помощь по-прежнему нужна, он и так в тред зайдет, а бампать этими хелловорлдами я не хочу.
Аноним 09/10/18 Втр 15:01:08  1276790
>>1276745
Сагающий анон главный источник информации итт уже несколько лет, он отлично знает тонкости байтоебства, стандарты и их различия.
А ты петух залетный.
Аноним 09/10/18 Втр 19:17:30  1276910
image.jpeg (2122Кб, 1715x2048)
Аноним 09/10/18 Втр 22:45:38  1277050
>>1276910
Кекнул
Аноним 10/10/18 Срд 12:02:25  1277240
calloc.png (15Кб, 429x286)
Может кто-нибудь объяснить, как работать с массивом, заданным через calloc? Задать-то я его задал, вот только нихуя туда не записывается (проверил его принтами, не принтит вообще ничего, мб в for'е ошибка, но amount(file) число выдает, проверял). Просто не могу найти где нормально об этом написано, и указатели все натыкал просто по ругани от компилятора.

Аноним 10/10/18 Срд 13:01:05  1277259
>>1277240
А, сори , не надо отвечать, тут перестала резко работать функция amount.
Аноним 10/10/18 Срд 13:31:29  1277277
>>1277259
Тебе не жалко файл столько раз подряд насиловать своей amount? Она же там у тебя наверняка что-то читает внутри каждый раз?
Аноним 10/10/18 Срд 14:03:46  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)
Аноним 10/10/18 Срд 14:05:43  1277287
>>1277286
ты в тот тред пишешь?
Аноним 10/10/18 Срд 14:13:27  1277290
>>1277287
Да. Это псевдокод же.
Аноним 10/10/18 Срд 14:28:17  1277295
>>1277286
> Чо не так?
Вот это:
> histogram[​i​] >= 'a'
Ты считаешь в массиве, индексируемом кодом символа количество символов, а сравниваешь количество с кодом символа. Не знаю, зачем ты вообще сравниваешь, но если уж хочешь ограничиться только буквами, сравнивай 'a' с i. Алсо, введя какой-нибудь UTF-8, ты попортишь память из-за размера массива в 128, а не 256 символов.

> Как тут по-нормальному сделать?
Что сделать? Что значит print(char(i): array)?
Аноним 10/10/18 Срд 14:41:37  1277299
>>1277295
>Ты считаешь в массиве, индексируемом кодом символа количество символов, а сравниваешь количество с кодом символа.
Спасибо.
>Что сделать?
Там вакаба скушала.
Чтобы было:
с: 15
a: 27
b: 12
и т.д.
Аноним 10/10/18 Срд 14:44:52  1277301
>>1277299
Чтобы вакаба не кушала, в оппосте есть магия. Чтобы получился такой выхлоп, исправь в printf %3d на %c.
Аноним 10/10/18 Срд 16:38:53  1277336
>>1277277
Да, наверное это не очень рационально, ввел туда равную ему переменную, теперь компилятор segmentation core dumped выдает, пойду покопаюсь в указателях.
Аноним 10/10/18 Срд 18:33:39  1277368
>>1277336
А тебя не смущает, что ты вот выделил массив указателей на double, выделил calloc-ом, они нули, а потом ты делаешь scanf("%lg", meas1[​i​]), т.е., scanf("%lg", NULL)? И чего ж оно сегфолтится? Тебе нужен простой массив даблов, т.е., double ∗meas1=calloc(...); и scanf("%lg", &meas1[​i​]...
Аноним 10/10/18 Срд 21:05:56  1277417
>>1277368
Спасибо.
Аноним 10/10/18 Срд 21:51:08  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

Вместо ожидаемого выплевывает пустоту. Защо?
Аноним 10/10/18 Срд 21:57:25  1277441
>>1277436
Ну в который раз, только стоит запостить и сразу видишь свою ошибку.
Надо было return last_letter; сделать.
Аноним 10/10/18 Срд 23:51:46  1277489
>>1277436
> https://ideone.com/obvjq7
Тестируй тщательнее - ты наебался с индексами.
1) Строки из одного символа считаются за пустые, потому что return last_letter возвращает последний индекс, а последний индекс для строки из одной буквы - ноль.
2) Параметр у reverse называется len, а передаешь ты все тот же индекс. Но логика кривая, и поэтому оно работает. Вообще <= в цикле - это хороший признак, что у тебя либо 1-based индексы, либо ты где-то наебался на единицу.
3) Цикл заканчивается, когда i > len, т.е., указывает на следующий элемент после строки, но ты зачем то делаешь i + 1 при присваивании '\0', что приводит к test -> tsetx, где x - какой-то мусор из стека.
Аноним 11/10/18 Чтв 15:24:46  1277683
>>1269833
Еще есть божественная Дишечка, в ней все сделано по-человечески.
Аноним 11/10/18 Чтв 15:25:40  1277685
Снимок.PNG (30Кб, 1129x588)
>>1277436
хелоу ворлд
Аноним 11/10/18 Чтв 15:54:36  1277702
>>1277683
Есть сборщик мусора = не может считаться ни системным языком, ни вообще упоминаться радом с Си.
Аноним 11/10/18 Чтв 16:14:35  1277717
>>1277702
Прожженные байтоебы могут убирать за собой мусор сами, за нормальных людей это делает уборщик.
Аноним 11/10/18 Чтв 16:25:14  1277727
>>1277717
> за нормальных людей это делает уборщик
Про этих нормальных людей целый тред есть >>1274731 (OP).
Аноним 11/10/18 Чтв 16:39:20  1277737
Привет, Анон. Расскажи мне пожалуйста, есть ли в языке си способ разместить функцию в коде таким образом, чтобы при компиляции не происходил вызов этой функции, с перекладыванием переменных в стек и переходом на адрес функции, а чтобы компилятор затолкал эту функцию непосредственно в функцию из которой она вызывается. С меня как обычно.
Аноним 11/10/18 Чтв 17:41:00  1277771
>>1277737
inline.
Аноним 11/10/18 Чтв 21:01:14  1277849
>>1277771
Напомню, что компилятор имеет право класть на этот атрибут любые свои части. Поэтому обычно делается зависимый от компилятора дефайн на __forceinline или __attribute__((always_inline)).
Аноним 12/10/18 Птн 20:42:47  1278302
это вечная история. каждый раз находятся люди, считающие что они умней компилятора.
Аноним 12/10/18 Птн 20:44:17  1278304
>>1278302
> это вечная история. каждый раз находятся компиляторы, считающие что они умней людей.
Аноним 12/10/18 Птн 20:46:52  1278307
>>1278304
О, да тут и искать не нужно. Всего три буквы: Г, Ц, Ц.
Аноним 12/10/18 Птн 20:49:59  1278313
>>1278307
Clang тоже, разве нет?
Аноним 12/10/18 Птн 21:03:22  1278324
>>1278302
-O0
и никаких гвоздей
Аноним 13/10/18 Суб 13:10:22  1278490
>>1269824 (OP)
Использую while(!kbhit()) для пауз в программе, но после нажатия любой клавиши соответсвующий символ печатется на экране, как этого избежать?
Аноним 13/10/18 Суб 13:37:28  1278494
>>1278490
> после нажатия любой клавиши соответсвующий символ печатется на экране
Ты читай символ-то. Он же от _kbhit() никуда из буфера ввода не девается. Делай _getch() после цикла.
Аноним 13/10/18 Суб 16:42:39  1278523
>>1278494
А зачем мне тогда вообще while(!kbhit()), ведь getch() далет то, что мне нужно и без while(!kbhit())? Почему тогда все советуют использовать while(!kbhit()), аргументируя тем, что getch() не всегда бывает надёжен?
Аноним 13/10/18 Суб 18:37:21  1278559
>>1278523
Я не знаю, зачем тебе нужно while (!_kbhit()). Его сфера применения - когда тебе нужно делать в теле этого while, _getch() сам по себе в таких случаях не подходит, потому что блокирует поток, в котором вызван. Насчет надежности ничего не знаю, максимум там будет проблема с непустой очередью ввода, ну так она и _kbhit() тоже затронет.
Аноним 14/10/18 Вск 08:17:24  1278733
Аноны ,я блять тупой.
Мне препод дал задачу "вывод чилса в двоичной\8чной\16чной системе"
Для 2чной написал цикл с выводом остатка деления на 2 и возвратом каретки
А эта ебучая каретка когда возвращается ,то заменяет все ,что было выведено до этого.Че за залупа блять?я быдлокодер с 10-ю минутами стажа в visualstudio
Аноним 14/10/18 Вск 10:21:07  1278751
>>1278733
в винде перевод каретки - \r\n
Аноним 14/10/18 Вск 13:18:21  1278842
>>1278751
Да я через cout выводил ,через printf заработало все
Аноним 14/10/18 Вск 22:52:12  1279139
>>1278733
Ставь линукс.
Аноним 15/10/18 Пнд 02:28:19  1279199
Подкиньте материалы на тему как скомпилировать свое ядро нужной версии, свой glibc под эту версию ядра, и свой gcc под эту версию glibc, чтоб дальше собрать свою Си программу под это окружение
Аноним 15/10/18 Пнд 04:43:12  1279208
>>1273623
Пользуюсь Emacs'ом, посмотрев это видео ужаснулся :')
Аноним 15/10/18 Пнд 05:29:37  1279214
>>1278842
Для cout конец строки std::endl
Аноним 15/10/18 Пнд 21:59:20  1279684
Друзья, обычно для инициализации бинарного дерева узлы перечисляются в префиксном порядке, как инициализировать дерево если порядок постфиксный или инфиксный
Аноним 15/10/18 Пнд 22:30:53  1279698
>>1279684
>постфиксный или инфиксный
обрати строку
Аноним 15/10/18 Пнд 22:37:18  1279699
>>1279698
тобиш без обработки строки не вар?
Аноним 15/10/18 Пнд 23:05:42  1279705
>>1279699
ты что в узлах хранишь то?
Аноним 15/10/18 Пнд 23:07:54  1279708
>>1279699
дерево* ф(строка){
дерево д;
д->val=символ_строка;
д->лево=ф(строка);
д->право=ф(строка);
return д;
}
ну вот для префикс а как изменить функция шоб можно было пост/ин фиксный порядок взять
Аноним 15/10/18 Пнд 23:11:16  1279710
>>1279708
читай строку с конца
Аноним 15/10/18 Пнд 23:13:25  1279712
>>1279710
так тогда зацикливание, фия начинается с рекурсии
Аноним 15/10/18 Пнд 23:16:05  1279713
>>1279712
отрезаешь по буковку справа
Аноним 15/10/18 Пнд 23:22:09  1279714
image.png (3Кб, 240x63)
image.png (10Кб, 356x312)
>>1279713
просто считывая с конца не катит, строки не зеркальные ведь
Аноним 15/10/18 Пнд 23:24:52  1279716
Ну используй явный стек вместо рекурсии, будешь туда пихать недоеденные ноды.
Аноним 15/10/18 Пнд 23:25:49  1279717
>>1279714
какая то хуйня, где ты ее взял? что это за строки, какова цель?
Аноним 15/10/18 Пнд 23:30:44  1279718
>>1279717
перечисления узлов, /-значит шо возвращаем null
Аноним 15/10/18 Пнд 23:33:06  1279719
>>1279718
коких узлов, что в них? чем fca отличается от a/c/f?
Аноним 15/10/18 Пнд 23:34:07  1279720
>>1279716
я вижу шо со стеком постфиксная катит, но инфиксная как тогда
Аноним 15/10/18 Пнд 23:40:51  1279725
>>1279719
3 строки это обзывательства одного и того же дерева, правила чтения ток разные, более подробно хз как
Аноним 15/10/18 Пнд 23:43:03  1279727
>>1>>1279725
/ значит для обозначения листьев
Аноним 16/10/18 Втр 00:06:34  1279736
in.png (4Кб, 381x308)
>>1279720
> но инфиксная как тогда
А вот так. Обойди вот это дерево и сравни со своим обходом (кружочек - NULL). И что ты будешь делать c этим?
Аноним 16/10/18 Втр 00:26:02  1279746
>>1279736
бля а чо делать то ебать как так то вообще
Аноним 16/10/18 Втр 00:29:13  1279747
>>1279705
тупа char
Аноним 16/10/18 Втр 00:38:01  1279754
>>1279746
>бля а чо делать то ебать как так то вообщ
грамотно поставь задачу
Аноним 16/10/18 Втр 00:41:42  1279757
>>1279754
тоесть имея инфиксный порядок узлов дерева может быть несколько деревьев?
Аноним 16/10/18 Втр 00:59:09  1279768
>>1279757
>инфиксный порядок узлов дерева может быть несколько деревьев?
какой нах порядок? у тебя массив символ, если ты колдуешь со строками, то очень похоже, что велосипедишь trie
Аноним 16/10/18 Втр 01:01:50  1279769
>>1279768
Давай ты уже сходишь и прочитаешь про обходы дерева?
https://en.wikipedia.org/wiki/Tree_traversal
Аноним 16/10/18 Втр 01:11:56  1279771
>>1279769
ладно, как осознаешь, что строкам там не место, приходи.
Аноним 16/10/18 Втр 01:15:08  1279773
>>1279771
дурик, я вопрос задал, а на вики тя другой челик отправил
Аноним 16/10/18 Втр 02:02:16  1279796
>>1279754
надо создать дерево зная его инфиксный и постфиксный обход, вот
Аноним 16/10/18 Втр 02:12:46  1279798
>>1279796
сохраняй конечные узлы в массив и делай двунаправленные ссылки
Аноним 16/10/18 Втр 07:52:40  1279829
2ch, мне нужно считывать данные с другой запущенной программы (процесса), с помощью cheat engine нахожу адреса нужных мне данных, программно считываю, с этим всё нормально, но адреса каждый раз меняются. Что мне нужно делать, в какую сторону копать? 14 летние какиры с ютуба мне не помогли.
Аноним 16/10/18 Втр 07:58:07  1279831
>>1279829

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

ASLR

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

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\MoveImages
Аноним 16/10/18 Втр 13:08:31  1279896
>>1279831
>ASLR
Ой, блядь, там у него обычный динамический мемори-менеджмент, просто он ищет сами данные, а надо искать указатели на них.
Аноним 16/10/18 Втр 13:21:13  1279904
>>1279798
не понятно(
Аноним 16/10/18 Втр 14:43:09  1279940
Хочу поизучать С для общего развития. Читать на русском буду. Что лучше навернуть? Кернигана или Фомина? Какая книга проще?
Аноним 16/10/18 Втр 14:56:25  1279945
msdn.png (6Кб, 276x317)
>>1279940
> Читать на русском буду. Что лучше навернуть
Учебник английского. Если книгу по Си на русском ты еще найдешь, до всевозможную документацию, которая понадобится тебе, чтобы писать на Си, никто для тебя переводить не будет, а если и будут, то тебя ждут лабораторные занятия пикрилейтед.
Аноним 16/10/18 Втр 16:54:47  1280038
>>1279945
Я не буду писать на Си. Я хочу поизучать его для общего развития.
Аноним 16/10/18 Втр 17:27:59  1280069
>>1280038
В смысле, как сказку на ночь? Тогда надо бы Фленова, но он только про кресты писал. Возьми K&R, Фомина я сейчас поскроллил - там натуральный бред.
Аноним 16/10/18 Втр 18:43:53  1280118
>>1280069
Просто хочу с низкоуровневым программированием познакомиться и решил что си идеален для этого.
Аноним 16/10/18 Втр 19:42:33  1280146
>>1280069
Ок k&r так k&r. Прост в картинке закрепленного треда в списке рекомендуемой литры в разделе Си только эти две книги и я так и подумал что мало обучающей инфы по Си.
Аноним 16/10/18 Втр 22:27:49  1280257
111.jpg (60Кб, 458x582)
Сап, аноны. Почему у меня по несколько раз выводится строка. Я понимаю, что она агрится на количество введённых символов. Как пофиксить? Сорри, что не через идеон, чёто не разобрался как.
Аноним 16/10/18 Втр 23:05:56  1280275
>>1280257
> Почему у меня по несколько раз выводится строка
Ну так ты сам написал: в цикле выводить сообщение и читать символ, пока он вне 'A'..'Z'. Ты вводишь 100\n (\n - это Enter), оно получает эти символы последовательно, ни один не подходит.

> Как пофиксить?
Выводи сообщение один раз до цикла, например.
Или читай строку fgets, а потом уже разбирайся с ней хоть вручную хоть посимвольно, хоть sscanf.
Или ты можешь очистить буфер ввода. Например, существует магия типа scanf("%*[^\n]");, она поглощает весь остаток строки вплоть до, но не включая \n, а уже следующий вызванный scanf("%c") сожрет, если есть, сначала все пробельные символы, включая \n, а потом уже получит первый встретившийся непробельный символ).
Или можешь делать ту же самую очистку буфера после неверного ввода, но руками: while ((c = getchar()) != EOF && c != '\n');
Аноним 17/10/18 Срд 09:43:06  1280392
>>1280275
Спасибо.
Аноним 17/10/18 Срд 12:33:09  1280460
>>1280257
Я не понял - а зачем он пишет do? Ведь можно и без него просто написать 2 строки с пинтф и сканф?
Аноним 17/10/18 Срд 14:14:20  1280499
>>1280460
Ну do while гарантирует что то что находится в теле цикла выполнится хотя бы один раз...

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

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

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

мимо студент
Аноним 17/10/18 Срд 14:15:30  1280500
>>1280460
Чтобы если ввели не букву, то повторится просьба со вводом заглавной буквы
Аноним 21/10/18 Вск 10:55:20  1282079
чуваки, правильно я понял, что feof и ferror устанавливаются после каждого чтения, например fread'ом?

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

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

всегда читал read'ом всё. щас подумал - нафиг я так привязываюсь к позиксу. а сами функции fread/fwrite почему-то считал только файловыми.
Аноним 21/10/18 Вск 15:59:47  1282264
>>1269824 (OP)
Анон, пожалуйста, не гони ссаными тряпками, помоги разобраться. Первый язык, как-никак.
Как начать писать на C в Visual Studio 2017 Community Edition? Скачал, добавил с вкладки "Отдельные компоненты" Clang/C2 (экспериментальный), установил. Открываю новый проект, Clang/C2, динамическая/статическая библиотека, что дальше? Куда [CODE]Hello, World![/CODE] пихать?
Аноним 21/10/18 Вск 16:01:52  1282268
>>1282079
> и наверно, существует ситуация, когда достигается конец файла-стрима, но и происходит ошибка?
Нет. У тебя три стула: ты либо не смог ничего прочитать (ошибка), либо ты попал на EOF и прочитал 0 байт (EOF - не ошибка!), либо ты прочитал байт и более. Для отличия первой ситуации от второй придумали feof/ferror. Функций две, потому что ты мог использовать какой-нибудь fscanf, он возвращает количество присваиваний, не позволяя отличить неверный ввод от ошибки или EOF, поэтому, чтобы отличить эти три вещи, приходится действовать методом исключения, проверяя и EOF, и ошибку.

> странная тогда функция clearerr. почему нельзя что-то одно сбросить тогда?
Потому что можно. EOF сбрасывается через fsetpos/fseek. А при наличии ошибки нет смысла сбрасывать EOF и оставлять ошибку.

Стандартная библиотека в Си сломана, не пытайся найти в ней логику.
Аноним 21/10/18 Вск 16:07:26  1282275
>>1282264
> добавил с вкладки "Отдельные компоненты" Clang/C2 (экспериментальный), установил
"Desktop development with C++"

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

У меня скриншоты валяются где-то. Если не разберешься, вечером вброшу.
Аноним 21/10/18 Вск 16:15:00  1282286
>>1282275
Вроде бы работает. Огромнейшее спасибо и сотен нефти тебе.
Аноним 22/10/18 Пнд 14:07:34  1282651
От скуки накатал на коленке такую хуету.
Покритикуйте.
pastebin.com/0uNJgsLQ
Аноним 22/10/18 Пнд 15:02:06  1282678
>>1282651
А что тут критиковать? Типичный смари бля как я умею. Синтаксический сахар который заебешься разбирать.
Аноним 22/10/18 Пнд 15:04:18  1282680
>>1282678
>синтаксический сахар
>в си
Ох мальчик, здесь мы идём опять.
Аноним 22/10/18 Пнд 15:06:51  1282684
>>1282651
Называй свое? говно как хочешь, мальчик.
Аноним 22/10/18 Пнд 15:07:17  1282685
>>1282680
>>1282684
Аноним 22/10/18 Пнд 17:25:35  1282768
>>1282651
> pastebin.com/0uNJgsLQ
Критикуем: использование Windows API ничем не оправдано, если использовать сишную CRT, кода будет строк десять, а если взять еще и какой-нибудь TCC, то еще и бинарник по размеру будет меньше твоего, причем безо всяких директив линкеру в коде. Ну и там всякие мелочи вроде ∗dest_ptr = NULL вместо ∗dest_ptr = '\0' выдают ньюфага, отключившего предупреждения у компилятора, с головой. Алсо, если используешь GlobalAlloc, делай это "правильно", с GlobalLock, каждую секунду думая о бессмысленности этой функции родом из 3.1 в современных ОС, а лучше осиль HeapAlloc уже. Но для начала норм.
Аноним 23/10/18 Втр 00:03:39  1283046
>>1282768
Хорошая попытка, но нет. gcc выдаёт около 40 килобайт, вижла порядка 15 (без этих директив).
С ними 2560 байт.
Аноним 23/10/18 Втр 00:55:47  1283075
>>1283046
А ты не используй гцц. Используй тцц, он с MSVCRT линкуется.
Аноним 23/10/18 Втр 02:18:31  1283106
maxresdefault.jpg (145Кб, 1920x1080)
>>1283075
>не используй гцц
Аноним 24/10/18 Срд 03:56:08  1283671
>>1283075
гцц тоже линкуется. Попутно таская за собой статическую либу своих костылей. Это именно в сишке.
В случае плюсов туда линкуется (опять же статически) свой рантайм c++, несовместимый с msvcp вообще никак, отчего экзешник пухнет до ужасающих размеров.
Аноним 24/10/18 Срд 05:53:40  1283685
>>1283671
Кроме костылей гцц еще срет своими символами и прочими строками, которые даже с -s до конца не стрипаются, в то время как tcc делает маленький няшный бинарник совершенно без говна. Но особого смысла в погоне за бинарниками в 4-8 КБ нет (ну демки, разве что), а в больших программах отличия не настолько значительны. Я посоветовал tcc лишь потому, что анон выше криво, без обработки ошибок писал на Windows API, вероятно, именно в попытке уменьшить размер бинарника.
Аноним 24/10/18 Срд 09:48:55  1283703
CLion под виндой возможно научить использовать cmd вместо своего встроенного терминала? Мне как бы надо курсор гонять, через винапи, а пердолиться с созданием консольного окна в коде желания нет.
Аноним 24/10/18 Срд 16:08:31  1283852
>>1283703
> а пердолиться с созданием консольного окна в коде желания нет.
А что, так сложно собрать как GUI-приложение и дернуть AllocConsole?
Аноним 25/10/18 Чтв 02:34:01  1284065
Аноны, помогите. Писал полгода в вижаке/gcc в линуксе. Поставил Xcode на macOS. В общем, при вызове scanf происходит какой-то пиздец. На пике все видно (смотрим атпут - нижний правый угол). Что за хуйня?
Аноним 25/10/18 Чтв 03:17:44  1284076
>>1284065
А что тебе не нравится? 54.5999? Ну так флоаты же. Или то, что распидорасило порядо строк? А попробуй fflush(stdout) сделать перед выходом?
Аноним 25/10/18 Чтв 04:36:57  1284094
>>1284076
>А что тебе не нравится? 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, но в гугле ничего похожего не нашел. Может, я просто что-то упускаю/не включил какую-то опцию?
Аноним 25/10/18 Чтв 05:03:38  1284101
>>1284076
>>1284094
Сам нашел ответ на свой вопрос. Хотя, как сказать. Нашел тред на форуме эпл, где у ОПа и комментаторов такая же проблема. Оказывается, это баг 10-й версии xcode (сообщение о завершении программы появляется посреди вывода). Фиксится сменой размера шрифта окна вывода. Но это такой себе фикс, ибо шрифт нужно менять вручную при каждом экзекуте - сам он его не сейвит. Собственно, вот тред, можете почитать, кому интересно https://discussions.apple.com/thread/8543709
Пиздец, у меня горит жопа с этого ебучего мак ос и ебучего баганного проприетарного эпловского софта, но зато своё!
Аноны, которые пишут на маке, предложите достойную альтернативу, пожалуйста. Visual Studio под Wine, например, нормально запустится?
Аноним 25/10/18 Чтв 07:18:23  1284115
>>1284101
>Пиздец, у меня горит жопа с этого ебучего мак ос и ебучего баганного проприетарного эпловского софта
Ну так собери себе нормальную пеку а не макоговно
Аноним 25/10/18 Чтв 13:27:13  1284235
>>1269824 (OP)
С или С++?
Аноним 25/10/18 Чтв 13:39:32  1284239
>>1284235
Тян или кун?
Аноним 25/10/18 Чтв 14:07:12  1284249
>>1284115
Почему двачеры так радикально решают проблемы? Все же xcode - единственная возможность писать приложения для айос, эпл вотч, эпл тв.
Аноним 25/10/18 Чтв 14:46:53  1284273
>>1284249
swift?
objectove-c?
Аноним 25/10/18 Чтв 15:21:04  1284285
>>1284273
При чем тут эти яп?
Аноним 25/10/18 Чтв 16:52:08  1284331
>>1284101
Юзай visual studio code и будет тебе счастье. Там и дебаггер есть.
Аноним 25/10/18 Чтв 17:01:29  1284339
>>1284249
>Почему двачеры так радикально решают проблемы?
Смотри, ты жрешь говно, сам это понимаешь, когда я тебе говорю прекратить жрать говно, ты говоришь мол зачем так радикально. Я делаю вывод: тебе нравится жрать говно. Ну окей, ебись с икскодом, а лучше компиль из под терминала.
Аноним 25/10/18 Чтв 17:10:29  1284345
>>1284339
>лучше компиль из под терминала.
Двачую.
Аноним 25/10/18 Чтв 22:18:30  1284548
>>1284094
> Только не stdout, а stdin
Не stdin, а stdout!

> то при запуске (кнопка Run) аутпут окно вообще не появляется
Что опять же намекает на то, что stdout почему-то не флашится (он line-buffered, а \n у тебя нет, поэтому строка остается в буфере FILE). В любом случае, это баг реализации.
Аноним 26/10/18 Птн 11:38:32  1284746
>>1284094
>>1284094
>Да и разве не видно, что это не тот случай, когда \n остается в буфере ввода с предыдущего сканф?
Ты пробовал написать "scanf("%f\n", &b);" вместо того что у тебя?
Аноним 26/10/18 Птн 16:52:50  1284891
>>1284746
Следующий scanf отлично пожрет все пробельные символы, в том числе и \n, а на отображение в консоли этот \n не влияет, потому что к тому времени, как scanf начал что-либо матчить, stdin уже прочитал к себе в буфер строку целиком, включая \n.
Аноним 26/10/18 Птн 17:05:54  1284894
>>1284891
Ну так ты пробовал так или нет?
Аноним 26/10/18 Птн 18:09:19  1284934
Насколько C трушный легче ассемблеров в освоении?
Аноним 26/10/18 Птн 19:31:30  1284974
>>1269824 (OP)
С хуя ли инструкция goto настолько презираема в Си?
У тебя блять в распоряжении есть огроменный елдак, которым ты можешь болтать во все стороны и способен отъебать кого угодно, но ты сука намеренно прячешь его в штаны и как ебучий куколд юзаешь покупной самотык. Че это блять за хуета?
Аноним 26/10/18 Птн 19:32:38  1284975
>>1284974
Давай тоньше. У тебя получится.
Аноним 26/10/18 Птн 19:37:39  1284979
>>1284974
>Че это блять за хуета?
Goto это охуенная тема, просто смузипидоры начили его лепить везде где не нужно и зашкварили саму идею
Аноним 26/10/18 Птн 19:41:54  1284983
>>1284934
Ассемблеры гораздо проще любого более высокоуровневого языка. Си сам по себе несложный, но в нем есть множество тонкостей типа сахарка не совсем к месту и прочего undefined behavior, которые нужно знать и понимать. Зато, в отличие от ассемблеров, простые вещи не занимают два экрана кода.

>>1284974
> С хуя ли инструкция goto настолько презираема в Си?
А ты меньше говностатей читай. goto CLEANUP и goto EXIT_LOOP - нормальные, часто используемые вещи. Остальное можно выразить с помощью других конструкций, и это будет более читаемо.
Аноним 26/10/18 Птн 20:55:42  1284999
>>1284979
Двощую.
Аноним 26/10/18 Птн 20:56:58  1285001
>>1284239
Я просто хочу понять во что проще вкатится, в с или в с с плюсиками.
Ибо про плючихи дохуя комиксов как выучить плючики за джве недели, а про с такого нету. Думаю что он проще и пытаюсь узнать так ли это.
Аноним 26/10/18 Птн 21:15:30  1285008
>>1285001
> Ибо про плючихи дохуя комиксов как выучить плючики за джве недели
Лол. На самом деле Си за год и кресты (после Си) за три.
Аноним 26/10/18 Птн 21:42:14  1285016
Господа, платина на барабане. Поясните за float-хуиту, какого хера компьютер не в состоянии сохранять числа как они есть? Это связанно с тем, как комп хранит числа в памяти, в двоичном виде? Вот простой пример : сижу, кодю, и требуется умножить введенное с клавиатуры 1.6 на 100 - получаем 1.60000002 %%и так далее???%. Туда же - умножаем введенное с клавиатуры 4.2 на 100 - получаем 4,19999981, что сказывается на результате выполнения программы.
Почему так происходит? Что почитать по данной проблеме? Как ее избегать? Не всегда же можно округлить до целого.
Спасибо!
На пикрелах видно, справа, где дебаггинг, видно что i равняется тому-то тому-то, как я и описал
Аноним 26/10/18 Птн 21:52:55  1285027
>>1285016
>Что почитать по данной проблеме?
Это не проблема, это операции с плавающей зяпятой, про низх и читай
Аноним 26/10/18 Птн 21:55:26  1285029
>>1285016
> Что почитать по данной проблеме?
Уже рекламировал тут: https://randomascii.wordpress.com/category/floating-point/

> Не всегда же можно округлить до целого.
Можно округлять до нужного количества знаков после запятой после окончания вычислений.
Аноним 26/10/18 Птн 21:58:05  1285031
>>1285016
>Это связанно с тем, как комп хранит числа в памяти, в двоичном виде
пиздец
Аноним 26/10/18 Птн 22:02:52  1285037
>>1285031
Ну а что он не так сказал? Да, связано. Да, числа с плавающей точкой - тоже суммы степеней двойки. Только в отличие от целых чисел, не только положительных, но и отрицательных. Если дробь нельзя представить суммой степеней двойки, выбирается ближайшая, которую представить можно.
Аноним 26/10/18 Птн 22:04:07  1285039
got Hot-Men.jpg (71Кб, 467x542)
>>1285016
Бог Питона снизошел до челяди
Ебошу В Анаконде (numpy+ scipy). Хуярю в интерпретаторе double значения. Хоть в матрицах, хоть где еще. Никогда не жаловался
Аноним 26/10/18 Птн 22:08:50  1285041
>>1285039
> Никогда не жаловался
a = pow(2.0, 53)
if a == a + 1: print('Шел бы ты отсюда, скриптоблядь!')
Аноним 26/10/18 Птн 22:09:58  1285042
>>1285037
блять весь компьютер это мешанина из нулей и единиц
если не в двоичном формате то блять в чем? в виде псионической энергии?
Аноним 26/10/18 Птн 22:16:27  1285044
>>1285016
>Не всегда же можно округлить до целого.
А я храню с фиксированной точкой и не жалуюсь.
Аноним 26/10/18 Птн 22:17:38  1285045
>>1285042
> блять весь компьютер это мешанина из нулей и единиц
Ты теперь достаточно большой, чтобы узнать страшную правду о том, откуда берутся дети. Не весь. https://en.wikipedia.org/wiki/Three-state_logic

> если не в двоичном формате то блять в чем?
Есть овердохуя способов хранить дроби. Да, они все рано или поздно сводятся к битам. Но спецэффекты у этих способов разные.
Аноним 26/10/18 Птн 22:25:50  1285047
>>1285045
>Не весь
>кидает ссыль на голимые буферы с 3мя состояниями, которые рассматривают на 2м курсе технической шараги

Ахуеть блять. Еще приведи мне в пример std_logic из VHDL. Информация хранится и передается в виде нулей и единиц, даже если разобьем сигнал на много логических уровней, компьютер все равно будет оперировать 0 и 1. Никаким Z и Х-состояниям там места нет
Аноним 26/10/18 Птн 22:45:19  1285055
>>1285047
> передается в виде нулей и единиц,
Верно, поэтому современная информатика это ебаный каменный век
Аноним 26/10/18 Птн 23:05:45  1285067
>>1285027
>>1285029
>>1285044
>>1285037
От души, аноны, спасибо
Аноним 26/10/18 Птн 23:44:17  1285097
>>1285047
Ты не прав, есть разработкиещё советские, где есть реально три состояния на уровне железа именно.
Аноним 26/10/18 Птн 23:53:32  1285102
>>1285097
И где теперь эти разработки вместе с Советами?
Аноним 26/10/18 Птн 23:54:53  1285103
>>1285102
Но тем не менее, реальный тристейт существует.
Аноним 26/10/18 Птн 23:56:24  1285104
>>1285097
АНАЛОГОВНЕТ в треде
Аноним 26/10/18 Птн 23:56:25  1285105
>>1285103
>The term tri-state should not be confused with ternary logic (3-value logic).
Аноним 27/10/18 Суб 00:27:35  1285120
>>1285016
100/3 сколько будет, не подскажешь?
Аноним 27/10/18 Суб 00:28:09  1285121
>>1285120
33 остаток 1.
Аноним 27/10/18 Суб 02:21:39  1285150
>>1285016
Дурачек, ты же поставил брейкпоинт, он останавливает программу до того как выполнен код в строчке, АЛЛО! Поставь его на следующую строчку и ты сильно удивишься. Либо если я не прав, то скрин в студию, я себе лицо обоссу без пруфов в таком случае, но не может быть такого, что в СИ внезапно для всех сломано умножение, блять, сам подумай.

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

Алсо, никто не запрещает, но я бы на твоём месте не писал "i = i 100", а "i=100".
Аноним 27/10/18 Суб 02:25:36  1285153
>>1285150
Ебаная вакаба.

Вместо "i = i умножить 100" - "i*=100".
Аноним 27/10/18 Суб 07:50:29  1285184
Сап, аноны. У меня проблемка вот. Подскажи, пожалуйста, куда нажимать. Решил поотлаживать под GDB и когда дохожу до scanf(), то не знаю как передать коду значения. Что делать?
Аноним 27/10/18 Суб 14:29:03  1285288
Помогите решить задачу, и, если не сложно, приведите пример решения.

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

Как это реализовать без if?
Аноним 27/10/18 Суб 14:30:06  1285290
>>1285288
самофикс
(a, b <=255)
Аноним 27/10/18 Суб 14:39:49  1285298
>>1285288
Оператор case, не? Проверяй остаток от деления
Аноним 27/10/18 Суб 14:43:01  1285301
>>1285288
Чето пришло в голову:
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
Аноним 27/10/18 Суб 14:43:48  1285302
>>1285301
>printf("%d", (a + b) mul1 mul2);
printf("%d", (a + b) mul1 mul2);
fix
Аноним 27/10/18 Суб 14:44:27  1285303
>>1285302
сука, куда оно звездочки девает, там короче умножить на mul1 умножить на mul2
Аноним 27/10/18 Суб 15:02:58  1285308
>>1285301
Неплохо, но смотри, что делают дети в Украине в твоём возрасте.
printf("%d", (a+b)умножить(1xor a%2)(1xor b%2))
Аноним 27/10/18 Суб 15:13:26  1285315
СУК... Какого хера другому анону на раз-два решаешь задачки, а себе
@
сидишь неделями, думаешь над простой обработкой строк.
Аноним 27/10/18 Суб 15:15:13  1285316
>>1285315
>обработкой строк
>Си
Ты зашел не в свой район, петушок
Аноним 27/10/18 Суб 15:18:29  1285318
>>1285316
Ну, вроде как ничто так хорошо не поможет понять массивы, как работа со строками. Можно же как-то так вообще сделать вроде
typedef string *char;
И особо не маяться. Только я не понимать, что эта строка делает.
Аноним 27/10/18 Суб 15:20:28  1285319
>>1285288
Числа целые? Если да, то в двоичном представлении у чётных младший бит = 0, у нечётных младший бит = 1.
Дальше сам думай
Аноним 27/10/18 Суб 15:22:57  1285320
>>1285318
>массивы
Статические массивы - рудимент
Им не место в 2к18
Аноним 27/10/18 Суб 15:24:00  1285322
>>1285320
А если у меня статическое количество элементов? А?
Аноним 27/10/18 Суб 15:24:23  1285323
>>1285319
Ты предлагаешь вытаскивать младший бит за каким-то хуем, когда можно сделать в одну составную инструкцию используя лишь '%' и лог операторы?
Аноним 27/10/18 Суб 15:30:56  1285325
>>1285323
>printf("%d", (a+b)умножить(1xor a%2)(1xor b%2))
Если заменить на :
printf("%d", (a+b)умножить(1 ^ (a & 1))(1 ^ (b &1))),
может быть быстрее.
Аноним 27/10/18 Суб 15:46:11  1285330
>>1285325
Ну, это уже вообще прям уровень godlike казахов, которые вместо кофе потягивают кумыс.
Аноним 27/10/18 Суб 15:48:37  1285331
алсо... анонче... Может поможете 1.19 Кернигана&Ритчи сделать? Как написать функцию реверса строки?
Аноним 27/10/18 Суб 15:53:34  1285334
>>1285331
Ну бле берешь находишь /0, берешь цикл до середины и свапишь первые элементы с последними, хулит там реверсить?
Аноним 27/10/18 Суб 16:08:32  1285351
>>1285334
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.
Аноним 27/10/18 Суб 16:21:44  1285357
>>1285351
Это потому, что ты и /0 свапишь.
Аноним 27/10/18 Суб 16:24:59  1285358
>>1285351
s=str(input())
s=s[::-1]
print('сосать, бомжи')
Аноним 27/10/18 Суб 16:27:41  1285359
>>1285357
ваааааааау. Спасибо, анон, а то я сам в глаза долблюсь. И впрямь заработало.
>>1285358
поех даже не знает сколько его строки в этом случае весят.
Аноним 27/10/18 Суб 16:27:46  1285360
>>1285358
питонопараша в другой стороне
Аноним 27/10/18 Суб 16:39:09  1285371
Не понимаю анон, почему не работает. Вроде же идеально.

https://ideone.com/tFr59S

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

например ./progname cba 231
Lолжен выдать: abc 123
Аноним 27/10/18 Суб 16:45:00  1285375
>>1285323
Я предлагаю тебе использовать побитовые операции, вместо арифметики. И не вытаскивать младший бит, а фигачить xor с маской.
Аноним 27/10/18 Суб 16:57:26  1285384
>>1285308
Видим как дети на украине пишут говнокод.
Аноним 27/10/18 Суб 17:00:01  1285387
>>1285384
Такой говнокод используют по всяких там SIMD, чтобы избежать дорогих бранчей.
Аноним 27/10/18 Суб 17:04:10  1285392
>>1285308
Так индусы пишут за 2$ в час
Аноним 27/10/18 Суб 17:05:37  1285394
>>1285392
а как пишут люди за 300кк/сек?
Аноним 27/10/18 Суб 17:07:15  1285397
>>1285394
Как я
Аноним 27/10/18 Суб 17:08:17  1285398
>>1285397
А как ты написал решение той задачи?
Аноним 27/10/18 Суб 17:10:32  1285399
>>1285398
еще не писал
Аноним 27/10/18 Суб 17:11:24  1285401
>>1285399
Ну, и иди нахуй неиндус.
Аноним 27/10/18 Суб 17:12:44  1285403
>>1285371
Бамп вопросу
Аноним 27/10/18 Суб 17:17:28  1285406
>>1285371
Ну, вывод я у тебя переписал вот так. А то геморойно же по букве выводить.
while(j<argc)
{
printf("%s\n", argv[j]);
j++;
}
прокомментировав сортировку этот код отработал как надо. Значит трабла в сортиров_очке.
Аноним 27/10/18 Суб 17:24:24  1285410
Привет. Что значит слово, в контексте программирования. В памяти слово это типа 32 бита или 64 или что? Объясните чайнику, вы же тут шарите полюбас, в инете нихуя не понятно
Аноним 27/10/18 Суб 17:29:49  1285412
>>1285406
>прокомментировав сортировку этот код отработал как надо. Значит трабла в сортиров_очке.
Ну я не вижу где там косяк(
Аноним 27/10/18 Суб 17:31:15  1285413
>>1285410
https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D1%81%D0%BB%D0%BE%D0%B2%D0%BE
скорее всего у тебя анон 64х архитектура, так что слово будет восьмибайтное. Хотя я помню из реестра виндоуз там словом обозначается два байта.
Аноним 27/10/18 Суб 17:34:29  1285415
>>1285401
Хохол, плес. Выкатил тебе белый человек сразу на блюдечке кошерное решение. Своими мозгами научись думать. А то начитается как там в SIMD кто-то наговнокодил, а ты и рад в массы вытащить и выдать за оптимизированный код, а потом ну покажи как у тебя ну покажи, ну че ты, ну иди нахуй тогда. Тьфу на тебя попрашайка.
Аноним 27/10/18 Суб 17:37:16  1285416
>>1285415
>найс маняоправдания во время обтекания
Проиграл с клоуна, который думает, что тут 1,5 анона сидят.
Аноним 27/10/18 Суб 17:37:55  1285418
>>1285406
Может argv параметры по умолчанию const?
И их нельзя менять внутри?
Аноним 27/10/18 Суб 17:41:53  1285422
>>1285418
Ну, как бы по хорошему кодстайлу да не стоит менять формальные аргументы. Единственное что из иснтитута запомнил. Но я сейчас его запустил и нулевой аргумент у меня отсортировался. И точку вытолкнул в начало. Всё как положено. Второй аргумент просто написал и зациклился на третьем.
Аноним 27/10/18 Суб 17:43:39  1285425
>>1285422
А через что ты прогоняешь, что бы видеть на какой ступеньке прога падает?
Аноним 27/10/18 Суб 17:45:57  1285429
>>1285425
А все, понял
Аноним 27/10/18 Суб 17:53:52  1285437
>>1285425
Да прям в терминале. Ещё printf() почаще вставляю, чтобы отслеживать состояния буфферов. Так например:
fprintf(stderr, "%d:%s", __LINE__, argv[1]); ну, и комментирую в коде, чтобы не удалять на всякий пожарный случай.
Аноним 27/10/18 Суб 17:55:04  1285439
image.jpeg (298Кб, 640x654)
>>1285416
> >найс маняоправдания во время обтекания
> Проиграл с клоуна, который думает, что тут 1,5 анона сидят.
Аноним 27/10/18 Суб 17:55:16  1285440
>>1285425
gdb
Аноним 27/10/18 Суб 17:57:50  1285442
>>1285415
Какой SIMD, что ты несёшь.
Что тут, по-твоему, можно векторизовать? Задачка на уровне парочки побитовых инструкций и системного вызова для вывода, а ты тут пальцы гнёшь и изображаешь из себя не пойми что. Типичный малолетний дебил.
Аноним 27/10/18 Суб 18:02:04  1285448
>>1285437
>>1285440

Spasib
Аноним 27/10/18 Суб 18:57:56  1285476
>>1285288
(a + b) * ((a | b) & 1)
Аноним 27/10/18 Суб 20:31:04  1285517
>>1285323
% это те же битовые операции, умник.
Аноним 27/10/18 Суб 20:41:36  1285525
>>1285476
Только после того, как & отработает нужно отрицание.
По условию, если оба числа четные, то сумма, а у тебя получится 0, если оба четные.
А так хорошее решение, простое и понятное.
мимо-крокодил
Аноним 27/10/18 Суб 20:59:58  1285550
>>1285476
почему-то я высчитываю какждый раз отсос. Вроде бы
(a+b)*((a|b)^1)&1
должно быть.
Аноним 27/10/18 Суб 21:00:18  1285551
>>1285288
Тернарный оператор, например.
Аноним 27/10/18 Суб 21:01:45  1285552
>>1285550
(a+b)(((a|b)^1)&1)
фикс
Аноним 27/10/18 Суб 21:08:37  1285554
>>1285371
Анон. Я тебе тут попрограммировать принёс. Всё программируют и ты попрограммируй. Ох и поломал я мозги. Добавил сортировку пузырьком. Только надо было назвать не args parsing а arg_values sorting. А теперь со спокойной душой можно и на боковую.
Аноним 27/10/18 Суб 21:08:59  1285555
>>1285554
Сук... Самое главное забыл
https://pastebin.com/cju4SSYT
Аноним 27/10/18 Суб 21:37:22  1285575
>>1285555
>>1285554
Хорош
Аноним 27/10/18 Суб 23:10:54  1285644
>>1285550
Лучше так, без умножений:
(a + b) &~-((a | b) & 1)) (лол, я изобрел новый оператор &~-)
Аноним 28/10/18 Вск 00:03:35  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}. )
Аноним 28/10/18 Вск 00:50:21  1285709
>>1285678
Напиши свой парсер на основе strtod или возьми prce какую-нибудь. scanf - глючное говно, которое нужно, чтобы по-быстрому прочитать числа и буковы из файла.
Аноним 28/10/18 Вск 00:57:49  1285710
>>1285709
в задании настоятельно рекомендуют использовать scanf, так что простое решение должно быть. Окей, облегчу вопрос: как используя один scanf считать 1 или 2 переменных - подаю одну переменную - записывает её в А подаю две - запичвает их в B и C
Аноним 28/10/18 Вск 01:08:18  1285714
>>1285710
> в задании настоятельно рекомендуют использовать scanf
Скажи им, что они пидарасы. Но ты можешь:
fgets(); if (sscanf(шаблон1)) { ... } else if (sscanf(шаблон2)) { ... } else { ошибка }

> как используя один scanf считать 1 или 2 переменных
Главный вопрос тут: откуда считать? Оно даже о понятии строки не знает. Ты можешь scanf("%f %f") и проверить, вернуло ли 2, или после первого присваивания сломало зубы о какой-то не-float и вернуло 1. Или не смогло распарсить вообще ничего и вернуло 0. Но более сложные (особенно вложенные как у тебя) паттерны этим не распарсишь.
Аноним 28/10/18 Вск 18:04:20  1285984
>>1285714
>fgets
угу, в случае если данные, удовлетворяющие условию паттерна лежат каждый в новой строке
если же встроены в текст, то нужно чутка по другому сделать
Аноним 28/10/18 Вск 18:08:22  1285986
>>1285714
>Но более сложные (особенно вложенные как у тебя) паттерны этим не распарсишь
ты шутишь? это на изичах делается через scanf семейство функций
Аноним 28/10/18 Вск 21:37:08  1286119
>>1285986
Несколькими вызовами sscanf - да. Одним вызовом scanf - нет.
Аноним 29/10/18 Пнд 15:05:20  1286417
>>1269824 (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;
}
Аноним 29/10/18 Пнд 15:34:31  1286425
>>1286417
>размерность у while (..)
а такая размерность, что while(!EOF);
пока fread работает по байту, а конкретнее по sizeof(buf[0]) и не получит конец файла, то будет продолжать работу. Хотя я не знаю что fread возвращает в конце, когда заканчивает работу. Но, видимо, нуль, или -1 для EOF.
sizeof(buf[0]) - размер не содержашийся в первом элементе, а вообще размер самого элемента массива, собственно можно написать в этом случае любой номер элемента, но размер у него в любом случае будет unsigned char1. Это делается для портируемости, а то вдруг кто-то в конпеляторе выделили несколько байт для char, хотя это что-то на уровне хтонического пиздеца.
А вот почему константный SIZE меньше массива буффера - я хз. Попробую предположить, что в винде выделяется в массивах char на символ больше, для знака перевода строки \r\n. Но скорей всего это неверное преположение. Вот моё объяснение. Но олды сишные меня могут засмеять, так что не сильно прислушивайся к моему посту.
Аноним 29/10/18 Пнд 20:26:35  1286584
>>1286417
> Почему размер константы для буфера (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).

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

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

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

char
str;

len = 0;
while (src[len])
len++;
str = (char)malloc(sizeof(str) (len + 1));
Вот тут я могу в 1 строчке написать char
str; ?я правильно понял?
Аноним 29/10/18 Пнд 23:41:07  1286707
Снимок.PNG (5Кб, 604x122)
>>1286705
Бля.
Вот правильнее
Аноним 29/10/18 Пнд 23:56:34  1286712
>>1286690
Спасибо, годнота, схоронил. А с эмбеддедом ты не сталкивался? Есть какие-то похожие советы ньюфагам на эту тему?
Дурацкая просто ситуация - меня взяли в связанную с автомобилями контору, при этом не кодером, но с условием разобраться с сишечкой и немножко кодить в свободное от основных обязанностей время. Вот я и в растерянности немного от того, куда дальше долбиться после основного синтаксиса и стандартной библиотеки.
мимо другой анон
Аноним 30/10/18 Втр 00:31:43  1286739
>>1286690
>Например, я бы хотел увидеть знание посиха или винапи (на уровне "осилил apue/рихтера")
А, собственно, что предпочтительнее? Знание POSIX API или WinAPI?
>хотя бы что-нибудь про сети
Можно поточнее? В этом я вообще профан
>с наличием работы на сишке все очень непросто
Т.е. лучше перекатываться в плюсы? Или имелось в виду, что порог вхождения на работу, где пишут на Си-подобных языках высок?
>На джуна проще всего немного пороллить пикрилейтед в свой гитхаб
А какое количество проектов нужно иметь в своем портфолио с пикрила? Штук 10 было бы достаточно, да?
Аноним 30/10/18 Втр 00:46:13  1286743
>>1286705
Платина. Да, разницы, с которой стороны ставить пробел, нет. Некоторые с обеих ставят. Более корректно ставить с правой, чтобы не напороться на char∗ foo, bar. Вторая причина - в Си объявление отражает использование, и если ты обращаешься к указателям так пробел после звездочки: ∗ foo = 1, смело пиши звездочку слева. Алсо, каст значения, которое вернул malloc() - признак крестобляди, в Си указатель на void стоит кастить только тогда, когда добавляешь/убираешь квалификаторы (volatile/restrict/const).

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

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

>>1286739
> что предпочтительнее? Знание POSIX API или WinAPI?
Оба, но POSIX нужен сильно чаще.

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

> А какое количество проектов нужно иметь в своем портфолио с пикрила?
С этим в перезвоним-тред.

> Или имелось в виду, что порог вхождения на работу
Именно.
Аноним 30/10/18 Втр 00:47:59  1286746
>>1286743
> Более корректно ставить с правой
ставить пробел справа от типа, т.е., прилеплять звездочку к имени переменной без пробела.
Аноним 30/10/18 Втр 00:52:30  1286752
Снимок.PNG (575Кб, 1239x666)
Вот нихуя не понимаю почему его прога запустилась щас.
Если он создает char массив 10 мегабайт, то как он потом заполняет его полностью цифрами?
Ведь в какой-то момент итерации i будет равна :10 000 к примеру, а char может уместить от 255 только же
Аноним 30/10/18 Втр 01:26:04  1286762
>>1286743
>Более корректно ставить с правой, чтобы не напороться на char∗ foo, bar
В данном случае ведь не будет разницы, ставить звездочку у char или у переменной foo, т.к. эффект будет одинаковый - указателем на char будет только переменная foo. Так что не понял, о какой корректности идет речь
Дп
Аноним 30/10/18 Втр 01:27:25  1286763
>>1286762
>Дп
Другой анон*
Аноним 30/10/18 Втр 01:36:29  1286767
>>1286752
> char может уместить от 255 только же
-128..127, там signed. В компьютерах нет настоящей арифметики, используется арифметика с переполнением. Если что-то куда-то не влезает, просто берется остаток от деления на 2n. Не влезает 10485759 в char? Ок, 10485759 % 2CHAR_BIT = 10485759 % 256 = 255 (на самом деле всего лишь 10485759 & 255, да и то неявно - фактически просто не учитываются все байты значения, кроме младшего), преобразуем в signed char, получаем -1, остальное обрезалось.

>>1286762
> указателем на char будет только переменная foo
Именно поэтому справа и ставят: char ∗foo, bar; наглядно демонстрирует, что только одна переменная будет указателем, а char∗ foo, bar; гораздо проще случайно прочитать как "указатели foo и bar".
Аноним 30/10/18 Втр 02:29:14  1286779
>>1286767
Чувак, ты охуенен. Все твои ответы однозначны, понятны и не оставляют вопросов. Если не секрет, сколько тебе лет? Сколько уже знаком с C?
Аноним 30/10/18 Втр 02:47:28  1286780
>>1286767
То есть имеешь ввиду , что в тот момент когда i будет равна например 10 000, то она просто будет разделена на кусочки состящих по 255 ?
Или ты имеешь ввиду, что массив не имеет по сути типа, туда пихают любые значения под любые типы, лишь бы хватило памяти?
Аноним 30/10/18 Втр 03:11:26  1286781
>>1286780
Возьму на себя ответственность ответить за того анона.
Допустим, нам надо поместить число 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, то почитай про дополнительный код (представление отрицательных чисел в двоичном виде).

Аноним 30/10/18 Втр 03:17:00  1286784
image.png (542Кб, 1239x666)
>>1286743
>>1286767
Спасибо, перцы

>>1286781
Спасибо, все предельно понятно.. Алсо, получается , вот этот чув на пике ,грубо говоря, записал мусор в свои 10 мегабайт char массив? Ну то есть там уже после 255-ой итерации все цифры искажатся?
Аноним 30/10/18 Втр 03:17:25  1286785
>>1286781
>а это 0101
0000 0101
быстрофикс
Аноним 30/10/18 Втр 03:20:06  1286787
>>1286780
> 10 000, то она просто будет разделена на кусочки состящих по 255
Я имею в виду, что 10000dec = 10011100010000bin -> 10011100010000 (зачеркнутое при присваивании int к char не влезает и просто отбрасывается) = 00010000 = 16dec.

>>1286779
Много мне лет, и ответы мои говно. Но все равно спасибо.
Аноним 30/10/18 Втр 03:21:18  1286788
15401559633081.jpg (270Кб, 1280x960)
>>1286787
В наше время получить ответ на интересующий вопрос, без иронии - дорогого стоит.
Аноним 30/10/18 Втр 03:25:40  1286789
x.jpg (1Кб, 256x128)
>>1286784
Ну может он и хотел мусор. Там будет 0, 1, 2, ... 254, 255, 0, 1, 2, ... 254, 255, 0... Например, давай просто будем считать, что он там картинку с градиентом генерит?
Аноним 30/10/18 Втр 03:27:09  1286790
>>1286789
Нифига вы кодеры хитрые ребята. Даже такие аппаратные ограничения используете в свою выгоду
Аноним 30/10/18 Втр 03:32:19  1286792
>>1286784
Записал не мусор, а вполне обычные числа. Только диапазон всех чисел, которые хранятся в массиве ограничен 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
Аноним 30/10/18 Втр 03:40:01  1286794
>>1286789
О, а можно мне пояснить идею с градиентом? Что-то я не допер
Мимоанон
Аноним 30/10/18 Втр 03:41:19  1286795
15395484744310.jpg (344Кб, 1920x1080)
>>1286792
>>1286789
>>1286787
спс
Аноним 30/10/18 Втр 04:07:38  1286799
>>1286767
>10485759 % 256 = 255
но ведь ответ будет далеко не 255,
а 40к+
Аноним 30/10/18 Втр 04:23:35  1286804
>>1286799
Деление с остатком же
Аноним 30/10/18 Втр 04:31:34  1286807
>>1286804
>Деление
>%
В каком классе учишься, ребенок?
Аноним 30/10/18 Втр 04:52:43  1286812
>>1286807
Очевидно, имелся в виду остаток от деления. Не надо грубить. Все-таки 5 утра, могу и хуйню сказать
Аноним 30/10/18 Втр 05:31:29  1286815
x.jpg (4Кб, 270x60)
>>1286790
>>1286794
Да я пошутил просто. Если у нас картинка в оттенках серого (8 бит на пиксел) шириной 256 пикселов, то цвет (яркость) очередного пиксела будет index % 256: самый темный 0 % 256 = 0 в начале строки, самый яркий 255 % 256 = 255 в конце строки, и следующий будет снова темным 256 % 256 = 0 в начале следующей строки и так далее. Если ширина картинки не 256, то переход к 0 случится не на правом краю, и картинку распидорасит. Естественно, никто так градиенты не рисует.
Аноним 30/10/18 Втр 05:55:06  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") - может это специальное исключение?
Аноним 30/10/18 Втр 06:06:19  1286822
>>1286815
Капец интеллектуально. Закодить-то несложно, но сама концепция сделать именно так - круто. Хочу тоже научиться такие прикольные и практические решения находить
Аноним 30/10/18 Втр 06:08:20  1286824
>>1286817
Если не совсем понятно, о чем я вообще говорю, могу попытаться перефразировать и переформулировать. А сейчас пойду спать. Всем спокойной ночи
Аноним 30/10/18 Втр 06:26:08  1286828
>>1286817
Что тебя смущает? Это такая же инициализация массива, просто строковым литералом. Синтаксический сахар.

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

>char a[10];
>a = "Hello";
А это уже не инициализация, а присваивание, так нельзя.

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

>А у меня что, не lvalue что ли?
Нет, не lvalue. Массив. Это особый случай, для массивов свои правила.

Аноним 30/10/18 Втр 06:26:59  1286829
>>1286828
двач зохавал звездочки, но должно быть и так понятно.
Аноним 30/10/18 Втр 06:49:16  1286837
>>1286817
Если хочешь понять, как это работает внутри, читай, что генерирует компилятор (без оптимизаций):
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 - это не указатель на массив, а массив. Присваивание массивов друг другу не разрешено.
Аноним 30/10/18 Втр 07:31:23  1286838
425DE991-0DCD-4[...].jpeg (205Кб, 1136x412)
Кто нибудь может объяснить нахуя это сделали?
Аноним 30/10/18 Втр 07:47:56  1286840
>>1286838
> нахуя это сделали?
Так получилось, что в этом языке все, что может влезть в int, стремится им стать. Если не нравится, касти к (signed char) явно, но это будет иметь значение только для sizeof. В любом арифметическом выражении оно превратится обратно как минимум в int. Алсо, 'FADE' - это расширение, которое может не поддерживаться (например, gcc 4 на винде точно не умел).
Аноним 30/10/18 Втр 08:00:59  1286841
>>1286838
это для 32 разрядных, в 64 int = 64, 8 разрядных процев нет
Аноним 30/10/18 Втр 08:08:22  1286844
>>1286841
> 8 разрядных процев нет
Нет - купи! https://eu.mouser.com/8-bit-MCU/_/N-a86lo
Аноним 30/10/18 Втр 08:11:07  1286845
>>1286844
>https://eu.mouser.com/8-bit-MCU/_/N-a86lo
вот там инт точно 8 битный
Аноним 30/10/18 Втр 09:17:05  1286855
>>1286815
>>1286822
Это был не сарказм, если что. Правда, прикольная реализация градиента
Аноним 30/10/18 Втр 09:55:26  1286859
>>1286840
Да, только там не fade а fate, и видимо это просто для примера сделано
Аноним 30/10/18 Втр 22:26:57  1287241
>>1286767
>255 ,преобразуем в signed char, получаем -1, остальное обрезалось.
Как этоп реоброзщоывывается? Есть формула?
Аноним 30/10/18 Втр 22:32:06  1287247
>>1286781
>то в данном случае младший БАЙТ числа 261, а это 0101
А как узнать какой из двух байтов младший, а который старший?
Аноним 30/10/18 Втр 22:42:04  1287257
>>1286804
Спасибо
Аноним 30/10/18 Втр 22:42:29  1287258
>>1286812
>могу и хуйню сказать
Не держи в себе ) мыж на дваче
Аноним 30/10/18 Втр 22:53:23  1287263
>>1286817
Ты не всегда ищи логику в синтаксисе,
она иногда просто для удобства. Для твоих глаз.
За твоими глазмами, в компиляции и одно и второе представление массива будет создаваться в одинаковым способом. Это просто ты общаешься с компилятором, дня него
char a[10] = "Hello";
и это
char a[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };
Одно и тоже
Аноним 30/10/18 Втр 22:53:49  1287264
>>1287241
Никак, ничего не меняется на самом деле. Память не знает, что хранит: 255 = 11111111bin, хранятся биты. Процессор по большей части не знает, что обрабатывает (инструкции пересылки данных, сложение/вычитание, всякие побитовые операции не отличают signed/unsigned). В тех случаях, когда различие важно, компилятор генерирует соответствующие инструкции (например, div vs. idiv для unsigned/signed деления, которые по-разному интерпретируют биты). Интерпретировать unsigned как signed можно так: если старший бит (седьмой для char, пятнадцатый для short, тридцать первый для int и т. д.) не установлен, то это положительно значение, и оно равно тому же для unsigne. Например, (signed) 01111111bin = +127. Если старший бит стоит, значение отрицательное и равно -(~n + 1). Например, (signed) 11111111bin = -(~11111111 + 1) = -(00000000 + 1) = -1.

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

>>1287247
Точно так же как в десятичной системе счисления есть младшие и старшие разряды, младший байт содержит менее значимые биты (меньше влияет на значение). В 0x1234 младший байт 0x34.
Аноним 30/10/18 Втр 22:56:33  1287266
>>1287264
>"Код. Тайный язык информатики", там все более чем подробно
Благодорю
Аноним 31/10/18 Срд 00:22:21  1287288
>>1286840
>касти к (signed char)
Что значит касти
Аноним 31/10/18 Срд 00:54:46  1287305
>>1287264
Ааа вот как. биты это оказывается тоже позиционное система счисления
Аноним 31/10/18 Срд 00:55:02  1287306
>>1287305
биты имеют* поц с\с
Аноним 31/10/18 Срд 01:01:12  1287309
>>1287288
Это значит пиши ((signed char) 'x'). Вот та хуйня в скобках слева от символа - оператор преобразования типа, тип выражения (во внешних скобках) становится signed char.
Аноним 31/10/18 Срд 02:07:11  1287322
>>1287309
спс.
Любые типы на любые можно менять?
Аноним 31/10/18 Срд 02:09:43  1287324
>>1287322
Нет. Типы должны быть совместимы. Например, ты не можешь скастить инт к структуре.
ПЕРЕКАТ Аноним # OP  31/10/18 Срд 08:10:57  1287379
>>1287378 (OP)
>>1287378 (OP)
>>1287378 (OP)
>>1287378 (OP)
>>1287378 (OP)


Топ тредов
Избранное