Этого треда уже нет.
Это копия, сохраненная 27 апреля 2019 года.

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

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

Пожалуйста, пользуйтесь 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. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)

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

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

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

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

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

- №40: https://arhivach.ng/thread/428550/
- №41: https://arhivach.ng/thread/434018/
- №42: https://arhivach.ng/thread/438066/
2 1377626
>>77621 (OP)
Первыйнах
3 1377635
Как сделать простой консольный чат на Си?
4 1377638
>>77635
Просто и без задней мысли.
5 1377653
>>1377589

> Все твои ошибки - от отвратительнейшего говнокода.


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

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


В чем проблема моих getc?

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



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

Вот код целиком. Где ошибка?
https://pastebin.com/cpCSDt2M
6 1377677
Сколько можно безопасно(преносимо) выделять место на стеке? Например под буфер для текстуры?
7 1377679
>>77653
Если уж ты пишешь на мобиле, то скачай себе шланг. Он на любой дистрибутив ставится. Очевидно ещё понадобится эмулятор терминала.
А код твой просто бегиннер левел хуита, в очередной раз доказывающая, что учить программирование по хеловорлдам - мертвый номер. Почитай книги из шапки.
9 1377684
>>77681
И да, код придется писать в одной области видимости.
10 1377685
>>77653

> Что именно говнокод


Ну например, ты не можешь определиться, то ли тебе нравятся 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}, а не крутиться в цикле. Так быстрее и короче.

>>77677

> Сколько можно безопасно(преносимо) выделять место на стеке?


Ноль. Где-то всего пара сотен байт памяти, доступной под стек (бывает и меньше, но там на Си не пишут). Где-то мегабайты. Если пишешь либу под embedded, считается хорошим тоном посчитать и документировать требуемый размер стека, чтобы пользователи заранее знали, подойдет она им или нет. Если у тебя обычные компы и текстуры... ну, в винде линкеры по умолчанию резервируют метр, например (но можно указать хоть сто ключом линкеру).
11 1377687
>>77677
На чем пишешь? Размер кучи может определяться как на стороне компилятора, так и на стороне ОС. В gcc например можно спокойно менять размер кучи, и получать и 244кб, и 1мб, и 50мб, поэтому эмбедщики его любят. Ну а виндоус студия это просто говно
12 1377688
>>77687
Ты для начала научись стек с кучей не путать, а потом рассказывай, что и где говно.
13 1377690
>>77688
А ты не видишь взаимосвязи?
14 1377694
>>77690
В embedded есть некоторая (да и то, сейчас ртос везде), в "больших" компьютерах давно уже никакой взаимосвязи нет.
15 1377695
>>77694>>77688
Зарепортил заигрывающего со школьником педофила.
16 1377699
>>77679
А чем кланг лучше? Вроде же гну коллекция топовые компиляторы.

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

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

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

Текст файла:

01 101 201 301
02 203 101 111
03 934 110 234
04 049 110 136
05 213 101 137
17 1377701
>>77677
Нисколько. На стеке нельзя ничего выделять кроме мелких локальных переменных, так же нельзя передавать в функции и возвращать большие вещи. То же касается рекурсий, это раковый говнокод, засирающий стек впустую, вдобавок непредсказуемо. Стек это не память для данных, а служебное системное средство для работы программы и его размер ограничен.
18 1377705
>>77699
Я не он. Но зачем ты побайтово из файла читаешь? Почему бы в твой temp не считать сразу пачкой?
19 1377707
>>77701
Ну, а из кучи выделять дорого.
20 1377708
>>77699

>мой код в конце не доходит до EOF и не выходит из цикла


Кто тебя знает. Твой код на gcc 7.3.1 отлично отработал.
"Not found!
Not found!
Not found!
Works!

04 049 110 136
05 213 101 137

End"
21 1377718
>>77707
Не дорого, а дешево. А на стеке бесплатно. На бесплатном не живут, бесплатно это особый исключительный случай, которым пользоваться нужно только в особенных случаях, где ты точно знаешь что делаешь и совершенно необходим прирост скорости. То есть — никогда такого случая тебе не представится с вероятностью 99%.
22 1377725
>>77685

> Ну например, ты не можешь определиться, то ли тебе нравятся 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
{
printf("Not found!\n");

while (temp[0] != '\n')
temp[0] = getc(fp);
if (temp[0] == EOF)
break;
temp[0] = getc(fp);
}

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


Не знал что так можно, пока в книге такого не было.
22 1377725
>>77685

> Ну например, ты не можешь определиться, то ли тебе нравятся 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
{
printf("Not found!\n");

while (temp[0] != '\n')
temp[0] = getc(fp);
if (temp[0] == EOF)
break;
temp[0] = getc(fp);
}

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


Не знал что так можно, пока в книге такого не было.
121246:515701387.png31 Кб, 114x150
23 1377786
Куда вы лезете, щенки? Для сишки мозги нужны. У вас хоть образование есть? У меня 25 лет опыта работы в сложных проектах и математическое образование.
24 1377791
>>77786
и ебало как у ганибала
гагагага
25 1377796
>>77791
Ты ко мне в Екатеринбург приезжай и в лицо скажи.
26 1377797
>>77786
Ты хочешь сказать, что я 2 года изучаю и практикую С, каждый день кайфую от того что пишу на нем свои проектики - все это пыль, потому что у меня нет математического образования?
И да, дай мне ссылочку на свой github, хочу взглянуть на код, опытного гуру с математическим образованием!
27 1377798
>>77786

>25 лет опыта работы в сложных проектах и математическое образование.


и 90 на удаленке, все что удалось выбить
..
28 1377801
>>77797
нет
речь о том что ты инвестируешь в знания, которые не принесут тебе прибыли
29 1377803
Вкатился. Kernel-господа на месте?
30 1377805
>>77797
Времени мало свободного.
31 1377806
>>77801
Я инвестирую только свое время, а инвистировать время в любимое дело, я люблю. То что я не сяду жопой на офисный стул с С, мне по барабану. Я смогу придумать, что-то свое, и на хлеб с маслом мне всегда хватит.
32 1377807
>>77803
Да. Писал хэлоуворд через printk. Считается?
33 1377813
>>77725
Что-то у меня идеи закончились. Хотя погоди... может у тебя в компиляторе char по умолчанию unsigned? Тогда EOF (-1) в temp[0] нихуя не влезает, получается 255, а 255 конечно же не равно -1 (c signed char оно тоже не особо влезает, но там после integer promotions сравнение прокатывает).
34 1377814
>>77807
Нет. Линуксобляди не считаются.
35 1377815
>>77796
Твое ебало у меня экране, в него и говорю, проблемы?
36 1377819
>>77815
ты с троллем говоришь, она не стала бы писать на этой параше, лол
37 1377865
>>77819

>она


Извините, разве это не мужик?
38 1377872
>>77865
а есть разница?
600x600.jpg60 Кб, 600x600
39 1377879
>>77865
у тебя со зрением проблемы?
40 1377880
>>77879
Да. А у тебя нет?
41 1377887
Вот еще интересный персонаж:
https://www.linux.org.ru/forum/talks/14635773?cid=14635913
42 1377904
>>77786

>Для сишки мозги нужны


Зачем? Один из самых примитивных языков. Любой школьник в состоянии освоить.
43 1377932
>>77803
На месте.
в net/net-next пальчики отправляю
44 1377933
>>77932
Сук лол.
люблю автозамену
Патчики*
селф-фикс
Screenshot2019-04-10-01-43-17-604com.n0n3m4.droidc.png166 Кб, 1080x1920
46 1377961
>>77813
Проверил код на ПК - все нормально работает. Потом сократил на Андроиде код только до вывода текста из файла и принтф и один хуй цикл до EOF не доходит. Походу на Андроиде реально EOF не работает.
47 1377965
>>77961

> Походу на Андроиде реально EOF не работает.


Что за бред? Я тебе объяснил уже. Короткий фикс: signed int char temp[сколькотамнепомню]. Правильный фикс:
int c; while ((c = fgetc(fp)) != EOF) { putchar(c); }
48 1377966
>>77961
И еще раз, жирно, а то мало ли, ты не заметил фотку книги, которую анон >>77944 кинул, и еще десяток постов напишешь: getc()-подобные функции возвразают int, а не char.
Screenshot2019-04-10-02-12-33-485com.n0n3m4.droidc.png42 Кб, 1080x1920
49 1377977
>>77965
>>77966
А вы правы! Сделал signed char temp[] и все заработало. Странно что за весь день никто про это даже не вспомнил.
50 1378146
>>77977

>Сделал signed char


Опять на грабли наступаешь. Стандарт гарантирует int - не факт что вариант с signed char везде будет работать.
51 1378245
Я правильно понимаю, что если объявить глобальную переменную рядом с определением функции, то они скорее всего расположатся рядом в памяти и доступ к этой переменной из функции будет быстрее?
52 1378246
>>78245

>Глобальная переменная


Вот тут-то и начались проблемы
53 1378247
>>78246
Ну я программирую для себя и вроде не припомню проблем с глоб. переменными.
54 1378251
>>78245
Скорее всего компилятор их раскидает в разные сегменты, и вообще сомневаюсь, что ты программируешь на процессоре, который различает длинные и короткие указатели.
7b21d3bc334d56b1322cdacd0b93a236.jpg96 Кб, 748x945
55 1378252
>>78245

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


лайфха~к
56 1378260
>>77621 (OP)
Почему бы вместо констант не использовать дефайны?
Например, вместо
const chat x = 100;
сделать
#define x 100
Ведь подстановка происходит в препроцессоре и не жрёт память.
57 1378261
>>78260
Со временем ты ещё узнаешь что такое register, и твой мир наверное вообще треснет
58 1378263
>>77904
Толсто.
https://ru.wikipedia.org/wiki/Си_(язык_программирования)#Высокий_порог_вхождения
Спецификация языка занимает более 500 страниц текста, которые необходимо прочесть, чтобы полностью овладеть языком и знать все его возможности. При этом на практике из этих возможностей ежедневно программистом будет использоваться лишь малая часть. Однако некоторые совсем не очевидные вещи требуется знать, чтобы писать безошибочный и качественный код.
Сам по себе язык является достаточно сложным, в связи с чем неопытным программистам будет достаточно сложно писать качественный код. В сочетании с тем, что язык даёт большую свободу действий и позволяет компилировать программы с ошибками, выдавая лишь предупреждения, сложность языка может приводить к появлению многочисленных ошибок и уязвимостей.
59 1378264
>>78261
Это лишь указание хранить переменную в регистре, это здесь при чём?
60 1378267
>>78260
Уменьшает возможности отстрелить себе ногу.
Вообще читни что-нибудь типа Алена Голуба "Веревка достаточной длины, чтобы... выстрелить себе в ногу" . Там простые правила и советы почему так не стоит делать.
61 1378268
>>78260

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


Так и делают. В Си константы "ненастоящие", ты не можешь сделать, например: const size_t array_size = 100; static array[array_size]; Поэтому все используют дефайны. В крестах и других си-подобных языках это пофиксили.

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

>>78263

> Спецификация языка занимает более 500 страниц текста, которые необходимо прочесть


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

Твоя цитата никак не противоречит высказыванию анона >>77904. Си сам по себе - очень простой язык, его легко выучить, но писать качественный код (а особенно качественный, читаемый и производительный код) на нем гораздо сложнее, чем на других языках.
62 1378369
>>78245
Переменные идут в d-cache, код в i-cache. По крайней мере на уровне L1 они различны, так что даже если они попадут в соседние виртуальные адреса тебе будет всё равно.
63 1378392
>>78369

> так что даже если они попадут в соседние виртуальные адреса тебе будет всё равно


Не все равно. Можно выдумать ситуацию, когда будут проблемы с производительностью из-за того, что переменная и кусок кода попадают в один кэшлайн на многопроцессорной системе, где несколько ядер выполняют один и тот же кусок кода.
1496019656561.png10 Кб, 752x236
64 1378395
>>78369
Что это такое?
65 1378397
>>78395
Кэши - это такой специальный сорт памяти в процессоре. А на пике скриншот из x64dbg, судя по уебищности интерфейса.
66 1378400
>>78397

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


Объясняйся.
67 1378402
>>78400
Выше читай. Анон спрашивал, не будет ли быстрее перемешивать переменные с кодом. А по умолчанию компиляторы и линкеры их разделяют, как у тебя на пике. Алсо, у тебя на пике хуевый линкер. Вполне достаточно трех секций (RX, RW, R).
68 1378411
>>78392
>>78369
>>78245
Собственно, даже выдумывать не нужно, и нескольких ядер не нужно. Если в коде типа: static unsigned int i = 0; while (num_iterations--) { i++; } положить i физически рядом с кодом, цикл станет медленнее в 30-40 раз (на моем x86).
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 70 1378476
>>78467
Нормальный код. Ну можешь div() притащить для секунд и минут, как сделал для миллисекунд, хотя особого смысла нет.
71 1378480
>>78476
А никаких вариантов нет, чтоб повысить его универсальность? Так как у меня три переменные со временем и для каждой из них нужно плодить еще пять дополнительных переменных.
sage 72 1378486
>>78480

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


Функцию напиши, ну. Что-нибудь типа timestamp_split(float time, unsigned int ∗minutes, unsigned int ∗seconds, unsigned int ∗milliseconds); и заодно функцию, которая будет snprintf-ом форматировать время в строку, вызывая первую: timestamp_format(float time, char ∗buffer, size_t max_length).
73 1378488
>>78486
Спасибо.
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: ссылка на неразрешенный внешний символ".
Вопрос, что можно сделать.
75 1378500
>>78493
звездочки съели, но я думаю и так понятно.
76 1378513
>>78493
Ты берёшь адрес указателя. & убери.
77 1378515
>>78513
Если конечно, твоя функция не с 2 звёздочками.
78 1378517
>>78515
С двумя.
Короче вот https://pastebin.com/nxDGZFtT
79 1378520
>>78517
Описание ошибки забыл приложить.
80 1378522
>>78520
Не понятно же на какой символ ругается
sage 81 1378535
>>78517
Это не имеет отношения к конкретной ошибке, но в строке 3 у тебя звездочка проебана. Надо o = malloc(sizeof(My_struct)).
82 1378552
>>78520
СерьезностьКодОписаниеПроектФайлСтрокаСостояние подавления
ОшибкаLNK2019ссылка на неразрешенный внешний символ "struct My_struct __cdecl fn(struct My_struct *)" (?fn@@YAPAUMy_struct@@PAPAU1@@Z) в функции _mainQueueD:\Labs\Queue\Queue\main.obj1
Да в том-то и дело, что никуда конкретно ошибка не отсылает.
>>78535
Забыл добавить, но не суть.
83 1378557
>>78552
Если звёздочку в описании не съело, то ощущение что у тебя есть ещё вызов этой функции.
sage 84 1378562
>>78552
>>78557
Ну дык эта. В том коде, который был запощен выше, функция возвращает void. В сообщении линкера (и соответственно, в том месте, где вызывается) - указатель на структуру. Нужно определиться.
85 1378563
>>78557
Оказывается такое происходит только когда я подключаю эту функцию с другого файла. Что к чему блядь?
sage 86 1378564
>>78563
Файл-то в проект добавил? Объявление в хедере (или где оно у тебя там) соответствует определению?
87 1378570
>>78564
Ну вот простейший пример, при том если использовать функцию _fn, то все норм как бы. Я хуею в общем.
88 1378571
Я тут случайно заметил что компилятор G++ не ругается на этот код, а gcc выдает эту ошибку. Почему так?
89 1378580
>>78571
В си нет плюсовых ссылок.
>>78570
Тебе кстати надо на нулл проверять не разыменованный о, а сам о, т.к. если у тебя о это нулл, то при проверке разыменованного о ты по нулл-поинтеру сбегаешь.
А ещё если у тебя две одинаковые функции объявлены, то удали одну из них, линкеру плохо от этого.
sage 90 1378583
>>78570
Должно работать. Выглядит как какая-то проблема билда. Полный ребилд делал?
91 1378588
>>78583
Я ебал эту хуйню, просто пиздец. Сидел 3 часа нахуй, щас просто создал другой проект и скопировал все туда – и все заебись. Спасибо вижла за приятное времяпрепровождение.
92 1378775
>>78411
Статики в ебенях хранятся, и к ним ещё обращаться надо каждый раз:
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
И это ведь даже не потокобезопасно.
93 1378783
какое же вы тут все днище
ладно бы adt на юнионах обсуждали или кодогенерацию на макросах
а то блядь, их года в год одно и тоже
студентики обоссаные
94 1378797
>>78783
>>1374445, ты что-ли снова?

>adt на юнионах


Берёшь, ставишь тэг. По нему диспатчишься. Разве это стоит даже упоминать?

>кодогенерацию на макросах


Ну давай поговорим. Как ты использовал X macros в последний раз? Какие плюсы, минусы видишь? Где жёстко прокололся?
95 1378851
>>78775
Мы знаем, что статики в ебенях хранятся. Мы говорили о том, что было бы, если бы статики НЕ хранились в ебенях, т.е., что-то типа:
func:
.some_loop:
mov rax,[var]
add rax,1
mov [var],rax
; some cond
jcc .some_loop
ret
align 8
var dq ?

> И это ведь даже не потокобезопасно.


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

>>78783

> кодогенерацию на макросах


Как насчет кодогенерации на PHP?
96 1378958
>>78580
Но в Си есть же указатели, разве нет? В чем проблема то?
97 1378981
>>78958
Да, но то что ты пишешь это не указатель.
98 1378988
>>78981
А что я написал тогда?
99 1378992
>>78260

>int function(int &a)


действительно что ты написал?
100 1378993
>>78992
Соррян, не туда
>>78988
101 1379033
>>78992
Что функция не копирует к себе значение а, а работает с значением а. Указатели же вроде так работают.

Ещё вопрос. Как сделать чтобы тебе функция возвращала целый массив, а не отдельный элемент массива?
102 1379035
>>79033
Синтаксис
int function(int *a) - принимает указатель на int
int function(int &a) - принимает ссылку
103 1379037
>>79033

>Как сделать чтобы тебе функция возвращала целый массив, а не отдельный элемент массива?


Передавать указатель на массив в параметрах функции.
104 1379044
>>78988
На твоём месте, я бы сначала прочитал про указатели, а не лез в сишные указатели со знанием о плюсовых ссылках.
105 1379046
>>79035
Ты сейчас опять его спутаешь, в си нет ссылок, поэтому их можно было вообще не писать.
106 1379048
>>79046
Так ему уже писали, что ссылок нет. Если он читать не умеет - то...
107 1379052
Как срать кирилицей в консоль? Ебусь уже n-ое количество времени. Без setlocate и SetConsoleOutputCP это вообще возможно сделать?
108 1379073
>>79052
пиши хелловорд в древней кодировке кои866
109 1379088
>>79052

> Без 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.
110 1379102
>>79073

>пиши хелловорд в древней кодировке кои866


Ебать, помогло. Пол дня ебал разные кодировки и не получалось, а тут вышло. Ахуеть.
>>79088
А вот это не получилось. Писал мне что не может конвертировать из UTF-8 (кстати у меня десяточка)
111 1379105
>>79102
Еще хочу добавить, что все примеры, какие видел, были в UTF-8. И (судя по объяснению автора) компилируются без проблем. Буквально качаю тот же самый фаил, а у меня кракозябры
Screenshot2019-04-11-18-48-27-018org.readera.png161 Кб, 1920x1080
112 1379119
>>79035
>>79037
>>79044
>>79046
Как это нету ссылок, если вон, есть указатель адреса и ссылка по указателю. хотя пока не понял в чем разница

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

#include <stdio.h>

int function(char &temp[5]);

main()
{
char data[5];

function(data);

return 0;
}

int function(char &temp)
{

return temp;
}
113 1379131
>>79119
Признайся, что ты троллишь.
В определении функции выполнять операцию взятия адреса параметра т.е. формального описания, а не значения - это так толсто.
Screenshot2019-04-11-19-10-23-868com.n0n3m4.droidc.png153 Кб, 1080x1920
114 1379136
>>79131
Делать мне больше как в /pr толстить.

Убрал в определении функции &, но компилятор все равно ругается. В этот раз даже ссылку на номер строки не даёт так что я вообще не ебу что он хочет. В чем проблема?
115 1379143
>>79136
Не обманывай, няш.
Ты описываешь компилятору, как
int function(char [5]); мол не ссыте, пацаны. Будет передаваться 5 символов и возвращаться int.
Дальше идет вызов, ожидающий того что ты наобещал.
А внизу внезапно int function(char &) реализовано.
Где линкеру искать реализацию обещанного.
116 1379144
>>79102

> Писал мне что не может конвертировать из UTF-8


Может быть, у тебя исходник в Windows-1251? Или гцц какой-то кастрированный, хуй знает.

>>79105

> Буквально качаю тот же самый фаил, а у меня кракозябры


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

>>79136
Ты реально необучаемый. Где на скриншоте ты убрал &, если вон оно в 14 строке торчит? Естественно, твой крестокомпилятор (выбери Си в настройках, блять, там оно есть!) создает функцию, принимающую ссылку, а ищет функцию, принимающую указатель.
Screenshot2019-04-11-19-22-31-791com.n0n3m4.droidc.png153 Кб, 1080x1920
117 1379153
>>79143
Вот нихуя не понял.
>>79144
Убрал & в описании функции в самом верху. А если и в самой функции & убрать, то как тогда она сможет вернуть целый массив?

Сменил компилятор на gcc, опять на & ругается. Как тогда должен выглядеть код, чтобы функция возвращала массив?
118 1379165
>>79153
Скинь код в pastebin
120 1379176
>>79165
Вот же весь код тут >>79119

>>79172
А с помощью одной лишь stdio нельзя это сделать? А то я к stdlib не прикасался даже и не понял что у тебя за аргументы в main появились и прочее.
121 1379178
>>79176

>А с помощью одной лишь stdio нельзя это сделать?


Можешь убрать #include <stdlib.h>
и int argc, char argv.
А вместо return (EXIT_SUCCESS); return 0; сделай.
122 1379179
>>79172
Так если у тебя все работает, чего ж ты выделываешься?

>>79153

> Как тогда должен выглядеть код, чтобы функция возвращала массив?


В Си не возвращают массивы. Если у тебя большой и непредсказуемый объем данных, ты выделяешь массив внутри функции, а возвращаешь указатель на первый элемет. Если ты знаешь, сколько тебе нужно "вернуть", ты передаешь в функцию указатель на первый элемент массива и максимальную длину, функция в этот массив срет, как ей нужно, а возвращает вообще void.
124 1379183
>>79178
А что такое _arr в (char _arr[5]) ? И разве result может вернуть например абзац текста?

>>79179

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


Это не я отвечал.

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


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

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


Можешь написать как это примерно будет выглядеть?
125 1379184
>>79183
_arr имя переменной
126 1379185
>>79183

> что такое _arr в (char _arr[5])


Указатель на char. 5 там для красоты и ни на что не влияет.

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


Почему вдруг?

> Можешь написать как это примерно будет выглядеть?


https://ideone.com/sgqxcB
127 1379207
>>79185

>Указатель на char.


Указывает не на переменную, а на ее тип что-ли? Это как и зачем?

>https://ideone.com/sgqxcB


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

Почему вот такой мой код не работает? В data[5] у меня какой-то текст, я его посылаю в функцию, функция должна записать по указателю в массив puthere[5] какой-то текст все. По идее puthere будет иметь то значение, что я ей в функции дал? Почему не работает?
128 1379214
>>79207
Убери, блять, звездочку в 14 строке. [] и так интерпретируется как указатель на первый элемент массива.
129 1379216
>>79214
И пиздуй читай Кернигана и Ритчи, в первой же главе объясняется. сорян, выбесил
130 1379218
>>79214
Убрал и дописал принт puthere. Выводит каждый раз какую-то рандомную хуйню вместо 1. Из-за чего?

Читаю я K&R, пока до функций дошел.
131 1379226
>>79218
Ты function для puthere не вызвал же.
puthere в main и puthere в function - 2 разных участка памяти. Область видимости.
132 1379230
>>79226
Нет, это один и тот же массив, он же по указателю передаёт его.
Если он в функцию передаст puthere, а не дату, то распечатаются единички.
133 1379231
>>79230
1. Нет это разные. Он передаст указатель на него и его перепишет функция.
2. Он не передает/вызывает в функцию puthere.
134 1379235
>>79226
Вроде понял и сделал. Все правильно? Вроде работает так как надо.

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

Для защиты от невнимательности, если функция не должна менять данные, ты можешь объявить как function(const char[]), тогда компилятор выдаст ошибку в твоей функции, если там есть попытка изменить данные. Но в данной задаче - это не твой вариант.
137 1379247
>>79235
Имя - тоже указатель. Читай основы ООП и типов данных, куда ты лезешь?
138 1379253
>>79243

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


Это что значит?

>нахуя у тебя function принимает именно char[5]?


Я пока просто пишу заготовку функции, которую буду использовать в своей основной программе.

> И всякие for ... i<5... это пиздец говнокод.


А что с этим не так?

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


Что плохого в том, чтобы выводить принтф в цикле посимвольно текст? И что ты предлагаешь использовать вместо этого?

> просто создай переменную для считывания длины строки, допустим unsigned int len, которая пока выводит заодно посчитает strlen, и передавай в function(char _str и unsigned int len)


Вот это вроде неплохо, если я правильно понял как это должно работать.

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

>>79247
Разве в Си есть ООП?
139 1379254
>>78797

>Ну давай поговорим. Как ты использовал X macros в последний раз?


я на cpp пишу, сюда захожу только чтобы пописать, как в макдональдс
140 1379256
>>79253

>А есть разница между переменной что ты передаешь в функцию function(data) и названием переменной в самой функции


Да, огромная. Я же в примере специально назвал отлично от всех остальных _arr. Внутри функция ничего не знает об именах переменых в main, да и везде кроме себя. Когда ты вызываешь её, копируется или значение оргигинальных переменных или указытелей на них.
141 1379260
>>79256
Т.е. если я в int function (char %хуимя%[5]) пишу название переменной из мейн - он оперирует этой переменной как будто функция с ней в мейне и работает. А если писать название, которое есть только внутри функции, то функция берет просто значение %хуимя% из function(%хуимя%) и не влияет на переменную в мейне?
142 1379262
>>79260
Будет она называться также или нет - она не будет взаимодействовать с переменной из мейн. Просто при вызове твоей функции пихается не массив, а адрес памяти где твой массив из мейна начинается. Т.е. ты работаешь не с копией массива, а оригинала.
rk19.jpg94 Кб, 1280x402
143 1379267
>>79253

>нуль терминированы


Добавлю. K&R, глава 1.9

Пример
https://pastebin.com/DTiXs847
144 1379268
>>79262
Понял. Будет ли менятся оригинальная переменная или нет зависит лишь от того будешь писать int function (const char data[5]) или нет?

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


А разве работа с адресом памяти, где хранится переменная это и не есть работа с переменной?
sage 145 1379270
>>79268
Скажи, ты пробовал внимательно читать K&R, если уж ты вообще его читаешь? Там ответы на все твои вопросы написаны, но, тем не менее, ты не читаешь ответов даже итт.
146 1379274
>>79268
Постарался расписать.
https://pastebin.com/p8fNyg9z
147 1379279
>>79231
Почему это разные массивы, он уже внутри функции просто ходит по указателю в свой исходный массив, который и переписывает.
148 1379282
>>79279
Да, пардон. Жопой прочел вместо массив - переменная.
149 1379284
>>79282
Понял-принял.
150 1379287
>>79267
это что за учебник?
151 1379288
152 1379289
>>79270
Читал его несколько месяцев назад, и то только до функций, сейчас все вспоминаю.

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

Только я не понял глубинный смысл конструкции void function (const int *data). Если ты не хочешь чтобы data менялась, то зачем ставить звездочку?
153 1379290
>>79289
(const оченьЖирнаяСтруктура *s), например. Суть в том, что const тебе не запрещает менять. Он заставляет компилятор постараться отследить попытки изменить такие переменные (с const) и ругнуться ошибкой.
Ну например оченьЖирнаяСтруктура копировать дорого, передаешь указатель. А функция не должна изменить. Добавляешь const. Какой-то долбоеб лезет менять функцию, начинает пытаться менять в ней поля оченьЖирнаяСтруктуры и получает ошибки. Своего рода контракт - функция обязуется не менять значения, вызывающий понимает, что его данные внезапно не похерят. в плюсах это проработано сильнее
154 1379294
>>79289
Блядь боже, прочитай сначала про указатели, а потом используй их, ты для нас сейчас выглядишь, как человек, который пытается надеть свитер:
То есть если надеть его через голову, то будет тепло, а если через ноги, то можно спать не снимая свитер?
Пиздец блядь, как же все обленились, вместо того, чтобы прочитать и понять, как все работает, он задаёт тупые вопросы и ждёт на них ответ, который тоже не понимает.
Const это идентификатор такой, если ты пишешь const char arr[], это значит, что ты принимаешь указатель на const char, он не будет копироваться, const к этому вообще отношения не имеет, это лишь значит, что если ты попробуешь переписать значение, лежащее в твоём массиве у тебя все пизданётся нахуй.
Конст инт звезда по аналогии, ты можешь его прочитать, но не записать в него.
как же меня все бесит
155 1379295
>>79294

>как же меня все бесит


А скоро сдача курсачей попрет.
156 1379297
>>79295
Да меня самого скоро на сессии выебут, ещё и на работе завал, нихуя не успеваюзато время заходить сюда и отвечать на тупые вопросы нахожу, что за идиот
157 1379298
>>79253

>ООП


А как его может не быть, если ООП это просто способ работы с данными?
Кладешь угазатель на функцию в типизированую структуру - и это уже не функция, а метод класса.
158 1379299
Есть ли ide под win 98? А компилятор? А ежи?
159 1379300
>>79299
VC++ 6.
Вообще с Borland C++ 3.1 начинал
160 1379303
>>79299

>иде для сижки


>под вин


Не знаю что из этого тупее, но ответ — emacs
161 1379304
>>79290
Вроде понял, спасибо.
>>79294
А ты знаешь такую вещь - если ты не можешь обьяснить вещь тому, кто в ней совсем не разбираешься, то ты и сам недостаточно хорошо в ней разбираешься. Незачем беситься.

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

>>79298
Читал что ООП в Си на костылях, а нормальный ООП это уже в С++.
162 1379305
>>79303>>79300
Добра вам анончики, знайте что я не от хорошей жизни спрашиваю.
163 1379306
>>79304

>такую вещь


Эта вещь — полная хуйня

>читаю


>читал


Ну хоть читать умеешь. И да, возьми уже за привычку тип значения мейну указывать. Кстати, если тут не отвечают, можешь в крестотред идти и спрашивать там.
164 1379344
Данунах. Что это SIGTRAP при попытке вызвать free значит? Причём, можно нажать несколько раз на построчное выполнение, и эта хуйня выполнит дальше будет работать, ругнувшись трижды на функции в ntdll. В Гугле чё-то всё по таким вопросам по плюсам и из-за кривой работы с классами.

Ёбаная макака не даёт решать капчу на пеке.
165 1379345
>>79344
А, да, последующие брейкпоинты игнорирует.
sage 166 1379348
>>79299
Pelles C 5 еще. TCC в качестве компилятора тоже можно. VS до 2003 вроде поддерживала тоже.

>>79344
Ну повреждаешь видимо, пишешь в text_to_byte() больше, чем выделяешь.
167 1379368
>>79348

> Ну повреждаешь видимо, пишешь в text_to_byte() больше, чем выделяешь.


Не. С этим всё норм.
Самое интересное, что всё работало, пока я "типа интерфейс" консольный диалоговый не попытался написать. Но эти функции я не трогал.
sage 168 1379383
>>79368
Ну как норм-то, если у тебя при проверке кучи явная проблема. То, что "все работало" не означает, что ты раньше кучу не повреждал.
1555006291207.jpg4,8 Мб, 4000x2250
169 1379393
>>79383
Потому что text_to_byte(text) работает без ошибок. А память я в нём выделяю.
170 1379400
Это я к тому, что

> пишешь в text_to_byte() больше, чем выделяешь

sage 171 1379405
>>79393
Потому что повредить кучу ты можешь в одном месте, а проблема может возникнуть позже. Или не возникнуть вообще.

Твоя функция сломана в строке, которая пишет '\0' перед return. Допустим, strlen() вернула 5. Ты выделил strlen() ∗ 8 = 5 ∗ 8 = 40 байт, цикл прокрутился, i = 5, и ты пишешь в B_str[i 8], т.е., в B_str[40], т.е., выделив 40 байт, ты пишешь в 41-ый. Возможно, что это не единственная ошибка в твоем коде, возможно, не только* она вызывает проблему, но это ошибка.
172 1379412
>>79183

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


Под выделить в функции имелось ввиду не сам буфер разместить в стеке под этой функцией, а обращение к аллокатору.
173 1379419
>>79287
Дорогой? За сколько взял?
1555009491696.jpg132 Кб, 649x960
174 1379420
>>79405
Анончик, спасибо! Удивительно, что с фотографиями монитора нахуй не послали. Ты был прав, что не в одном месте такая фигня. Выделил во везде где нужно ещё по байту, и заработало как задумано. Вот тебе няша.
1555009565308.png1023 Кб, 1000x750
175 1379421
>>79420
Не та няша, вот та.
176 1379422
>>79421

>рязанское ебало


>няша

177 1379423
>>79419
http://www.combook.ru/product/11914736/
Я в офлайне, за 1200
178 1379458
>>79423
Пиздос. Вроде и не дорого, а вроде в кармане 35 рублей. Тоже такой хочу бля. Иногда книга удобнее электронного варианта
179 1379520
>>79422
А по мне прикольно, невинная такая обычная провинциальная девочка, помацал бы, но явно не очень умная, не подойдёт для повседневного пользования
180 1379521
>>79520
как ты ум по внешке определяешь? может она на хаскеле пишет
181 1379534
>>77965
А почему бы не написать while(!feof(fp)) ?
182 1379567
Опять я со своим говнокодом. Без участка кода, который я закомментил в конце, код работает как надо. А если этот код разкомментить и добавить, то появляются какие-то странные символы в тексте, причем код из шага pass 3 как-то влияет на код из шага pass 2.

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

https://pastebin.com/HtJzKULv
sage 183 1379574
>>79534
В Си feof() служит не для того, чтобы определить, что файл кончился, а для того, чтобы отличить ошибку чтения от конца файла (возможно, название неудачное, но по-другому с потоками никак). Т.е., ты должен попробовать прочитать данные fread() или getchar(), чтобы они "споткнулись" об EOF, чтобы feof() начала возвращать 1. Т.е., на файле из одного байта 'x': fgetc() -> 'x', feof() -> 0, fgetc() -> EOF, feof() -> 1.

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

>>79567

> Опять я со своим говнокодом


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

> pass 3


x = x + 3, выполненный 50 раз, явно вылезет за пределы массива send и распидорасит все вокруг.
184 1379585
>>79574

> В строке 92 ты либо пишешь в массив элемент с индексом n, либо не пишешь, и там остается какое-то говно, которое было в стеке.


Как в data2 может быть говно, если без кода из шага3 все выводится без мусора?(первый скрин)

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


Нет, я хотел текст полученный в массив data скопировать в массив data2 без пробелов и запятых.

> x = x + 3, выполненный 50 раз, явно вылезет за пределы массива send и распидорасит все вокруг.


А как он в любом случае может влиять на массив data2, если send это совсем другой массив? К тому же массив выводится на печать до того как идёт шаг3, как он на уже выведенный на экран текст может влиять?
Screenshot2019-04-12-15-45-22-994com.n0n3m4.droidc.png48 Кб, 1080x1920
185 1379588
Бтв даже если цикл в шаге3 сократить до 10 шагов, то он все равно выводит мусор.
186 1379589
>>79585
Чувак, возьми листочек и ручку.
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]
187 1379591
>>79585

> если без кода из шага3 все выводится без мусора


Да похуй. Читать неинициализированную память - это неопределенное поведение. Неопределенное - значит может произойти все, что угодно. Оно даже может вывести "мама, я все осознал, я больше никогда не буду программировать на Си", хотя вероятность этого события невелика.

> Нет, я хотел текст полученный в массив data скопировать в массив data2 без пробелов и запятых.


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

> А как он в любом случае может влиять на массив data2


Да похуй, это баг, и ты прибежишь с ним в тред.
TheCProgrammingLanguagelogo.svg.png77 Кб, 1200x1276
188 1379622
Сап, разбираюсь с указателями на указатели
В общем, вопрос такой
объявление простого указателя и массива выглядит так(взял по 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, но это неправильно.
189 1379623
>>79622
И еще такой вопрос, что значит объявление int (*ptr)[20]?
Указатель на массив? Если да, то нахуй он нужен, когда есть обычный указатель.
190 1379627
>>79622
ptr = &p - почему ты решил, что это неправильно?
192 1379636
>>79635
ptr = &p[0];
193 1379637
>>79635
ps Что за компилятор?
194 1379639
>>79637
Вижуал студио)))))))))))
195 1379640
>>79622

> присваиваю указателю адрес первого элемента через &


Ты можешь и так, и так:
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] делать, это абсолютно одно и то же.

>>79623
Да, указатель на массив. У него тип именно "указатель на массив", это важно. Нужен, чтобы обозначить намерения. Чтобы sizeof работал, чтобы индексирование работало у двумерных массивов, и можно было писать ptr[j] вместо ptr[i ∗ 20 + j]. Можешь вот с этим поиграться еще: https://ideone.com/huAMFl Это из прошлых тредов сохранилось.
196 1379642
>>79636
А разве p!=p[0], как при обычном массиве?
197 1379643
>>79640

> писать ptr[j]


Сраная макака. ptr[​i​][j]
198 1379646
>>79642
У VS своя магия с конвертацией указателей из массивов. Кто шарит получше может и пояснит.
199 1379653
>>79646
А чего тут объяснять? На скриншоте не то, что было в вопросе. На скриншоте есть амперсанд, т.е., берется указатель на массив. Указатель на массив численно равен указателю на первый элемент, но его тип - указатель на массив. Тип присваиваемого значения не совпадает с типом переменной, в которую присваиваем, и студия ругается, как ругался бы любой другой компилятор. Т.е., нужно либо так:
ptr = p;
либо так:
ptr = &p[0];
либо так:
ptr = ∗(&p);
либо так:
ptr = &(∗(&p))[0];
200 1379658
>>79653
В VS я всегда вариант через &p[0] использовал.
А в gcc прокатывает и &p. Правда gcc я не давно использовать стал. как потребовалась кроссплатфорная адаптация существующего софта
201 1379661
>>79658

> А в gcc прокатывает и &p


И не надейся. Ворнинги надо включать хоть иногда: https://ideone.com/5otK9Z
202 1379667
>>79661
Попробовал, да ты прав.
203 1379670
>>79653
Другой анон
Я не совсем понял, что ты имеешь в виду под указателем на массив, ведь *p[] это массив указателей
204 1379674
>>79670

> ведь ∗p[] это массив указателей


int ∗p[]; // массив указателей.
int (∗p)[]; // указатель на массив.

int foo[3]; // Тип: массив из 3 int.
foo; // Тип: указатель на int (неявное преобразование).
&foo[0] // &(foo[0]); // Тип: указатель на int (явно взяли адрес).
&foo; // Тип: указатель на массив из 3 int (взяли адрес, но массива, а не элемента).
205 1379681
>>79674
Жестко и круто, после того, как я со всей этой лабудой разберусь стану тру прогером?
206 1379684
>>79681
С такими вопросами в сипп тред. Да и объяснят там лучше, лол
207 1379688
>>79684
Да, если осилить указатели в си, то опп в крестах easi пойдет!
208 1379690
>>79688
А ты оптимист. Особенно если про шаблоны не забыть.
мимопроходил
209 1379693
Пацаны, раскидайте по фактам и без сложностей, когда применяются указатели на указатели, кроме выделения памяти из кучи для двумерного массива?
210 1379694
Глупый вопрос но чем отличается указатель от числа? Что мешает присваивать адрес простой переменной int?
211 1379697
>>79694
Обычная переменная может хранить только свой адрес? Сам в си не шарю, просто, что первое в голову пришло
212 1379704
>>79693
У микрософта всякие структуры любят через двойной указатель создавать. Пример:
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 в функцию. Вуаля - у тебя есть экземпляр девайса.
213 1379709
>>79694
Что ты потом с этим адресом в переменной делать будешь? Костыли городить?
Погугли ASM PTR - решение на уровне архитектуры.
214 1379717
>>79688
Тупой долбоеб, ты же даже не знаешь что такое ООП, просто так словами ьросаешься, лишь бы чёто сказать.
215 1379719
>>79717
Вот таких как ты и надо троллить, причем это было жирно, обезьянка
216 1379720
>>79694

>чем отличается указатель от числа


Ничем. Адрес это просто число. Есть даже специальный тип - uintptr_t - целое, которое вмещает в себя указатель.
217 1379731
>>79674

>int (∗p)[]; // указатель на массив.


Чем отличается указатель на массив от просто указателя на int?

>&foo; // Тип: указатель на массив из 3 int


>(взяли адрес, но массива, а не элемента).


Чем отличается указатель на массив от указателя на элемент (первый)?
218 1379733
>>79731
Типы разные, тупой что ли.
219 1379735
>>79733
Что за типы-то? Чем отличаются?
220 1379751
>>79720

> Адрес это просто число


Попробуй написать что-нибудь на Си под DOS, будет сюрприз. Хотя в целом, да, просто число.

>>79731

> Чем отличается указатель на массив от просто указателя на int?


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

>>79735
Тип - это такие метаданные о переменной, которые определяют, что в ней может лежать, и что с этим можно делать. Внезапно, правда?
221 1379758
>>79589
>>79591
Дошло наконец о чем вы. Я же в шаге 2 вывожу текст только если он по условию подходит и поэтому текст выглядит норм. Но на деле в массив хуйня хуячится каждый раз когда условие не выполняется.
222 1379770
>>79751

>Попробуй написать что-нибудь на Си под DOS, будет сюрприз.


Я под дос не писал, но far указатели вроде же как-то по особому выделялись, не?
223 1379785
>>79751

>В данном случае только типом.


>Тип - это такие метаданные


>>79735

>уже есть отличия:


А, только это дебильное sizeof(array) для определения размера массива, хотя в любом неговнокоде нужно держать размер отдельно в явном виде. Понятно. Кроме этого, как понимаю, разницы нет.
224 1379835
>>79785

> хотя в любом неговнокоде нужно держать размер отдельно в явном виде


Это вкусовщина. Я считаю, что размер, указанный явно, гораздо читаемее, чем неведомо зачем введенная константа, определенная где-то в жопе (например, uint32_t crc32_table[256] vs. uint32_t crc32_table[CRC32_TABLE_SIZE]). Разумеется, если у тебя множество определений подобных массивов, и нужно иметь возможность настраивать размеры у всех сразу, тогда без константы не обойтись (банальный пример - MAX_PATH в винде).
225 1379850
>>79785
Ты думаешь слишком поверхностно, но в целом указатели на массив это бесполезная фича на мой взгляд.
Хотя возможно если писать какие-нибудь юзер-спейс приложухи, то где-нибудь и пригодится, для красоты так сказать.
226 1379866
>>79850

> указатели на массив это бесполезная фича


Каждый раз, когда ты пишешь void func(int arg[10][20]), ты используешь указатель на массив, возможно, даже не подозревая об этом.
227 1379891
>>79866
В том-то и дело, я так никогда не пишу, даже массивы на стеке я всегда передаю по обычному указателю.
228 1379978
>>79866
Объясни, что такой указатель на массив тогда, с точки зрения, передаваемого аргумента в функцию как вдумерный массив
229 1379980
>>79835
В вышеприведенном примере уже некрасиво. Нужно объявить массив с числом размера, а потом указатель на массив такого же размера. Дублирование числа явно напрашивается на ошибку несхождения этих чисел.

>>79891
+1, то же самое. Сейчас осенило что видел массивы в параметрах только в функции main, которую IDE автоматом генерит, лол.
230 1379995
>>79978
А где ты там двумерный массив увидел, вкатывальщик ебучий? Там массив указателей на массивы. А n-мерный массив всегда передается как обычный массив.
231 1379999
>>79995

> массив указателей на массивы


Там просто указатель на массив, а массив указателей на массивы - это int (∗array[10])[20]. Сишный синтаксис деклараций неустанно доставляет.
232 1380024
>>79999
Лучше придумать невозможно. Только такой синтаксис позволяет объявлять сколь угодно многослойные конструкции, сохраняя ясность, как потом к этой хуерге обращаться.
233 1380026
>>80024
Это очень хуевый синтаксис
234 1380043
>>80026
Пожалуй, что таки да)
235 1380132
>>80026
Нормально, под задачи. 70-х
236 1380139
>>80026
Это так не работает. "Хуевый" понятие относительное, это значит должен быть лучше, иначе хуевого не существует. Показывай где синтаксис лучше. Не можешь? Значит сишный синтаксис - лучший. Понимаешь, так работает относительность, даже такой дебил как ты будет величайшим гением, если уничтожить всех умных людей на Земле.
237 1380155
>>80139

>Показывай где синтаксис лучше.


Rust.
мимикрок
238 1380157
можно ли сделать проверку в диапазоне символов? Например если символ принадлежит диапазону от A-Z то печатаем, иначе пропускаем?
239 1380160
>>80157
по аски коду символа очевидно же
240 1380163
>>80160
Ну это логично, A-Z идут с 65 и до 90. Но как этот диапазон сделать как условие?
241 1380164
>>80163
x >= 'A' && x <= 'Z'
242 1380255
>>80155
"Синтаксис Rust похож на Си и C++; язык регистро-зависимый, блоки кода ограничиваются фигурными скобками; используются стандартные наименования управляющих конструкций if, else, while, и for; комментарии также пишутся в С-формате; имена модулей разделяются двумя символами двоеточия (::). Идентификаторы могут содержать латинские буквы, цифры и знак подчёркивания."
Нууу, хуй его знает.
мимопроходил
243 1380259
>>80255

> используются стандартные наименования управляющих конструкций if, else, while, и for


А есть где-то иначе? Ну кроме очевидных примитивных бейсиков и паскалей.
244 1380266
>>77621 (OP)
Анончи, что за форс Растопетушни ИТТ, зачем они сюда набигают?
245 1380270
Аноны, поясните за указатели. До этого функция меняла значение аргументов (char s[]), а теперь кериган рассказывает про указатели на примере того же массива. Итогом стало то, что я не понял реального смысла их применения.
246 1380303
>>80266
Пар на 95% безопаснее...
247 1380304
>>80270
Массив частный случай указателей. Например чтобы не передавать твою структуры на 2 мегабайт копированием, передаешь указатель на нее. про указатели на функции обработчики и тд не буду
sage 248 1380326
>>80259

> А есть где-то иначе?


Очевидный примитивный питон, примитивный лисп?

>>80270
1) В аргументах функции (и только в них) записи char s[] и char ∗s означают одно и то же. Т.е., ты на самом деле пользовался указателем, хоть аргумент и записывался как массив.
2) Смысл применения указателей - прочитать/записать что-то где-то, динамически задавая что именно. Т.е., если имя переменной на протяжении всей ее жизни всегда "связано" с одним конкретным объектом (областью памяти), то с указателями ты можешь ссылаться на разные области памяти. А уж как это применять, тебе будут рассказывать до конца книги.
249 1380331
>>80304
>>80326
То есть иначе говоря, массив array[3] это не массив в привычном понимании (целостная структура, как примитив), а три указателя на три последовательных блока памяти? Я правильно понял?
sage 250 1380333
>>80331
Анон выше >>80304 тебя наебал. Массив в Си - это нормальный массив, как и везде - отдельный тип для объекта, состоящего из последовательности других объектов (примитивов или структур всяких, или других массивов - похуй). Никаких указателей там никто не хранит (если ты явно массив указателей не сделал). Т.е., если у тебя 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], но лучше пока об этом не думать.

Вот как-то так. Попроще пусть кто-нибудь другой объясняет.
251 1380336
>>80333

>прибавляется индекс


Индекс * размер типа
252 1380346
>>80333
Ахуеть, вот бы в сипп треде были бы такие же ответы. А в чем конкретно приемущество arr[x*y], где все строки хранятся а одном массиве, перед массивом указателей arr[x][y]?
253 1380424
>>80333

>Массив в Си - это нормальный массив, как и везде


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

> сишный массив это лишь сырой буфер в памяти и указатель на него


> аналог malloc


int ∗foo = malloc(3);
printf("%zu\n", sizeof(foo));
int bar[3];
printf("%zu\n", sizeof(bar));
Заблуждаешься сам - не путай других. Массив bar - это объект типа "массив из 3 int". foo - объект "указатель на int". Ничего общего.
255 1380466
Как защитить строки? С++ бояр есть compile time xorstr, а нам что делать?
256 1380479
>>80466

> С++ бояр есть compile time xorstr, а нам что делать


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

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

>>80346

> А в чем конкретно приемущество arr[x*y]


Не понял вопроса. Двумерный массив (массив массивов) всегда предпочтительнее, чем ручне вычисление индекса, потому что компилятор может лучше оптимизировать доступ, и код с [][] получается более читаемый. Одномерный массив вместо двумерного делают, если не известно последнее измерение, а без него компилятор не может самостоятельно вычислить адрес элемента. А массив указателей используют, например, когда размер элементов различен, как в argv.
257 1380500
>>80479

>Двумерный массив (массив массивов) всегда предпочтительнее


Неправда. Он дольше инициализируется, дольше удалаяется, он недружественнен к кэшу, и так далее. Все матрицы имеют внутри себя один большой кусок памяти.
258 1380515
Чет не пойму что за хуйня. Вот код, берется от пользователя число и посылается в функцию, которая делает дела. Но проблема в том что первый раз этот код работает нормально, но когда ты вбиваешь второй раз число, то input имеет нулевой первый элемент массива и старые 2 и 3 элементы массива.

Что за нахуй?

while (end != 1)
{

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

printing(input);
}
return 0;
}
259 1380525
>>80500

> Он дольше инициализируется, дольше удалаяется, он недружественнен к кэшу


Каким местом? Мы точно об одной и той же вещи говорим? Точно не о массиве указателей на массивы?

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


Двумерный массив - это массив массивов, точно такой же один большой, непрерывный кусок памяти.
260 1380538
>>80515
Тащи полный код, не понятно, что делает твоя функция.
261 1380544
>>80525
Ты о статических массивах что ли? Ну это вообще сильно бесполезная йоба. Если в случае одномерного массива можно хотя бы выделить статический буфер побольше и работать в нем, то здесь та еще хуита уровня laba.cpp
262 1380550
>>80538
Уже нашел косяк, отбой.
263 1380629
>>80434
Ты тупая бестолочь, не знаешь что такое массив, а sizeof это незначительная мелочь, не имеющая значения в контексте сказанного.

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

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

Поэтому, повторяю для тупорылых долбоёбов: Си - это НИЗКОУРОВНЕВЫЙ язык, в нём в основном есть только БАЙТЫ, СЫРАЯ ПАМЯТЬ С СЫРЫМИ УКАЗАТЕЛЯМИ, просто они слезка примазаны сахарком "строк" и "массивов", чтобе не совсем голые байты были. Но это лишь как трусы на голом человеке, ничего толком не прикрывают и не одежда ни разу, как был голый так и остался, голые байты, голая память, ебешься со всем вручную.
264 1380630
>>80629

>В Си нет массивов, а так же нет строк и нет циклов for.


>нет циклов for.


Чего блядь?
265 1380632
>>80630
Того, тупица. Цикл for перебирает числа с фиксированным шагом от первого до последнего значения. Никаких условий тут быть не может, никакого постороннего кода тоже, только size_t встроенное, которое перебирается до конца и всё. А цикл с условием это do/while, его для того и придумали.
266 1380648
>>80632
Ты к нам из растотреда?
267 1380658
>>80648
Я к вам из ситреда в си-манямирок тебя и подобных недоучек. Потому что сидеть в сишном треде, не понимая что такое си, это не очень круто, не находишь? Я уже молчу про написание программ в таком состоянии. Не, всех этих "сделайте мне домашку" понять можно, им похуй, но я такое в расчет не беру.
268 1380659
>>80658
Вот и не неси хуйню про циклы
269 1380672
>>80648
>>80659
На самом деле он прав, а ты вот не понимаешь, о чем он говорит, нормальный фор это например фор из питона типо for item in container, или тот же range-based фор из плюсов, он, конечно, работает на итераторах и внутри всё те же сишные форы, но они хотя бы выглядят как настоящий фор.
А тот фор, что мы имеем в си это буквально просто while.
270 1380678
>>80672
"нормальный" for, про который ты говоришь, называет foreach
271 1380717
>>80678
Да, только им должен быть тот фор, что мы имеем, а обычный фор вообще не нужен.
272 1380760
>>80678
Нормальный for так и называется, пошел из бейсика и паскаля, в последнем даже шаг фиксированный - единица, и менять нельзя.
Проблема современных языков, их синтаксис пошел из си, который совсем не нормальный язык высокого уровня, а обертка для ассемблера, хотя на вид обманчиво похоже для удобства, но из за того что там ничего нет, на самом деле оно совсем не то как выглядит. В результате всякие клоуны привыкшие к джаваскрипту и подобному лезут в си с совершенно неправильным представлением куда они вляпались.

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

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

Ну и массивы туда же. Ололо, пишешь a[10], как же просто, вот тебе массив, как на матёше! Авотхуй. Вместо того, чтобы просто брать и пользоваться массивом, ты сидишь и изучаешь указатели, модели памяти, размеры элементов, формат хранения, иначе сосешь толстые хуи. Ну и где тут массив? Ты всё так же своими ручками пердолишь внутренние форматы всякой хуеты, будто реверсишь готовый экзешник, а не пишешь программу на языке. А потому, что это и есть ёбаный экзешник, низкоуровневый недоассемблер, а ни какой не ололо алгоритмический язык как все привыкли.
272 1380760
>>80678
Нормальный for так и называется, пошел из бейсика и паскаля, в последнем даже шаг фиксированный - единица, и менять нельзя.
Проблема современных языков, их синтаксис пошел из си, который совсем не нормальный язык высокого уровня, а обертка для ассемблера, хотя на вид обманчиво похоже для удобства, но из за того что там ничего нет, на самом деле оно совсем не то как выглядит. В результате всякие клоуны привыкшие к джаваскрипту и подобному лезут в си с совершенно неправильным представлением куда они вляпались.

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

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

Ну и массивы туда же. Ололо, пишешь a[10], как же просто, вот тебе массив, как на матёше! Авотхуй. Вместо того, чтобы просто брать и пользоваться массивом, ты сидишь и изучаешь указатели, модели памяти, размеры элементов, формат хранения, иначе сосешь толстые хуи. Ну и где тут массив? Ты всё так же своими ручками пердолишь внутренние форматы всякой хуеты, будто реверсишь готовый экзешник, а не пишешь программу на языке. А потому, что это и есть ёбаный экзешник, низкоуровневый недоассемблер, а ни какой не ололо алгоритмический язык как все привыкли.
273 1380764
>>80672
И в чем разница с++ фора от сишного?
274 1380783
Вот это я огни развел своим вопросом про массивы. Так что есть истина, аноны?
275 1380796
>>80760
>>80672

>настоящий фор


>это буквально просто while


Уходите
276 1380801
>>80760

>А вот скажи, ты знаешь как устроен int? Чем отличается int от unsigned int?


АСТАНАВИСЬ111
277 1380803
>>80783

>Так что есть истина, аноны?


Ты - обычный наследственный дебил.
Как и все здесь, тащемто.
Вот тебе истина.
278 1380805
>>80796
>>80801
Ебальник себе захлопни, чмо.
1535384750156697094.jpg183 Кб, 700x933
279 1380809
>>80805
Ребенок, плез, уходи к своим в Питухонотрхед
280 1380811
>>80803
Почему?
281 1380815
Пиздец тут развели. Стоило день не зайти в тред.
282 1380823
>>80809

>эта проецирующая вебмартышка


Ясно.
>>80811
Спроси у мамы и папы если они у тебя, конечно, есть
sage 283 1380847
>>80629

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


Какие-то фантазии и вкусовщина, не имеющие отношения ни к Си, ни к массивам в целом. Дальше не читал.
284 1380853
>>80823

>Спроси у мамы и папы


Они мне обычно говорят что я просто дебил, без всяких приставок
285 1380858
>>80805
Что и требовалось доказать. Ты уже давно дрищешь тут истеричными оскорблениями. При чем, хуй пойми, что именно ты пытаешься доказать. Донести, что в твоей системе взглядов отсутствие синтаксического сахарка для вызова функций без вызова функций является примитивным? Если по существу сказать нечего, пиздуй самоутверждаться в другой тред, где тебе будут больше рады.
286 1380880
>>80853

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


Это у вас наследственное.
>>80858

>эта стена БОЛИ


Ясно.
287 1380881
>>80880
А ведь так адекватно начинал. Зачем под толстоту косить?
288 1380885
>>80881
Затем что вы тут дебилы все и каждый поголовно, no exception.
Особенно ты.
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
Это ж гибкая такая хуйня получается, почти скриптопараша. Главное в рекурсию не пробовать, а то препроцессор подавится.
290 1380894
>>80881
В смысле, начинал? Я после того длинного поста в тред не писал, лол. Открыл тред и проиграл с дауна, строчащего абзацы манядетектов. Воистину: "зачем учить си, я слишком туп для этого, лучше подетекчу семенов и обсужу их личностные качества". Прям как деревенские бабки на лавочке, мозгов нет, зато соседей всегда готовы обсуждать до усёру.
291 1380895
>>80885
если не сомневаться в подозрениях, то ок...
Но если все еще предполагать, что ты нормальный чел, то неужели не видно, что с каждым словом все более похоже на толстоту становится?
292 1380896
>>80894
А, понял. Я думал ты тот же анон, что отвечал на вопрос ньюфага про массивы и указатели. А теперь все сомнения отпали.
293 1380897
>>80333

> Массив в Си - это нормальный массив, как и везде - отдельный тип для объекта


У тебя есть объяснение этому https://ideone.com/6T4U5I (в контексте "массивы в си это нормально")?
294 1380910
>>80897
ну ок, контекст приводит имя массива к указателю на первый элемент, и потом задействует арифметику указателей, где в свою очередь "от перестановки слагаемых...". По идее, такую же хрень можно сделать с крестовыми векторами, если объявить что-то вроде template<T> vector<T>::iterator operator+(vector<T>& v, int i) { v.begin() + i; } и зеркальный вариант с другим порядком параметров для коммутативности, и вуаля. Есичесно, хуй знает что получится, и не буду ли я послан нахуй, рассчитывая, что i[v] развернется в *(i+v) и потом обработано моим оператором, но суть ясна. Если язык предполагает байтоебство минимальным количеством кода, без километровых кастов "отказов от претензий", то все неизбежно подвержено вот таким лаконичным фокусам.
1526307294756.png4 Кб, 905x108
295 1380915
>>80890
Может я что-то упускаю, но если тебе нужен разный процессинг, то можно обычную функцию подавать как у тебя в последней строчке. На пике прототип принимающей (ntimes), которая внутри просто вызывает поданную.
296 1380923
>>80897
Да, у меня есть объяснение. Последовательность однородных элементов есть - все, есть массив. Почему так работает [], я уже писал в >>80333 пункты 1 и 2. Не понимаю, что тебе не нравится? Ну да, возможны вот такие выверты синтаксиса - ну так это детали реализации, не нравится - не пользуйся, пиши в правильном порядке.
297 1380929
gg
298 1380930
>>80923
Это не массив и не детали, а банальный сахар для арифметики указателя. Ты можешь точно так же подставить [] к простому указателю и работать будет аналогично:
int i = 0xFFFF;
char ★p = &i;
p[1] = 0;
299 1380934
>>80930
Ответил не читая? Да, это сахар. Да, [] всегда работает с указателями. Но массивы от этого никуда не делись.
300 1380938
массив это массив, дети шлюх
и есть механизм неявных преобразований связанных с типом массив, зачастую это случается при передаче фактических параметров в функции
и есть механизм низведения типов в формальных параметрах функций, связанных в том числе и с массивами
отрой k&r, уебище, там все это есть
301 1380940
>>80915
Об этом я не забыл подумать, но тогда выходит что-то слишком адекватное, и дженериковость функции-аргумента теряется, а так хоть int, хоть double
302 1380943
>>80934
И признаком массива является.... отличие sizeof?
Браво, кретин, но sizeof никакого отношения к массивам не имеет.
303 1380950
>>80943
Признаком массива является то, что тип переменной a в int a[10] - массив. Так написано в стандарте. Так же как признаком инта в int b тоже является тип. Если у тебя свой собственный язык, собственная терминология, или ты к нам просто из C# протек - это твои проблемы.
304 1380962
>>80950
А, так ты про то, что любой указатель со скобками это массив? Ну, в сишной терминологии так, но сишка не нормальный язык, как уже было сказано. Если такое говорить ньюфагу, он не поймет, т.к. в нормальных языках массивы это не указатели.
17193630.png52 Кб, 600x480
305 1380965
>>80962

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


в джаваскрипте указатели, в питоне указатели...
какой язык - нормальный?
306 1380968
>>80965

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


Ебать дебил.

>маняме


>...


И это все объясняет.
307 1380970
>>80962
Упс, или не так? У тебя правда весь аргумент "массив потому что тип отличается от указателя"? Аргумент это отличие и всё? То есть "раз это НЕ сахар, значит говно"?. Ну это уже просто дно дна, убей себя прямо сейчас лучше. Как с настолько атрофированным мозгом возможно в принципе существовать, для меня загадка.

Если что, то "это не указатель" не означает, что это массив, а означает, что это лишь слегка другой указатель.
308 1380973
>>80965
Я ни разу поддерживаю анона, у которого на почве депрессии сыпятся через слово выражения "ненормальный язык", "кретин" и тому подобное, но упоминанием скриптовых Питона и ЖС ты этого токсичного пидора только подкормил, ибо не в тему нихуя. В контексте обсуждения под указателями имеется ввиду адрес+оффсет и вот это все, а не какие-то там умные ссылки на объекты в куче.
309 1380976
>>80629

>массив вовсе не обязан быть цельным блоком


Ты что-то путаешь. Это список не обязан быть цельным блоком. А вот массив - это вариант реализации списка тем самым цельным блоком.
310 1380980
>>80976
Вовсе нет. Представь небайтоёбский язык без указателей. Массив может быть реализован как угодно, хоть оберткой для списка, ты попросту не узнаешь, потому что байтоёбство тебя не касается.
311 1380982
>>80962
Чувак, от тебя дерьмом за километр несет. Да, я понимаю, что под ненормальностью языка ты имеешь ввиду чуждость низкоуровневой парадигмы для здешних ньюфагов, привыкших писать свои олимпиадные велосипеды, располагая нативными стрингами и вот этим всем... Но, несмотря на то, что знания у тебя, вроде, есть, ты в них, кажется, не слишком уверен, т.к. излагаешь позицию в максимально гнилых выражениях, чтоб собеседник подсознательно пригорел прежде, чем успеет добраться до пробелов в твоих знаниях, таким образом дав тебе основание объявить его "слив".
312 1380983
>>80980

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


И в большинстве высокоуровневых языков это называется, сюрприз... list.
313 1380985
>>80982
Ну и к чему ты выблевал этот поток эмоций? По делу есть что сказать? Или будем комментировать мои личностные качества как старухи на лавке обсуждают соседей? Тут си-тред, давай писать про язык, а своё гнилое социоблядское выяснение отношений оставь для дружков.
1554216548131491814.jpg212 Кб, 650x429
314 1380987
>>80980

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


Но зачем бля? Как же мне бонбит от этого глупого ребенка, на Си пишутся с прототипов, чтобы было быстро и жрало мало памяти, тюнинг и оптимизашки, хочешь более обстрактного так вагон же напридумывали, ебись с Питухоном, ЖС, Растом, бля, не, сюда приперся, ирод.
315 1380989
>>80980
Ну, в Java есть ArrayList, LinkedList, ZalupaList. Слово Array обозначает вполне определенный вариант реализации. В Python красота в квадратных скобках называется List. В Си-подобных языках, где имеют место объявления вроде int[10], можно на пальцах пересчитать, где как это реализовано. По, как ты любишь говорить, ПО-НОРМАЛЬНОМУ просто куча однотипных (или не однотипных) данных называется списком, а массив - это массив.
316 1380990
>>80980
Ну, в Java есть ArrayList, LinkedList, ZalupaList. Слово Array обозначает вполне определенный вариант реализации. В Python красота в квадратных скобках называется List. В Си-подобных языках, где имеют место объявления вроде int[10], можно на пальцах пересчитать, где как это реализовано, и грамотно ли в том или ином случае называть это по-привычке массивом. Но, как ты любишь говорить, ПО-НОРМАЛЬНОМУ просто куча однотипных (или не однотипных) данных, которая "похуй как реализована", везде и всегда называлась списком, а массив - это массив.
317 1380992
>>80985
Твоя манера общения имеет самое непосредственное отношение к конструктивности дискуссии.
318 1380993
>>80987

>Но зачем бля?


Для понимания, что в си нет массивов, а лишь сахар арифметики указателей. Ты-то умный и уже не нуждаешься в пояснениях, а приходит ньюфаг и ты ему: "массив", а он думает совсем о другом, потому что массив это совсем не то, что в сишкомирке называют массивом. Ты понимаешь, что приходит ньюфаг и начинает работать с массивами, не зная об указателях и даже не зная что про них нужно знать? И не только об указателях, а и об памяти. Элементарная задача возврата массива из функции уже требует понимания указателей и разных моделей памяти, стека и кучи. Где тут массив, маня? Ты понимаешь , что несешь бред напрямую из своего манямирка? Другие люди не умеют читать мысли, нужно объяснять правильно, а не вешать лапшу на уши, предоставляя им самим набивать шишки. Может ты и набивал, но зачем повторять бессмысленное говно? Ты пидараха из этих "я страдал, и пусть другие страдают" или что?
319 1380996
>>80993

>а приходит ньюфаг


Куда бля приходит? Зачем? Верстают там -> на ЖС, основы кодинга нужно на других языках проходить, Си и Асм это для тех кто знает что делать и зачем он это делает. Если мне нужна неебическая скорость и я буду разворачивать цикл, ты скажешь нахуй вот дублировать, зачем? Ты не в ту сторону воюешь короче.
320 1380998
>>80983
В твоем маня мирке звучит логично. Но если сослаться на такой, должно быть, сомнительный для тебя источник, как ДЕЙСТВИТЕЛЬНОСТЬ, то логичная форма тонет под бредовым содержанием. Массив, блядь, обертка для списка. Охуеть. Каждый день такое вижу. У тебя, видать, каждый первый сосед хуй на лоб пришил и ходит так, а хули, в абстрактных понятиях, далеких от байтоебской медицины, похуй, как реализовано. Не мудрено в такой среде вырасти альтернативно сформированному анону, заебавшему всех адекватов в Си-треде.
321 1381000
>>80993

>Для понимания, что в си нет массивов


в стандарте, блядь, языка прописан такой тип данных как "массив", включая и кучу срани типа правил его объявления и определения, объявлений неполного типа, правил неявных преобразований, так же правил низведения массивов
упоротый ты долбоеб
322 1381001
>>80996

>Куда бля приходит?


"Поздравляю! У вас родился мальчик, си-программист!"
:3
К сожалению сишниками не рождаются и асм не преподают в обязательном порядке до си. Добро пожаловать в реальный мир, трезвей от своего манямирка. Приходят, сюда, в тред, люди, желающие, изучить, си, что, не ясно, у, меня, уже, безысходность, от, тупости, здешних, постеров.
323 1381002
>>80993
Ну это понятно, массив не является полноценным объектом, с copy/move семантикой, т.к. подобные операции по технической сложности достойны отдельной функции, чтоб не дублировать много маш.кода. Копировать можно только структуры без ссылок на дополнительно выделенную память.
324 1381004
>>81000
имелось ввиду, что ими нельзя жонглировать так же просто, как простыми переменными, в отличие от более высокоуровневых языков. Вот >>81002
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’’.
326 1381007
>>81004
о, пошли маневры
327 1381009
Почему объявление int t; в виде int (t); корректно?
Зачем?
328 1381010
>>81007
я не он
329 1381015
330 1381017
>>81009
почему бы и нет? ты же вовсю используешь скобочки при создании составных объявлений/определений
331 1381019
>>81015
n1256 c draft
332 1381021
>>81007
ты тоже мудак. Приебался к словам, уходя от первоначального тезиса. У ньюфага в голове не возникает вопрос "есть ли в Си массивы, про которые я читал в стандарте какого-то другого байтоебского языка вместо художки на досуге, попивая чай". Анону интересно, есть ли там такие волшебные списки, которые в языкнэйм так понравились ему возможностью взять и одних махом вбросить в функцию всю табличную инфу про себя, мамину подругу и дедушку Сталина, чтоб с ней можно было дрочиться внутри как угодно, не поломав ничего снаружи.
333 1381024
>>81001

>Приходят, сюда, в тред, люди, желающие, изучить, си


Так, ты начинаешь изучать Си, тебе все сложна и нипанятна и нужно фсе переделать?
334 1381028
>>81017
Не понял. Объявление функции - это одно, а int (t) - это что за лямбда?
Или что ты имеешь в виду?
335 1381029
>>81006
кажется, даже в словаре человеческого английского языка в определении array присутствует слово contiguous
336 1381033
>>81028
Это то же, что и просто int t, только со скобочками. Ничем не отличается, в таком виде никем не используется, нужно для более консистентного синтаксиса в сложных случаях.
zlkrektetb8rw7nd6r0eppkp38.jpeg207 Кб, 780x519
337 1381034
Господа инженеры, я пошел пить пиво и протрезвлею вероятно послезавтра, но надеюсь вы прогните этого ребенка-троленка, ну или хотя бы абасыте.
338 1381045
>>81033
Да я понимаю, что это не лямбда на самом деле. Я говорю о том, на что это формально похоже. Сам говорил про

> скобочки при создании составных объявлений/определений


Каких например? Какие сложные случаи? Функции традиционно мелкие, объявления переменных в начале.

> никем не используется


Да лучше бы я никогда этого не видел, но один раз встретил и теперь не сплю. Случай был тупой, канеш, ничего такого.
339 1381048
>>81024
Как бы сказать. Программирование в главном широком смысле означает алгоритмирование. Соответственно, язык программирование является алгоритмическим языком, описывающим естественным образом алгоритм. Это справедливо для большинства языков и изучение программирование как такового начинается с алгоритмики. Это состояние в башке большинства вкатившихся в программирование.

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

И всё было бы хорошо, но проблема в том, что си имеет тот же синтаксис как и алгоритмические языки, знания о которых имеются по умолчанию, и использует те же термины "массив", "строка", как и алгоритмические языки. НО на самом деле это всё совсем не то и работает не так, потому что язык машинный, железячный, тут софтово не налеплено маня-парадигм и прочих объектов, всё близко к железу. И в такой нишевой язык не идут младенцы с полным отсутствием знаний, которые изучают всё с нуля чисто по сишке, а наоборот, люди обычно уже знакомы с программированием, и когда приходят в сишку, видят тот же синтаксис и те же термины, естественно начинают писать как они знают, А ЭТО НЕ РАБОТАЕТ. Они ебут мозги, хотя эти сишкопидарасы тупорылые могли бы сразу сказать: "забудьте, нет у нас никаких массивов, учите указатели, ебите память".
340 1381052
>>81045
int (a); // int.
int (∗b); // Указатель на int.
int ∗(c)(void); // Функция, возвращающая указатель на int.
int (∗t)(void); // Указатель на функцию, возвращающую int.

Если в первых трех примерах скобочки как бы и не нужны, ты можешь их убрать, то в четвертом они меняют суть объявления, и без них ты указатель на функцию не объявишь (ну разве что с тайпдефом). Их притащили ради изменения приоритета вот этой звездочки, и они заодно протекают в три предыдущих примера, и много куда еще.
341 1381053
>>81052
Воо, спасибки, дубоват стал...
342 1381054
>>81048

>сишкопидарасы тупорылые могли бы сразу сказать


Зачем ты нас оскорбляешь? С тобой даже диалог пытались наладить, думаю аноны больше так не будут делать.
343 1381065
>>81054
Любая характеристика, хоть положительная, хоть отрицательная, определяется характеризуемым объектом. Говоря по-простому, что заслужил, то и получил. Хорошее отношение это не привилегия. Хочешь хорошего отношения - совершенствуй себя и заслужи его, а пока ведешь себя как долбоеб, долбоебом и будешь назван. В этом преимущество анонимных борд, здоровое свободное общение без навязанной цензуры лицемерной вежливости как ирл.
344 1381069
>>81054
Этот парень принципиально не сбавляет оборотов, ведь сейчас шаг навстречу за "сишкопидарасами", посмевшими неверно истолковать его слова сразу. Проблема лишь в том, что оскорбления пошли прежде, чем вообще кто-либо мог успеть прислушаться к нашему достопочтенному разрушителю парадигм.
345 1381075
>>81065
Вот это удваиваю. Но ты, пожалуй, рановато вышел в боевой режим со словами "тупица". Надо было еще постик-другой потерпеть, глядишь и не довелось бы.
346 1381079
>>81065

>Любая характеристика, хоть положительная, хоть отрицательная, определяется характеризуемым объектом.


Умопомрачительный долбоебизм.
Иди покушай говна - кому-то это нравится.
мимо
347 1381080
>>81048
Сам сишкопидарас и по себе знаю, как иной раз вместо нужных для вката слов об неиллюзорных отличиях, не премину выговориться в защиту секты "да все тут нормально с массивами, все тут есть" что для ньюфага отнюдь не утешительно. Хуёво так делать...
348 1381081
>>81075
Человеку свойственно ошибаться. Ты у мамы идеален? Видишь ошибку у ближнего и отвергаешь его полностью? Ну и дебил, и это не оскорбление. Потому что по сути, такое поведение - суждение не по смыслу сказанного, а по форме. Не читая книгу, сделал вывод по обложке. Это поведение дебилов, которым свойственно нежелание читать и думать, вот и скатываются на такие легкие суррогаты вместо настоящих выводов.
349 1381083
Вот уж не понимаю, в чем проблема понять, как работают в Си массивы. Я тупенький, других языков не осилил, но и то быстро привык и пишу что мне надо. Хотя писать парсер текстовых структур на Си - изврат, да
350 1381086
>>81083
Когда первым языком учишь, мозг без ложной самоуверенности включается на полную, и происходит чудо, суммация усилий приводит к результату. А когда прихожане из скриптопараши небрежно листают "этого вашего" K&R, надеясь со своей гавнокодерской колокольни схватить все на лету, то велика вероятность, что наш глубокоуважаемый продвинутый молодой вайтишник вынесет вердикт "это какая-то старперская головоломка" и уйдет сосать хуй смотреть ютуб с печеньками.
351 1381088
>>81086
Ты сейчас описал, как я другие языки пытался освоить. Руки сами пишут как на Си.
352 1381091
>>81083

>как работают в Си массивы


берешь драфт последнего стандарта си
поиском вбиваешь array и читаешь че там и как
описание формальное, но одновременно со множеством примеров и объяснений
353 1381140
>>81091
алсо, если тупенький, то следует помедитировать над приложением A в в К&R
354 1381142
>>81088
Ну, твой вариант хотя бы работает, а не приводит в тред с проблемой "у меня массив сломался". Дело за малым: не полениться почитать, в какие плюшки умеет твой языкнэйм, и пользоваться в свое удовольствие. А вот обратное, то есть думать, что Си - это такой ретро Питон, который за чуть большее количестве буков наградит меня шармом 80-х и пропуском в ламповые тредики, как своего... непростительно
355 1381192
Что этот закомплексованный уебан вообще несёт? Какие нахуй массивы, правила дискуссий на борде, обертки для структур ВООБЩЕ АХУЕТЬ.
Уебану что-то пришло в голову на почве отека мозга от бензилового спирта из ларька, и он пол треда обосрал, а вы ещё уебаны кормите его? Пидорасы из школы 21 захватили нахуй весь тред, умрите нахуй.
356 1381239
>>81081
>>81065
>>81075
>>81086
>>81088
>>81091
До чего же кромешные дебилы и кукарекающие чмыри - это просто очаровательно.
Все же есть польза от 2ch.mail.ru - нигде больше такого скопления неполноценных дегенератов не бывает.
357 1381276
>>81192
Ты тоже дебил, кстати.
Такой же как и все прочие.
358 1381408
>>81192

>Какие нахуй массивы


какие прописаны в стандарте, уебище
359 1381465
>>81239
Ну вот, уже кто-то, кроме меня, назвал меня дегенератом. Стало быть, неспроста тревожился. Пойду убьюсь, чтоли...
360 1381523
Для чего сишка вообще применяется в 2019 году?
361 1381536
>>81523
Ембед, серверы, базы данных, графон, геймдев, шейдеры, системные тулзы для ленупса, работа с волнами (в основном на BM)
362 1381538
>>81523
JVM, многие скрипты, большинство БД сделаны на С, соответственно, требуют его для допила/мейнтейна
363 1381564
>>81523
Для обсуждения в Си-треде
364 1381572
>>81523

>Для чего сишка вообще применяется в 2019 году?


чтобы лабы студентам на "введение в программирование" на первом курсе было на чем делать! че ты как маленький
365 1381574
>>81538

>JVM


там сделан на крестах маленький рантайм, все остальное сделано на самой явке, включая и сам компилер на явке бутстрапнут
366 1381580
>>81574
На языке программирования вообще мало что написано, программы там какие-то, а все остальное, "Война и Мир" там и прочее... ну ты понял
367 1381582
>>81574
блин, я какое-то хуевое сравнение привел. Короче, суть в том, что без сишки ничего бы не было, так он востребован и высокооплачиваем. Из нас мало кто устроится, но каждый из нас КОГДА-ТО станет круче всех Страуструпов и Кармаков, и вот тогда держись мой Мухосранск, все выкуплю. Эх... <звуки заводки будильника, чтоб не проспать, а то кассиров не щадят>
368 1381589
>>81582
Это довольно голословное заявление. Значимость сишки не определяется самой сишкой. С таким же успехом можно сказать, что без бишки ничего бы не было.
369 1381609
>>80962
"Массив это указатели" это только полуправда. На самом деле у них много отличий (но также и сходств). Завали ебало, если не знаешь нихуя.
370 1381611
Ебанутые, нахуя вы стены текста пишете, ни одного не прочитал до конца, смысла ноль в них
371 1381624
>>81611

>смысла ноль в них


как и в твоем рождении, сладенький
372 1381648
Мдя, тред жалок как всегда, полон кукареков, только полтора адеквата.

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

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

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

>>80987
Массив одним куском плох для оптимизации из за фрагментации памяти. Лучше выделять произвольными кусками с возможностью фрагментации. Так работает файловая система на диске, вроде должно быть понятно по какой причине. Подобным образом работает любая надежная система. Почему сишкодебилы настолько зашоренные дауны, что не понимают очевидного, а только повторяют за бумажкой как безмозглые попугаи? Вот типичный пример такого идиотины >>81192 , увидел отличие от заученных определений и мирок с треском порвался, вызывая защитную реакцию: "врётиврётиврёти".
372 1381648
Мдя, тред жалок как всегда, полон кукареков, только полтора адеквата.

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

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

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

>>80987
Массив одним куском плох для оптимизации из за фрагментации памяти. Лучше выделять произвольными кусками с возможностью фрагментации. Так работает файловая система на диске, вроде должно быть понятно по какой причине. Подобным образом работает любая надежная система. Почему сишкодебилы настолько зашоренные дауны, что не понимают очевидного, а только повторяют за бумажкой как безмозглые попугаи? Вот типичный пример такого идиотины >>81192 , увидел отличие от заученных определений и мирок с треском порвался, вызывая защитную реакцию: "врётиврётиврёти".
373 1381653
>>81648

>С++ это и есть Си буквально


Не совсем. Си не является подмножеством крестов.
Вот на такое крестовый компилятор будет ругаться, и сишный нет:
char ch = 7;
void звезда pv = &ch;
int звезда pi = pv;
мимокрестовик.
374 1381654
Т
375 1381663
>>81653
Ну да, кресты построже с типами, больше нужно приводить явно, но это косметика.
И как было сказано, чисто сишный компилятор уже неактуален. Кто работает в узких сферах его применения, сам разберется, а большинство людей сидят на крестовом компиляторе. Повторюсь, данный тред нужен в первую очередь для изучающих сишную часть крестов, а не чистую сишку, которая неактуальна.
376 1381679
>>81624
Странно что ты не высрал кучу текста.
377 1381691
>>81648

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


шо? любая cpu оптимизация щас в итоге заканчивается тем что структура данных проектирутся в виде непрерывного куска памяти и чтобы еще обход последовательный был..
чтобы кеши гретые были, чтобы конвеер не слетал..
эдакий шаг назад, намеренный примитивизм..
структуры разбиваются на массивы в фортран стиле, алгоритм переделывается так чтобы последовательный обход данных был, один за другим..
378 1381714
>>81648
Ещё раз ты, глупый неосилятор, заквотишь мой пост, и я уничтожу твое самомнение, заквотив твой в такой же стене текста. Съезди отсюда нахуй детей в питон треде впечатять.
379 1381728
>>81648

> фрагментации памяти


2019 год, 64-битные процессоры повсюду, терабайты адресного пространства...

> фрагментации памяти


> фрагментации


> памяти


Как же я проиграл!
380 1381733
>>81728

>64-битные процессоры повсюду, терабайты адресного пространства.


Нет бога, кроме Интел, и Майкрософт - пророк его!
381 1381735
>>81733
Дорогой, у тебя в смартфоне стоит 64-битный же арм. Проснись, на дворе 2019.
382 1381738
>>81735
Няш, не все ограничивается десктопом и смартфоном.
383 1381774
>>81738
Ало, долбоеб отбитый, давно из школы 21 своей выходил? Сейчас даже на чайниках эмулируют х86, блять
384 1381779
>>81774
Быдлоадмину жопку продолжает рвать, лол
385 1381797
>>81691
Утерянное знание, хранящееся только на скрижалях писателей BLAS-ов, которое они передают из поколения в поколение.
386 1381816
Добрый день, Котаны! Нужен ваш совет..

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

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

> что необходимо доучить


Очевидный вариант - дрочить ядро линукса. Ну и на embedded понемногу поглядывать.
388 1381824
>>81816

>Потому вопрос, какие пути развития подскажете


Я бы на Java бы перекотился, а Си для вставок и библиотек оставил
389 1381846
>>81589
Ну, не Сишка, так что-то другое. Имеется ввиду значимость байтоебского языка. А бишку с таким же успехом топили бы скриптомакаки, так что предмет споров аналогичен.
390 1381851
>>81846
важность быстрофикс
391 1381981
>>81846
Лол! Ты думаешь байты ебать в си начали или что? Си стал крут из-за ахуенной системы типов и из-за развития ООП и программ пишущихся в память, но никак не из-за байтоебства, которое в си весьма посредственное и упраздненное генерацией асембли кода
392 1381991
>>81981
Именно необходимость накатывать asm при малейшей потребности в байтоебстве была той болью, от которой спасло появление Си. ящитаю
393 1381993
>>81981
>>81991
Я не пытаюсь что-то доказать. Просто уточняю, что имел ввиду. А уж что я имел ввиду, об этом я не сильно запаривался, ибо основная цель была поныть, что моя мечта стать Кармаком - лишь мечта...
394 1382003
>>81991
Проблема только в том, что си это слишком высокоуровневый язык, чтобы в него перенести байтоебские функции, потому-то байты в нем никто давно уже и не ебет, да и современные компиляторы асм уже игнорируют и лексику преобразуют напрямую в машинный.
395 1382019
>>82003

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


Что, прямо совсем напрямую? А оптимизируют они в астрале что ли?
396 1382055
>>82003
А как же битовые поля, а как же постоянные шифты с масками, все пакед структуры для работы с железом, или это уже не байтоёбство?
397 1382132
>>82003

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


А что такое указатели и sizeof, если не байты? И где тут высокоуровневость?
398 1382227
>>82132

>указатели


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

>sizeof


>байты


)))) и этот сброд заходит в си тред каждый день рассказывать свое мнение об индустрии
Дальше не читал. Съеби.
399 1382229
Хотя что я ожидал от безработного уебана вкатывальщика, постящего в 6:49, можно было сразу не читать. Пробабли в школу проснулся уебок, и сразу сосачик чекать
400 1382271
>>82003

> и современные компиляторы асм уже игнорируют и лексику преобразуют напрямую в машинный.


насколько я понимаю, таки gcc на одной из стадий компиляции переводит в ассемблерные код целевой машины, а потом уже конкретный ассемблер транслирует эти коды в машкод
а clang вроде как работает в двух режимах - либо может из своего внутреннего представления напрямую в машкоды перегнать, либо сначала в ассемблер целевой машины
само собой, оба компилятора могут генерировать/оставлять ассемблерный код если пользователь указал соотв опцию, чтобы этот код можно было посмотреть
в отладчиках просмотр ассемблерного кода - одна из основных возможностей
как подступает комбилер майкрософт - напрямую генерит или через ассемблер, я совсем не знаю
поправте меня, если кто больше знает
вообще, ходит такая полушутка - типа что хороший программист может назвать 5 стадий компиляции сишного/крестового кода, а очень хороший - все 11
401 1382297
>>82271

> очень хороший - все 11


Есть еще плагины с кастомными проходами, которых может быть сколько угодно.

> как подступает комбилер майкрософт


Подходы к компиляции везде одинаковые. Там бэкенд в виде дллки в отличие от отдельных программ у гцц, поэтому оно слегка под капотом, но насколько я знаю, C2 работает только с промежуточным представлением, а асм генерит, только если ты для себя попросишь листинг.
402 1382326
>>82271
по-моему все компиляторы нынче работают в варианте
1. Фронтенд генерирует IR
2. Бэкенд генерирует из IR обьектиники

"Ассемблера" там нет нигде,
403 1382328
>>82326
я те говорю: что для gcc вроде это не так до сих пор
они там таки генерят сначала в асм целевой платформы, а потом этот асм уже транлируется конкретным ассемблером в объектник целевой платформы
НО не уверен в этом на 100%
404 1382340
>>82227
Шавка тявкает, караван идет.
405 1382347
>>82326

> "Ассемблера" там нет нигде


gcc -save-temps file.c
ls file.*
sage 406 1382350
>>82347
Но я, наверное, должен дополнить, что с -flto все интереснее. И тогда там еще .s от LTO будет с рандомным именем.
407 1382355
>>82340
Пойди документацию почитай, объебос диванный. Коли есть время ночью хуйню писать, найдешь время поучиться чему-нибудь.
408 1382383
Помоги. Нужно найти(среди отрицательных)минимальный элемент динамического массива. Вывести его значение и индекс.

Но у меня какоенто, трабл. Все запускается, но не работает правильно. Вась глянь пж - https://pastebin.com/QKfnrr2x
409 1382390
>>82383
Подумай, что делает твой код, попробуй сам поработать компьютером и выполнить свой код допустим для массива из 5 элементов, сразу поймёшь, где проблема.
sage 410 1382403
>>82383
>>82390

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


Это никак не поможет ему заметить, что он (кроме очевидной ошибки) забыл инициализировать min.
Image 451.png98 Кб, 430x344
411 1382406
В чем юмор?
412 1382409
>>82406
1[foo]
413 1382422
>>82403
Ну в принципе да, все остальные ошибки в логике работы.
А ЧТО ЕМЛИ ОН СПЕЦИАЛЬНО НЕ ИНИЦИАЛИЗИРОВАЛ МИН, ТОГДА ЕСЛИ СОБИРАТЬ КОД НА MSVC МИН БУДЕТ РАВЕН 0xCCCCCCCC это как раз достаточно большое по модулю отрицательное число, ммммм обожаю теории
414 1382448
>>82422
Тупо АРГ чувак, реально. Твой номер готов - bip-bup-bap 2220000011 00220 000()l1za/
415 1382731
Можно ли как-то получить причину почему fopen возвращает NULL?
Пытаюсь создать файл на мак оси, пишут абсолютный путь, пытаюсь открыть как wb но всегда возвращает null. Вангую что проблемы с какими-то пермишенами, но не знаю что конкретно.
416 1382751
>>82731
errno
417 1382753
>>82751
Спасибо, я только что-то не нахожу нужно ли ее обнулять перед каждым вызовом сомнительной функции? Т.е. не будет такого что если нет ошибки то функция просто ничего не присваивает в переменную, и если была какая-то ошибка до вызова, то я могут спутать ее?
418 1382757
>>82753
Ты же после вызова проверяешь на NULL. Думаю нет смысла еще и errno обнулять.
419 1382761
Опять я выхожу на связь. Гляньте на 2 скрина с закомменченным printf(" (%d) ", count); и с ним. Какого хуя происходит? Почему счёт date2 внезапно прекращается, но count при этом продолжает считать?
420 1382762
К тому же count каким-то хуем считает до 13, а потом идёт 9. Как так?
421 1382763
>>82762
Сложно сказать, кидай код.
422 1382764
>>82751
>>82731
Лучше сразу perror(), чтобы никуда не ползать и не запоминать магические числа.

>>82762

> Какого хуя происходит?


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

Если бы у тебя был нормальный комп, я бы послал тебя собирать с -fsanitize=address, это решило бы проблему без кода и использования мозга секунд за пять, но ты не ищешь легких путей.
423 1382768
>>82764

>-fsanitize=address


Загуглил, сохранил. Спасибо.
мимопроходил
Screenshot2019-04-17-18-05-48-085com.n0n3m4.droidc.png182 Кб, 1080x1920
424 1382772
>>82763
>>82764
Исправил таким способов, ограничив условие только цифрами 0-9. Но я так и не понял хули s увеличивался, ведь условие не выполнялось нихуя и так.
Screenshot-2019-4-17  Программирование - C Programming Lang[...].png4 Кб, 360x38
425 1382778
>>82772
Надеюсь это шутка? Гугли разницу между && и &
426 1382781
>>82778
Хотя в твоем случае, скорее всего ничего особо страшного. Но считается плохим стилем.
427 1382785
>>82778
Ты охуенен. А мы за весь тред так и не заметили.
428 1382789
При выделении динамической памяти для двумерного массива используется указатель на указатель в виде указателя на массив указателей, объявление в виде (звезда a)[] является указателем на обычный массив, какое тогда объявление будет эквивалентным указателю на указатель в случае указателя на массив ебучих указателей?
429 1382799
>>82789
У меня syntax error от твоего объяснения.

> указателя на массив ебучих указателей


int ∗(∗a)[]

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


Нет, простого int ∗∗a более чем достаточно. По a[m] у тебя указатель на строку, по a[m][n] элемент.
430 1382820
>>82789
речь идет о "настоящем" двухмерном массиве, те массиве массивов?
тогда ты не сможешь целиком расположить их в динамической памяти, размерность первого массива должна быть определена, и он, как следствие, будет размещен на стеке либо глобально
в k&r, кстати, этот вопрос обсуждается
431 1382866
>>82768
Эх, не всем поможет. MinGW не поддерживает.
432 1382917
>>82768
Объясните что это, я погуглил но так и не понял.
433 1382924
>>82917
Писю вставил, закончил, а девочка в душ идёт мыться
434 1382935
>>82924

>девочка


Ну ты и отсталый :3
435 1382940
>>82935
но мы же не в js-треде
436 1382942
>>82917
leaksanitizer
437 1382959
>>82866
Да, надо линукс. Или можешь сделать полезное миру и портировать уже нормально наконец.

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

>>82942
Не только leak, и leak можно самому детектить всегда, обернув malloc()/free() и поддерживая какую-нибудь структурку со списком используемых блоков. А вот для других вещей уже нужна поддержка компилятором.
438 1383013
Глупый вопрос, но зачем нужны указатели на структуры?
439 1383023
>>83013
Передавать их в функции?
440 1383025
>>83013
Городить любые структуры сложнее массива. Например... связный список?
441 1383028
Аноны, но уж вы-то должны знать. УЖ ВЫ-ТО, С ВАШИМ НИВЬИБЕННЫМ АСИКЬЮ поможете мне ТУПОМУ разобраться. Итак. Почему. Когда я беру равку (DNG из мобилы) и перемножаю значения на 1.5~2, то результат дебайера уходит в пурпурные тона, если делю на 1.5~2, то в зелёные. ПОЧЕМУ, СУКА. Пробовал dcraw с -M, небо пробовал и Аллаха, всё одно, солоноватое на вкус это слёзы, братан.
И ещё, сцук, значения матриц в самой равке одинаковые и не зависят от выдержки. Казалось бы: больше света -> больше значения, но вот хуй.
Есть соображения?
442 1383033
>>83028

>пурпурные и зелёные


Спасибо, док.
Про этот конкретный формат не знаю, но так судя по всему у тебя YUV а не RGB. У меня такие же цвета были, когда компоненты хромы (U и V) в экстремальные значения уходили. Обычно они кодируются как 0-255 -> -127-128. С Y обычно всё чуть сложнее и зависит от конечного стандарта.
443 1383039
>>82761
блок один в другой засунь, чтобы у тебя s==3 не считалось лишний раз. Алсо, переделай на
count += (s % 3 == 0);
препод по головке погладит.
и перепиши всю хуйню на расте
444 1383044
>>83033
Охх, даже не близко. Это 16-бит равка BGGR
со значениями от 0 до 1023. Мне нужно провести операцию над ней, а потом сделать дебайер, чтобы посмотреть, иначе оно не смотрится.
Можешь сам проверить: отрезаешь от dng файла снизу блок размером image.height x image.width двубайтовых слов, умножаешь/делишь, приделываешь обратно к заголовку.
445 1383045
>>82959
А эту штуку только для дебага используют или и в релизе оставляют?
446 1383046
>>83045
Для релиза оно слишком медленное (в 2 с чем-то раза медленнее, если я правильно помню), и отладочные символы ей нужны для красивых сообщений, и память жрет.
447 1383050
Самое место, наверное, чтобы спросить - а как в WinAPI включить графику уровня хотя-бы XP? Про стили почитал, но не совсем то, что нужно. Сложная, блин, штука
448 1383051
>>83050

>графику


Визуальное оформление.
449 1383057
Никак не пойму почему выдает предупреждение на пикрил, и почему тип с двумя звездочками в разных местах?

Функция принимает прикрил2. Объект pFrame содержит пикрил3
Yo-Dawg-Heard-You.jpg17 Кб, 500x323
450 1383058
>>83057
I heard you like *const
ну ты понял, короч
451 1383059
>>83057
uint8 ★const dst[]
dst - массив константных указателей на uint8, что, после array decay, получается как
uint8 ★const ★dst
452 1383061
>>83050
В этом или прошлом треде обсуждали: положить в ресурсы манифест с Common Controls 6, дернуть из WinMain InitCommonControls(Ex), дергать theme api, если рисуешь какие-то кастомные контролы. Опционально дергать DWM на предмет всяких прозрачностей. Рисовать на GDI+, если нужно сглаживание (но можно притащить не родную либу для векторной графики или вообще взять OpenGL). По идее еще Direct2D можно, но я в него не играл.
453 1383124
Так какая среда для C лучше подойдёт?
454 1383125
>>83124
Блокнот. А когда язык выучишь - сам ответишь на свой вопрос.
455 1383139
>>83124
Oracle linux + gcc + emacs
456 1383140
>>83124
Oracle linux + shell + gcc + emacs
sage 457 1383142
>>83140
Ты все неправильно написал!
Microsoft windows + cmd + csc + edlin.
458 1383161
Аноны, мне вот любопытно, так вообще делает кто-то?
https://pastebin.com/PVcPSZam
459 1383162
>>83161
Хуета громоздкая, решение нжвыглядит как код джавы вне джавы, особенно этот мерзкий енам. Прием функцией указателя на функцию это ваще пиздец уровня laba.cpp, тоесть ну нахуя тут это? Почему нельзя линкануть просто два сишника в либу и процедурно вызывать? Короче прикольно но максимум на уровне чтоб все ахуели как я могу, граничащем с я долбоеб
460 1383166
>>83162

>Прием функцией указателя на функцию это ваще пиздец


Интерфейс, идентичный qsort. А есть другие способы косплеить template?
461 1383189
>>83124
C4droid
462 1383190
>>82959
Для VisualStudio есть _CrtSetDbgFlag.
463 1383192
>>83166
Зачем косплеить template, если есть специальный язык с template, и знаний С тебе хватит для вката в него?
мимопроходил
464 1383234
>>83192
даже не template, а лямбды. На крестах точно так же надо передавать функцию сравнения, если сортируешь что-то не для решения олимпиады, а для реальной задачи со структурами и ключами, и T::operator< не подойдет.
image.png125 Кб, 1280x1024
465 1383241
привет, помогите выбрать кодировку для того чтобы в исходном коде я мог писать комметарии на русском и иногда хотябы через printf выводить сообщения на русском. Просто однажды столкнулся с такой хуйней: накатил убунту, открыл все свои старые исходники а там видимо кодировка сбилась и комментарии к коду были просто рандомными символами. А еще если пользуюсь стандартным блокнотом в шиндовсе и в аргументе функции printf пишу русские буквы то при выполнении программы опять квакозябра. че делать? мож редактор посоветуете? или с моими мозгами поможет только гуманитарное образование?
466 1383247
>>83234

>если сортируешь что-то не для решения олимпиады


А для чего ты сортируешь? Ох, щи.
467 1383248
468 1383249
>>83248
спася
469 1383296
Сколько можно зарабатывать написанием модулей ядра под линукс? Долго ли строить карьеру, чтобы выйти на хорошую зарплату? Лоулвл кодинг и реверсинг мне доставляет, но сосать хуй на съемных квартирах как-то не хочется.
470 1383308
>>83247
То есть сортировка существует только для того, что ее использовали со стандартным операторов сравнения?
471 1383314
>>83234

>а лямбды


Скорее функторы по сути лямбды - анонимные функторы
472 1383315
>>83234
Лямбда это не совсем оно, лямбда это функтор, который работает как функция и соотв. передаваться как указатель на функцию.
А не в обратном порядке.
473 1383319
>>83315
Может передаваться*
Функтор это класс с перегруженным оператором круглые скобки, лямбда это просто анонимный функтордля тебя анонимный, компилятор все развернёт в итоге и у него будет название конечно
kr2.jpg98 Кб, 1280x663
474 1383341
Век живи - век учись...
475 1383404
>>83319
лямбды могут делать захват контекста, а в функторы его приходится передавать
поэтому по месту удобней использовать лямбды, а если нужно решение которое будет использоваться во многих местах кода, то лучше по старинке сделать функтор, а лучше обобщенный функтор, а про могут еще и иерархию функторов заебашить
476 1383405
>>83404
в си, кстати, и вообще приходилось глобальные переменные для этого использовать..
477 1383412
>>83296
вышка по специальности, +10 лет реального опыта кодинга, выйдешь на 2.5k долларов (может быть)
до этого 5 лет вуза будешь нищим студентом, жрать дошики в общаге
потом работа несколько лет, денег будет хватать только на съем + жратва, буквально
как то так
478 1383418
>>83405
Ну, например 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 в заднице...
479 1383423
>>83418
ну да
подобные задачи делаются через замыкания в языках, которые это нативно поддерживают
в крестах же есть синтаксический сахарок щас - лямбды с захватами, этакие неполноценные замыкания, а раньше это через функторы можно было делать
а в сишке делают так как ты написал
sage 480 1383425
>>83418

> thread-safety в заднице


_Thread_local давно завезли. Ты так извращаешься, потому что ты хочешь извращаться, а не потому, что это реально необходимо.

Проблема со статическими/глобальными переменными только в реентерабельности. А эта проблема редко встает, а там где она возникает, о ней думают еще при дизайне апи.
481 1383460
>>83412
А если питон выучить и в машин лернинг с биг датоЙ?
482 1383466
>>83460
учи че хочешь, мне похуй
все равно все будет зависеть от твоих social skills в итоге
483 1383470
>>83466

> social skills


А почему в России таким мягким словом называют "social skills"? Когда ИРЛ в России это подразумевает умение заставить более низкоранговых самцов отжиматься и приседать с табуретками, а самому в это время бить их ногой в туловище, кулаком по почкам и требовать ночью сладости, деньги и гигиенические принадлежности?
484 1383473
>>83470
Ты по жизни привык все буквально воспринимать, вот тебе и тяжело понять что имеется в виду. Для нормальных людей это "сошел скилс" трансформируется в два простых правила - уважать себя и других, и не быть вафлером. На этом стоит закончить, не надо тред скатывать в сипп тред.
485 1383477
>>83473

>уважать себя и других, и не быть вафлером.


Иными словами это значит, что бей по почкам и в туловище, иначе бить будут тебя, а еще и вафлером назовут.
486 1383478
>>83470
не думаю что что-то из перечисленного тобой поможет в поиске работы

>>83473
что значит не быть вафлером и как именно это проверяют при приёме на работу? штатный стоматолог с микроскопом?
487 1383484
Помогите, Керниган говна в жопу залил
Почему у меня никогда не завершается нормально цикл:
while ( (c = getchar())!= EOF);
Притом замени eof на что угодно, хоть 1, хоть 0, всё-равно он не завершается и дальше принимает ввод
488 1383486
https://pastebin.com/THwTuhqf
Есть код реализации стека, вроде как все понятно, но зачем тут указатель на указатель? Объясните поподробней, если можете, как он тут используется.
Снимок.PNG92 Кб, 875x466
489 1383490
Аноны, помогите. Почему это работает? Почему функция является указателем и как это вообще, почему int складывается c char и сравнивается с int? Что вообще происходит? Никак не поясняется
490 1383492
>>83486
Это какой-то ужас. Вот тебе нормальный стэк.
https://pastebin.com/J6bsgY5k
491 1383493
>>83490
Там как бы написано...
Функция ВОЗВРАЩАЕТ указатель типа char
492 1383494
>>83490
Функция возвращает указатель, извиняюсь, не заметил. А с остальным что? Почему оно работает?
493 1383496
>>83494
А там немного математики. Комментарии-то почитай.
494 1383500
495 1383502
>>83496
Я уже допер. Я и забыл о том, что *(a+1) == a[1] и что все это можно сравнивать.
Тупил минут 15, насрал в тред и сразу на меня снизошло озарение. Двач творит чудеса
496 1383504
>>83484
Переменная с у тебя, конечно, char?
image.png70 Кб, 803x329
497 1383508
>>83484
int, нужно char?
498 1383509
499 1383510
>>83508
Тогда все норм. Ранее уже кто-то догадался char объявить.
500 1383515
>>83510
так хуле оно не завершается?
Может кто-то работающий код, принимающий на ввод символы через getchar запилить и сюда скинуть?
что угодно, короче мне протестировать, может это у меня clion потек, но я реально не понимаю
501 1383520
>>83515
Тем что тебе надо терминировать ввод. В Linux ctrl+D. В Windows вроде ctrl+Z, но я не уверен
502 1383522
>>83520
ctrl + D, как я и ожидал - в clion чет нашаманили, в итоге там это не работает лол, в онлайн компиляторе все работает
503 1383550
Нихуя не понял с указателями. Как сделать чтобы функция меняла значение переменной? Пишу int func(int &count); но мне пишет error: expected ';', ',' or ')' before '&' token.
504 1383560
>>83550
Чувак, int func(int &count) - ссылка на int. В чистом Си нет ссылок.
int func(int * count) - указатель на int, они есть и в Си и С++
В Си & - взятие адреса переменной.
Т.е. где-то в коде
int y = 12;
func(&y) - ты передаешь адрес переменной y. А адреса у нас хранятся в типе-указателе.
505 1383567
>>83560
Что значит ссылка на int?
506 1383569
>>83567
Расширение идеи указателей в С++. Похоже на указатели, но имеет ряд отличий.
Тред утонул или удален.
Это копия, сохраненная 27 апреля 2019 года.

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

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