Сохранен 507
https://2ch.hk/pr/res/1377621.html
Архивач перешёл на постоянный домен ARHIVACH.NG. Независимо от дальнейшего развития событий, сайт всегда доступен через Tor.
Ваши пожертвования помогают нам оплачивать хостинг и домены.

C Programming Language #43 /clang/

 Аноним OP 09/04/19 Втр 11:58:33 #1 №1377621 
C Programming Language.png
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

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

Что читать:

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

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

- №40: https://arhivach.ng/thread/428550/
- №41: https://arhivach.ng/thread/434018/
- №42: https://arhivach.ng/thread/438066/
Аноним 09/04/19 Втр 12:03:57 #2 №1377626 
>>1377621 (OP)
Первыйнах
Аноним 09/04/19 Втр 12:07:31 #3 №1377635 
Как сделать простой консольный чат на Си?
Аноним 09/04/19 Втр 12:11:08 #4 №1377638 
>>1377635
Просто и без задней мысли.
Аноним 09/04/19 Втр 12:27:13 #5 №1377653 
>>1377589
> Все твои ошибки - от отвратительнейшего говнокода.
Что именно говнокод, помимо того что я вместо символьной переменной использую массив и все пихаю в нулевой же массив? По идее я дальше буду в этот массив уже нужный текст из файла пихать. Да и я только учусь + пишу на мобиле.

>В частности, от всех этих кучах лишних getc() и нечитаемых temp[0].
В чем проблема моих getc?

>В данном случае ты скорее всего проебываешь EOF еще выще, в строке 57, где ты его нихуя не проверяешь (или в других местах того цикла).

Я не могу ничего проебать до последнего цикла. Ведь он выводит текст с того момента где закончился прошлый цикл и до конца. Если бы EOF был раньше, то он бы текст из файла не выводил, не?

Вот код целиком. Где ошибка?
https://pastebin.com/cpCSDt2M
Аноним 09/04/19 Втр 12:59:39 #6 №1377677 
Сколько можно безопасно(преносимо) выделять место на стеке? Например под буфер для текстуры?
Аноним 09/04/19 Втр 13:02:09 #7 №1377679 
>>1377653
Если уж ты пишешь на мобиле, то скачай себе шланг. Он на любой дистрибутив ставится. Очевидно ещё понадобится эмулятор терминала.
А код твой просто бегиннер левел хуита, в очередной раз доказывающая, что учить программирование по хеловорлдам - мертвый номер. Почитай книги из шапки.
Аноним 09/04/19 Втр 13:05:12 #8 №1377681 
>>1377677
https://docs.microsoft.com/ru-ru/windows/desktop/ProcThread/thread-stack-size
Соснешь.
Аноним 09/04/19 Втр 13:06:06 #9 №1377684 
>>1377681
И да, код придется писать в одной области видимости.
Аноним 09/04/19 Втр 13:06:52 #10 №1377685 
>>1377653
> Что именно говнокод
Ну например, ты не можешь определиться, то ли тебе нравятся printf/scanf, то ли putchar/getchar. Например, тебе не рассказали про break в 51 строке.

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

> Вот код целиком. Где ошибка?
Если искомая строка встречается в файле, тогда все должно работать. Если не работает и тогда, попробуй в последнем printf() перед \n добавить в конце строки, т.е., "\n\nEnd\n". Если поможет - проблема вообще в твоем андроиде или IDE, которая не сбрасывает буфер stdout при закрытии.

А вот если строка не встречается в файле, происходит вот что. Если файл не заканчивается на \n, ты будешь получать EOF от getc() в строке 60 и никогда не дождешься \n в цикле в строке 59. Если файл заканчивается на \n, то сначала ты вроде бы из этого злополучного цикла выйдешь нормально, но тут getc() в строке 62 вернет тебе EOF, а так как ты из for не выходишь, то в следующей итерации все равно попадешь в цикл в строке 59, где и зависнешь нахуй.

> В чем проблема моих getc?
В предыдущем абзаце. В том, что после каждого getc() по-хорошему должно быть if (c != EOF) { сделать что-то вменяемое }. Вот если ты попробуешь расставить все эти ифы, ты поймешь, почему разбросанные везде getc() - это не очень хорошо.

Кстати, в 30 строке ты мог бы сделать char temp[200] = {0}, а не крутиться в цикле. Так быстрее и короче.

>>1377677
> Сколько можно безопасно(преносимо) выделять место на стеке?
Ноль. Где-то всего пара сотен байт памяти, доступной под стек (бывает и меньше, но там на Си не пишут). Где-то мегабайты. Если пишешь либу под embedded, считается хорошим тоном посчитать и документировать требуемый размер стека, чтобы пользователи заранее знали, подойдет она им или нет. Если у тебя обычные компы и текстуры... ну, в винде линкеры по умолчанию резервируют метр, например (но можно указать хоть сто ключом линкеру).
Аноним 09/04/19 Втр 13:07:59 #11 №1377687 
>>1377677
На чем пишешь? Размер кучи может определяться как на стороне компилятора, так и на стороне ОС. В gcc например можно спокойно менять размер кучи, и получать и 244кб, и 1мб, и 50мб, поэтому эмбедщики его любят. Ну а виндоус студия это просто говно
Аноним 09/04/19 Втр 13:09:37 #12 №1377688 
>>1377687
Ты для начала научись стек с кучей не путать, а потом рассказывай, что и где говно.
Аноним 09/04/19 Втр 13:10:53 #13 №1377690 
>>1377688
А ты не видишь взаимосвязи?
Аноним 09/04/19 Втр 13:15:17 #14 №1377694 
>>1377690
В embedded есть некоторая (да и то, сейчас ртос везде), в "больших" компьютерах давно уже никакой взаимосвязи нет.
Аноним 09/04/19 Втр 13:16:30 #15 №1377695 
>>1377694>>1377688
Зарепортил заигрывающего со школьником педофила.
Аноним 09/04/19 Втр 13:26:08 #16 №1377699 
>>1377679
А чем кланг лучше? Вроде же гну коллекция топовые компиляторы.

Так что не так с кодом? Я и форматировать пытаюсь, насколько это можно с мобилы, и имена осмысленные давать.

Всмысле обучение по хэлоувордам ? Я в процессе чтения как раз, Керригана до функций дошел и уже парочку своих внедрил в свою другую программу. Пока вроде более-менее понятно. Но я параллельно нужные для работы программы делаю потихоньку на мобиле.

Критиковать стиль моего говнокода конечно весело, но все же почему мой код в конце не доходит до EOF и не выходит из цикла?

Текст файла:

01 101 201 301
02 203 101 111
03 934 110 234
04 049 110 136
05 213 101 137
Аноним 09/04/19 Втр 13:31:31 #17 №1377701 
>>1377677
Нисколько. На стеке нельзя ничего выделять кроме мелких локальных переменных, так же нельзя передавать в функции и возвращать большие вещи. То же касается рекурсий, это раковый говнокод, засирающий стек впустую, вдобавок непредсказуемо. Стек это не память для данных, а служебное системное средство для работы программы и его размер ограничен.
Аноним 09/04/19 Втр 13:36:24 #18 №1377705 
>>1377699
Я не он. Но зачем ты побайтово из файла читаешь? Почему бы в твой temp не считать сразу пачкой?
Аноним 09/04/19 Втр 13:39:20 #19 №1377707 
>>1377701
Ну, а из кучи выделять дорого.
Аноним 09/04/19 Втр 13:42:16 #20 №1377708 
>>1377699
>мой код в конце не доходит до EOF и не выходит из цикла
Кто тебя знает. Твой код на gcc 7.3.1 отлично отработал.
"Not found!
Not found!
Not found!
Works!

04 049 110 136
05 213 101 137


End"
Аноним 09/04/19 Втр 13:54:50 #21 №1377718 
>>1377707
Не дорого, а дешево. А на стеке бесплатно. На бесплатном не живут, бесплатно это особый исключительный случай, которым пользоваться нужно только в особенных случаях, где ты точно знаешь что делаешь и совершенно необходим прирост скорости. То есть — никогда такого случая тебе не представится с вероятностью 99%.
Аноним 09/04/19 Втр 14:04:28 #22 №1377725 
>>1377685
> Ну например, ты не можешь определиться, то ли тебе нравятся printf/scanf, то ли putchar/getchar.
Так printf я использую для печати текста, а getchar в кусках где надо искать текст. Я же беру символ, сравниваю, потом беру ещё символ. а scanf я уже не помню нахуя я брал
> Например, тебе не рассказали про break в 51 строке.
Я до него в книге ещё не дошел, да. Не ебу что это, но полагаю выход из цикла.
> Ну вот когда будешь, тогда и будет повод притащить массив. А сейчас его нет.
Тут ок, согласен.

> Если искомая строка встречается в файле, тогда все должно работать.
Встречается. Я ищу 0 и 5 и в тексте это начала 5 строки. Программа же выводит весь текст после 05 как и положено.

>Если не работает и тогда, попробуй в последнем printf() перед \n добавить в конце строки, т.е., "\n\nEnd\n".
Не помогло.

> А вот если строка не встречается в файле, происходит вот что. Если файл не заканчивается на \n, ты будешь получать EOF от getc() в строке 60 и никогда не дождешься \n в цикле в строке 59.
Я же это предусмотрел. Цикл у меня же 31 раз пройдется и закончится. А нет, нихуя, действительно застревает. Не понял пока как исправить.

> В предыдущем абзаце. В том, что после каждого getc() по-хорошему должно быть if (c != EOF)
Чет не помогает расставленный if данном случае выходить из цикла. Сделал так, все равно не помогает. Что не так?

else
\t\t\t{
\t\t\t printf("Not found!\n");
\t\t\t
\t\t\t\t\twhile (temp[0] != '\n')
\t\t\t\t \ttemp[0] = getc(fp);
\t\t\t\t \tif (temp[0] == EOF)
\t\t\t\t \t break;
\t\t\t\ttemp[0] = getc(fp);
\t\t\t}

> Кстати, в 30 строке ты мог бы сделать char temp[200] = {0}, а не крутиться в цикле. Так быстрее и короче.
Не знал что так можно, пока в книге такого не было.
Аноним 09/04/19 Втр 16:01:09 #23 №1377786 
121246:515701387.png
Куда вы лезете, щенки? Для сишки мозги нужны. У вас хоть образование есть? У меня 25 лет опыта работы в сложных проектах и математическое образование.
Аноним 09/04/19 Втр 16:07:46 #24 №1377791 
>>1377786
и ебало как у ганибала
гагагага
Аноним 09/04/19 Втр 16:12:22 #25 №1377796 
>>1377791
Ты ко мне в Екатеринбург приезжай и в лицо скажи.
Аноним 09/04/19 Втр 16:14:50 #26 №1377797 
>>1377786
Ты хочешь сказать, что я 2 года изучаю и практикую С, каждый день кайфую от того что пишу на нем свои проектики - все это пыль, потому что у меня нет математического образования?
И да, дай мне ссылочку на свой github, хочу взглянуть на код, опытного гуру с математическим образованием!
Аноним 09/04/19 Втр 16:15:14 #27 №1377798 
>>1377786
>25 лет опыта работы в сложных проектах и математическое образование.
и 90 на удаленке, все что удалось выбить
..
Аноним 09/04/19 Втр 16:16:31 #28 №1377801 
>>1377797
нет
речь о том что ты инвестируешь в знания, которые не принесут тебе прибыли
Аноним 09/04/19 Втр 16:17:41 #29 №1377803 
Вкатился. Kernel-господа на месте?
Аноним 09/04/19 Втр 16:20:20 #30 №1377805 
>>1377797
Времени мало свободного.
Аноним 09/04/19 Втр 16:22:49 #31 №1377806 
>>1377801
Я инвестирую только свое время, а инвистировать время в любимое дело, я люблю. То что я не сяду жопой на офисный стул с С, мне по барабану. Я смогу придумать, что-то свое, и на хлеб с маслом мне всегда хватит.
Аноним 09/04/19 Втр 16:23:56 #32 №1377807 
>>1377803
Да. Писал хэлоуворд через printk. Считается?
Аноним 09/04/19 Втр 16:33:48 #33 №1377813 
>>1377725
Что-то у меня идеи закончились. Хотя погоди... может у тебя в компиляторе char по умолчанию unsigned? Тогда EOF (-1) в temp[0] нихуя не влезает, получается 255, а 255 конечно же не равно -1 (c signed char оно тоже не особо влезает, но там после integer promotions сравнение прокатывает).
Аноним 09/04/19 Втр 16:33:54 #34 №1377814 
>>1377807
Нет. Линуксобляди не считаются.
Аноним 09/04/19 Втр 16:40:21 #35 №1377815 
>>1377796
Твое ебало у меня экране, в него и говорю, проблемы?
Аноним 09/04/19 Втр 17:17:57 #36 №1377819 
>>1377815
ты с троллем говоришь, она не стала бы писать на этой параше, лол
Аноним 09/04/19 Втр 18:25:12 #37 №1377865 
>>1377819
>она
Извините, разве это не мужик?
Аноним 09/04/19 Втр 18:35:42 #38 №1377872 
>>1377865
а есть разница?
Аноним 09/04/19 Втр 18:54:45 #39 №1377879 
600x600.jpg
>>1377865
у тебя со зрением проблемы?
Аноним 09/04/19 Втр 18:55:34 #40 №1377880 
>>1377879
Да. А у тебя нет?
Аноним 09/04/19 Втр 19:07:30 #41 №1377887 
Вот еще интересный персонаж:
https://www.linux.org.ru/forum/talks/14635773?cid=14635913
Аноним 09/04/19 Втр 19:45:31 #42 №1377904 
>>1377786
>Для сишки мозги нужны
Зачем? Один из самых примитивных языков. Любой школьник в состоянии освоить.
Аноним 09/04/19 Втр 20:48:18 #43 №1377932 
>>1377803
На месте.
в net/net-next пальчики отправляю
Аноним 09/04/19 Втр 20:51:35 #44 №1377933 
>>1377932
Сук лол.
люблю автозамену
Патчики*
селф-фикс
Аноним 09/04/19 Втр 21:05:28 #45 №1377944 
IMG20190409210407.jpg
>>1377699
Про EOF
Аноним 09/04/19 Втр 21:45:36 #46 №1377961 
Screenshot2019-04-10-01-43-17-604com.n0n3m4.droidc.png
>>1377813
Проверил код на ПК - все нормально работает. Потом сократил на Андроиде код только до вывода текста из файла и принтф и один хуй цикл до EOF не доходит. Походу на Андроиде реально EOF не работает.
Аноним 09/04/19 Втр 21:49:38 #47 №1377965 
>>1377961
> Походу на Андроиде реально EOF не работает.
Что за бред? Я тебе объяснил уже. Короткий фикс: signed int char temp[сколькотамнепомню]. Правильный фикс:
int c; while ((c = fgetc(fp)) != EOF) { putchar(c); }
Аноним 09/04/19 Втр 21:52:43 #48 №1377966 
>>1377961
И еще раз, жирно, а то мало ли, ты не заметил фотку книги, которую анон >>1377944 кинул, и еще десяток постов напишешь: getc()-подобные функции возвразают int, а не char.
Аноним 09/04/19 Втр 22:15:41 #49 №1377977 
Screenshot2019-04-10-02-12-33-485com.n0n3m4.droidc.png
>>1377965
>>1377966
А вы правы! Сделал signed char temp[] и все заработало. Странно что за весь день никто про это даже не вспомнил.
Аноним 10/04/19 Срд 06:42:04 #50 №1378146 
>>1377977
>Сделал signed char
Опять на грабли наступаешь. Стандарт гарантирует int - не факт что вариант с signed char везде будет работать.
Аноним 10/04/19 Срд 13:23:21 #51 №1378245 
Я правильно понимаю, что если объявить глобальную переменную рядом с определением функции, то они скорее всего расположатся рядом в памяти и доступ к этой переменной из функции будет быстрее?
Аноним 10/04/19 Срд 13:27:45 #52 №1378246 
>>1378245
>Глобальная переменная
Вот тут-то и начались проблемы
Аноним 10/04/19 Срд 13:30:26 #53 №1378247 
>>1378246
Ну я программирую для себя и вроде не припомню проблем с глоб. переменными.
Аноним 10/04/19 Срд 13:48:14 #54 №1378251 
>>1378245
Скорее всего компилятор их раскидает в разные сегменты, и вообще сомневаюсь, что ты программируешь на процессоре, который различает длинные и короткие указатели.
Аноним 10/04/19 Срд 13:48:33 #55 №1378252 
7b21d3bc334d56b1322cdacd0b93a236.jpg
>>1378245
>если объявить глобальную переменную рядом с определением функции, то они скорее всего расположатся рядом в памяти и доступ к этой переменной из функции будет быстрее
лайфха~к
Аноним 10/04/19 Срд 13:59:12 #56 №1378260 
>>1377621 (OP)
Почему бы вместо констант не использовать дефайны?
Например, вместо
    const chat x = 100;
сделать
    #define x 100
Ведь подстановка происходит в препроцессоре и не жрёт память.
Аноним 10/04/19 Срд 14:00:24 #57 №1378261 
>>1378260
Со временем ты ещё узнаешь что такое register, и твой мир наверное вообще треснет
Аноним 10/04/19 Срд 14:04:14 #58 №1378263 
>>1377904
Толсто.
https://ru.wikipedia.org/wiki/Си_(язык_программирования)#Высокий_порог_вхождения
Спецификация языка занимает более 500 страниц текста, которые необходимо прочесть, чтобы полностью овладеть языком и знать все его возможности. При этом на практике из этих возможностей ежедневно программистом будет использоваться лишь малая часть. Однако некоторые совсем не очевидные вещи требуется знать, чтобы писать безошибочный и качественный код.
Сам по себе язык является достаточно сложным, в связи с чем неопытным программистам будет достаточно сложно писать качественный код. В сочетании с тем, что язык даёт большую свободу действий и позволяет компилировать программы с ошибками, выдавая лишь предупреждения, сложность языка может приводить к появлению многочисленных ошибок и уязвимостей.
Аноним 10/04/19 Срд 14:06:44 #59 №1378264 
>>1378261
Это лишь указание хранить переменную в регистре, это здесь при чём?
Аноним 10/04/19 Срд 14:13:12 #60 №1378267 
>>1378260
Уменьшает возможности отстрелить себе ногу.
Вообще читни что-нибудь типа Алена Голуба "Веревка достаточной длины, чтобы... выстрелить себе в ногу" . Там простые правила и советы почему так не стоит делать.
Аноним 10/04/19 Срд 14:14:14 #61 №1378268 
>>1378260
> Почему бы вместо констант не использовать дефайны?
Так и делают. В Си константы "ненастоящие", ты не можешь сделать, например: const size_t array_size = 100; static array[array_size]; Поэтому все используют дефайны. В крестах и других си-подобных языках это пофиксили.

>>1378264
Это запрет брать адрес переменной. В остальном это ключевое слово игнорируется на абсолютном большинстве платформ абсолютным большинством компиляторов. Поэтому register в коде, написанном после 2000 - это признак либо микроконтроллера с собственным компилятором, либо ньюфага (обычно второе).

>>1378263
> Спецификация языка занимает более 500 страниц текста, которые необходимо прочесть
На практике мало кто читал стандарт целиком. И вообще стандарт - для разработчиков компиляторов (одно описание restrict чего стоит). Программисту достаточно знать ключевые детали: какие есть фичи, и как делать нельзя/не стоит.

Твоя цитата никак не противоречит высказыванию анона >>1377904. Си сам по себе - очень простой язык, его легко выучить, но писать качественный код (а особенно качественный, читаемый и производительный код) на нем гораздо сложнее, чем на других языках.
Аноним 10/04/19 Срд 16:49:27 #62 №1378369 
>>1378245
Переменные идут в d-cache, код в i-cache. По крайней мере на уровне L1 они различны, так что даже если они попадут в соседние виртуальные адреса тебе будет всё равно.
Аноним 10/04/19 Срд 17:15:14 #63 №1378392 
>>1378369
> так что даже если они попадут в соседние виртуальные адреса тебе будет всё равно
Не все равно. Можно выдумать ситуацию, когда будут проблемы с производительностью из-за того, что переменная и кусок кода попадают в один кэшлайн на многопроцессорной системе, где несколько ядер выполняют один и тот же кусок кода.
Аноним 10/04/19 Срд 17:17:59 #64 №1378395 
1496019656561.png
>>1378369
Что это такое?
Аноним 10/04/19 Срд 17:20:04 #65 №1378397 
>>1378395
Кэши - это такой специальный сорт памяти в процессоре. А на пике скриншот из x64dbg, судя по уебищности интерфейса.
Аноним 10/04/19 Срд 17:21:46 #66 №1378400 
>>1378397
>Переменные , код попадут в соседние виртуальные адреса
Объясняйся.
Аноним 10/04/19 Срд 17:25:05 #67 №1378402 
>>1378400
Выше читай. Анон спрашивал, не будет ли быстрее перемешивать переменные с кодом. А по умолчанию компиляторы и линкеры их разделяют, как у тебя на пике. Алсо, у тебя на пике хуевый линкер. Вполне достаточно трех секций (RX, RW, R).
Аноним 10/04/19 Срд 17:39:53 #68 №1378411 
>>1378392
>>1378369
>>1378245
Собственно, даже выдумывать не нужно, и нескольких ядер не нужно. Если в коде типа: static unsigned int i = 0; while (num_iterations--) { i++; } положить i физически рядом с кодом, цикл станет медленнее в 30-40 раз (на моем x86).
Аноним 10/04/19 Срд 18:19:55 #69 №1378467 
Пацаны, нубский вопрос, есть несколько переменных типа float32, которые хранят время в секундах до точки, и миллисекундах после. Вопрос такой как на C реализовать printf в формате минута.секунда.миллисекунда.
Есть такой говнокод, но он не очень оптимальный.

int main(void)
{
float to2time = 58.566;
double milliseconds, intpart;
milliseconds = modf (to2time , &intpart);
int time = (int)to2time;
int seconds = time % 60;
int minutes = (time / 60) ;
printf( "LAP TIME: %02d:" "%d:""%3.f\n", minutes, seconds, milliseconds*1000 );
}
sage[mailto:sage] Аноним 10/04/19 Срд 18:30:51 #70 №1378476 
>>1378467
Нормальный код. Ну можешь div() притащить для секунд и минут, как сделал для миллисекунд, хотя особого смысла нет.
Аноним 10/04/19 Срд 18:39:16 #71 №1378480 
>>1378476
А никаких вариантов нет, чтоб повысить его универсальность? Так как у меня три переменные со временем и для каждой из них нужно плодить еще пять дополнительных переменных.
sage[mailto:sage] Аноним 10/04/19 Срд 18:46:12 #72 №1378486 
>>1378480
> три переменные со временем и для каждой из них нужно плодить еще пять дополнительных переменных
Функцию напиши, ну. Что-нибудь типа timestamp_split(float time, unsigned int ∗minutes, unsigned int ∗seconds, unsigned int ∗milliseconds); и заодно функцию, которая будет snprintf-ом форматировать время в строку, вызывая первую: timestamp_format(float time, char ∗buffer, size_t max_length).
Аноним 10/04/19 Срд 18:47:48 #73 №1378488 
>>1378486
Спасибо.
Аноним 10/04/19 Срд 18:51:01 #74 №1378493 
Смарите, вот есть у меня структура, допустим My_struct. И я хочу сделать функцию, которая принимает указатель с типом My_struct и в зависимости от того, указывает ли он на что-то или нет, я выделяю для него память. Ну я значит попробовал:
void fn(My_struct o) {
if (!o)
o = (My_struct
)malloc(sizeof(My_struct));
}

My_struct *o;
o = NULL;
fn(&o);

Но в таком случае появляется ошибка "LNK2019: ссылка на неразрешенный внешний символ".
Вопрос, что можно сделать.
Аноним 10/04/19 Срд 18:55:25 #75 №1378500 
>>1378493
звездочки съели, но я думаю и так понятно.
Аноним 10/04/19 Срд 19:09:00 #76 №1378513 
>>1378493
Ты берёшь адрес указателя. & убери.
Аноним 10/04/19 Срд 19:09:42 #77 №1378515 
>>1378513
Если конечно, твоя функция не с 2 звёздочками.
Аноним 10/04/19 Срд 19:15:35 #78 №1378517 
>>1378515
С двумя.
Короче вот https://pastebin.com/nxDGZFtT
Аноним 10/04/19 Срд 19:17:21 #79 №1378520 
>>1378517
Описание ошибки забыл приложить.
Аноним 10/04/19 Срд 19:18:14 #80 №1378522 
>>1378520
Не понятно же на какой символ ругается
sage[mailto:sage] Аноним 10/04/19 Срд 19:32:44 #81 №1378535 
>>1378517
Это не имеет отношения к конкретной ошибке, но в строке 3 у тебя звездочка проебана. Надо o = malloc(sizeof(My_struct)).
Аноним 10/04/19 Срд 20:03:27 #82 №1378552 
>>1378520
Серьезность\tКод\tОписание\tПроект\tФайл\tСтрока\tСостояние подавления
Ошибка\tLNK2019\tссылка на неразрешенный внешний символ "struct My_struct __cdecl fn(struct My_struct *)" ([email protected]@[email protected]@[email protected]@Z) в функции _main\tQueue\tD:\Labs\Queue\Queue\main.obj\t1\t
Да в том-то и дело, что никуда конкретно ошибка не отсылает.
>>1378535
Забыл добавить, но не суть.
Аноним 10/04/19 Срд 20:12:52 #83 №1378557 
>>1378552
Если звёздочку в описании не съело, то ощущение что у тебя есть ещё вызов этой функции.
sage[mailto:sage] Аноним 10/04/19 Срд 20:21:50 #84 №1378562 
>>1378552
>>1378557
Ну дык эта. В том коде, который был запощен выше, функция возвращает void. В сообщении линкера (и соответственно, в том месте, где вызывается) - указатель на структуру. Нужно определиться.
Аноним 10/04/19 Срд 20:23:00 #85 №1378563 
>>1378557
Оказывается такое происходит только когда я подключаю эту функцию с другого файла. Что к чему блядь?
sage[mailto:sage] Аноним 10/04/19 Срд 20:24:37 #86 №1378564 
>>1378563
Файл-то в проект добавил? Объявление в хедере (или где оно у тебя там) соответствует определению?
Аноним 10/04/19 Срд 20:36:22 #87 №1378570 
image.png
image.png
image.png
>>1378564
Ну вот простейший пример, при том если использовать функцию _fn, то все норм как бы. Я хуею в общем.
Аноним 10/04/19 Срд 20:38:06 #88 №1378571 
Screenshot2019-04-11-00-35-02-901com.n0n3m4.droidc.png
Screenshot2019-04-11-00-36-44-193com.n0n3m4.droidc.png
Я тут случайно заметил что компилятор G++ не ругается на этот код, а gcc выдает эту ошибку. Почему так?
Аноним 10/04/19 Срд 20:48:04 #89 №1378580 
>>1378571
В си нет плюсовых ссылок.
>>1378570
Тебе кстати надо на нулл проверять не разыменованный о, а сам о, т.к. если у тебя о это нулл, то при проверке разыменованного о ты по нулл-поинтеру сбегаешь.
А ещё если у тебя две одинаковые функции объявлены, то удали одну из них, линкеру плохо от этого.
sage[mailto:sage] Аноним 10/04/19 Срд 20:56:39 #90 №1378583 
>>1378570
Должно работать. Выглядит как какая-то проблема билда. Полный ребилд делал?
Аноним 10/04/19 Срд 21:05:35 #91 №1378588 
>>1378583
Я ебал эту хуйню, просто пиздец. Сидел 3 часа нахуй, щас просто создал другой проект и скопировал все туда – и все заебись. Спасибо вижла за приятное времяпрепровождение.
Аноним 10/04/19 Срд 22:54:04 #92 №1378775 
>>1378411
Статики в ебенях хранятся, и к ним ещё обращаться надо каждый раз:
https://godbolt.org/z/ps-gee (-x c включает режим чистого Си).

Да и присутствует вот такой перл:
mov eax, DWORD PTR i.1959[rip]
add eax, 1
mov DWORD PTR i.1959[rip], eax
И это ведь даже не потокобезопасно.
Аноним 10/04/19 Срд 22:57:15 #93 №1378783 
какое же вы тут все днище
ладно бы adt на юнионах обсуждали или кодогенерацию на макросах
а то блядь, их года в год одно и тоже
студентики обоссаные
Аноним 10/04/19 Срд 23:11:55 #94 №1378797 
>>1378783
>>1374445, ты что-ли снова?
>adt на юнионах
Берёшь, ставишь тэг. По нему диспатчишься. Разве это стоит даже упоминать?
>кодогенерацию на макросах
Ну давай поговорим. Как ты использовал X macros в последний раз? Какие плюсы, минусы видишь? Где жёстко прокололся?
Аноним 11/04/19 Чтв 00:08:28 #95 №1378851 
>>1378775
Мы знаем, что статики в ебенях хранятся. Мы говорили о том, что было бы, если бы статики НЕ хранились в ебенях, т.е., что-то типа:
func:
.some_loop:
mov rax,[var]
add rax,1
mov [var],rax
; some cond
jcc .some_loop
ret
align 8
var dq ?

> И это ведь даже не потокобезопасно.
А никто и не обещал, это не атомик. Ты хотел, чтобы тебе на ровном месте lock inc сделали, или что?

>>1378783
> кодогенерацию на макросах
Как насчет кодогенерации на PHP?
Аноним 11/04/19 Чтв 06:01:41 #96 №1378958 
>>1378580
Но в Си есть же указатели, разве нет? В чем проблема то?
Аноним 11/04/19 Чтв 09:50:06 #97 №1378981 
>>1378958
Да, но то что ты пишешь это не указатель.
Аноним 11/04/19 Чтв 10:40:59 #98 №1378988 
>>1378981
А что я написал тогда?
Аноним 11/04/19 Чтв 10:48:45 #99 №1378992 
>>1378260
>int function(int &a)
действительно что ты написал?
Аноним 11/04/19 Чтв 10:49:09 #100 №1378993 
>>1378992
Соррян, не туда
>>1378988
Аноним 11/04/19 Чтв 12:59:28 #101 №1379033 
>>1378992
Что функция не копирует к себе значение а, а работает с значением а. Указатели же вроде так работают.

Ещё вопрос. Как сделать чтобы тебе функция возвращала целый массив, а не отдельный элемент массива?
Аноним 11/04/19 Чтв 13:03:02 #102 №1379035 
>>1379033
Синтаксис
int function(int *a) - принимает указатель на int
int function(int &a) - принимает ссылку
Аноним 11/04/19 Чтв 13:03:33 #103 №1379037 
>>1379033
>Как сделать чтобы тебе функция возвращала целый массив, а не отдельный элемент массива?
Передавать указатель на массив в параметрах функции.
Аноним 11/04/19 Чтв 13:24:06 #104 №1379044 
>>1378988
На твоём месте, я бы сначала прочитал про указатели, а не лез в сишные указатели со знанием о плюсовых ссылках.
Аноним 11/04/19 Чтв 13:26:41 #105 №1379046 
>>1379035
Ты сейчас опять его спутаешь, в си нет ссылок, поэтому их можно было вообще не писать.
Аноним 11/04/19 Чтв 13:30:04 #106 №1379048 
>>1379046
Так ему уже писали, что ссылок нет. Если он читать не умеет - то...
Аноним 11/04/19 Чтв 13:33:20 #107 №1379052 
Как срать кирилицей в консоль? Ебусь уже n-ое количество времени. Без setlocate и SetConsoleOutputCP это вообще возможно сделать?
Аноним 11/04/19 Чтв 13:54:24 #108 №1379073 
>>1379052
пиши хелловорд в древней кодировке кои866
Аноним 11/04/19 Чтв 14:23:24 #109 №1379088 
>>1379052
> Без setlocate и SetConsoleOutputCP это вообще возможно сделать?
Да, делается так: gcc -finput-charset=utf-8 -fexec-charset=cp866 file.c (ну и исходник в UTF-8 естественно). Но в серьезных программах лучше написать свою обертку для printf, которая в линуксе просто вызывает printf, а в Windows - vsnprintf в буфер, MultiByteToWideChar(CP_UTF8, ...) и потом WriteConsoleW. В десяточке консоль уже более-менее умеет работать с UTF-8 без странных спецэффектов, поэтому можно обойтись SetConsoleCP.
Аноним 11/04/19 Чтв 14:34:16 #110 №1379102 
>>1379073
>пиши хелловорд в древней кодировке кои866
Ебать, помогло. Пол дня ебал разные кодировки и не получалось, а тут вышло. Ахуеть.
>>1379088
А вот это не получилось. Писал мне что не может конвертировать из UTF-8 (кстати у меня десяточка)
Аноним 11/04/19 Чтв 14:36:49 #111 №1379105 
>>1379102
Еще хочу добавить, что все примеры, какие видел, были в UTF-8. И (судя по объяснению автора) компилируются без проблем. Буквально качаю тот же самый фаил, а у меня кракозябры
Аноним 11/04/19 Чтв 14:52:49 #112 №1379119 
Screenshot2019-04-11-18-48-27-018org.readera.png
>>1379035
>>1379037
>>1379044
>>1379046
Как это нету ссылок, если вон, есть указатель адреса и ссылка по указателю. хотя пока не понял в чем разница

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

#include <stdio.h>

int function(char &temp[5]);

main()
{
char data[5];

function(data);

return 0;
}

int function(char &temp)
{

\treturn temp;
}
Аноним 11/04/19 Чтв 15:07:16 #113 №1379131 
>>1379119
Признайся, что ты троллишь.
В определении функции выполнять операцию взятия адреса параметра т.е. формального описания, а не значения - это так толсто.
Аноним 11/04/19 Чтв 15:12:36 #114 №1379136 
Screenshot2019-04-11-19-10-23-868com.n0n3m4.droidc.png
>>1379131
Делать мне больше как в /pr толстить.

Убрал в определении функции &, но компилятор все равно ругается. В этот раз даже ссылку на номер строки не даёт так что я вообще не ебу что он хочет. В чем проблема?
Аноним 11/04/19 Чтв 15:18:55 #115 №1379143 
>>1379136
Не обманывай, няш.
Ты описываешь компилятору, как
int function(char [5]); мол не ссыте, пацаны. Будет передаваться 5 символов и возвращаться int.
Дальше идет вызов, ожидающий того что ты наобещал.
А внизу внезапно int function(char &) реализовано.
Где линкеру искать реализацию обещанного.
Аноним 11/04/19 Чтв 15:19:20 #116 №1379144 
>>1379102
> Писал мне что не может конвертировать из UTF-8
Может быть, у тебя исходник в Windows-1251? Или гцц какой-то кастрированный, хуй знает.

>>1379105
> Буквально качаю тот же самый фаил, а у меня кракозябры
Может быть, автор запускает в консоли редактора (саблайма, например), или в линуксе, или делает chcp 65001 перед запуском.

>>1379136
Ты реально необучаемый. Где на скриншоте ты убрал &, если вон оно в 14 строке торчит? Естественно, твой крестокомпилятор (выбери Си в настройках, блять, там оно есть!) создает функцию, принимающую ссылку, а ищет функцию, принимающую указатель.
Аноним 11/04/19 Чтв 15:26:12 #117 №1379153 
Screenshot2019-04-11-19-22-31-791com.n0n3m4.droidc.png
>>1379143
Вот нихуя не понял.
>>1379144
Убрал & в описании функции в самом верху. А если и в самой функции & убрать, то как тогда она сможет вернуть целый массив?

Сменил компилятор на gcc, опять на & ругается. Как тогда должен выглядеть код, чтобы функция возвращала массив?
Аноним 11/04/19 Чтв 15:45:12 #118 №1379165 
>>1379153
Скинь код в pastebin
Аноним 11/04/19 Чтв 16:02:10 #119 №1379172 
>>1379153
https://pastebin.com/PjavQjq9
Аноним 11/04/19 Чтв 16:11:18 #120 №1379176 
>>1379165
Вот же весь код тут >>1379119

>>1379172
А с помощью одной лишь stdio нельзя это сделать? А то я к stdlib не прикасался даже и не понял что у тебя за аргументы в main появились и прочее.
Аноним 11/04/19 Чтв 16:16:39 #121 №1379178 
>>1379176
>А с помощью одной лишь stdio нельзя это сделать?
Можешь убрать #include <stdlib.h>
и int argc, char argv.
А вместо return (EXIT_SUCCESS); return 0; сделай.
Аноним 11/04/19 Чтв 16:17:19 #122 №1379179 
>>1379172
Так если у тебя все работает, чего ж ты выделываешься?

>>1379153
> Как тогда должен выглядеть код, чтобы функция возвращала массив?
В Си не возвращают массивы. Если у тебя большой и непредсказуемый объем данных, ты выделяешь массив внутри функции, а возвращаешь указатель на первый элемет. Если ты знаешь, сколько тебе нужно "вернуть", ты передаешь в функцию указатель на первый элемент массива и максимальную длину, функция в этот массив срет, как ей нужно, а возвращает вообще void.
Аноним 11/04/19 Чтв 16:17:31 #123 №1379180 
>>1379176
https://pastebin.com/HCs7FmKH
Аноним 11/04/19 Чтв 16:23:10 #124 №1379183 
>>1379178
А что такое _arr в (char _arr[5]) ? И разве result может вернуть например абзац текста?

>>1379179
> Так если у тебя все работает, чего ж ты выделываешься?
Это не я отвечал.

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

>Если ты знаешь, сколько тебе нужно "вернуть", ты передаешь в функцию указатель на первый элемент массива и максимальную длину, функция в этот массив срет, как ей нужно, а возвращает вообще void.
Можешь написать как это примерно будет выглядеть?
Аноним 11/04/19 Чтв 16:24:18 #125 №1379184 
>>1379183
_arr имя переменной
Аноним 11/04/19 Чтв 16:24:40 #126 №1379185 
>>1379183
> что такое _arr в (char _arr[5])
Указатель на char. 5 там для красоты и ни на что не влияет.

> А разве содержимое функции не стирается к хуям когда функция завершает свою работу?
Почему вдруг?

> Можешь написать как это примерно будет выглядеть?
https://ideone.com/sgqxcB
Аноним 11/04/19 Чтв 16:52:28 #127 №1379207 
photo2019-04-1120-47-46.jpg
photo2019-04-1120-47-44.jpg
>>1379185
>Указатель на char.
Указывает не на переменную, а на ее тип что-ли? Это как и зачем?

>https://ideone.com/sgqxcB
А с помощью одной лишь stdio нельзя это сделать? Не хочу пока использовать код, смысла которого не понимаю и которого в книге пока нет.

Почему вот такой мой код не работает? В data[5] у меня какой-то текст, я его посылаю в функцию, функция должна записать по указателю в массив puthere[5] какой-то текст все. По идее puthere будет иметь то значение, что я ей в функции дал? Почему не работает?
Аноним 11/04/19 Чтв 17:00:18 #128 №1379214 
>>1379207
Убери, блять, звездочку в 14 строке. [] и так интерпретируется как указатель на первый элемент массива.
Аноним 11/04/19 Чтв 17:01:28 #129 №1379216 
>>1379214
И пиздуй читай Кернигана и Ритчи, в первой же главе объясняется. сорян, выбесил
Аноним 11/04/19 Чтв 17:07:19 #130 №1379218 
Screenshot2019-04-11-21-05-03-919com.n0n3m4.droidc.png
Screenshot2019-04-11-21-05-33-498com.n0n3m4.droidc.png
>>1379214
Убрал и дописал принт puthere. Выводит каждый раз какую-то рандомную хуйню вместо 1. Из-за чего?

Читаю я K&R, пока до функций дошел.
Аноним 11/04/19 Чтв 17:18:33 #131 №1379226 
>>1379218
Ты function для puthere не вызвал же.
puthere в main и puthere в function - 2 разных участка памяти. Область видимости.
Аноним 11/04/19 Чтв 17:33:19 #132 №1379230 
>>1379226
Нет, это один и тот же массив, он же по указателю передаёт его.
Если он в функцию передаст puthere, а не дату, то распечатаются единички.
Аноним 11/04/19 Чтв 17:35:22 #133 №1379231 
>>1379230
1. Нет это разные. Он передаст указатель на него и его перепишет функция.
2. Он не передает/вызывает в функцию puthere.
Аноним 11/04/19 Чтв 17:45:41 #134 №1379235 
Screenshot2019-04-11-21-40-44-691com.n0n3m4.droidc.png
Screenshot2019-04-11-21-40-49-155com.n0n3m4.droidc.png
>>1379226
Вроде понял и сделал. Все правильно? Вроде работает так как надо.

Только у меня вопрос - как все же получилось что data поменялась, ведь я в функции ее без указателя передавал, должно же было только значение переменной скопироваться и все что внутри функции с переменной творится на функцию в мейне это не должно влиять.
Аноним 11/04/19 Чтв 17:54:06 #135 №1379243 
>>1379235
Бля, строки в си нуль терминированы, нахуя у тебя function принимает именно char[5]? И всякие for ... i<5... это пиздец говнокод. Раз уж ты какого-то хуя юзаешь принтф для посимвольно вывода в цикле (о чем тебе уже с два треда говорят, но тебе похуй), просто создай переменную для считывания длины строки, допустим unsigned int len, которая пока выводит заодно посчитает strlen, и передавай в function(char _str и unsigned int len)
Аноним 11/04/19 Чтв 17:54:45 #136 №1379244 
>>1379235
Ты не внимательно читаешь.
function(char []) - ты указываешь, что будешь передавать массив. Для оптимизации компилятор приводит этот параметр к указателю (копировать целый массив дорого). Т.е. ты в любом случае в функции при таком способе поменяешь значение исходной переменной.

Для защиты от невнимательности, если функция не должна менять данные, ты можешь объявить как function(const char[]), тогда компилятор выдаст ошибку в твоей функции, если там есть попытка изменить данные. Но в данной задаче - это не твой вариант.
Аноним 11/04/19 Чтв 17:56:40 #137 №1379247 
>>1379235
Имя - тоже указатель. Читай основы ООП и типов данных, куда ты лезешь?
Аноним 11/04/19 Чтв 18:06:20 #138 №1379253 
>>1379243
> строки в си нуль терминированы
Это что значит?
>нахуя у тебя function принимает именно char[5]?
Я пока просто пишу заготовку функции, которую буду использовать в своей основной программе.
> И всякие for ... i<5... это пиздец говнокод.
А что с этим не так?
>Раз уж ты какого-то хуя юзаешь принтф для посимвольно вывода в цикле (о чем тебе уже с два треда говорят, но тебе похуй)
Что плохого в том, чтобы выводить принтф в цикле посимвольно текст? И что ты предлагаешь использовать вместо этого?
> просто создай переменную для считывания длины строки, допустим unsigned int len, которая пока выводит заодно посчитает strlen, и передавай в function(char _str и unsigned int len)
Вот это вроде неплохо, если я правильно понял как это должно работать.

>>1379243
А есть разница между переменной что ты передаешь в функцию function(data) и названием переменной в самой функции int function (char data[5]) ? Если написать function (char blabla[5]) что-то поменяется?

>>1379247
Разве в Си есть ООП?
Аноним 11/04/19 Чтв 18:07:58 #139 №1379254 
>>1378797
>Ну давай поговорим. Как ты использовал X macros в последний раз?
я на cpp пишу, сюда захожу только чтобы пописать, как в макдональдс
Аноним 11/04/19 Чтв 18:11:28 #140 №1379256 
>>1379253
>А есть разница между переменной что ты передаешь в функцию function(data) и названием переменной в самой функции
Да, огромная. Я же в примере специально назвал отлично от всех остальных _arr. Внутри функция ничего не знает об именах переменых в main, да и везде кроме себя. Когда ты вызываешь её, копируется или значение оргигинальных переменных или указытелей на них.
Аноним 11/04/19 Чтв 18:15:20 #141 №1379260 
>>1379256
Т.е. если я в int function (char %хуимя%[5]) пишу название переменной из мейн - он оперирует этой переменной как будто функция с ней в мейне и работает. А если писать название, которое есть только внутри функции, то функция берет просто значение %хуимя% из function(%хуимя%) и не влияет на переменную в мейне?
Аноним 11/04/19 Чтв 18:18:26 #142 №1379262 
>>1379260
Будет она называться также или нет - она не будет взаимодействовать с переменной из мейн. Просто при вызове твоей функции пихается не массив, а адрес памяти где твой массив из мейна начинается. Т.е. ты работаешь не с копией массива, а оригинала.
Аноним 11/04/19 Чтв 18:26:03 #143 №1379267 
rk19.jpg
>>1379253
>нуль терминированы
Добавлю. K&R, глава 1.9

Пример
https://pastebin.com/DTiXs847
Аноним 11/04/19 Чтв 18:26:44 #144 №1379268 
>>1379262
Понял. Будет ли менятся оригинальная переменная или нет зависит лишь от того будешь писать int function (const char data[5]) или нет?

>она не будет взаимодействовать с переменной из мейн. Просто при вызове твоей функции пихается не массив, а адрес памяти где твой массив из мейна начинается.
А разве работа с адресом памяти, где хранится переменная это и не есть работа с переменной?
sage[mailto:sage] Аноним 11/04/19 Чтв 18:28:56 #145 №1379270 
>>1379268
Скажи, ты пробовал внимательно читать K&R, если уж ты вообще его читаешь? Там ответы на все твои вопросы написаны, но, тем не менее, ты не читаешь ответов даже итт.
Аноним 11/04/19 Чтв 18:36:26 #146 №1379274 
>>1379268
Постарался расписать.
https://pastebin.com/p8fNyg9z
Аноним 11/04/19 Чтв 18:40:47 #147 №1379279 
>>1379231
Почему это разные массивы, он уже внутри функции просто ходит по указателю в свой исходный массив, который и переписывает.
Аноним 11/04/19 Чтв 18:43:20 #148 №1379282 
>>1379279
Да, пардон. Жопой прочел вместо массив - переменная.
Аноним 11/04/19 Чтв 18:45:04 #149 №1379284 
>>1379282
Понял-принял.
Аноним 11/04/19 Чтв 18:49:14 #150 №1379287 
>>1379267
это что за учебник?
Аноним 11/04/19 Чтв 18:51:11 #151 №1379288 
>>1379287
this
>>1376618
Аноним 11/04/19 Чтв 18:54:56 #152 №1379289 
>>1379270
Читал его несколько месяцев назад, и то только до функций, сейчас все вспоминаю.

>>1379274
О, благодарю. Если подытожить - массивы всегда только через указатель передаются, остальные по значению, если не стоит . Но если ставишь const то и со передается только по значению, так?

Только я не понял глубинный смысл конструкции void function (const int *data). Если ты не хочешь чтобы data менялась, то зачем ставить звездочку?
Аноним 11/04/19 Чтв 19:00:04 #153 №1379290 
>>1379289
(const оченьЖирнаяСтруктура *s), например. Суть в том, что const тебе не запрещает менять. Он заставляет компилятор постараться отследить попытки изменить такие переменные (с const) и ругнуться ошибкой.
Ну например оченьЖирнаяСтруктура копировать дорого, передаешь указатель. А функция не должна изменить. Добавляешь const. Какой-то долбоеб лезет менять функцию, начинает пытаться менять в ней поля оченьЖирнаяСтруктуры и получает ошибки. Своего рода контракт - функция обязуется не менять значения, вызывающий понимает, что его данные внезапно не похерят. в плюсах это проработано сильнее
Аноним 11/04/19 Чтв 19:03:21 #154 №1379294 
>>1379289
Блядь боже, прочитай сначала про указатели, а потом используй их, ты для нас сейчас выглядишь, как человек, который пытается надеть свитер:
То есть если надеть его через голову, то будет тепло, а если через ноги, то можно спать не снимая свитер?
Пиздец блядь, как же все обленились, вместо того, чтобы прочитать и понять, как все работает, он задаёт тупые вопросы и ждёт на них ответ, который тоже не понимает.
Const это идентификатор такой, если ты пишешь const char arr[], это значит, что ты принимаешь указатель на const char, он не будет копироваться, const к этому вообще отношения не имеет, это лишь значит, что если ты попробуешь переписать значение, лежащее в твоём массиве у тебя все пизданётся нахуй.
Конст инт звезда по аналогии, ты можешь его прочитать, но не записать в него.
как же меня все бесит
Аноним 11/04/19 Чтв 19:05:16 #155 №1379295 
>>1379294
>как же меня все бесит
А скоро сдача курсачей попрет.
Аноним 11/04/19 Чтв 19:06:28 #156 №1379297 
>>1379295
Да меня самого скоро на сессии выебут, ещё и на работе завал, нихуя не успеваюзато время заходить сюда и отвечать на тупые вопросы нахожу, что за идиот
Аноним 11/04/19 Чтв 19:09:07 #157 №1379298 
>>1379253
>ООП
А как его может не быть, если ООП это просто способ работы с данными?
Кладешь угазатель на функцию в типизированую структуру - и это уже не функция, а метод класса.
Аноним 11/04/19 Чтв 19:09:28 #158 №1379299 
Есть ли ide под win 98? А компилятор? А ежи?
Аноним 11/04/19 Чтв 19:10:50 #159 №1379300 
>>1379299
VC++ 6.
Вообще с Borland C++ 3.1 начинал
Аноним 11/04/19 Чтв 19:12:15 #160 №1379303 
>>1379299
>иде для сижки
>под вин
Не знаю что из этого тупее, но ответ — emacs
Аноним 11/04/19 Чтв 19:15:16 #161 №1379304 
>>1379290
Вроде понял, спасибо.
>>1379294
А ты знаешь такую вещь - если ты не можешь обьяснить вещь тому, кто в ней совсем не разбираешься, то ты и сам недостаточно хорошо в ней разбираешься. Незачем беситься.

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

>>1379298
Читал что ООП в Си на костылях, а нормальный ООП это уже в С++.
Аноним 11/04/19 Чтв 19:19:48 #162 №1379305 
>>1379303>>1379300
Добра вам анончики, знайте что я не от хорошей жизни спрашиваю.
Аноним 11/04/19 Чтв 19:20:56 #163 №1379306 
>>1379304
>такую вещь
Эта вещь — полная хуйня

>читаю
>читал
Ну хоть читать умеешь. И да, возьми уже за привычку тип значения мейну указывать. Кстати, если тут не отвечают, можешь в крестотред идти и спрашивать там.
Аноним 11/04/19 Чтв 20:34:01 #164 №1379344 
1555004028884.jpg
1555004029111.jpg
Данунах. Что это SIGTRAP при попытке вызвать free значит? Причём, можно нажать несколько раз на построчное выполнение, и эта хуйня выполнит дальше будет работать, ругнувшись трижды на функции в ntdll. В Гугле чё-то всё по таким вопросам по плюсам и из-за кривой работы с классами.

Ёбаная макака не даёт решать капчу на пеке.
Аноним 11/04/19 Чтв 20:35:04 #165 №1379345 
>>1379344
А, да, последующие брейкпоинты игнорирует.
sage[mailto:sage] Аноним 11/04/19 Чтв 20:38:50 #166 №1379348 
>>1379299
Pelles C 5 еще. TCC в качестве компилятора тоже можно. VS до 2003 вроде поддерживала тоже.

>>1379344
Ну повреждаешь видимо, пишешь в text_to_byte() больше, чем выделяешь.
Аноним 11/04/19 Чтв 20:54:43 #167 №1379368 
>>1379348
> Ну повреждаешь видимо, пишешь в text_to_byte() больше, чем выделяешь.
Не. С этим всё норм.
Самое интересное, что всё работало, пока я "типа интерфейс" консольный диалоговый не попытался написать. Но эти функции я не трогал.
sage[mailto:sage] Аноним 11/04/19 Чтв 21:05:04 #168 №1379383 
>>1379368
Ну как норм-то, если у тебя при проверке кучи явная проблема. То, что "все работало" не означает, что ты раньше кучу не повреждал.
Аноним 11/04/19 Чтв 21:11:43 #169 №1379393 
1555006291207.jpg
>>1379383
Потому что text_to_byte(text) работает без ошибок. А память я в нём выделяю.
Аноним 11/04/19 Чтв 21:12:53 #170 №1379400 
Это я к тому, что

> пишешь в text_to_byte() больше, чем выделяешь
sage[mailto:sage] Аноним 11/04/19 Чтв 21:30:01 #171 №1379405 
>>1379393
Потому что повредить кучу ты можешь в одном месте, а проблема может возникнуть позже. Или не возникнуть вообще.

Твоя функция сломана в строке, которая пишет '\0' перед return. Допустим, strlen() вернула 5. Ты выделил strlen() ∗ 8 = 5 ∗ 8 = 40 байт, цикл прокрутился, i = 5, и ты пишешь в B_str[i 8], т.е., в B_str[40], т.е., выделив 40 байт, ты пишешь в 41-ый. Возможно, что это не единственная ошибка в твоем коде, возможно, не только* она вызывает проблему, но это ошибка.
Аноним 11/04/19 Чтв 21:43:25 #172 №1379412 
>>1379183
>А разве содержимое функции не стирается к хуям когда функция завершает свою работу?
Под выделить в функции имелось ввиду не сам буфер разместить в стеке под этой функцией, а обращение к аллокатору.
Аноним 11/04/19 Чтв 21:56:48 #173 №1379419 
>>1379287
Дорогой? За сколько взял?
Аноним 11/04/19 Чтв 22:05:02 #174 №1379420 
1555009491696.jpg
>>1379405
Анончик, спасибо! Удивительно, что с фотографиями монитора нахуй не послали. Ты был прав, что не в одном месте такая фигня. Выделил во везде где нужно ещё по байту, и заработало как задумано. Вот тебе няша.
Аноним 11/04/19 Чтв 22:06:15 #175 №1379421 
1555009565308.png
>>1379420
Не та няша, вот та.
Аноним 11/04/19 Чтв 22:07:39 #176 №1379422 
>>1379421
>рязанское ебало
>няша
Аноним 11/04/19 Чтв 22:08:05 #177 №1379423 
>>1379419
http://www.combook.ru/product/11914736/
Я в офлайне, за 1200
Аноним 11/04/19 Чтв 23:26:41 #178 №1379458 
>>1379423
Пиздос. Вроде и не дорого, а вроде в кармане 35 рублей. Тоже такой хочу бля. Иногда книга удобнее электронного варианта
Аноним 12/04/19 Птн 04:42:57 #179 №1379520 
>>1379422
А по мне прикольно, невинная такая обычная провинциальная девочка, помацал бы, но явно не очень умная, не подойдёт для повседневного пользования
Аноним 12/04/19 Птн 04:46:07 #180 №1379521 
>>1379520
как ты ум по внешке определяешь? может она на хаскеле пишет
Аноним 12/04/19 Птн 07:21:09 #181 №1379534 
>>1377965
А почему бы не написать while(!feof(fp)) ?
Аноним 12/04/19 Птн 11:16:30 #182 №1379567 
Screenshot2019-04-12-15-06-53-929com.n0n3m4.droidc.png
Screenshot2019-04-12-15-07-13-358com.n0n3m4.droidc.png
Опять я со своим говнокодом. Без участка кода, который я закомментил в конце, код работает как надо. А если этот код разкомментить и добавить, то появляются какие-то странные символы в тексте, причем код из шага pass 3 как-то влияет на код из шага pass 2.

Какого хуя и как этот участок кода влияет на код из шага 2? Он же с ним никак не связан же кроме момента где я присваиваю send значение data2. Но саму же data2 я не трогаю. Так откуда тогда эти символы?

https://pastebin.com/HtJzKULv
sage[mailto:sage] Аноним 12/04/19 Птн 11:27:55 #183 №1379574 
>>1379534
В Си feof() служит не для того, чтобы определить, что файл кончился, а для того, чтобы отличить ошибку чтения от конца файла (возможно, название неудачное, но по-другому с потоками никак). Т.е., ты должен попробовать прочитать данные fread() или getchar(), чтобы они "споткнулись" об EOF, чтобы feof() начала возвращать 1. Т.е., на файле из одного байта 'x': fgetc() -> 'x', feof() -> 0, fgetc() -> EOF, feof() -> 1.

Поэтому, раз нам все равно проверять результат getchar() на EOF, чтобы не принять его случайно за букву, то и лишняя проверка из feof() нам не нужна.

>>1379567
> Опять я со своим говнокодом
Верно подмечено. В строке 92 ты либо пишешь в массив элемент с индексом n, либо не пишешь, и там остается какое-то говно, которое было в стеке. Строчкой ниже ты его выводишь. Вероятно, ты хотел ввести вторую переменную - m, и писать в массив data2[m++] = date[n].

> pass 3
x = x + 3, выполненный 50 раз, явно вылезет за пределы массива send и распидорасит все вокруг.
Аноним 12/04/19 Птн 11:44:55 #184 №1379585 
>>1379574
> В строке 92 ты либо пишешь в массив элемент с индексом n, либо не пишешь, и там остается какое-то говно, которое было в стеке.
Как в data2 может быть говно, если без кода из шага3 все выводится без мусора?(первый скрин)

>Строчкой ниже ты его выводишь. Вероятно, ты хотел ввести вторую переменную - m, и писать в массив data2[m++] = date[n].
Нет, я хотел текст полученный в массив data скопировать в массив data2 без пробелов и запятых.
> x = x + 3, выполненный 50 раз, явно вылезет за пределы массива send и распидорасит все вокруг.
А как он в любом случае может влиять на массив data2, если send это совсем другой массив? К тому же массив выводится на печать до того как идёт шаг3, как он на уже выведенный на экран текст может влиять?
Аноним 12/04/19 Птн 11:47:25 #185 №1379588 
Screenshot2019-04-12-15-45-22-994com.n0n3m4.droidc.png
Бтв даже если цикл в шаге3 сократить до 10 шагов, то он все равно выводит мусор.
Аноним 12/04/19 Птн 11:51:31 #186 №1379589 
>>1379585
Чувак, возьми листочек и ручку.
printf("\n\npass 2:\n");
while (n != 50)
{
if (date[n] != ' ' & date[n] != ',' & date[n] != '\t')
date2[n] = date[n];

printf("%c", date2[n]);
n++;
}
n = 0; пусть попадает в if
date2[0] = date[0];
n = 1 //пусть попадает в if
date2[1] = date[1];
n = 2 //пусть НЕ попадает в if
date2[2]; - не записывается, но там остается мусор (ты же date2 не занулял)
n = 3 //пусть попадает в if
date2[3] = date[3];

В итоге
у тебя получется date2
[12][100][мусор][200]
Аноним 12/04/19 Птн 11:52:32 #187 №1379591 
>>1379585
> если без кода из шага3 все выводится без мусора
Да похуй. Читать неинициализированную память - это неопределенное поведение. Неопределенное - значит может произойти все, что угодно. Оно даже может вывести "мама, я все осознал, я больше никогда не буду программировать на Си", хотя вероятность этого события невелика.

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

> А как он в любом случае может влиять на массив data2
Да похуй, это баг, и ты прибежишь с ним в тред.
Аноним 12/04/19 Птн 13:00:47 #188 №1379622 
TheCProgrammingLanguagelogo.svg.png
Сап, разбираюсь с указателями на указатели
В общем, вопрос такой
объявление простого указателя и массива выглядит так(взял по int)
int ЗВЕЗДА p;
int a[5];
p=&a;
И через арифметику указателей мы можем в цикле или без него мы можем спокойно выводить значения массива а, я его не инициализировал и похуй.
А теперь такая хуйня
int a = 1;
int b = 2;
int c = 3;
int ЗВЕЗДА p[3] = {&a, &b, &3};
int ЗВЕЗДА ЗВЕЗДА ptr;
ptr = p;
И все бы ничего, но блядь, какого хуя, при работе с простым указателем и статическим массивом, я просто присваиваю указателю адрес первого элемента через &, а при работе с указателем на указатель и массивом указателей я просто делаю присваивание ptr = p без взятия адреса, ведь по сути p тоже массив, и его имя это адрес первого указателя, и я должен делать так ptr = &p, но это неправильно.
Аноним 12/04/19 Птн 13:03:10 #189 №1379623 
>>1379622
И еще такой вопрос, что значит объявление int (*ptr)[20]?
Указатель на массив? Если да, то нахуй он нужен, когда есть обычный указатель.
Аноним 12/04/19 Птн 13:11:44 #190 №1379627 
>>1379622
ptr = &p - почему ты решил, что это неправильно?
Аноним 12/04/19 Птн 13:20:49 #191 №1379635 
1231123332.png
>>1379627
Аноним 12/04/19 Птн 13:23:22 #192 №1379636 
>>1379635
ptr = &p[0];
Аноним 12/04/19 Птн 13:23:45 #193 №1379637 
>>1379635
ps Что за компилятор?
Аноним 12/04/19 Птн 13:24:47 #194 №1379639 
>>1379637
Вижуал студио)))))))))))
Аноним 12/04/19 Птн 13:25:01 #195 №1379640 
>>1379622
> присваиваю указателю адрес первого элемента через &
Ты можешь и так, и так:
int ∗foo; int bar[3]; foo = &bar[0];
int ∗foo; int bar[3]; foo = bar; // bar в большинстве случаев (кроме & и sizeof) автоматически преобразуется к &bar[0], т.е., к int ∗bar;

> а при работе с указателем на указатель и массивом указателей я просто делаю присваивание ptr = p без взятия адреса
А чем это отличается? Имя p неявно пребразуется к int ∗∗p (как выше c bar: скобки убрали, звездочку добавили), типы у ptr и p совпадают, все ок. Можешь и ptr = &p[0] делать, это абсолютно одно и то же.

>>1379623
Да, указатель на массив. У него тип именно "указатель на массив", это важно. Нужен, чтобы обозначить намерения. Чтобы sizeof работал, чтобы индексирование работало у двумерных массивов, и можно было писать ptr[j] вместо ptr[i ∗ 20 + j]. Можешь вот с этим поиграться еще: https://ideone.com/huAMFl Это из прошлых тредов сохранилось.
Аноним 12/04/19 Птн 13:25:49 #196 №1379642 
>>1379636
А разве p!=p[0], как при обычном массиве?
Аноним 12/04/19 Птн 13:26:34 #197 №1379643 
>>1379640
> писать ptr[j]
Сраная макака. ptr[​i​][j]
Аноним 12/04/19 Птн 13:31:16 #198 №1379646 
>>1379642
У VS своя магия с конвертацией указателей из массивов. Кто шарит получше может и пояснит.
Аноним 12/04/19 Птн 13:37:49 #199 №1379653 
>>1379646
А чего тут объяснять? На скриншоте не то, что было в вопросе. На скриншоте есть амперсанд, т.е., берется указатель на массив. Указатель на массив численно равен указателю на первый элемент, но его тип - указатель на массив. Тип присваиваемого значения не совпадает с типом переменной, в которую присваиваем, и студия ругается, как ругался бы любой другой компилятор. Т.е., нужно либо так:
ptr = p;
либо так:
ptr = &p[0];
либо так:
ptr = ∗(&p);
либо так:
ptr = &(∗(&p))[0];
Аноним 12/04/19 Птн 13:42:45 #200 №1379658 
>>1379653
В VS я всегда вариант через &p[0] использовал.
А в gcc прокатывает и &p. Правда gcc я не давно использовать стал. как потребовалась кроссплатфорная адаптация существующего софта
Аноним 12/04/19 Птн 13:45:11 #201 №1379661 
>>1379658
> А в gcc прокатывает и &p
И не надейся. Ворнинги надо включать хоть иногда: https://ideone.com/5otK9Z
Аноним 12/04/19 Птн 13:48:41 #202 №1379667 
>>1379661
Попробовал, да ты прав.
Аноним 12/04/19 Птн 13:50:49 #203 №1379670 
>>1379653
Другой анон
Я не совсем понял, что ты имеешь в виду под указателем на массив, ведь *p[] это массив указателей
Аноним 12/04/19 Птн 13:57:22 #204 №1379674 
>>1379670
> ведь ∗p[] это массив указателей
int ∗p[]; // массив указателей.
int (∗p)[]; // указатель на массив.

int foo[3]; // Тип: массив из 3 int.
foo; // Тип: указатель на int (неявное преобразование).
&foo[0] // &(foo[0]); // Тип: указатель на int (явно взяли адрес).
&foo; // Тип: указатель на массив из 3 int (взяли адрес, но массива, а не элемента).
Аноним 12/04/19 Птн 14:02:22 #205 №1379681 
>>1379674
Жестко и круто, после того, как я со всей этой лабудой разберусь стану тру прогером?
Аноним 12/04/19 Птн 14:04:56 #206 №1379684 
>>1379681
С такими вопросами в сипп тред. Да и объяснят там лучше, лол
Аноним 12/04/19 Птн 14:07:25 #207 №1379688 
>>1379684
Да, если осилить указатели в си, то опп в крестах easi пойдет!
Аноним 12/04/19 Птн 14:08:21 #208 №1379690 
>>1379688
А ты оптимист. Особенно если про шаблоны не забыть.
мимопроходил
Аноним 12/04/19 Птн 14:12:47 #209 №1379693 
Пацаны, раскидайте по фактам и без сложностей, когда применяются указатели на указатели, кроме выделения памяти из кучи для двумерного массива?
Аноним 12/04/19 Птн 14:12:56 #210 №1379694 
Глупый вопрос но чем отличается указатель от числа? Что мешает присваивать адрес простой переменной int?
Аноним 12/04/19 Птн 14:15:48 #211 №1379697 
>>1379694
Обычная переменная может хранить только свой адрес? Сам в си не шарю, просто, что первое в голову пришло
Аноним 12/04/19 Птн 14:30:20 #212 №1379704 
>>1379693
У микрософта всякие структуры любят через двойной указатель создавать. Пример:
https://docs.microsoft.com/en-us/windows/desktop/api/d3d9/nf-d3d9-idirect3d9-createdevice

HRESULT CreateDevice(
UINT Adapter,
D3DDEVTYPE DeviceType,
HWND hFocusWindow,
DWORD BehaviorFlags,
D3DPRESENT_PARAMETERS ☆pPresentationParameters,
IDirect3DDevice9 ☆☆ppReturnedDeviceInterface
);
Ты у себя в коде объявляешь пустой IDirect3DDevice 9 ☆foo = NULL;
И затем передаёшь &foo в функцию. Вуаля - у тебя есть экземпляр девайса.
Аноним 12/04/19 Птн 14:37:43 #213 №1379709 
>>1379694
Что ты потом с этим адресом в переменной делать будешь? Костыли городить?
Погугли ASM PTR - решение на уровне архитектуры.
Аноним 12/04/19 Птн 14:46:40 #214 №1379717 
>>1379688
Тупой долбоеб, ты же даже не знаешь что такое ООП, просто так словами ьросаешься, лишь бы чёто сказать.
Аноним 12/04/19 Птн 14:48:16 #215 №1379719 
>>1379717
Вот таких как ты и надо троллить, причем это было жирно, обезьянка
Аноним 12/04/19 Птн 14:49:10 #216 №1379720 
>>1379694
>чем отличается указатель от числа
Ничем. Адрес это просто число. Есть даже специальный тип - uintptr_t - целое, которое вмещает в себя указатель.
Аноним 12/04/19 Птн 15:08:55 #217 №1379731 
>>1379674
>int (∗p)[]; // указатель на массив.
Чем отличается указатель на массив от просто указателя на int?

>&foo; // Тип: указатель на массив из 3 int
>(взяли адрес, но массива, а не элемента).
Чем отличается указатель на массив от указателя на элемент (первый)?
Аноним 12/04/19 Птн 15:18:44 #218 №1379733 
>>1379731
Типы разные, тупой что ли.
Аноним 12/04/19 Птн 15:20:59 #219 №1379735 
>>1379733
Что за типы-то? Чем отличаются?
Аноним 12/04/19 Птн 15:49:34 #220 №1379751 
>>1379720
> Адрес это просто число
Попробуй написать что-нибудь на Си под DOS, будет сюрприз. Хотя в целом, да, просто число.

>>1379731
> Чем отличается указатель на массив от просто указателя на int?
В данном случае только типом. Для char (∗p)[3]; char ∗q; char ∗∗w, например, уже есть отличия: sizeof(∗p) != sizeof(∗q) != sizeof(∗w).

>>1379735
Тип - это такие метаданные о переменной, которые определяют, что в ней может лежать, и что с этим можно делать. Внезапно, правда?
Аноним 12/04/19 Птн 15:58:33 #221 №1379758 
>>1379589
>>1379591
Дошло наконец о чем вы. Я же в шаге 2 вывожу текст только если он по условию подходит и поэтому текст выглядит норм. Но на деле в массив хуйня хуячится каждый раз когда условие не выполняется.
Аноним 12/04/19 Птн 16:24:41 #222 №1379770 
>>1379751
>Попробуй написать что-нибудь на Си под DOS, будет сюрприз.
Я под дос не писал, но far указатели вроде же как-то по особому выделялись, не?
Аноним 12/04/19 Птн 16:53:16 #223 №1379785 
>>1379751
>В данном случае только типом.
>Тип - это такие метаданные
>>1379735

>уже есть отличия:
А, только это дебильное sizeof(array) для определения размера массива, хотя в любом неговнокоде нужно держать размер отдельно в явном виде. Понятно. Кроме этого, как понимаю, разницы нет.
Аноним 12/04/19 Птн 17:39:27 #224 №1379835 
>>1379785
> хотя в любом неговнокоде нужно держать размер отдельно в явном виде
Это вкусовщина. Я считаю, что размер, указанный явно, гораздо читаемее, чем неведомо зачем введенная константа, определенная где-то в жопе (например, uint32_t crc32_table[256] vs. uint32_t crc32_table[CRC32_TABLE_SIZE]). Разумеется, если у тебя множество определений подобных массивов, и нужно иметь возможность настраивать размеры у всех сразу, тогда без константы не обойтись (банальный пример - MAX_PATH в винде).
Аноним 12/04/19 Птн 18:05:41 #225 №1379850 
>>1379785
Ты думаешь слишком поверхностно, но в целом указатели на массив это бесполезная фича на мой взгляд.
Хотя возможно если писать какие-нибудь юзер-спейс приложухи, то где-нибудь и пригодится, для красоты так сказать.
Аноним 12/04/19 Птн 18:33:18 #226 №1379866 
>>1379850
> указатели на массив это бесполезная фича
Каждый раз, когда ты пишешь void func(int arg[10][20]), ты используешь указатель на массив, возможно, даже не подозревая об этом.
Аноним 12/04/19 Птн 19:25:58 #227 №1379891 
>>1379866
В том-то и дело, я так никогда не пишу, даже массивы на стеке я всегда передаю по обычному указателю.
Аноним 12/04/19 Птн 21:14:19 #228 №1379978 
>>1379866
Объясни, что такой указатель на массив тогда, с точки зрения, передаваемого аргумента в функцию как вдумерный массив
Аноним 12/04/19 Птн 21:20:51 #229 №1379980 
>>1379835
В вышеприведенном примере уже некрасиво. Нужно объявить массив с числом размера, а потом указатель на массив такого же размера. Дублирование числа явно напрашивается на ошибку несхождения этих чисел.

>>1379891
+1, то же самое. Сейчас осенило что видел массивы в параметрах только в функции main, которую IDE автоматом генерит, лол.
Аноним 12/04/19 Птн 21:55:56 #230 №1379995 
>>1379978
А где ты там двумерный массив увидел, вкатывальщик ебучий? Там массив указателей на массивы. А n-мерный массив всегда передается как обычный массив.
Аноним 12/04/19 Птн 22:01:48 #231 №1379999 
>>1379995
> массив указателей на массивы
Там просто указатель на массив, а массив указателей на массивы - это int (∗array[10])[20]. Сишный синтаксис деклараций неустанно доставляет.
Аноним 12/04/19 Птн 23:02:01 #232 №1380024 
>>1379999
Лучше придумать невозможно. Только такой синтаксис позволяет объявлять сколь угодно многослойные конструкции, сохраняя ясность, как потом к этой хуерге обращаться.
Аноним 12/04/19 Птн 23:06:12 #233 №1380026 
>>1380024
Это очень хуевый синтаксис
Аноним 12/04/19 Птн 23:40:29 #234 №1380043 
>>1380026
Пожалуй, что таки да)
Аноним 13/04/19 Суб 06:39:12 #235 №1380132 
>>1380026
Нормально, под задачи. 70-х
Аноним 13/04/19 Суб 07:49:34 #236 №1380139 
>>1380026
Это так не работает. "Хуевый" понятие относительное, это значит должен быть лучше, иначе хуевого не существует. Показывай где синтаксис лучше. Не можешь? Значит сишный синтаксис - лучший. Понимаешь, так работает относительность, даже такой дебил как ты будет величайшим гением, если уничтожить всех умных людей на Земле.
Аноним 13/04/19 Суб 08:43:21 #237 №1380155 
>>1380139
>Показывай где синтаксис лучше.
Rust.
мимикрок
Аноним 13/04/19 Суб 08:47:52 #238 №1380157 
можно ли сделать проверку в диапазоне символов? Например если символ принадлежит диапазону от A-Z то печатаем, иначе пропускаем?
Аноним 13/04/19 Суб 08:57:58 #239 №1380160 
>>1380157
по аски коду символа очевидно же
Аноним 13/04/19 Суб 09:08:16 #240 №1380163 
>>1380160
Ну это логично, A-Z идут с 65 и до 90. Но как этот диапазон сделать как условие?
Аноним 13/04/19 Суб 09:27:44 #241 №1380164 
>>1380163
x >= 'A' && x <= 'Z'
Аноним 13/04/19 Суб 13:24:28 #242 №1380255 
>>1380155
"Синтаксис Rust похож на Си и C++; язык регистро-зависимый, блоки кода ограничиваются фигурными скобками; используются стандартные наименования управляющих конструкций if, else, while, и for; комментарии также пишутся в С-формате; имена модулей разделяются двумя символами двоеточия (::). Идентификаторы могут содержать латинские буквы, цифры и знак подчёркивания."
Нууу, хуй его знает.
мимопроходил
Аноним 13/04/19 Суб 13:36:00 #243 №1380259 
>>1380255
> используются стандартные наименования управляющих конструкций if, else, while, и for
А есть где-то иначе? Ну кроме очевидных примитивных бейсиков и паскалей.
Аноним 13/04/19 Суб 13:55:32 #244 №1380266 
>>1377621 (OP)
Анончи, что за форс Растопетушни ИТТ, зачем они сюда набигают?
Аноним 13/04/19 Суб 14:18:18 #245 №1380270 
Аноны, поясните за указатели. До этого функция меняла значение аргументов (char s[]), а теперь кериган рассказывает про указатели на примере того же массива. Итогом стало то, что я не понял реального смысла их применения.
Аноним 13/04/19 Суб 15:14:29 #246 №1380303 
>>1380266
Пар на 95% безопаснее...
Аноним 13/04/19 Суб 15:16:07 #247 №1380304 
>>1380270
Массив частный случай указателей. Например чтобы не передавать твою структуры на 2 мегабайт копированием, передаешь указатель на нее. про указатели на функции обработчики и тд не буду
sage[mailto:sage] Аноним 13/04/19 Суб 16:04:27 #248 №1380326 
>>1380259
> А есть где-то иначе?
Очевидный примитивный питон, примитивный лисп?

>>1380270
1) В аргументах функции (и только в них) записи char s[] и char ∗s означают одно и то же. Т.е., ты на самом деле пользовался указателем, хоть аргумент и записывался как массив.
2) Смысл применения указателей - прочитать/записать что-то где-то, динамически задавая что именно. Т.е., если имя переменной на протяжении всей ее жизни всегда "связано" с одним конкретным объектом (областью памяти), то с указателями ты можешь ссылаться на разные области памяти. А уж как это применять, тебе будут рассказывать до конца книги.
Аноним 13/04/19 Суб 16:08:24 #249 №1380331 
>>1380304
>>1380326
То есть иначе говоря, массив array[3] это не массив в привычном понимании (целостная структура, как примитив), а три указателя на три последовательных блока памяти? Я правильно понял?
sage[mailto:sage] Аноним 13/04/19 Суб 16:27:27 #250 №1380333 
>>1380331
Анон выше >>1380304 тебя наебал. Массив в Си - это нормальный массив, как и везде - отдельный тип для объекта, состоящего из последовательности других объектов (примитивов или структур всяких, или других массивов - похуй). Никаких указателей там никто не хранит (если ты явно массив указателей не сделал). Т.е., если у тебя char array[] = {1, 2, 3, 4, 5}, то в памяти так и будут байты 1, 2, 3, 4, 5 последовательно. Но в отличие от некоторых других языков, в Си:
1) Имя массива (имя переменной) при его использовании в выражениях в большинстве случаев автоматически "преобразуется" к указателю на первый элемент. То же самое происходит и с именами функций, но тебе про это пока рано. Т.е., было int array[3]; array[2] += 1; стало int array[3]; (&array[0])[2] += 1; (тут &array[0] - указатель на первый элемент). Исключения - когда к массиву применяются операторы &, sizeof, alignof, они работают именно с самим массивом как с объектом.
2) Предыдущий трюк нужен затем, чтобы разрешить [] работать и с указателями, и с массивами. Квадратные скобки для индексирования массива в Си - это сахарок, они "заменяются" на сложение и дереференс: array[2] становится ∗((&array[0]) + 2), т.е., к указателю на первый элемент прибавляется индекс, и по получившемуся указателю читается/пишется значение (используется арифметика указателей, о ней в K&R прочитаешь).
3) Когда ты передаешь массив в функцию, правило (1) никуда, к сожалению, не девается, и ты передаешь указатель на первый элемент. somefunc(array) - это на самом деле somefunc(&array[0]).
4) Для того, чтобы не вызывать недоуменияохуевания у передающих "массивы" в функции, пришлось в аргументах самих функций объявления аргументов как массивов автоматически трактовать как указатели: void somefunc(int arr[]) на самом деле void somefunc(int ∗arr). В С11 все это еще больше запутали своими int arr[static 3], но лучше пока об этом не думать.

Вот как-то так. Попроще пусть кто-нибудь другой объясняет.
Аноним 13/04/19 Суб 16:43:35 #251 №1380336 
>>1380333
>прибавляется индекс
Индекс * размер типа
Аноним 13/04/19 Суб 17:16:05 #252 №1380346 
>>1380333
Ахуеть, вот бы в сипп треде были бы такие же ответы. А в чем конкретно приемущество arr[x*y], где все строки хранятся а одном массиве, перед массивом указателей arr[x][y]?
Аноним 13/04/19 Суб 20:16:03 #253 №1380424 
>>1380333
>Массив в Си - это нормальный массив, как и везде
Наоборот, сишный массив это лишь сырой буфер в памяти и указатель на него, аналог malloc. Ничего общего с нормальным массивом тут нет. А возможность к указателю подставить скобки это лишь вариант арифметики указателя.
sage[mailto:sage] Аноним 13/04/19 Суб 20:29:20 #254 №1380434 
>>1380424
> сишный массив это лишь сырой буфер в памяти и указатель на него
> аналог malloc
int ∗foo = malloc(3);
printf("%zu\n", sizeof(foo));
int bar[3];
printf("%zu\n", sizeof(bar));
Заблуждаешься сам - не путай других. Массив bar - это объект типа "массив из 3 int". foo - объект "указатель на int". Ничего общего.
Аноним 13/04/19 Суб 21:23:58 #255 №1380466 
Как защитить строки? С++ бояр есть compile time xorstr, а нам что делать?
Аноним 13/04/19 Суб 21:36:08 #256 №1380479 
>>1380466
> С++ бояр есть compile time xorstr, а нам что делать
Не страдать хуйней, ведь реверсера это остановит минуты на две максимум? Использовать нормальную коммерческую защиту с виртуальной машиной, если требуется повысить этот порог до вменяемых величин?

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

>>1380346
> А в чем конкретно приемущество arr[x*y]
Не понял вопроса. Двумерный массив (массив массивов) всегда предпочтительнее, чем ручне вычисление индекса, потому что компилятор может лучше оптимизировать доступ, и код с [][] получается более читаемый. Одномерный массив вместо двумерного делают, если не известно последнее измерение, а без него компилятор не может самостоятельно вычислить адрес элемента. А массив указателей используют, например, когда размер элементов различен, как в argv.
Аноним 13/04/19 Суб 22:04:00 #257 №1380500 
>>1380479
>Двумерный массив (массив массивов) всегда предпочтительнее
Неправда. Он дольше инициализируется, дольше удалаяется, он недружественнен к кэшу, и так далее. Все матрицы имеют внутри себя один большой кусок памяти.
Аноним 13/04/19 Суб 22:28:48 #258 №1380515 
Чет не пойму что за хуйня. Вот код, берется от пользователя число и посылается в функцию, которая делает дела. Но проблема в том что первый раз этот код работает нормально, но когда ты вбиваешь второй раз число, то input имеет нулевой первый элемент массива и старые 2 и 3 элементы массива.

Что за нахуй?

while (end != 1)
{

puts("\nВведите номер:");
gets(input);

printing(input);
}
return 0;
}
Аноним 13/04/19 Суб 22:48:04 #259 №1380525 
>>1380500
> Он дольше инициализируется, дольше удалаяется, он недружественнен к кэшу
Каким местом? Мы точно об одной и той же вещи говорим? Точно не о массиве указателей на массивы?

> Все матрицы имеют внутри себя один большой кусок памяти
Двумерный массив - это массив массивов, точно такой же один большой, непрерывный кусок памяти.
Аноним 13/04/19 Суб 23:21:01 #260 №1380538 
>>1380515
Тащи полный код, не понятно, что делает твоя функция.
Аноним 13/04/19 Суб 23:28:31 #261 №1380544 
>>1380525
Ты о статических массивах что ли? Ну это вообще сильно бесполезная йоба. Если в случае одномерного массива можно хотя бы выделить статический буфер побольше и работать в нем, то здесь та еще хуита уровня laba.cpp
Аноним 13/04/19 Суб 23:46:05 #262 №1380550 
>>1380538
Уже нашел косяк, отбой.
Аноним 14/04/19 Вск 09:42:08 #263 №1380629 
>>1380434
Ты тупая бестолочь, не знаешь что такое массив, а sizeof это незначительная мелочь, не имеющая значения в контексте сказанного.

Массив это высокоуровневый объект - набор значений по индексу. Это значит:
1. массив вовсе не обязан быть цельным блоком, точнее тебя это в принципе ебать не должно, если ты не хакер, ковыряющий бинарный код, но бинарный код это не язык программирования в котором написан массив, так что пролетаешь мимо темы.
2. массив, естественно, обязан проверять индекс и всё прочее, чтобы никаких выходов из него не было, потому что выход за пределы объекта это маразм ёбаный.

Поэтому, повторяю для тупорылых долбоёбов: В Си нет массивов, а так же нет строк и нет циклов for.
Сишные строки это те же сишные лже-массивы - сырые буфера - malloc. Возьми строку в языках где есть строки (или std::string) и попробуй взять букву по индексу. Естественно, там всё проверется и вылетит ошибка диапазона, но не в сырых буферах Си, которые не строки никакие.
Ну а циклов for нет и так понятно почему, сишный лже-for это просто ебанутый рескин while, куда еще и кода можно напихать, вообще охуеть. Даже близко ничего нет с циклом for.

Поэтому, повторяю для тупорылых долбоёбов: Си - это НИЗКОУРОВНЕВЫЙ язык, в нём в основном есть только БАЙТЫ, СЫРАЯ ПАМЯТЬ С СЫРЫМИ УКАЗАТЕЛЯМИ, просто они слезка примазаны сахарком "строк" и "массивов", чтобе не совсем голые байты были. Но это лишь как трусы на голом человеке, ничего толком не прикрывают и не одежда ни разу, как был голый так и остался, голые байты, голая память, ебешься со всем вручную.
Аноним 14/04/19 Вск 09:44:10 #264 №1380630 
>>1380629
>В Си нет массивов, а так же нет строк и нет циклов for.
>нет циклов for.
Чего блядь?
Аноним 14/04/19 Вск 09:54:17 #265 №1380632 
>>1380630
Того, тупица. Цикл for перебирает числа с фиксированным шагом от первого до последнего значения. Никаких условий тут быть не может, никакого постороннего кода тоже, только size_t встроенное, которое перебирается до конца и всё. А цикл с условием это do/while, его для того и придумали.
Аноним 14/04/19 Вск 10:39:57 #266 №1380648 
>>1380632
Ты к нам из растотреда?
Аноним 14/04/19 Вск 10:49:34 #267 №1380658 
>>1380648
Я к вам из ситреда в си-манямирок тебя и подобных недоучек. Потому что сидеть в сишном треде, не понимая что такое си, это не очень круто, не находишь? Я уже молчу про написание программ в таком состоянии. Не, всех этих "сделайте мне домашку" понять можно, им похуй, но я такое в расчет не беру.
Аноним 14/04/19 Вск 10:51:49 #268 №1380659 
>>1380658
Вот и не неси хуйню про циклы
Аноним 14/04/19 Вск 11:03:42 #269 №1380672 
>>1380648
>>1380659
На самом деле он прав, а ты вот не понимаешь, о чем он говорит, нормальный фор это например фор из питона типо for item in container, или тот же range-based фор из плюсов, он, конечно, работает на итераторах и внутри всё те же сишные форы, но они хотя бы выглядят как настоящий фор.
А тот фор, что мы имеем в си это буквально просто while.
Аноним 14/04/19 Вск 11:06:47 #270 №1380678 
>>1380672
"нормальный" for, про который ты говоришь, называет foreach
Аноним 14/04/19 Вск 12:11:18 #271 №1380717 
>>1380678
Да, только им должен быть тот фор, что мы имеем, а обычный фор вообще не нужен.
Аноним 14/04/19 Вск 13:06:36 #272 №1380760 
>>1380678
Нормальный for так и называется, пошел из бейсика и паскаля, в последнем даже шаг фиксированный - единица, и менять нельзя.
Проблема современных языков, их синтаксис пошел из си, который совсем не нормальный язык высокого уровня, а обертка для ассемблера, хотя на вид обманчиво похоже для удобства, но из за того что там ничего нет, на самом деле оно совсем не то как выглядит. В результате всякие клоуны привыкшие к джаваскрипту и подобному лезут в си с совершенно неправильным представлением куда они вляпались.

Вот тебе простой пример. В си числа есть, поэтому ты с ними работаешь почти как обычно, просто объявляешь переменную, присваиваешь математические выражения, всё работает, ололо простой язык.
А вот скажи, ты знаешь как устроен int? Чем отличается int от unsigned int? Я вот, честно скажу, не знаю, предполагаю там есть зарезервированные биты, которые указывают на различия, но по большому счету мне похуй, оно и так работает, ни о чем думать не надо.

А что со строками? Какие строки в ассемблере, аллё? ЦПУ работает с числами, вот и жри числа. Поэтому в си есть тип int, но типа string нет и быть не может. Ты не можешь объявить строку аналогично числу и работать с ней так же легко, ни о чем не думая, вместо этого ты, их самостоятельно программируешь, собирая по символам в соответствии с устным соглашением определенного формата, который обязан выучить, который ты, кстати, можешь нахуй послать и заебашить свои строки, например, оканчивающиеся не на 0, а на -1, или -66 потому что сатанист, и разницы никакой не будет.
Кстати, о символах. В си же есть char, да? А вот хуй! Как ты тогда объяснишь unsigned char, если у букв не может быть никаких знаков??? Понимаешь, что это маразм? А всё потому, что char это никакой не символ, а БАЙТ, восьмибитное число, такое же как int - 32-битное число. В процессоре не бывает никаких букав.
Зато в си есть, внимание, строковые константы! Строк нет, зато константы для них есть. Добро пожаловать в дурдом! Ты просто пишешь текст в кавычках и оно само напердолит памяти, поставит нолик в конце, и даже думать ни о чем не надо!? Ась? Но всё таки надо, ведь если ты не знаешь что оно там напердолело, что ты с этой НЁХ тогда делать будешь? А если строка не фиксированная?
Между прочим, такие же строковые константы есть и в ассемблере.

Ну и массивы туда же. Ололо, пишешь a[10], как же просто, вот тебе массив, как на матёше! Авотхуй. Вместо того, чтобы просто брать и пользоваться массивом, ты сидишь и изучаешь указатели, модели памяти, размеры элементов, формат хранения, иначе сосешь толстые хуи. Ну и где тут массив? Ты всё так же своими ручками пердолишь внутренние форматы всякой хуеты, будто реверсишь готовый экзешник, а не пишешь программу на языке. А потому, что это и есть ёбаный экзешник, низкоуровневый недоассемблер, а ни какой не ололо алгоритмический язык как все привыкли.
Аноним 14/04/19 Вск 13:10:52 #273 №1380764 
>>1380672
И в чем разница с++ фора от сишного?
Аноним 14/04/19 Вск 13:46:17 #274 №1380783 
Вот это я огни развел своим вопросом про массивы. Так что есть истина, аноны?
Аноним 14/04/19 Вск 14:02:22 #275 №1380796 
>>1380760
>>1380672
>настоящий фор
>это буквально просто while
Уходите
Аноним 14/04/19 Вск 14:09:57 #276 №1380801 
>>1380760
>А вот скажи, ты знаешь как устроен int? Чем отличается int от unsigned int?
АСТАНАВИСЬ111
Аноним 14/04/19 Вск 14:10:43 #277 №1380803 
>>1380783
>Так что есть истина, аноны?
Ты - обычный наследственный дебил.
Как и все здесь, тащемто.
Вот тебе истина.
Аноним 14/04/19 Вск 14:11:10 #278 №1380805 
>>1380796
>>1380801
Ебальник себе захлопни, чмо.
Аноним 14/04/19 Вск 14:16:57 #279 №1380809 
1535384750156697094.jpg
>>1380805
Ребенок, плез, уходи к своим в Питухонотрхед
Аноним 14/04/19 Вск 14:25:15 #280 №1380811 
>>1380803
Почему?
Аноним 14/04/19 Вск 14:32:59 #281 №1380815 
Пиздец тут развели. Стоило день не зайти в тред.
Аноним 14/04/19 Вск 14:39:21 #282 №1380823 
>>1380809
>эта проецирующая вебмартышка
Ясно.
>>1380811
Спроси у мамы и папы если они у тебя, конечно, есть
sage[mailto:sage] Аноним 14/04/19 Вск 15:22:35 #283 №1380847 
>>1380629
> массив, естественно, обязан проверять индекс
Какие-то фантазии и вкусовщина, не имеющие отношения ни к Си, ни к массивам в целом. Дальше не читал.
Аноним 14/04/19 Вск 15:39:50 #284 №1380853 
>>1380823
>Спроси у мамы и папы
Они мне обычно говорят что я просто дебил, без всяких приставок
Аноним 14/04/19 Вск 15:51:52 #285 №1380858 
>>1380805
Что и требовалось доказать. Ты уже давно дрищешь тут истеричными оскорблениями. При чем, хуй пойми, что именно ты пытаешься доказать. Донести, что в твоей системе взглядов отсутствие синтаксического сахарка для вызова функций без вызова функций является примитивным? Если по существу сказать нечего, пиздуй самоутверждаться в другой тред, где тебе будут больше рады.
Аноним 14/04/19 Вск 17:33:55 #286 №1380880 
>>1380853
>я просто дебил, без всяких приставок
Это у вас наследственное.
>>1380858
>эта стена БОЛИ
Ясно.
Аноним 14/04/19 Вск 17:37:01 #287 №1380881 
>>1380880
А ведь так адекватно начинал. Зачем под толстоту косить?
Аноним 14/04/19 Вск 17:41:20 #288 №1380885 
>>1380881
Затем что вы тут дебилы все и каждый поголовно, no exception.
Особенно ты.
Аноним 14/04/19 Вск 17:46:57 #289 №1380890 
Аноны, я тут упоролся и подумал... А почему не косплеить лямбды макросами?
// ну, типа...
#define mul(a,b) ((a)*(b))
#define ntimes(n,op,val,res) while(n--) res = op(res,val);
//и потом можно...
double val = 3, res = 0;
ntimes(7, mul, val, res);
// в итоге res == 3^7
Это ж гибкая такая хуйня получается, почти скриптопараша. Главное в рекурсию не пробовать, а то препроцессор подавится.
Аноним 14/04/19 Вск 17:49:46 #290 №1380894 
>>1380881
В смысле, начинал? Я после того длинного поста в тред не писал, лол. Открыл тред и проиграл с дауна, строчащего абзацы манядетектов. Воистину: "зачем учить си, я слишком туп для этого, лучше подетекчу семенов и обсужу их личностные качества". Прям как деревенские бабки на лавочке, мозгов нет, зато соседей всегда готовы обсуждать до усёру.
Аноним 14/04/19 Вск 17:51:01 #291 №1380895 
>>1380885
если не сомневаться в подозрениях, то ок...
Но если все еще предполагать, что ты нормальный чел, то неужели не видно, что с каждым словом все более похоже на толстоту становится?
Аноним 14/04/19 Вск 17:52:19 #292 №1380896 
>>1380894
А, понял. Я думал ты тот же анон, что отвечал на вопрос ньюфага про массивы и указатели. А теперь все сомнения отпали.
Аноним 14/04/19 Вск 17:55:31 #293 №1380897 
>>1380333
> Массив в Си - это нормальный массив, как и везде - отдельный тип для объекта
У тебя есть объяснение этому https://ideone.com/6T4U5I (в контексте "массивы в си это нормально")?
Аноним 14/04/19 Вск 18:24:35 #294 №1380910 
>>1380897
ну ок, контекст приводит имя массива к указателю на первый элемент, и потом задействует арифметику указателей, где в свою очередь "от перестановки слагаемых...". По идее, такую же хрень можно сделать с крестовыми векторами, если объявить что-то вроде template<T> vector<T>::iterator operator+(vector<T>& v, int i) { v.begin() + i; } и зеркальный вариант с другим порядком параметров для коммутативности, и вуаля. Есичесно, хуй знает что получится, и не буду ли я послан нахуй, рассчитывая, что i[v] развернется в *(i+v) и потом обработано моим оператором, но суть ясна. Если язык предполагает байтоебство минимальным количеством кода, без километровых кастов "отказов от претензий", то все неизбежно подвержено вот таким лаконичным фокусам.
Аноним 14/04/19 Вск 18:30:51 #295 №1380915 
1526307294756.png
>>1380890
Может я что-то упускаю, но если тебе нужен разный процессинг, то можно обычную функцию подавать как у тебя в последней строчке. На пике прототип принимающей (ntimes), которая внутри просто вызывает поданную.
Аноним 14/04/19 Вск 18:41:32 #296 №1380923 
>>1380897
Да, у меня есть объяснение. Последовательность однородных элементов есть - все, есть массив. Почему так работает [], я уже писал в >>1380333 пункты 1 и 2. Не понимаю, что тебе не нравится? Ну да, возможны вот такие выверты синтаксиса - ну так это детали реализации, не нравится - не пользуйся, пиши в правильном порядке.
Аноним 14/04/19 Вск 18:47:50 #297 №1380929 
gg
Аноним 14/04/19 Вск 18:48:05 #298 №1380930 
>>1380923
Это не массив и не детали, а банальный сахар для арифметики указателя. Ты можешь точно так же подставить [] к простому указателю и работать будет аналогично:
int i = 0xFFFF;
char ★p = &i;
p[1] = 0;
Аноним 14/04/19 Вск 18:49:51 #299 №1380934 
>>1380930
Ответил не читая? Да, это сахар. Да, [] всегда работает с указателями. Но массивы от этого никуда не делись.
Аноним 14/04/19 Вск 18:53:18 #300 №1380938 
массив это массив, дети шлюх
и есть механизм неявных преобразований связанных с типом массив, зачастую это случается при передаче фактических параметров в функции
и есть механизм низведения типов в формальных параметрах функций, связанных в том числе и с массивами
отрой k&r, уебище, там все это есть

Аноним 14/04/19 Вск 18:53:30 #301 №1380940 
>>1380915
Об этом я не забыл подумать, но тогда выходит что-то слишком адекватное, и дженериковость функции-аргумента теряется, а так хоть int, хоть double
Аноним 14/04/19 Вск 18:56:06 #302 №1380943 
>>1380934
И признаком массива является.... отличие sizeof?
Браво, кретин, но sizeof никакого отношения к массивам не имеет.
Аноним 14/04/19 Вск 18:59:37 #303 №1380950 
>>1380943
Признаком массива является то, что тип переменной a в int a[10] - массив. Так написано в стандарте. Так же как признаком инта в int b тоже является тип. Если у тебя свой собственный язык, собственная терминология, или ты к нам просто из C# протек - это твои проблемы.
Аноним 14/04/19 Вск 19:10:37 #304 №1380962 
>>1380950
А, так ты про то, что любой указатель со скобками это массив? Ну, в сишной терминологии так, но сишка не нормальный язык, как уже было сказано. Если такое говорить ньюфагу, он не поймет, т.к. в нормальных языках массивы это не указатели.
Аноним 14/04/19 Вск 19:13:40 #305 №1380965 
17193630.png
>>1380962
>в нормальных языках массивы это не указатели
в джаваскрипте указатели, в питоне указатели...
какой язык - нормальный?
Аноним 14/04/19 Вск 19:15:53 #306 №1380968 
>>1380965
>в джаваскрипте указатели, в питоне указатели
Ебать дебил.
>маняме
>...
И это все объясняет.
Аноним 14/04/19 Вск 19:18:01 #307 №1380970 
>>1380962
Упс, или не так? У тебя правда весь аргумент "массив потому что тип отличается от указателя"? Аргумент это отличие и всё? То есть "раз это НЕ сахар, значит говно"?. Ну это уже просто дно дна, убей себя прямо сейчас лучше. Как с настолько атрофированным мозгом возможно в принципе существовать, для меня загадка.

Если что, то "это не указатель" не означает, что это массив, а означает, что это лишь слегка другой указатель.
Аноним 14/04/19 Вск 19:21:05 #308 №1380973 
>>1380965
Я ни разу поддерживаю анона, у которого на почве депрессии сыпятся через слово выражения "ненормальный язык", "кретин" и тому подобное, но упоминанием скриптовых Питона и ЖС ты этого токсичного пидора только подкормил, ибо не в тему нихуя. В контексте обсуждения под указателями имеется ввиду адрес+оффсет и вот это все, а не какие-то там умные ссылки на объекты в куче.
Аноним 14/04/19 Вск 19:23:59 #309 №1380976 
>>1380629
>массив вовсе не обязан быть цельным блоком
Ты что-то путаешь. Это список не обязан быть цельным блоком. А вот массив - это вариант реализации списка тем самым цельным блоком.
Аноним 14/04/19 Вск 19:31:10 #310 №1380980 
>>1380976
Вовсе нет. Представь небайтоёбский язык без указателей. Массив может быть реализован как угодно, хоть оберткой для списка, ты попросту не узнаешь, потому что байтоёбство тебя не касается.
Аноним 14/04/19 Вск 19:35:14 #311 №1380982 
>>1380962
Чувак, от тебя дерьмом за километр несет. Да, я понимаю, что под ненормальностью языка ты имеешь ввиду чуждость низкоуровневой парадигмы для здешних ньюфагов, привыкших писать свои олимпиадные велосипеды, располагая нативными стрингами и вот этим всем... Но, несмотря на то, что знания у тебя, вроде, есть, ты в них, кажется, не слишком уверен, т.к. излагаешь позицию в максимально гнилых выражениях, чтоб собеседник подсознательно пригорел прежде, чем успеет добраться до пробелов в твоих знаниях, таким образом дав тебе основание объявить его "слив".
Аноним 14/04/19 Вск 19:37:25 #312 №1380983 
>>1380980
> Массив может быть реализован как угодно, хоть оберткой для списка
И в большинстве высокоуровневых языков это называется, сюрприз... list.
Аноним 14/04/19 Вск 19:41:19 #313 №1380985 
>>1380982
Ну и к чему ты выблевал этот поток эмоций? По делу есть что сказать? Или будем комментировать мои личностные качества как старухи на лавке обсуждают соседей? Тут си-тред, давай писать про язык, а своё гнилое социоблядское выяснение отношений оставь для дружков.
Аноним 14/04/19 Вск 19:42:02 #314 №1380987 
1554216548131491814.jpg
>>1380980
>Массив может быть реализован как угодно, хоть оберткой для списка
Но зачем бля? Как же мне бонбит от этого глупого ребенка, на Си пишутся с прототипов, чтобы было быстро и жрало мало памяти, тюнинг и оптимизашки, хочешь более обстрактного так вагон же напридумывали, ебись с Питухоном, ЖС, Растом, бля, не, сюда приперся, ирод.
Аноним 14/04/19 Вск 19:47:24 #315 №1380989 
>>1380980
Ну, в Java есть ArrayList, LinkedList, ZalupaList. Слово Array обозначает вполне определенный вариант реализации. В Python красота в квадратных скобках называется List. В Си-подобных языках, где имеют место объявления вроде int[10], можно на пальцах пересчитать, где как это реализовано. По, как ты любишь говорить, ПО-НОРМАЛЬНОМУ просто куча однотипных (или не однотипных) данных называется списком, а массив - это массив.
Аноним 14/04/19 Вск 19:49:34 #316 №1380990 
>>1380980
Ну, в Java есть ArrayList, LinkedList, ZalupaList. Слово Array обозначает вполне определенный вариант реализации. В Python красота в квадратных скобках называется List. В Си-подобных языках, где имеют место объявления вроде int[10], можно на пальцах пересчитать, где как это реализовано, и грамотно ли в том или ином случае называть это по-привычке массивом. Но, как ты любишь говорить, ПО-НОРМАЛЬНОМУ просто куча однотипных (или не однотипных) данных, которая "похуй как реализована", везде и всегда называлась списком, а массив - это массив.
Аноним 14/04/19 Вск 19:50:38 #317 №1380992 
>>1380985
Твоя манера общения имеет самое непосредственное отношение к конструктивности дискуссии.
Аноним 14/04/19 Вск 19:52:21 #318 №1380993 
>>1380987
>Но зачем бля?
Для понимания, что в си нет массивов, а лишь сахар арифметики указателей. Ты-то умный и уже не нуждаешься в пояснениях, а приходит ньюфаг и ты ему: "массив", а он думает совсем о другом, потому что массив это совсем не то, что в сишкомирке называют массивом. Ты понимаешь, что приходит ньюфаг и начинает работать с массивами, не зная об указателях и даже не зная что про них нужно знать? И не только об указателях, а и об памяти. Элементарная задача возврата массива из функции уже требует понимания указателей и разных моделей памяти, стека и кучи. Где тут массив, маня? Ты понимаешь , что несешь бред напрямую из своего манямирка? Другие люди не умеют читать мысли, нужно объяснять правильно, а не вешать лапшу на уши, предоставляя им самим набивать шишки. Может ты и набивал, но зачем повторять бессмысленное говно? Ты пидараха из этих "я страдал, и пусть другие страдают" или что?
Аноним 14/04/19 Вск 19:56:08 #319 №1380996 
>>1380993
>а приходит ньюфаг
Куда бля приходит? Зачем? Верстают там -> на ЖС, основы кодинга нужно на других языках проходить, Си и Асм это для тех кто знает что делать и зачем он это делает. Если мне нужна неебическая скорость и я буду разворачивать цикл, ты скажешь нахуй вот дублировать, зачем? Ты не в ту сторону воюешь короче.
Аноним 14/04/19 Вск 19:59:56 #320 №1380998 
>>1380983
В твоем маня мирке звучит логично. Но если сослаться на такой, должно быть, сомнительный для тебя источник, как ДЕЙСТВИТЕЛЬНОСТЬ, то логичная форма тонет под бредовым содержанием. Массив, блядь, обертка для списка. Охуеть. Каждый день такое вижу. У тебя, видать, каждый первый сосед хуй на лоб пришил и ходит так, а хули, в абстрактных понятиях, далеких от байтоебской медицины, похуй, как реализовано. Не мудрено в такой среде вырасти альтернативно сформированному анону, заебавшему всех адекватов в Си-треде.
Аноним 14/04/19 Вск 20:01:59 #321 №1381000 
>>1380993
>Для понимания, что в си нет массивов
в стандарте, блядь, языка прописан такой тип данных как "массив", включая и кучу срани типа правил его объявления и определения, объявлений неполного типа, правил неявных преобразований, так же правил низведения массивов
упоротый ты долбоеб


Аноним 14/04/19 Вск 20:02:32 #322 №1381001 
>>1380996
>Куда бля приходит?
"Поздравляю! У вас родился мальчик, си-программист!"
:3
К сожалению сишниками не рождаются и асм не преподают в обязательном порядке до си. Добро пожаловать в реальный мир, трезвей от своего манямирка. Приходят, сюда, в тред, люди, желающие, изучить, си, что, не ясно, у, меня, уже, безысходность, от, тупости, здешних, постеров.
Аноним 14/04/19 Вск 20:02:46 #323 №1381002 
>>1380993
Ну это понятно, массив не является полноценным объектом, с copy/move семантикой, т.к. подобные операции по технической сложности достойны отдельной функции, чтоб не дублировать много маш.кода. Копировать можно только структуры без ссылок на дополнительно выделенную память.
Аноним 14/04/19 Вск 20:04:23 #324 №1381004 
>>1381000
имелось ввиду, что ими нельзя жонглировать так же просто, как простыми переменными, в отличие от более высокоуровневых языков. Вот >>1381002
Аноним 14/04/19 Вск 20:05:08 #325 №1381006 
на, жри, мразь

Any number of derived types can be constructed from the object, function, and
incomplete types, as follows:
— An array type describes a contiguously allocated nonempty set of objects with a
particular member object type, called the element type.36) Array types are
characterized by their element type and by the number of elements in the array. An
array type is said to be derived from its element type, and if its element type is T , the
array type is sometimes called ‘‘array of T ’’. The construction of an array type from
an element type is called ‘‘array type derivation’’.
Аноним 14/04/19 Вск 20:05:30 #326 №1381007 
>>1381004
о, пошли маневры
Аноним 14/04/19 Вск 20:07:13 #327 №1381009 
Почему объявление int t; в виде int (t); корректно?
Зачем?
Аноним 14/04/19 Вск 20:07:19 #328 №1381010 
>>1381007
я не он
Аноним 14/04/19 Вск 20:10:33 #329 №1381015 
>>1381006
>с++ standard
>>1380980
>>1380993
>>1381001
Аноним 14/04/19 Вск 20:11:54 #330 №1381017 
>>1381009
почему бы и нет? ты же вовсю используешь скобочки при создании составных объявлений/определений
Аноним 14/04/19 Вск 20:12:46 #331 №1381019 
>>1381015
n1256 c draft
Аноним 14/04/19 Вск 20:13:09 #332 №1381021 
>>1381007
ты тоже мудак. Приебался к словам, уходя от первоначального тезиса. У ньюфага в голове не возникает вопрос "есть ли в Си массивы, про которые я читал в стандарте какого-то другого байтоебского языка вместо художки на досуге, попивая чай". Анону интересно, есть ли там такие волшебные списки, которые в языкнэйм так понравились ему возможностью взять и одних махом вбросить в функцию всю табличную инфу про себя, мамину подругу и дедушку Сталина, чтоб с ней можно было дрочиться внутри как угодно, не поломав ничего снаружи.
Аноним 14/04/19 Вск 20:15:10 #333 №1381024 
>>1381001
>Приходят, сюда, в тред, люди, желающие, изучить, си
Так, ты начинаешь изучать Си, тебе все сложна и нипанятна и нужно фсе переделать?
Аноним 14/04/19 Вск 20:16:15 #334 №1381028 
>>1381017
Не понял. Объявление функции - это одно, а int (t) - это что за лямбда?
Или что ты имеешь в виду?
Аноним 14/04/19 Вск 20:16:49 #335 №1381029 
>>1381006
кажется, даже в словаре человеческого английского языка в определении array присутствует слово contiguous
Аноним 14/04/19 Вск 20:20:11 #336 №1381033 
>>1381028
Это то же, что и просто int t, только со скобочками. Ничем не отличается, в таком виде никем не используется, нужно для более консистентного синтаксиса в сложных случаях.
Аноним 14/04/19 Вск 20:23:29 #337 №1381034 
zlkrektetb8rw7nd6r0eppkp38.jpeg
Господа инженеры, я пошел пить пиво и протрезвлею вероятно послезавтра, но надеюсь вы прогните этого ребенка-троленка, ну или хотя бы абасыте.
Аноним 14/04/19 Вск 20:36:50 #338 №1381045 
>>1381033
Да я понимаю, что это не лямбда на самом деле. Я говорю о том, на что это формально похоже. Сам говорил про
> скобочки при создании составных объявлений/определений
Каких например? Какие сложные случаи? Функции традиционно мелкие, объявления переменных в начале.
> никем не используется
Да лучше бы я никогда этого не видел, но один раз встретил и теперь не сплю. Случай был тупой, канеш, ничего такого.
Аноним 14/04/19 Вск 20:37:58 #339 №1381048 
>>1381024
Как бы сказать. Программирование в главном широком смысле означает алгоритмирование. Соответственно, язык программирование является алгоритмическим языком, описывающим естественным образом алгоритм. Это справедливо для большинства языков и изучение программирование как такового начинается с алгоритмики. Это состояние в башке большинства вкатившихся в программирование.

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

И всё было бы хорошо, но проблема в том, что си имеет тот же синтаксис как и алгоритмические языки, знания о которых имеются по умолчанию, и использует те же термины "массив", "строка", как и алгоритмические языки. НО на самом деле это всё совсем не то и работает не так, потому что язык машинный, железячный, тут софтово не налеплено маня-парадигм и прочих объектов, всё близко к железу. И в такой нишевой язык не идут младенцы с полным отсутствием знаний, которые изучают всё с нуля чисто по сишке, а наоборот, люди обычно уже знакомы с программированием, и когда приходят в сишку, видят тот же синтаксис и те же термины, естественно начинают писать как они знают, А ЭТО НЕ РАБОТАЕТ. Они ебут мозги, хотя эти сишкопидарасы тупорылые могли бы сразу сказать: "забудьте, нет у нас никаких массивов, учите указатели, ебите память".


Аноним 14/04/19 Вск 20:43:08 #340 №1381052 
>>1381045
int (a); // int.
int (∗b); // Указатель на int.
int ∗(c)(void); // Функция, возвращающая указатель на int.
int (∗t)(void); // Указатель на функцию, возвращающую int.

Если в первых трех примерах скобочки как бы и не нужны, ты можешь их убрать, то в четвертом они меняют суть объявления, и без них ты указатель на функцию не объявишь (ну разве что с тайпдефом). Их притащили ради изменения приоритета вот этой звездочки, и они заодно протекают в три предыдущих примера, и много куда еще.
Аноним 14/04/19 Вск 20:44:36 #341 №1381053 
>>1381052
Воо, спасибки, дубоват стал...
Аноним 14/04/19 Вск 20:44:45 #342 №1381054 
>>1381048
>сишкопидарасы тупорылые могли бы сразу сказать
Зачем ты нас оскорбляешь? С тобой даже диалог пытались наладить, думаю аноны больше так не будут делать.
Аноним 14/04/19 Вск 20:59:38 #343 №1381065 
>>1381054
Любая характеристика, хоть положительная, хоть отрицательная, определяется характеризуемым объектом. Говоря по-простому, что заслужил, то и получил. Хорошее отношение это не привилегия. Хочешь хорошего отношения - совершенствуй себя и заслужи его, а пока ведешь себя как долбоеб, долбоебом и будешь назван. В этом преимущество анонимных борд, здоровое свободное общение без навязанной цензуры лицемерной вежливости как ирл.
Аноним 14/04/19 Вск 21:04:38 #344 №1381069 
>>1381054
Этот парень принципиально не сбавляет оборотов, ведь сейчас шаг навстречу за "сишкопидарасами", посмевшими неверно истолковать его слова сразу. Проблема лишь в том, что оскорбления пошли прежде, чем вообще кто-либо мог успеть прислушаться к нашему достопочтенному разрушителю парадигм.
Аноним 14/04/19 Вск 21:08:50 #345 №1381075 
>>1381065
Вот это удваиваю. Но ты, пожалуй, рановато вышел в боевой режим со словами "тупица". Надо было еще постик-другой потерпеть, глядишь и не довелось бы.
Аноним 14/04/19 Вск 21:15:42 #346 №1381079 
>>1381065
>Любая характеристика, хоть положительная, хоть отрицательная, определяется характеризуемым объектом.
Умопомрачительный долбоебизм.
Иди покушай говна - кому-то это нравится.
мимо
Аноним 14/04/19 Вск 21:15:51 #347 №1381080 
>>1381048
Сам сишкопидарас и по себе знаю, как иной раз вместо нужных для вката слов об неиллюзорных отличиях, не премину выговориться в защиту секты "да все тут нормально с массивами, все тут есть" что для ньюфага отнюдь не утешительно. Хуёво так делать...
Аноним 14/04/19 Вск 21:17:34 #348 №1381081 
>>1381075
Человеку свойственно ошибаться. Ты у мамы идеален? Видишь ошибку у ближнего и отвергаешь его полностью? Ну и дебил, и это не оскорбление. Потому что по сути, такое поведение - суждение не по смыслу сказанного, а по форме. Не читая книгу, сделал вывод по обложке. Это поведение дебилов, которым свойственно нежелание читать и думать, вот и скатываются на такие легкие суррогаты вместо настоящих выводов.
Аноним 14/04/19 Вск 21:20:10 #349 №1381083 
Вот уж не понимаю, в чем проблема понять, как работают в Си массивы. Я тупенький, других языков не осилил, но и то быстро привык и пишу что мне надо. Хотя писать парсер текстовых структур на Си - изврат, да
Аноним 14/04/19 Вск 21:26:27 #350 №1381086 
>>1381083
Когда первым языком учишь, мозг без ложной самоуверенности включается на полную, и происходит чудо, суммация усилий приводит к результату. А когда прихожане из скриптопараши небрежно листают "этого вашего" K&R, надеясь со своей гавнокодерской колокольни схватить все на лету, то велика вероятность, что наш глубокоуважаемый продвинутый молодой вайтишник вынесет вердикт "это какая-то старперская головоломка" и уйдет сосать хуй смотреть ютуб с печеньками.
Аноним 14/04/19 Вск 21:28:28 #351 №1381088 
>>1381086
Ты сейчас описал, как я другие языки пытался освоить. Руки сами пишут как на Си.
Аноним 14/04/19 Вск 21:35:10 #352 №1381091 
>>1381083
>как работают в Си массивы
берешь драфт последнего стандарта си
поиском вбиваешь array и читаешь че там и как
описание формальное, но одновременно со множеством примеров и объяснений
Аноним 14/04/19 Вск 21:37:29 #353 №1381140 
>>1381091
алсо, если тупенький, то следует помедитировать над приложением A в в К&R
Аноним 14/04/19 Вск 21:37:30 #354 №1381142 
>>1381088
Ну, твой вариант хотя бы работает, а не приводит в тред с проблемой "у меня массив сломался". Дело за малым: не полениться почитать, в какие плюшки умеет твой языкнэйм, и пользоваться в свое удовольствие. А вот обратное, то есть думать, что Си - это такой ретро Питон, который за чуть большее количестве буков наградит меня шармом 80-х и пропуском в ламповые тредики, как своего... непростительно
Аноним 14/04/19 Вск 21:38:59 #355 №1381192 
Что этот закомплексованный уебан вообще несёт? Какие нахуй массивы, правила дискуссий на борде, обертки для структур ВООБЩЕ АХУЕТЬ.
Уебану что-то пришло в голову на почве отека мозга от бензилового спирта из ларька, и он пол треда обосрал, а вы ещё уебаны кормите его? Пидорасы из школы 21 захватили нахуй весь тред, умрите нахуй.
Аноним 14/04/19 Вск 21:40:18 #356 №1381239 
>>1381081
>>1381065
>>1381075
>>1381086
>>1381088
>>1381091
До чего же кромешные дебилы и кукарекающие чмыри - это просто очаровательно.
Все же есть польза от 2ch.mail.ru - нигде больше такого скопления неполноценных дегенератов не бывает.
Аноним 14/04/19 Вск 21:41:16 #357 №1381276 
>>1381192
Ты тоже дебил, кстати.
Такой же как и все прочие.
Аноним 14/04/19 Вск 21:45:36 #358 №1381408 
>>1381192
>Какие нахуй массивы
какие прописаны в стандарте, уебище
Аноним 14/04/19 Вск 21:49:11 #359 №1381465 
>>1381239
Ну вот, уже кто-то, кроме меня, назвал меня дегенератом. Стало быть, неспроста тревожился. Пойду убьюсь, чтоли...
Аноним 14/04/19 Вск 22:35:19 #360 №1381523 
Для чего сишка вообще применяется в 2019 году?
Аноним 14/04/19 Вск 22:51:49 #361 №1381536 
>>1381523
Ембед, серверы, базы данных, графон, геймдев, шейдеры, системные тулзы для ленупса, работа с волнами (в основном на BM)
Аноним 14/04/19 Вск 22:57:07 #362 №1381538 
>>1381523
JVM, многие скрипты, большинство БД сделаны на С, соответственно, требуют его для допила/мейнтейна
Аноним 15/04/19 Пнд 00:00:36 #363 №1381564 
>>1381523
Для обсуждения в Си-треде
Аноним 15/04/19 Пнд 00:07:31 #364 №1381572 
>>1381523
>Для чего сишка вообще применяется в 2019 году?
чтобы лабы студентам на "введение в программирование" на первом курсе было на чем делать! че ты как маленький
Аноним 15/04/19 Пнд 00:08:54 #365 №1381574 
>>1381538
>JVM
там сделан на крестах маленький рантайм, все остальное сделано на самой явке, включая и сам компилер на явке бутстрапнут
Аноним 15/04/19 Пнд 00:15:07 #366 №1381580 
>>1381574
На языке программирования вообще мало что написано, программы там какие-то, а все остальное, "Война и Мир" там и прочее... ну ты понял
Аноним 15/04/19 Пнд 00:22:06 #367 №1381582 
>>1381574
блин, я какое-то хуевое сравнение привел. Короче, суть в том, что без сишки ничего бы не было, так он востребован и высокооплачиваем. Из нас мало кто устроится, но каждый из нас КОГДА-ТО станет круче всех Страуструпов и Кармаков, и вот тогда держись мой Мухосранск, все выкуплю. Эх... <звуки заводки будильника, чтоб не проспать, а то кассиров не щадят>
Аноним 15/04/19 Пнд 00:41:40 #368 №1381589 
>>1381582
Это довольно голословное заявление. Значимость сишки не определяется самой сишкой. С таким же успехом можно сказать, что без бишки ничего бы не было.
Аноним 15/04/19 Пнд 03:05:32 #369 №1381609 
>>1380962
"Массив это указатели" это только полуправда. На самом деле у них много отличий (но также и сходств). Завали ебало, если не знаешь нихуя.
Аноним 15/04/19 Пнд 03:08:50 #370 №1381611 
Ебанутые, нахуя вы стены текста пишете, ни одного не прочитал до конца, смысла ноль в них
Аноним 15/04/19 Пнд 04:12:58 #371 №1381624 
>>1381611
>смысла ноль в них
как и в твоем рождении, сладенький
Аноним 15/04/19 Пнд 07:22:12 #372 №1381648 
Мдя, тред жалок как всегда, полон кукареков, только полтора адеквата.

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

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

Теперь в небуквальном смысле. Си абсолютно необходим потому что С++ актуален. Не спеши рваться, дебил, я еще не закончил. Дело в том, что С++ - язык мультипарадигменный. Посмотри на название: "С++", ты видишь две части - си и плюсики. Иными словами, С++ это и есть Си буквально, но не только, а есть еще плюсы. Таким образом, на С++ можно писать "как на си", можно "как на крестах", а можно с разной степенью смешения этих подходов. По этой причине созданы два треда, данный и крестотред, и они оба актуальны и необходимы.
Попытки же воевать, противопоставляя эти области, это простое сектобыдло, гопота с улицы, которая всё делит на "поцонов с нашего раёна" и "казлов с других раёнов". Биопроблемы тупых биопроблемников, к програмированию не относится.

>>1380987
Массив одним куском плох для оптимизации из за фрагментации памяти. Лучше выделять произвольными кусками с возможностью фрагментации. Так работает файловая система на диске, вроде должно быть понятно по какой причине. Подобным образом работает любая надежная система. Почему сишкодебилы настолько зашоренные дауны, что не понимают очевидного, а только повторяют за бумажкой как безмозглые попугаи? Вот типичный пример такого идиотины >>1381192 , увидел отличие от заученных определений и мирок с треском порвался, вызывая защитную реакцию: "врётиврётиврёти".
Аноним 15/04/19 Пнд 07:51:59 #373 №1381653 
>>1381648
>С++ это и есть Си буквально
Не совсем. Си не является подмножеством крестов.
Вот на такое крестовый компилятор будет ругаться, и сишный нет:
char ch = 7;
void звезда pv = &ch;
int звезда pi = pv;
мимокрестовик.
Аноним 15/04/19 Пнд 07:58:04 #374 №1381654 
Т
Аноним 15/04/19 Пнд 08:46:13 #375 №1381663 
>>1381653
Ну да, кресты построже с типами, больше нужно приводить явно, но это косметика.
И как было сказано, чисто сишный компилятор уже неактуален. Кто работает в узких сферах его применения, сам разберется, а большинство людей сидят на крестовом компиляторе. Повторюсь, данный тред нужен в первую очередь для изучающих сишную часть крестов, а не чистую сишку, которая неактуальна.
Аноним 15/04/19 Пнд 10:42:33 #376 №1381679 
>>1381624
Странно что ты не высрал кучу текста.
Аноним 15/04/19 Пнд 11:16:42 #377 №1381691 
>>1381648
>Массив одним куском плох для оптимизации из за фрагментации памяти
шо? любая cpu оптимизация щас в итоге заканчивается тем что структура данных проектирутся в виде непрерывного куска памяти и чтобы еще обход последовательный был..
чтобы кеши гретые были, чтобы конвеер не слетал..
эдакий шаг назад, намеренный примитивизм..
структуры разбиваются на массивы в фортран стиле, алгоритм переделывается так чтобы последовательный обход данных был, один за другим..
Аноним 15/04/19 Пнд 12:13:45 #378 №1381714 
>>1381648
Ещё раз ты, глупый неосилятор, заквотишь мой пост, и я уничтожу твое самомнение, заквотив твой в такой же стене текста. Съезди отсюда нахуй детей в питон треде впечатять.
Аноним 15/04/19 Пнд 12:56:36 #379 №1381728 
>>1381648
> фрагментации памяти
2019 год, 64-битные процессоры повсюду, терабайты адресного пространства...
> фрагментации памяти
> фрагментации
> памяти
Как же я проиграл!
Аноним 15/04/19 Пнд 13:07:22 #380 №1381733 
>>1381728
>64-битные процессоры повсюду, терабайты адресного пространства.
Нет бога, кроме Интел, и Майкрософт - пророк его!
Аноним 15/04/19 Пнд 13:10:42 #381 №1381735 
>>1381733
Дорогой, у тебя в смартфоне стоит 64-битный же арм. Проснись, на дворе 2019.
Аноним 15/04/19 Пнд 13:15:53 #382 №1381738 
>>1381735
Няш, не все ограничивается десктопом и смартфоном.
Аноним 15/04/19 Пнд 14:33:11 #383 №1381774 
>>1381738
Ало, долбоеб отбитый, давно из школы 21 своей выходил? Сейчас даже на чайниках эмулируют х86, блять
Аноним 15/04/19 Пнд 14:45:46 #384 №1381779 
>>1381774
Быдлоадмину жопку продолжает рвать, лол
Аноним 15/04/19 Пнд 15:18:33 #385 №1381797 
>>1381691
Утерянное знание, хранящееся только на скрижалях писателей BLAS-ов, которое они передают из поколения в поколение.
Аноним 15/04/19 Пнд 15:58:01 #386 №1381816 
Добрый день, Котаны! Нужен ваш совет..

Пед-история:
Работаю на С уже 2 года (область криптографии). В основном это всякие ГОСТЫ, изредка AES и тд. В си-шке далек от идеала, но стараюсь писать аккуратный код.
Получил сопутствующий опыт во всяких утилитах (утечки памяти, чтение дампов, мейки) и тд. (по работе пришлось немного освоить Java/objective-c)
После работы учу : Проф. разработка под Unix (C. Раго) и Совершенный код (Макконел)

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

Аноним 15/04/19 Пнд 16:12:15 #387 №1381822 
>>1381816
> что необходимо доучить
Очевидный вариант - дрочить ядро линукса. Ну и на embedded понемногу поглядывать.
Аноним 15/04/19 Пнд 16:15:06 #388 №1381824 
>>1381816
>Потому вопрос, какие пути развития подскажете
Я бы на Java бы перекотился, а Си для вставок и библиотек оставил
Аноним 15/04/19 Пнд 17:14:15 #389 №1381846 
>>1381589
Ну, не Сишка, так что-то другое. Имеется ввиду значимость байтоебского языка. А бишку с таким же успехом топили бы скриптомакаки, так что предмет споров аналогичен.
Аноним 15/04/19 Пнд 17:18:21 #390 №1381851 
>>1381846
важность быстрофикс
Аноним 15/04/19 Пнд 21:13:08 #391 №1381981 
>>1381846
Лол! Ты думаешь байты ебать в си начали или что? Си стал крут из-за ахуенной системы типов и из-за развития ООП и программ пишущихся в память, но никак не из-за байтоебства, которое в си весьма посредственное и упраздненное генерацией асембли кода
Аноним 15/04/19 Пнд 21:22:31 #392 №1381991 
>>1381981
Именно необходимость накатывать asm при малейшей потребности в байтоебстве была той болью, от которой спасло появление Си. ящитаю
Аноним 15/04/19 Пнд 21:25:10 #393 №1381993 
>>1381981
>>1381991
Я не пытаюсь что-то доказать. Просто уточняю, что имел ввиду. А уж что я имел ввиду, об этом я не сильно запаривался, ибо основная цель была поныть, что моя мечта стать Кармаком - лишь мечта...
Аноним 15/04/19 Пнд 21:37:20 #394 №1382003 
>>1381991
Проблема только в том, что си это слишком высокоуровневый язык, чтобы в него перенести байтоебские функции, потому-то байты в нем никто давно уже и не ебет, да и современные компиляторы асм уже игнорируют и лексику преобразуют напрямую в машинный.
Аноним 15/04/19 Пнд 22:09:38 #395 №1382019 
>>1382003
> лексику преобразуют напрямую в машинный
Что, прямо совсем напрямую? А оптимизируют они в астрале что ли?
Аноним 15/04/19 Пнд 23:52:44 #396 №1382055 
>>1382003
А как же битовые поля, а как же постоянные шифты с масками, все пакед структуры для работы с железом, или это уже не байтоёбство?
Аноним 16/04/19 Втр 06:49:21 #397 №1382132 
>>1382003
>си это слишком высокоуровневый язык, чтобы в него перенести байтоебские функции
А что такое указатели и sizeof, если не байты? И где тут высокоуровневость?
Аноним 16/04/19 Втр 13:18:49 #398 №1382227 
>>1382132
>указатели
В таком случае когда ты Эксель на уроке информатики запускаешь ты тоже байтоебишь, долбоеб
>sizeof
>байты
)))) и этот сброд заходит в си тред каждый день рассказывать свое мнение об индустрии
Дальше не читал. Съеби.
Аноним 16/04/19 Втр 13:21:21 #399 №1382229 
Хотя что я ожидал от безработного уебана вкатывальщика, постящего в 6:49, можно было сразу не читать. Пробабли в школу проснулся уебок, и сразу сосачик чекать
Аноним 16/04/19 Втр 14:30:36 #400 №1382271 
>>1382003
> и современные компиляторы асм уже игнорируют и лексику преобразуют напрямую в машинный.
насколько я понимаю, таки gcc на одной из стадий компиляции переводит в ассемблерные код целевой машины, а потом уже конкретный ассемблер транслирует эти коды в машкод
а clang вроде как работает в двух режимах - либо может из своего внутреннего представления напрямую в машкоды перегнать, либо сначала в ассемблер целевой машины
само собой, оба компилятора могут генерировать/оставлять ассемблерный код если пользователь указал соотв опцию, чтобы этот код можно было посмотреть
в отладчиках просмотр ассемблерного кода - одна из основных возможностей
как подступает комбилер майкрософт - напрямую генерит или через ассемблер, я совсем не знаю
поправте меня, если кто больше знает
вообще, ходит такая полушутка - типа что хороший программист может назвать 5 стадий компиляции сишного/крестового кода, а очень хороший - все 11
Аноним 16/04/19 Втр 15:40:30 #401 №1382297 
>>1382271
> очень хороший - все 11
Есть еще плагины с кастомными проходами, которых может быть сколько угодно.

> как подступает комбилер майкрософт
Подходы к компиляции везде одинаковые. Там бэкенд в виде дллки в отличие от отдельных программ у гцц, поэтому оно слегка под капотом, но насколько я знаю, C2 работает только с промежуточным представлением, а асм генерит, только если ты для себя попросишь листинг.
Аноним 16/04/19 Втр 16:34:04 #402 №1382326 
>>1382271
по-моему все компиляторы нынче работают в варианте
1. Фронтенд генерирует IR
2. Бэкенд генерирует из IR обьектиники

"Ассемблера" там нет нигде,
Аноним 16/04/19 Втр 16:38:53 #403 №1382328 
>>1382326
я те говорю: что для gcc вроде это не так до сих пор
они там таки генерят сначала в асм целевой платформы, а потом этот асм уже транлируется конкретным ассемблером в объектник целевой платформы
НО не уверен в этом на 100%
Аноним 16/04/19 Втр 17:14:40 #404 №1382340 
>>1382227
Шавка тявкает, караван идет.
Аноним 16/04/19 Втр 17:42:22 #405 №1382347 
>>1382326
> "Ассемблера" там нет нигде
gcc -save-temps file.c
ls file.*
sage[mailto:sage] Аноним 16/04/19 Втр 17:49:00 #406 №1382350 
>>1382347
Но я, наверное, должен дополнить, что с -flto все интереснее. И тогда там еще .s от LTO будет с рандомным именем.
Аноним 16/04/19 Втр 18:04:55 #407 №1382355 
>>1382340
Пойди документацию почитай, объебос диванный. Коли есть время ночью хуйню писать, найдешь время поучиться чему-нибудь.
Аноним 16/04/19 Втр 19:21:31 #408 №1382383 
Помоги. Нужно найти(среди отрицательных)минимальный элемент динамического массива. Вывести его значение и индекс.

Но у меня какоенто, трабл. Все запускается, но не работает правильно. Вась глянь пж - https://pastebin.com/QKfnrr2x

Аноним 16/04/19 Втр 19:26:42 #409 №1382390 
>>1382383
Подумай, что делает твой код, попробуй сам поработать компьютером и выполнить свой код допустим для массива из 5 элементов, сразу поймёшь, где проблема.
sage[mailto:sage] Аноним 16/04/19 Втр 19:43:32 #410 №1382403 
>>1382383
>>1382390
> попробуй сам поработать компьютером и выполнить свой код
Это никак не поможет ему заметить, что он (кроме очевидной ошибки) забыл инициализировать min.
Аноним 16/04/19 Втр 19:48:46 #411 №1382406 
Image 451.png
В чем юмор?
Аноним 16/04/19 Втр 19:49:45 #412 №1382409 
>>1382406
1[foo]
Аноним 16/04/19 Втр 20:09:34 #413 №1382422 
>>1382403
Ну в принципе да, все остальные ошибки в логике работы.
А ЧТО ЕМЛИ ОН СПЕЦИАЛЬНО НЕ ИНИЦИАЛИЗИРОВАЛ МИН, ТОГДА ЕСЛИ СОБИРАТЬ КОД НА MSVC МИН БУДЕТ РАВЕН 0xCCCCCCCC это как раз достаточно большое по модулю отрицательное число, ммммм обожаю теории
Аноним 16/04/19 Втр 21:01:59 #414 №1382448 
>>1382422
Тупо АРГ чувак, реально. Твой номер готов - bip-bup-bap 2220000011 00220 000()l1za/
Аноним 17/04/19 Срд 12:09:52 #415 №1382731 
Можно ли как-то получить причину почему fopen возвращает NULL?
Пытаюсь создать файл на мак оси, пишут абсолютный путь, пытаюсь открыть как wb но всегда возвращает null. Вангую что проблемы с какими-то пермишенами, но не знаю что конкретно.
Аноним 17/04/19 Срд 13:00:48 #416 №1382751 
>>1382731
errno
Аноним 17/04/19 Срд 13:05:42 #417 №1382753 
>>1382751
Спасибо, я только что-то не нахожу нужно ли ее обнулять перед каждым вызовом сомнительной функции? Т.е. не будет такого что если нет ошибки то функция просто ничего не присваивает в переменную, и если была какая-то ошибка до вызова, то я могут спутать ее?
Аноним 17/04/19 Срд 13:11:20 #418 №1382757 
>>1382753
Ты же после вызова проверяешь на NULL. Думаю нет смысла еще и errno обнулять.
Аноним 17/04/19 Срд 13:32:36 #419 №1382761 
Screenshot2019-04-17-17-29-34-293com.n0n3m4.droidc.png
Screenshot2019-04-17-17-29-41-355com.n0n3m4.droidc.png
Screenshot2019-04-17-17-29-09-098com.n0n3m4.droidc.png
Screenshot2019-04-17-17-29-15-901com.n0n3m4.droidc.png
Опять я выхожу на связь. Гляньте на 2 скрина с закомменченным printf(" (%d) ", count); и с ним. Какого хуя происходит? Почему счёт date2 внезапно прекращается, но count при этом продолжает считать?
Аноним 17/04/19 Срд 13:33:55 #420 №1382762 
К тому же count каким-то хуем считает до 13, а потом идёт 9. Как так?
Аноним 17/04/19 Срд 13:49:13 #421 №1382763 
>>1382762
Сложно сказать, кидай код.
Аноним 17/04/19 Срд 13:50:50 #422 №1382764 
>>1382751
>>1382731
Лучше сразу perror(), чтобы никуда не ползать и не запоминать магические числа.

>>1382762
> Какого хуя происходит?
Дай угадаю. Ты опять где-то повреждаешь стек, но из-за того уродского стиля, которым ты пишешь, а еще из-за неполных исходников нихрена не понятно, где именно.

Если бы у тебя был нормальный комп, я бы послал тебя собирать с -fsanitize=address, это решило бы проблему без кода и использования мозга секунд за пять, но ты не ищешь легких путей.
Аноним 17/04/19 Срд 13:59:35 #423 №1382768 
>>1382764
>-fsanitize=address
Загуглил, сохранил. Спасибо.
мимопроходил
Аноним 17/04/19 Срд 14:08:20 #424 №1382772 
Screenshot2019-04-17-18-05-48-085com.n0n3m4.droidc.png
>>1382763
>>1382764
Исправил таким способов, ограничив условие только цифрами 0-9. Но я так и не понял хули s увеличивался, ведь условие не выполнялось нихуя и так.
Аноним 17/04/19 Срд 14:14:17 #425 №1382778 
Screenshot-2019-4-17 Программирование - C Programming Lang[...].png
>>1382772
Надеюсь это шутка? Гугли разницу между && и &
Аноним 17/04/19 Срд 14:18:17 #426 №1382781 
>>1382778
Хотя в твоем случае, скорее всего ничего особо страшного. Но считается плохим стилем.
Аноним 17/04/19 Срд 14:21:31 #427 №1382785 
>>1382778
Ты охуенен. А мы за весь тред так и не заметили.
Аноним 17/04/19 Срд 14:23:19 #428 №1382789 
При выделении динамической памяти для двумерного массива используется указатель на указатель в виде указателя на массив указателей, объявление в виде (звезда a)[] является указателем на обычный массив, какое тогда объявление будет эквивалентным указателю на указатель в случае указателя на массив ебучих указателей?
Аноним 17/04/19 Срд 14:38:07 #429 №1382799 
>>1382789
У меня syntax error от твоего объяснения.
> указателя на массив ебучих указателей
int ∗(∗a)[]

> для двумерного массива используется указатель на указатель в виде указателя на массив указателей
Нет, простого int ∗∗a более чем достаточно. По a[m] у тебя указатель на строку, по a[m][n] элемент.
Аноним 17/04/19 Срд 15:16:25 #430 №1382820 
>>1382789
речь идет о "настоящем" двухмерном массиве, те массиве массивов?
тогда ты не сможешь целиком расположить их в динамической памяти, размерность первого массива должна быть определена, и он, как следствие, будет размещен на стеке либо глобально
в k&r, кстати, этот вопрос обсуждается
Аноним 17/04/19 Срд 15:46:41 #431 №1382866 
>>1382768
Эх, не всем поможет. MinGW не поддерживает.
Аноним 17/04/19 Срд 16:28:40 #432 №1382917 
>>1382768
Объясните что это, я погуглил но так и не понял.
Аноним 17/04/19 Срд 16:35:09 #433 №1382924 
>>1382917
Писю вставил, закончил, а девочка в душ идёт мыться
Аноним 17/04/19 Срд 16:46:19 #434 №1382935 
>>1382924
>девочка
Ну ты и отсталый :3
Аноним 17/04/19 Срд 16:52:43 #435 №1382940 
>>1382935
но мы же не в js-треде
Аноним 17/04/19 Срд 16:53:51 #436 №1382942 
>>1382917
leaksanitizer
Аноним 17/04/19 Срд 17:21:21 #437 №1382959 
>>1382866
Да, надо линукс. Или можешь сделать полезное миру и портировать уже нормально наконец.

>>1382917
С помощью рантаймовых проверок доступа по указателю, особой области со статусом каждого ебаного байта памяти, особого расположения блоков памяти и переменных в стеке и особых реализаций функций, манипулирующих с памятью, код, скомпилированный с этим флагом детектит большинство попыток доступа за пределы массива и прочие релейтед проблемы (типа use-after-free). При этом скорость работы гораздо выше, чем у других подобных решений типа мемчеков в валгриндах, а количество false negative меньше (но они есть, и никуда от них полностью не денешься).

>>1382942
Не только leak, и leak можно самому детектить всегда, обернув malloc()/free() и поддерживая какую-нибудь структурку со списком используемых блоков. А вот для других вещей уже нужна поддержка компилятором.
Аноним 17/04/19 Срд 19:18:11 #438 №1383013 
Глупый вопрос, но зачем нужны указатели на структуры?
Аноним 17/04/19 Срд 19:31:48 #439 №1383023 
>>1383013
Передавать их в функции?
Аноним 17/04/19 Срд 19:35:18 #440 №1383025 
>>1383013
Городить любые структуры сложнее массива. Например... связный список?
Аноним 17/04/19 Срд 19:38:40 #441 №1383028 
Аноны, но уж вы-то должны знать. УЖ ВЫ-ТО, С ВАШИМ НИВЬИБЕННЫМ АСИКЬЮ поможете мне ТУПОМУ разобраться. Итак. Почему. Когда я беру равку (DNG из мобилы) и перемножаю значения на 1.5~2, то результат дебайера уходит в пурпурные тона, если делю на 1.5~2, то в зелёные. ПОЧЕМУ, СУКА. Пробовал dcraw с -M, небо пробовал и Аллаха, всё одно, солоноватое на вкус это слёзы, братан.
И ещё, сцук, значения матриц в самой равке одинаковые и не зависят от выдержки. Казалось бы: больше света -> больше значения, но вот хуй.
Есть соображения?
Аноним 17/04/19 Срд 19:49:32 #442 №1383033 
>>1383028
>пурпурные и зелёные
Спасибо, док.
Про этот конкретный формат не знаю, но так судя по всему у тебя YUV а не RGB. У меня такие же цвета были, когда компоненты хромы (U и V) в экстремальные значения уходили. Обычно они кодируются как 0-255 -> -127-128. С Y обычно всё чуть сложнее и зависит от конечного стандарта.
Аноним 17/04/19 Срд 19:58:25 #443 №1383039 
>>1382761
блок один в другой засунь, чтобы у тебя s==3 не считалось лишний раз. Алсо, переделай на
count += (s % 3 == 0);
препод по головке погладит.
и перепиши всю хуйню на расте
Аноним 17/04/19 Срд 20:05:38 #444 №1383044 
>>1383033
Охх, даже не близко. Это 16-бит равка BGGR
со значениями от 0 до 1023. Мне нужно провести операцию над ней, а потом сделать дебайер, чтобы посмотреть, иначе оно не смотрится.
Можешь сам проверить: отрезаешь от dng файла снизу блок размером image.height x image.width двубайтовых слов, умножаешь/делишь, приделываешь обратно к заголовку.
Аноним 17/04/19 Срд 20:07:34 #445 №1383045 
>>1382959
А эту штуку только для дебага используют или и в релизе оставляют?
Аноним 17/04/19 Срд 20:09:21 #446 №1383046 
>>1383045
Для релиза оно слишком медленное (в 2 с чем-то раза медленнее, если я правильно помню), и отладочные символы ей нужны для красивых сообщений, и память жрет.
Аноним 17/04/19 Срд 20:21:09 #447 №1383050 
Самое место, наверное, чтобы спросить - а как в WinAPI включить графику уровня хотя-бы XP? Про стили почитал, но не совсем то, что нужно. Сложная, блин, штука
Аноним 17/04/19 Срд 20:21:46 #448 №1383051 
>>1383050
>графику
Визуальное оформление.
Аноним 17/04/19 Срд 20:33:26 #449 №1383057 
Screen Shot 2019-04-17 at 8.30.18 PM.png
Screen Shot 2019-04-17 at 8.32.07 PM.png
Screen Shot 2019-04-17 at 8.32.22 PM.png
Никак не пойму почему выдает предупреждение на пикрил, и почему тип с двумя звездочками в разных местах?

Функция принимает прикрил2. Объект pFrame содержит пикрил3
Аноним 17/04/19 Срд 20:38:56 #450 №1383058 
Yo-Dawg-Heard-You.jpg
>>1383057
I heard you like *const
ну ты понял, короч
Аноним 17/04/19 Срд 20:41:43 #451 №1383059 
>>1383057
uint8 ★const dst[]
dst - массив константных указателей на uint8, что, после array decay, получается как
uint8 ★const ★dst
Аноним 17/04/19 Срд 20:48:25 #452 №1383061 
>>1383050
В этом или прошлом треде обсуждали: положить в ресурсы манифест с Common Controls 6, дернуть из WinMain InitCommonControls(Ex), дергать theme api, если рисуешь какие-то кастомные контролы. Опционально дергать DWM на предмет всяких прозрачностей. Рисовать на GDI+, если нужно сглаживание (но можно притащить не родную либу для векторной графики или вообще взять OpenGL). По идее еще Direct2D можно, но я в него не играл.
Аноним 17/04/19 Срд 23:48:06 #453 №1383124 
Так какая среда для C лучше подойдёт?
Аноним 17/04/19 Срд 23:50:04 #454 №1383125 
>>1383124
Блокнот. А когда язык выучишь - сам ответишь на свой вопрос.
Аноним 18/04/19 Чтв 00:48:32 #455 №1383139 
>>1383124
Oracle linux + gcc + emacs
Аноним 18/04/19 Чтв 00:48:53 #456 №1383140 
>>1383124
Oracle linux + shell + gcc + emacs
sage[mailto:sage] Аноним 18/04/19 Чтв 01:17:36 #457 №1383142 
>>1383140
Ты все неправильно написал!
Microsoft windows + cmd + csc + edlin.
Аноним 18/04/19 Чтв 02:45:28 #458 №1383161 
Аноны, мне вот любопытно, так вообще делает кто-то?
https://pastebin.com/PVcPSZam
Аноним 18/04/19 Чтв 02:55:15 #459 №1383162 
>>1383161
Хуета громоздкая, решение нжвыглядит как код джавы вне джавы, особенно этот мерзкий енам. Прием функцией указателя на функцию это ваще пиздец уровня laba.cpp, тоесть ну нахуя тут это? Почему нельзя линкануть просто два сишника в либу и процедурно вызывать? Короче прикольно но максимум на уровне чтоб все ахуели как я могу, граничащем с я долбоеб
Аноним 18/04/19 Чтв 03:07:37 #460 №1383166 
>>1383162
>Прием функцией указателя на функцию это ваще пиздец
Интерфейс, идентичный qsort. А есть другие способы косплеить template?
Аноним 18/04/19 Чтв 07:17:51 #461 №1383189 
>>1383124
C4droid
Аноним 18/04/19 Чтв 07:26:10 #462 №1383190 
>>1382959
Для VisualStudio есть _CrtSetDbgFlag.
Аноним 18/04/19 Чтв 07:30:37 #463 №1383192 
>>1383166
Зачем косплеить template, если есть специальный язык с template, и знаний С тебе хватит для вката в него?
мимопроходил
Аноним 18/04/19 Чтв 10:10:41 #464 №1383234 
>>1383192
даже не template, а лямбды. На крестах точно так же надо передавать функцию сравнения, если сортируешь что-то не для решения олимпиады, а для реальной задачи со структурами и ключами, и T::operator< не подойдет.
Аноним 18/04/19 Чтв 10:15:48 #465 №1383241 
image.png
привет, помогите выбрать кодировку для того чтобы в исходном коде я мог писать комметарии на русском и иногда хотябы через printf выводить сообщения на русском. Просто однажды столкнулся с такой хуйней: накатил убунту, открыл все свои старые исходники а там видимо кодировка сбилась и комментарии к коду были просто рандомными символами. А еще если пользуюсь стандартным блокнотом в шиндовсе и в аргументе функции printf пишу русские буквы то при выполнении программы опять квакозябра. че делать? мож редактор посоветуете? или с моими мозгами поможет только гуманитарное образование?
Аноним 18/04/19 Чтв 10:19:42 #466 №1383247 
>>1383234
>если сортируешь что-то не для решения олимпиады
А для чего ты сортируешь? Ох, щи.
Аноним 18/04/19 Чтв 10:21:04 #467 №1383248 
>>1383241
UTF8
Аноним 18/04/19 Чтв 10:21:26 #468 №1383249 
>>1383248
спася
Аноним 18/04/19 Чтв 10:58:01 #469 №1383296 
Сколько можно зарабатывать написанием модулей ядра под линукс? Долго ли строить карьеру, чтобы выйти на хорошую зарплату? Лоулвл кодинг и реверсинг мне доставляет, но сосать хуй на съемных квартирах как-то не хочется.
Аноним 18/04/19 Чтв 11:33:07 #470 №1383308 
>>1383247
То есть сортировка существует только для того, что ее использовали со стандартным операторов сравнения?
Аноним 18/04/19 Чтв 11:49:08 #471 №1383314 
>>1383234
>а лямбды
Скорее функторы по сути лямбды - анонимные функторы
Аноним 18/04/19 Чтв 11:49:47 #472 №1383315 
>>1383234
Лямбда это не совсем оно, лямбда это функтор, который работает как функция и соотв. передаваться как указатель на функцию.
А не в обратном порядке.
Аноним 18/04/19 Чтв 11:53:06 #473 №1383319 
>>1383315
Может передаваться*
Функтор это класс с перегруженным оператором круглые скобки, лямбда это просто анонимный функтордля тебя анонимный, компилятор все развернёт в итоге и у него будет название конечно
Аноним 18/04/19 Чтв 12:21:12 #474 №1383341 
kr2.jpg
Век живи - век учись...
Аноним 18/04/19 Чтв 13:34:15 #475 №1383404 
>>1383319
лямбды могут делать захват контекста, а в функторы его приходится передавать
поэтому по месту удобней использовать лямбды, а если нужно решение которое будет использоваться во многих местах кода, то лучше по старинке сделать функтор, а лучше обобщенный функтор, а про могут еще и иерархию функторов заебашить
Аноним 18/04/19 Чтв 13:36:20 #476 №1383405 
>>1383404
в си, кстати, и вообще приходилось глобальные переменные для этого использовать..
Аноним 18/04/19 Чтв 13:41:41 #477 №1383412 
>>1383296
вышка по специальности, +10 лет реального опыта кодинга, выйдешь на 2.5k долларов (может быть)
до этого 5 лет вуза будешь нищим студентом, жрать дошики в общаге
потом работа несколько лет, денег будет хватать только на съем + жратва, буквально
как то так
Аноним 18/04/19 Чтв 14:01:59 #478 №1383418 
>>1383405
Ну, например qsort_r берет пятый аргумент, который потом передает третьим аргументом в функцию четвертый аргумент.
qsort_r(arr, n, sz, cmp, v);
и каждый вызов функции сравнения будет
cmp(p1, p2, v);
(в принципе, на крестах это так и работает, только cmp определяется шаблоном, а указатель v потом передается первым, как this)

например так
qsort_t(arr, n, sz, memcmp, sz-4);
чтоб отсортировать массив sz-байтовых элементов, лексикографически сравнивая все кроме последнего dword.

А вот в tsearch (дерево бинарного поиска, есть в glib) не предусмотрено, поэтому приходится пилить static переменную в своем компараторе и менять ее, стучась в функцию специальной парой значений void*, где первое говорит, что мы не сравниваем а меняем эту хуергу, а второе - собсно замена для хуерги. thread-safety в заднице...
Аноним 18/04/19 Чтв 14:17:45 #479 №1383423 
>>1383418
ну да
подобные задачи делаются через замыкания в языках, которые это нативно поддерживают
в крестах же есть синтаксический сахарок щас - лямбды с захватами, этакие неполноценные замыкания, а раньше это через функторы можно было делать
а в сишке делают так как ты написал
sage[mailto:sage] Аноним 18/04/19 Чтв 14:21:57 #480 №1383425 
>>1383418
> thread-safety в заднице
_Thread_local давно завезли. Ты так извращаешься, потому что ты хочешь извращаться, а не потому, что это реально необходимо.

Проблема со статическими/глобальными переменными только в реентерабельности. А эта проблема редко встает, а там где она возникает, о ней думают еще при дизайне апи.
Аноним 18/04/19 Чтв 16:02:43 #481 №1383460 
>>1383412
А если питон выучить и в машин лернинг с биг датоЙ?
Аноним 18/04/19 Чтв 16:14:59 #482 №1383466 
>>1383460
учи че хочешь, мне похуй
все равно все будет зависеть от твоих social skills в итоге
Аноним 18/04/19 Чтв 16:24:45 #483 №1383470 
>>1383466
> social skills
А почему в России таким мягким словом называют "social skills"? Когда ИРЛ в России это подразумевает умение заставить более низкоранговых самцов отжиматься и приседать с табуретками, а самому в это время бить их ногой в туловище, кулаком по почкам и требовать ночью сладости, деньги и гигиенические принадлежности?
Аноним 18/04/19 Чтв 16:33:36 #484 №1383473 
>>1383470
Ты по жизни привык все буквально воспринимать, вот тебе и тяжело понять что имеется в виду. Для нормальных людей это "сошел скилс" трансформируется в два простых правила - уважать себя и других, и не быть вафлером. На этом стоит закончить, не надо тред скатывать в сипп тред.
Аноним 18/04/19 Чтв 16:39:52 #485 №1383477 
>>1383473
>уважать себя и других, и не быть вафлером.
Иными словами это значит, что бей по почкам и в туловище, иначе бить будут тебя, а еще и вафлером назовут.
Аноним 18/04/19 Чтв 16:41:04 #486 №1383478 
>>1383470
не думаю что что-то из перечисленного тобой поможет в поиске работы

>>1383473
что значит не быть вафлером и как именно это проверяют при приёме на работу? штатный стоматолог с микроскопом?
Аноним 18/04/19 Чтв 16:53:04 #487 №1383484 
Помогите, Керниган говна в жопу залил
Почему у меня никогда не завершается нормально цикл:
while ( (c = getchar())!= EOF);
Притом замени eof на что угодно, хоть 1, хоть 0, всё-равно он не завершается и дальше принимает ввод
Аноним 18/04/19 Чтв 17:04:09 #488 №1383486 
https://pastebin.com/THwTuhqf
Есть код реализации стека, вроде как все понятно, но зачем тут указатель на указатель? Объясните поподробней, если можете, как он тут используется.
Аноним 18/04/19 Чтв 17:28:15 #489 №1383490 
Снимок.PNG
Аноны, помогите. Почему это работает? Почему функция является указателем и как это вообще, почему int складывается c char и сравнивается с int? Что вообще происходит? Никак не поясняется
Аноним 18/04/19 Чтв 17:30:04 #490 №1383492 
>>1383486
Это какой-то ужас. Вот тебе нормальный стэк.
https://pastebin.com/J6bsgY5k
Аноним 18/04/19 Чтв 17:30:35 #491 №1383493 
>>1383490
Там как бы написано...
Функция ВОЗВРАЩАЕТ указатель типа char
Аноним 18/04/19 Чтв 17:31:11 #492 №1383494 
>>1383490
Функция возвращает указатель, извиняюсь, не заметил. А с остальным что? Почему оно работает?
Аноним 18/04/19 Чтв 17:32:59 #493 №1383496 
>>1383494
А там немного математики. Комментарии-то почитай.
Аноним 18/04/19 Чтв 17:36:54 #494 №1383500 
>>1383486
>>1383492
https://pastebin.com/WBy3ijsc
быстрофикс
Аноним 18/04/19 Чтв 17:38:21 #495 №1383502 
>>1383496
Я уже допер. Я и забыл о том, что *(a+1) == a[1] и что все это можно сравнивать.
Тупил минут 15, насрал в тред и сразу на меня снизошло озарение. Двач творит чудеса
Аноним 18/04/19 Чтв 17:40:07 #496 №1383504 
>>1383484
Переменная с у тебя, конечно, char?
Аноним 18/04/19 Чтв 17:42:48 #497 №1383508 
image.png
>>1383484
int, нужно char?
Аноним 18/04/19 Чтв 17:43:05 #498 №1383509 
>>1383508 -----> >>1383504

Аноним 18/04/19 Чтв 17:45:07 #499 №1383510 
>>1383508
Тогда все норм. Ранее уже кто-то догадался char объявить.
Аноним 18/04/19 Чтв 17:46:54 #500 №1383515 
>>1383510
так хуле оно не завершается?
Может кто-то работающий код, принимающий на ввод символы через getchar запилить и сюда скинуть?
что угодно, короче мне протестировать, может это у меня clion потек, но я реально не понимаю
Аноним 18/04/19 Чтв 17:52:23 #501 №1383520 
>>1383515
Тем что тебе надо терминировать ввод. В Linux ctrl+D. В Windows вроде ctrl+Z, но я не уверен
Аноним 18/04/19 Чтв 17:54:17 #502 №1383522 
>>1383520
ctrl + D, как я и ожидал - в clion чет нашаманили, в итоге там это не работает лол, в онлайн компиляторе все работает
Аноним 18/04/19 Чтв 18:42:12 #503 №1383550 
Нихуя не понял с указателями. Как сделать чтобы функция меняла значение переменной? Пишу int func(int &count); но мне пишет error: expected ';', ',' or ')' before '&' token.
Аноним 18/04/19 Чтв 18:52:06 #504 №1383560 
>>1383550
Чувак, int func(int &count) - ссылка на int. В чистом Си нет ссылок.
int func(int * count) - указатель на int, они есть и в Си и С++
В Си & - взятие адреса переменной.
Т.е. где-то в коде
int y = 12;
func(&y) - ты передаешь адрес переменной y. А адреса у нас хранятся в типе-указателе.
Аноним 18/04/19 Чтв 18:58:06 #505 №1383567 
>>1383560
Что значит ссылка на int?
Аноним 18/04/19 Чтв 18:59:57 #506 №1383569 
>>1383567
Расширение идеи указателей в С++. Похоже на указатели, но имеет ряд отличий.
ПЕРЕКАТ Аноним OP 18/04/19 Чтв 19:52:01 #507 №1383605 
>>1383604 (OP)
>>1383604 (OP)
>>1383604 (OP)
>>1383604 (OP)
>>1383604 (OP)
comments powered by Disqus

Отзывы и предложения