24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
В тред призываются программисты, чтобы ответить на простой вопрос. Нахуя в ебучем C++ существуют ссаные указатели звёздочка и ссылки &, если передать значение хуйни в другую функцию можно без этого говна? С примерами, пожалуйста. В шараге заставляют передавать всякое говно по указателям, а я нихуя не понимаю как это работает И нахуя это нужно, если всё работает без указателей. А ещё нахуя нужны прототипы функций и что за говно мы указываем в скобочках при (а) вызове функции и (б) при написании функции ну после main, когда пишем сам код? Все учебники пишутся пидорасами, которые не могут объяснить всё человеческим языком, поэтому вся надежда на вас.
>>139503592 (OP) > я нихуя не понимаю, как это работает Указатели/ссылки - универсальный детектор долбоебов, максимум для которых - быть мартышкой-говнокодером и клепать сайтики-однодневки по 100рублей за десяток
>>139503789 Именно для того, чтоб всякий скам осознал свою никчемность и не лез в профессию. Сортоф порог вхождения. серьезно, блять, как можно не понимать принципов адресации?! Прототипы - ещё проще!
>>139503845 И второй вариант. http://ideone.com/3PB9YW Я добавил "x" в прототип функции, но это никак не повлияло на работу кода. НО если я уберу "x" из круглых скобок в самой функции, то всё пиздец ошибка ничего нихуя не работает.
>>139503592 (OP) господи, каков же даун. Ладно ссылки/указатели - наука не для даунов, но как аргументы в функцию передаются и как принимаются даже дауны понимают. Про то что учебники пишутся пидарасами - пошел нахуй теперь уж точно. Не нравится литература, всегда можно уйти на всякую дрочь типа си пи пи студио и там читать статьи по темам.
>>139503941 В этом и смысл прототипа. Он просто говорит компилятору, что функция принимает один аргумента типа ИНТ. Все остальное ему похуй, до того момента пока не начнется само описание функции. В описании функции тебе придется писать название принимаемой переменной, ибо по-другому не сможешь работать с ней внутри функции
>>139504041 Писать название переменной, которая передаётся при вызове функции? Переменной, которая будет внутри функции? Она должна существовать внутри функции?
>>139504043 Ты не поверишь, но прототипы можно объявлять вообще без имен переменных, просто указывая тип передаваемого в функцию значения. Тут у тебя тред познания плюсов для самых маленьких? Мб лучше возьмешь учебник/туториал и прочтешь его? Я понммаю, это трудно, но так будет гораздо быстрее.
>>139504185 Если ты не осиливаешь простой туториал по указателям/ссылкам - это не моя проблема, специально для тебя написал >Я понммаю, это трудно Ты через час высрешься с вопросом "А как в плюсах сделать многомерный массив?????" и т.д., тоже помогать твоей ленивой жопе вникнуть в суть того, что читаешь/делаешь?
Да ладно, что вы злые-то такие, вдруг оп вообще не на пограмиста учится, а на физика какого-нибудь. В моей шараге физикам плюсы показывают. Так что неудивительно. Но если оп все таки наше ай ти будущее - пора съебываться из этой страны
>>139503592 (OP) Долбоёб ты. Нахуя тебе стопитсот одинаковых переменных, если можно использовать одну и просто программе пальцем показывать где она лежит. Представь, что ты отправился в путешествие по стране и приехал в другой город. Спустя каждые 100 метров тебе нужно посмотреть в свою карту и каждые сто метров ты покупаешь новую в какой-нибудь роспечати. Это дохуя не удобно и затратно. Вместо этого ты просто кладёшь карту в свой рюкзак и достаёшь её при необходимости.
Что ж вы так обозлились на ОПА? Сразу все про будущее айти и все такое. Очевидно, что этот даун никуда не продвинется. Его максимум - сидеть в офисе и выравнивать отчеты в ворде по ширине, так как бухгалтерша Нина тоже с вышкой пришла и тоже нихуя не умеет. Суть рашки в этом и заключается: долбоебы начальники нанимают долбоебов сотрудников и делают долбоебски бесполезную хуйню параллельно воруя деньги.
>>139503592 (OP) Брешь книгу "Программирование. Принципы и практика использования C++" Струструпа, и читаешь ее пока не прочитаешь пару раз, там все это разжевано для таких как ты.
>>139503592 (OP) Уася, берешь и наворачиваешь c++ лекции и упражнения, Стивен Прата, там и за указатели тебе подробно расскажут, и за прототип функции. Идеальная книга для начинающего. Читаешь, вникаешь, выполняешь упражнения.
>>139504563 > код должен быть самокомментируемым Блять, приходят долбоебы, которые поначитались умных книжек, а кодить так и не научились, и ваяют под псилоцибином монстров с семью хуями и пятью жопами. Без коментариев офк, ибо ОЧЕВИДНА ЖИ !!
>>139504593 >А если вас несколько и все в разные города хотите? Я не ОП, таки школота, да. Указатели юзал только в паскале, там на них стек делали, списки, дерево. А вот в C++ не доходит. Ну объявил я в main указатель. А как его из другого файла cpp достать без передачи? А передача тоже через переменную? Так где экономия памяти? Конечно, я могу гнать. А конкретную литературу можете посоветовать, где тема лучше всего раскрывается.
>>139504695 Еще раз: если ты не в силах писать разборчивый и структурированный код, мне тебя жаль. Комментарии хуевый код только хуевее сделают, а хорошему не нужны
>>139504698 Во-первых, не слушай пидораса, который тебе Страуструпа советует. Во-вторых, в оп-посте ты спрашиваешь, зачем нужный указатели и зачем нужны прототипы функции. А ответ на этот вопрос ты как раз у Праты и найдешь.
>>139504727 Вот поэтому надо начинать с няшной сишки, а не сраного приплюснутого си. Ты ещё спроси, почему это ограничение виртуальной памяти 2 (3) Гб на каждое приложение в 32 битной ОС, когда в компе может быть как меньший, так и больший объём физической памяти. Ещё напиши, что непрерывный участок виртуальной памяти означает также непрерывный участок физической памяти.
>>139504760 Обход дублирования кода. Быстрее можно понять, что конкретно код делает. Редактировать приходится в определённом методе, а не весь мэйн шелудить. Использование методов одного класса в другом. Инкапсуляция методов. Опять пример с картами. Едешь в другой город, купил карту России, где нихуя не понятно и город, в котором ты находишься на этой карте даже меньше твоего правого яичка, а значит третьяковку тебе не найти.
>>139504845 >Ты ещё спроси, почему это ограничение виртуальной памяти 2 (3) Гб на каждое приложение в 32 битной ОС, когда в компе может быть как меньший, так и больший объём физической памяти. Ещё напиши, что непрерывный участок виртуальной памяти означает также непрерывный участок физической памяти. Ну ты совсем-то, того... не лютуй. Про ограничение RAM 3Gb из-за адресации 32bit даже я знаю. И про страницы памяти. Ты лучше книжку посоветуй.
>>139503592 (OP) >И нахуя это нужно, если всё работает без указателей Оно без них нормально работает, пока ты в своей шараге классы и структуры не изучил. Каждый раз копировать 100-байтовый объект очень затратно по сравнению с передачей 4-байтового или 8-байтового указателя на него.
>>139504727 >А как его из другого файла cpp достать без передачи? Сделать глобальным, но это костыль же. Если одна переменная видна многими областями видимости, то это плохо т.к. те же области видимости захламляются. >А передача тоже через переменную? Так где экономия памяти? Так у тебя объект, на который ссылается указатель, может быть огромным (тот же массив) и копировать весь в функцию очень дорого.
>>139503592 (OP) По сути для боли и страданий. Ну и чтобы ты понимал, что ты в стек пихаешь, а что у тебя просто в памяти висит. Если будешь всё в стек значениями пихать, а не ссылками то стек переполнится.
>>139505204 Переменные надо объявлять как можно ближе к месту использования. "Совершенный код" почитай. Вот ещё прекрасный образец оптимизации в VS2013.
>>139505219 Переменные могут в регистрах быть расположены. И память для выполнения функции резервируется в начале. Если под ifом объявить массив, то память на его размещение будет зарезервирована в любом случае, даже если он не будет использоваться. А вот конструктор (если это C++, а не си, как на пикче) вызван не будет, это да.
>>139503592 (OP) >если передать значение хуйни в другую функцию можно без этого говна Можно и без него. Только в момент передачи у тебя создаётся копия передаваемого параметра на стеке. Пока у тебя мелкочисла, то всё путём. А вот если у тебя большой объект, то он может попросту не влезхть на стек. Или если у тебя в объекте нетривиальный конструктор копирования вся эта ебола может нехило тормозить.
>А ещё нахуя нужны прототипы функций Чтобы пообещать компилятору, что где-то у нас будет реализация этой функции. Почти любой проект состоит из нескольких файлов, и ты вполе можешь написать прототип и, соответственно, использовать функцию в одном файле, а реализовать её в другом. Прелесть нескольких файлов поймёшь как только заебёшься перескакивать через несколько сотен строк каждую минуту во время отладки.
>и (а) вызове функции и (б) при написании функции При вызове пишешь актуальные имена переменных или значения. При написании пишешь имена переменных, как они используются внутри функии. Маленький хак: в прототипах функции можно писать только типы, без имён.
>>139503592 (OP) Почитай Джесса Либерти - доходчиво чувак пишет, материал излагает по схеме "проблема" - "решение" - "анализ" - "резюме", а не в обратном порядке. Ты сильно дохуя рассуждаешь: "нахуя сделали, нахуя написали?!.", но не понимаешь всей картины. Сиди учись, короче, студент, ты заебал. Включай голову!
>>139504164 это все от недостатка образования. мне вот интересно, жс-асинхронные гуру вообще понимают, что выданные им в руки примитивы - это всего лишь пользовательская вершина айсберга, которая а) реализована на страшном и ужасном си, на котором по сути можно писать как угодно, в том числе и так. с той лишь разницей, что когда чего-то не хватает, можно написать самому, б) представляет собой частность, определенную реализацию некоторой вполне конкретной семантики, достаточно давно изобретенной и изученной людьми, которые отличают computer science от software engineering.
>>139505389 > При вызове пишешь актуальные имена переменных или значения. При написании пишешь имена переменных, как они используются внутри функии. Не понимаю твой сленг. Перепиши на человеческом.
>>139505389 >Маленький хак: в прототипах функции можно писать только типы, без имён. А потом ты забудешь сигнатуру и интеллисенс проведёт тебе хуем по губам: функция принимает 5 безымянных целых чисел, хз кто из них кто. Полезешь в реализацию или мануалы. Нахуй-нахуй такие хаки.
>>139504845 > Вот поэтому надо начинать с няшной сишки, а не сраного приплюснутого си. мм-м-м-м... как вспоминаю указатель на указатель на массив функций, который возвращает массив указателей, так сразу тепло на душе становится...
мимо извините си программер из 2й половины 90хх начала 2000х, с++ не осилил (ибо нинужно).
>>139505849 Ну а как надо? Все переменные в одной куче? Не легче ли будет разобраться, когда необходимые переменные находятся каждая в своём блоке, наиболее близко к месту использования?
>>139503592 (OP) 1) Ссылки и указатели. Ссылки и указатели нужны чтобы передавать не само значение, а лишь указатель на эти данные (в случае с указателями) или расширить область видимости имени для функции в которую она передается по ссылке. Допустим если у тебя переменная размером 500 мб, то передав в функцию по значению это потребует больших вычислений + увеличенной памяти (при копировании). Указатели в добавок к этому позволяют перемещаться по структуре данных. А специальные указатели позволяют не заботиться об удалении объекта на которые они ссылаются. 2) main() функция вызываемая операционной системой, её аргументы это то что ты передаешь программе при запуске. Например некоторые старые игры для смены языка или разрешения требовали запускать их с параметрами: yobagame.exe -language=russian -resolution=1024x768 Вот то что после названия файла и есть параметры запуска, передаваемые в main 3) Прототип функции (или объявление) нужен чтобы компилятор видил что такая функция существует, но еще не определена или определена в другом месте. К примеру ты можешь написать прототип, но саму функцию написать позже, когда остальная программа будет готова.
>>139506007 >переменная размером 500 мб long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long int i;
>>139505849 Не неси хуйни, ты заебал. В C++ чем ближе переменная к контексту использования, тем лучше. Паскаль-стайл декларации нужны были Вирту исключительно потому, что он осилил вложенные функции, но не осилил замыкания. В нормальных яыках портянка деклараций не нужна.
>>139506100 Это не псевдокод, а реально работающий код. Не смог найти алгоритм в гугле, пришлось использовать то, что восстановилось. Чуть-чуть поправил, убрал goto и готово.
>>139505292 Не всегда. Иногда читабельность лучше если группа переменных вынесена в один блок. Главное чтобы это не мешало производительности и потреблению памяти.
>>139506007 > 2) main() функция вызываемая операционной системой, её аргументы это то что ты передаешь программе при запуске. Например некоторые старые игры для смены языка или разрешения требовали запускать их с параметрами: А что насчёт посторонних функций?
>>139505697 Когда ты пишешь функцию, то в заголовке ты указываешь произвольное имя, по которому будешь получать передаваемые в функцию данные внутри этой самой функции.
Когда ты вызываешь функцию, то ты пишешь имя конкретной переменной, в которой лежит нужное тебе значение.
Вот допустим ты вызвал функцию, передав ей в качестве параметра переменную икс. Это превращается в следующий код: программа лезет в переменную икс, достатёт оттуда значение и кладёт в промежуточное хранилище, затем передаёт управление функции. Функция достаёт это значение из хранилища, создаёт новую переменную с именем, указанным в её реализации, и кладёт туда это значение. Таким образом, даже если в программе и в функции у тебя переменные названы одинаково, в реальности это будет два разных места в памяти.
>>139503592 (OP) Потому что когда передаёшь по значению у тебя создаётся новый экземпляр хуйни что ты передал и если ты её меняешь в оригинальной хуйне ничего не меняется. Если передаёшь по ссылке или указатель передаёшь, то всё чётко работает. Короче выебоны жавахолопа у тебя какие-то.
>>139506386 какие посторонние функции? другие функции просто функции. Функции выносят код в отдельный блок. Для удобства. Можно конечно и без них обойтись, но читаемость будет хуже. А еще линковка библиотек происходит методом передачи функций.
>>139506583 >Как сторонняя функция узнает, куда положить переданное ей значение переменной? Она вангует. Лучше в псевдокоде напиши, что ты спросить хочешь.
>>139506595 На примере этой >>139503845 программы. На что влияет то, что мы пишем в круглых скобках в прототипа функции zalupa_kentavra? На что влияет то, что мы пишем при вызове этой функции в main? Что за хуйню я написал в скобках, когда писал код функции? Как это можно упростить с помощью ваших указателей?
>>139506583 Она сама вполе может решить, куда ей положить. Вот дали тебе коробок спичек в руки, ты сам в состоянии решить, в какой карман ты его положишь
>>139506595 >Функции выносят код в отдельный блок. Для удобства. Можно конечно и без них обойтись, но читаемость будет хуже. Тащемта это верно скорее для инлайновых функций. Таки тру-фунцкии чуть по другому работают. Сама уже откомпилированная функция хранится где-то в памяти, а потом когда другая функция её вызывает, адрес на неё помещается в стек вызова и идёт хуйня малафья. Ну это если очень утрированно говорить. Короче при инлайновой функции никакого перехода нед в проге, а с обычной функцией поток выполнения куда-то там перескочет.
>>139506722 Добавь россыпь звёздочек и будет тебе счастье. Ты передаёшь переменную по значению и присваиваешь этой переменной новое значение. Тут не нужны указатели. Да, ты спрашиваешь самые основы, как будто только сейчас узнал о существовании C++.
>>139506555 Я тебе точно о том же: об удобстве восприятия человеком. Чем ближе объявление переменной к контексту её использования, тем проще воспринимать код, тем меньше стимула использовать переменные повторно и называть их как говно: "ка", "ии", "цс" и т. п. В Паскале, например, так не канает по названной мной причине: исключительное рукожопие аффтара. Он свой высер вскоре благополучно удолил и забыл, но постсовок помнит.
>>139506722 Ну вот у тебя может быть несколько файлов кода: declarations.h (прототипы функций и класов) functions.cpp (определения функций, то что у тебя в примере под main) classes.cpp (определения классов) и main.cpp (основной код программы)
В основном коде программы ты подключаешь один файл - declarations.h В declarations ты подключаешь определения
И дальше когда тебе понадобится любая функция ты просто пишешь одну строку #include <declarations.h> и не паришься об написании функций.
Но если у тебя одна функция (как в твоем примере) то на месте прототипа просто пиши определение.
>>139506722 > На что влияет то, что мы пишем в круглых скобках в прототипа функции zalupa_kentavra? Тип влияет на то, найдёт ли компилятор реализацию этой функции, или нет. Название переменной влияет только на то, что тебе редактор в автодополнии показывает.
> На что влияет то, что мы пишем при вызове этой функции в main? На то, какие именно значения попадут в функцию. Допустим, у тебя была бы вторая переменная y=2. Тогда код x = zalupa_kentavra(y); cout<<x; вывел бы 4
>Что за хуйню я написал в скобках, когда писал код функции? Объявил локальную переменную функции, передающуюся в неё как параметр.
>Как это можно упростить с помощью ваших указателей? Да никак в общем-то.
>>139506863 >Создает динамически Через malloc или new. То, о чём ты - при входе в функцию резервируется память из стека (из регистра esp вычитается необходимое количество байт). При выходе из неё стек снова восстанавливается. Никакого освобождения памяти нет.
>>139506866 Что значит "куда надо"? Кому надо? Для чего надо?
>Зачем я указывал "int x" в прототипе и в скобках? В прототипе для того, чтобы компилятор знал, что есть где-то дальше такая функция zalupa_kentavra, которая принимает int в качестве параметра и возвращает int в качестве результата.
В реализации ты указывал int х чтобы затем внутри функции мог обращаться по имени х к параметру функции
>>139506555 >удобство сопровождения и читабельность Хочешь посмотреть, что функция делает, а там в самом начале: "Впервые в одном блоке! Легендарный int i и его популярный напарник int j выступают во всех двойных циклах!"
>>139507291 Nyet. Зависит от уровня оптимизации. В одних программах как врубят на полную, так там не только мелочь, там и глобальные переменные через 3 функции заинлайниться могут. А в других только как объявлена декларация по умолчанию. Особенно C++ строго с этим. В си оптимизация гораздо лучше при тех же настройках.
>>139503592 (OP) Удваиваю ОПа указатели это ебучий рудимент. Например в Delphi от них отказались сразу хотя в turboPascal были. Управляемый платформы забыли про указатели как про страшный сон ибо нахуй они не нужны. Но что это такое понимать, надо так как есть разница между данными сидящими в кучи и(или) в стеке.
>>139507592 Нельзя. VS допускает только один раз объявлять, т.к. область видимости у него распространяется не только на заголовок цикла, но и ниже. До версии 6 включительно так и было.
>>139507715 Простые операции сравнения может. test al, al - проверка на ноль. Но если, к примеру, бит какой-то проверить надо, тут начинаются проблемы. Сначала байт расширяется до инта, потом происходит проверка.
>>139507878 Есть но можно жить без них. Объекты сразу в куче создаются. Указатели, лично я юзал пару раз, много лет назад, когда пейсал на дельфах , и то не сам а как параметр каких то легаси методов. В Шарпее они кстати тоже есть да и в Жабе тоже. Только их не используют. На асемблере тоже можно писать, вот только желающих в 201X маловато.
>>139508099 Если надо переписать код, который был написан в 6 студии, придётся побыть прокажённым утёнком. Посмотри, например, утёкшие сорцы движка Source. Там везде такое, потом они переписали. И у них опять увели код в 2007 году.
>>139508022 Только подтверждает мной написанное. Передаёт значение через стек, хотя мог в регистр положить. Если включить максимальную оптимизацию, то компилятор функцию может заинлайнить. Либо посчитает как константу.
>>139508548 > препод сказал, что рекурсия - зло Хуёвый препод. Нам наш честно говорил - рекурсия полезна порой, но вы долбоебы, поэтому не используйте, пока не поймете
>>139508548 Так им наверняка будут всякую хуйню вроде деревьев, алгоритмов на графах и бэктрекингов показывать. По крайней мере нам такую хуйню давали.
Раз уж тематический тред, спрошу тут. Прогаю помаленьку микроконтроллеры, и мне правда очень удобно ссылаться на прерывания ШИМ/таймеров/итд через указатели. Я быдлокодер или не очень?
>>139508807 Не, норм. Для прошивок/драйверов обычные правила хорошего стиля программирования не применяются. Можно юзать goto, ссылки на обработчики прерываний, вставки/целые куски на асме и прочие непотребства
>>139508852 Ну потому что техасы (TMS320F28335, если конкретно) криворукие пидарасы, нанявшие снупдогга, чтобы он им настрогал ALU, который не может в плавающую запятую, потому к ALU прикрутили FPU (Floating point unit), который не смог в комплексную математику, потому туда еще прикрутили... ну ты понял. И за прерывания там отвечают регистры, в которых лежит тупо указатель на первый байт в памяти программ самого прерывания. Добавь к этому 12стадийный конвейер и через подобную камасутру, достойную Слаанеш, рискни познать дзен.
>>139508918 >вставки/целые куски на асме Более того, есть память программ? Но из-за ебучего 12стадийного конвейера работает это убожество ну очень медленно, даже в линейной программе. Как лечится? Программа выгружается в RAM. Желательно вся, но памяти может не хватить, поэтому, как правило, выгружают лишь прерывания. У Atmel и STM такой хуйни не было, у них из флеша все за такт читалось. Потому иногда хотелось забить на С и писать на асме, но асм у них ебанутый из-за дичайше ебанутого ядра. Зато промышленный стандарт, бля. Это классика, это знать надо!
Я вот быдло и не могу работать с этими говноуказателями, когда нас в универе учили сишке я просто унывал от ёбани, которой мы занимаемся. А потом, уже ближе к концу обучения, нам дали сишарп, и вот это я понимаю язык, все понятно и по-человечески, вместо ебалы с памятью ты делаешь нужные тебе вещи, раскидываешь по классам и все заебись.
Some examples of pointer types are given in the table below:
Example Description byte Pointer to byte char Pointer to char int Pointer to pointer to int int[] Single-dimensional array of pointers to int void Pointer to unknown type
For a given implementation, all pointer types must have the same size and representation. Unlike C and C++, when multiple pointers are declared in the same declaration, in C# the is written along with the underlying type only, not as a prefix punctuator on each pointer name. For example int pi, pj; // NOT as int pi, pj; The value of a pointer having type T represents the address of a variable of type T. The pointer indirection operator (§18.5.1) may be used to access this variable. For example, given a variable P of type int, the expression P denotes the int variable found at the address contained in P. Like an object reference, a pointer may be null. Applying the indirection operator to a null pointer results in implementation-defined behavior. A pointer with value null is represented by all-bits-zero.
>>139509247 Хм. Страдаешь? Да я в принципе вынужден писать на чистом асме, ибо до львиной доли функционала из RISK-ядра (как следствие - сишного кода) не добраться.
>>139509460 RISC* Опечатался, бывает. Да не то, чтобы страдаю, просто проц вырос таким уродливым внутри из-за этого самого legacy, как я понимаю. Работать оно работает, да, по быстродействию проходит и так далее, но как вспомню, что и как там внутри - мурашки по коже. Недавно вышло новое семейство - UCD3xxx, с ним бы поиграться, оно посимпатичнее будет с первого взгляда, но пока не до того, да и новый год скоро, не до того начальству.
>>139509487 Только потому что там написано "DSP" и для этого проца почти замутили отечественный аналог? Или потому что больше ни для чего писать не умеете? Или почему? Я не критикую, просто любопытствую.
>>139509692 Шаг в сторону - ой, этого нельзя, вы что, вы что. Складывать а и б можно, только если они одинакового типа. Даже если вы знаете, что всё нормально будет, приводите к одному типу. Ой, битовые операции только с одним типом данных могут быть. И так далее.
>>139506007 >main() функция вызываемая операционной системой Ахаха, нет. Сишный main вызывается стабом, который генерит компилятор. Этот стаб, например, парсит аргументы для процесса, и вообще много чего ещё делает.
>>139503592 (OP) Разберись с архитектурой x86 и выучи ассемблер (на уровне энтри-левела хотя бы). Разница между указателем и ссылкой только на уровне семантики.
>>139503592 (OP) Потому, что кресты создавались ещё в те времена, когда люди запускали в космос космические аппараты, которые были намного "тупее" айфона из перехода за 2000 рублей и каждый, сука, бит был на счету. Сейчас, когда даже в твоей пеке 2 ядра и 2 гига, совершенно ни к чему это байтоёбство.
>>139509776 >Складывать а и б можно, только если они одинакового типа. Это что за хуйню я прочитал?
(archpony@archtest)- `--> cat 3.cs using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; class Program { static void Main(string[] args) { int a; long b, b1; double c, c1; a = 1; b = 2; c = 3.14; b1 = a + b; c1 = c + a; Console.Out.WriteLine("{0},{1},{2}",a,b1,c1); } } (archpony@archtest)- `--> mcs 3.cs (archpony@archtest)- `--> ./3.exe 1,3,4.14
>>139509770 >всё делается библиотеками. Вообще нестандартная тут только BeautifulSoup все остальное в базовой поставке. Питон по сути это и есть одни библиотеки.
>>139503592 (OP) Вот у тебя есть переменная целого типа. Ты передаёшь её другой переменной типа с плавающей запятой. Всё нормально, всё работает. Вот у тебя есть массив данных, строка например, которую тебе надо обработать. Вот ты передаёшь её другой строке и всё ломается нахуй, потому, что ты не определил длину строки А и длину строки Б. Для этого и нужен указатель, чтобы программа взяла не саму строку, а данные из неё по УКАЗАТЕЛЮ, который суть ИНДЕКС БАЙТА В ПАМЯТИ ПРОГРАММЫ. Ссылки из той же темы.
>>139510037 Это примерно так выглядит some_value = BitConverter.ToUInt32(encode_buffer, Convert.ToInt32(v4 >> 3)); А на си было бы так: some_value = (пентаграммка)(UINT пентаграммка)encode_buffer[v4 >> 3];
Бля, помню на шарпе писал прогу, которая заменяет в картинке все пиксели определенного цвета + перетекающие. Получалось довольно таки плавно и неплохо, как для момента, что я до этого дерьма сам дошел, без всяких задачников.
>>139510202 Да, меньше. Для исполнения байткода нужна загруженная виртуальная машина. Код на C++ исполняется на процессоре без прослойки херни, обращаясь напрямую ко всему, что необходимо.
Бля, помню на шарпе писал прогу, которая заменяет в картинке все пиксели определенного цвета + перетекающие. Получалось довольно таки плавно и неплохо, как для момента, что я до этого дерьма сам дошел, без всяких задачников.
Указатели и ссылки - это просто. И даже интересно. Вообще вся параша в C++, которая унаследована от C это просто и интересно. А вот когда начинается ООП хочется блевать и плакать, вроде тоже несложно, но какая-то хуйня уёбищная и нужно много запоминать и мало думать. Чувствуешь себя дауном, поэтому бросил самоизучение на третьей методичке, чисто посдавал программы для шараги и забил, поняв, что программирование -унылое говно и интересно только по началу.
>>139509087 Лол не пезди. Тут работодатель приходил за 2к$ на джаваджоб объявление пол года весело, ни один погромист не отписал. Мало денег для колясочников
>>139510573 Сам файл займёт 1-2 Мб + системные библиотеки с десяток МБ. Но они же sharedб поэтому не считается. Но, когда на сцену выйдет Qt, всё изменится.
Вся прелесть шарпа пропадает, когда ты пытаешься это завести на линуксе или не дай бог на embedded. Вся прелесть С++ говнится, когда пытаешься завести васянскую либу, чтобы она билдилась в твой проект на %device_name%, после анальной ебли понимаешь зачем придумали джаву.
>>139510860 >>139510867 Узнал-узнал. Just-in-time - Точно в срок (Точно вовремя). наиболее распространенная в мире логистическая концепция. Основная идея концепции заключается в следующем: если производственное расписание задано, то можно так организовать движение материальных потоков, что все материалы, компоненты и полуфабрикаты будут поступать в необходимом количестве, в нужное место и точно к назначенному сроку для производства, сборки или реализации готовой продукции. При этом страховые запасы, замораживающие денежные средства фирмы, не нужны. Является также одним из основных принципов бережливого производства.
>>139503592 (OP) Попытай счастья в чём-нибудь другом. Серьёзно. Если тебе не даются такие примитивные абстракции, как указатели и структуры данных на них, то в программирование тебе лучше не лезть. Только зря потратишь время и не получишь удовольствия от работы.
Мне очень интересно посмотреть на выгоревших вкатывальщиков с разорванными жопами, проклинающих программирование.
>>139510574 >Для исполнения байткода нужна загруженная виртуальная машина >Код на C++ исполняется на процессоре без прослойки херни >и буквы эти JIT. Что не так то?
>>139511089 Линукс это не только Юбунта, если чо. Проблем - тыща, большинство тупо неразрешимые - нельзя завести под кучу архитектур, ОС, девайсов. Мелкомягкие тупо не сделали кроссплатформенности нормальной. Когда поняли свой обосрамс, начали раскрывать сорсы, пыхтеть, но уже поздно, всем похуй. C# - язык для винды.
>>139511220 JIT - это когда твой байткод при старте программы компилируется виртуальной машиной под архитектуру и выполняется. Просадки только при запуске приложения.
>>139511486 >при старте программы компилируется виртуальной машиной под архитектуру и выполняется. >нужна загруженная виртуальная машина Ну и работа с ней же ВООБЩЕ мгновенная.
>>139511679 Чтобы программы не так быстро загружались, очевидно же. >>139511486 А если приложение размером мегабайт 15? Сколько минут при каждой загрузке ждать?
>>139511395 >давно уже байт-код не интерпретируется, а компилируется. >Интерпретация — пооператорный (покомандный, построчный) анализ, обработка и тут же выполнение исходной программы или запроса (в отличие от компиляции, при которой программа транслируется без её выполнения) Дурак?
Программист вкатился в тред. Передача значений по ссылке штука очень удобная, в том плане, что ты можешь изменять значения переданные по ссылке. например
passed -- это поле класса, picture -- передаваемый по ссылке аргумент
указатели -- это архаичный метод, скажем так, им на смену пришли умные указатели и move semantics -- гуглим, изучаем. прототипы функций и методов -- это механизм forward declaration, и сделан в принципе для удобства. Ты можешь описать прототип ещё до мейн, а после мейн, именно после main() {}, написать прототип ещё раз, открыть фигурную скобку и хуярить имплементацию чего те надо.
А ещё рекомендую начинать свое утро с K&R. а потом уже переходить к толкиенистскому пидарасу. Не читал 400 потсов выше.
>>139512206 >Что именно я повторяю? Вот так начинают вести себя омежки, загнанные в угол. Выдавать именно такие дурацкие реплики. Ты школьник, к тому же омега. Лучше выпились.
>>139503592 (OP) Указатели, как уже в треде писали, используются для ускорения передачи параметра в функцию и экономии памяти без копирования (когда по значению передаёшь в функцию). Если передать сложный объект по значению, изменить его в функции, то изменения не сохраняться за пределами функции. Ссылки были добавлены позже, чтобы сложнее было выстрелить себе в ногу. Указатели могут быть null (nullptr), а ссылки всегда ссылаются на существующий объект. Прототипы нужны в первую очередь для формирования header файлов. Предобъявления позволяют писать прототипы функций, классов и пр. и в инклудах указывать только необходимые файлы примерно как в джаве, где в файл класса включаешь только то что нужно.
>>139511813 Машинный код выполняется процессором, приколи, а это на порядок быстрее, чем интерпретация байт-кода виртуальной машиной. Хотя бы за счет меньшего количества тактов на единцу вычислений и кучи аппаратных оптимизаций (конвееризация, предсказывание ветвлений, эффективное кэширование и т.д)
>>139512074 Я не пойму логику этого действия. Вот нафига было транслировать в байт-код, чтобы потом всё-равно переводить в машинный, да ещё такими извращенными способами?
>>139503592 (OP) >если передать значение хуйни в другую функцию можно без этого говна? Лол, как? Как ты передашь из функции какую-нибудь большую структуру данных, к примеру, даже простейший массив?
>>139512074 >В языках, таких как Java, PHP, C#, Lua, Perl, GNU CLISP, исходный код транслируется в одно из промежуточных представлений, называемое байт-кодом Байт-код не является машинным кодом какого-либо конкретного процессора и может переноситься на различные компьютерные архитектуры и исполняться точно так же Байт-код интерпретируется (исполняется) виртуальной машиной. Ну и кто тут дурак?
>>139512361 Хотя бы одно преимущество - контроль границы массивов. В си легко выйти за границы, никто не проверит. В C# проверка есть? Можно попробовать прочитать что-то за пределами массива? Разве одна из причин появления интерпретируемых языков не в этом? А когда превратили в машинный код, что тогда?
>>139512377 Байт-код не является машинным кодом какого-либо конкретного процессора и может переноситься на различные компьютерные архитектуры и исполняться точно так же
>>139503592 (OP) > передавать всякое говно по указателям по ссылкам мб? если по указателям, то это не цпп-стайл, так плохо, если ты не юзаешь либу, написанную на си.
> А ещё нахуя нужны прототипы функций чтобы отделять definition от declaration, чтобы прототипы можно было в хедер вынести, для рекурсий
> Все учебники пишутся пидорасами, которые не могут объяснить всё человеческим языком, нет, это ты пидарас
>>139512318 Я взял кусок из своего кода, который щас пишу, и отвечу на твой вопрос. вообще как по мне, строка -- слишком сложный тип, чтобы возвращать его через ретёрн, разве что вернуть указатель на неё. хотя и в сипп так можно, но я например не знаю, сколько из данного класса мне нужно будет передать полей в другой класс. Предположим, что у меня будет ещё int kokoko; bool isswabodka; vector <petukh> petukhi;
и как же мне их передать, спросите вы?
А так
void SetupPicture::PassData (std::string &picture, int &ko, bool &state, vector<petukh> somepetukhi) { picture = passed; ko = kokoko; state = isswabodka; somepetukhi = petukhi; }
А теперь предположим, что мы передаём данные где-то ещё вот так
if (SetupPicture.exec()) PassData (arg1, arg2, arg3, arg4);
>>139512438 Ну, как я понел, сперва был машинный код, поверх него накатили ассемблер(это же такой же компилятор как и ваши студии) А поверх уже пошло все это гавно с джавами, плюсами, вот это все. По идее, код на с++ должен работать так же как и на ассемблере, но то ли дело в кросплотформенности, либо в виртуалках. То ли вообще в гавнокоде самого компилятора. Но суть в том что код тормозит-с.
>>139512667 Получается, только в таком случае использование байт-кода и оправдано? Когда его нельзять по каким-то причинам скомпилировать под конкретную машину, но можно исполнить интерпретатором? Зачем тогда каждый раз миновать стадии JIT на машинах, где есть компилятор, который сразу и навсегда может перевести программу в машинный код? Что за франкенштейн?
>>139512694 > строка -- слишком сложный тип, чтобы возвращать его через ретёрн блядь, нет. ты хоть понимаешь, что строка на стеке хранит O(n) памяти, и ее(как и любые другие структурки) можно возвращать без указателя. ты щитай указатель на указатель возвращаешь, нахуй так жить?
>>139512759 Я там забыл перед somepetukhi амперсанд. И нет, не воспользуются, если для каждого класса разные аргументы у passdata а обрабатывать их надо одинаково. Да и структура в сипп -- тот же класс. Я слабо вижу разницу. Зачем ещё один класс описывать для 4 переменных, которые, тем более, кроме того, что они возвращаемые значения, ничего общего не имеют? при чём тут ооп в принципе?
>>139512847 >главно чтоб был интерпретатор И памяти в 5 раз больше. И проц в 10 раз мощнее. И место под интерпретатор. Твоя программа занимает всего-то 15 кб, а интерпретатору со всеми либами и гигабайта мало будет.
>>139512482 Приложение компилируется в байткод, байткод интерпретируется реализацией виртуальной машины под данную архитектуру в машинный код. Ты идиот просто. >>139512631 Ну пиши сразу в байт-коде, хули нет. А еще лучше в машинном, так еще быстрее.
>>139512868 Я написал, что в c++ строка является "базовым", и что для неё все операции перегружены, как для базового. Но я начинал с C просто, посему, возвращать строку? может лучше передать по ссылке?
>>139513098 Зачем? Один раз вернули данные из объекта и уничтожили. При следующем создании объекта ты хочешь опять 10 раз возвращать по 1 объекту? глупо.
>>139512438 Байт-код не зависит от архитектуры, поэтому может выполняться на любом железе, для которого есть интерпретатор. Алсо погугли насчет LLVM, это например позволяет транспайлить C в JavaScript путем компиляции C->LLVM байткод->JavaScript.
>>139513070 а, блядь, не прочитал твой первый пост. тогда ок
только все равно часто надо оставить исходную строку и получиьь новую. ради этого в многих языках строки иммутабельны, что дает плюшки типа взятия слайсов за O(1)
>>139513222 Да это и так понятно. Просто, если возможна JIT компиляция байт-кода, то можно было сразу его скомпилировать в код машины и не тратить при каждом запуске ресурсы на этот JIT? В чем экономия? Так хочется, чтобы один и тот же программный код запускался везде и сразу, пусть и через жопу?
>>139513255 Согласен, но у меня в коде просто эта строка std::string passed; умирает вместе с объектом, в которой она (диалоговое окно), она его поле. Посему, она мне нахуй не нужна. Запомнил, вычистил память, сделал чё надо и повторил.
Алсо, для стрингбилдеров очень удобно использовать передачу значений по ссылке, и например у меня есть мой сопственный овулятор моего сопственного языка, вот там у меня абстрактные классы, и они между собой обмениваются данными только по ссылке. Когда я то писал, мне говорили, что 2к15 на дворе, используй move semantics. Но мне лень было разбираться .-. ИИИтак сойдёт.
Проигрываю с мамкиных оптимизаторов, считающих биты в bool и экономящих такты. Вы понимаете, что без профилирования время выполнения даже такой простой инструкции как inc [eax] может различаться на порядки даже при запуске одной и той же программы на одном и том же компьютере?
>>139514073 Нихуя. Обычный трап тебе отгрызёт ногу, потому что нигде не работает, а жирный трап возможно неплохо живёт, и в чём-то может быть удобнее. Так что кому как, на самом деле.
>>139505764 >как вспоминаю указатель на указатель на массив функций, который возвращает массив указателей, так сразу... ...так сразу и перешел в веб, писать прикладные для бизнесов вещи простых языках. Тащемта деньги есть, на жизнь не жалуюсь. Смотрю вакансии C++ кодеров, зарплаты вроде бы у них не особо выше.
>>139514156 И перед уходом ещё раз назову вот этого товарища дауном, потому что это делается не всегда оптимизации ради, пусть идёт на хуй маски накладывать.
>>139514228 Это ты у нас не очень умный. [eax] - это доступ к памяти по адресу, который происходит быстро, если у тебя данные уже в кеше лежат, медленно, если они не попали в кеш и ОЧЕНЬ МЕДЛЕННО, если твоя ОС выгрузила эту страницу памяти на диск в свап.
>>139513416 Ну его же надо где-то хранить тогда, а это доп.гемор. Кроме того, JIT делается обычно не для всего байт-кода, а для того, который часто выполняется/вообще выполняется. Бывает и так, что после сбора статистики JIT перекомпилирует в более эффективный маш.код.
>>139514968 Учи ассемблер, придурок. inc eax - это инкремент значения регистра eax, inc [eax] - это инкремент значения, лежащего по адресу, лежащему в eax.
>>139513159 Хотя, всё же, что-то я жестоко шуткую. Ты уж извини. Но современное айти в рашке да, так и кажется мне довольно грязной и бессмысленной работой.
>>139515058 Ох уж этот хуй86 ассемблер. Сколько там у вас уже инструкций, считая легаси-говно 1000 или больше? А сколько используются в реальном коде? Embedded-байтоёб
>>139515185 А если есть, то ты в пролёте. То есть вообще время почти непредсказуемое, следовательно либо с профилировщиком в обнимку сидеть, либо забить и писать быстрые алгоритмы, пилить нормальную архитектуру, оставив оптимизацию на тот момент, когда будет ясно что, где и как тормозит.
>>139515274 > Сколько там у вас уже инструкций Хосспаде, да какая в жопу разница сколько там инструкций. Пусть разрабы конпеляторов этим морочатся. Весь мир давно уже пишет на прогрессивных интерпретируемых языках. JS вон уже в эти твои контроллеры впихивают.
>>139516117 > JS вон уже в эти твои контроллеры впихивают. Мне вот нужно сервер хттп на контролер, удп я запилил, а готовые стеки слишком жирны для моих 46кб код+данные а ты говоришь ЖС
Нахуя в ебучем C++ существуют ссаные указатели звёздочка и ссылки &, если передать значение хуйни в другую функцию можно без этого говна? С примерами, пожалуйста. В шараге заставляют передавать всякое говно по указателям, а я нихуя не понимаю как это работает И нахуя это нужно, если всё работает без указателей. А ещё нахуя нужны прототипы функций и что за говно мы указываем в скобочках при (а) вызове функции и (б) при написании функции ну после main, когда пишем сам код? Все учебники пишутся пидорасами, которые не могут объяснить всё человеческим языком, поэтому вся надежда на вас.