Двач.hk не отвечает.
Вы видите копию треда, сохраненную 8 сентября 2017 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
75 Кб, 212x250
#2 #1036677
С++ это Си с классами.
#3 #1036686
Может запилим свой жаваскрипт с монадами, ленивыми вычислениями и выводом типов?
#4 #1036687
>>1036677
С++ это Go с дженериками и эксепшенами!
#5 #1036688
>>1036677
Не, это другой язык, и с Си совместим через ж.
#6 #1036690
>>1036686
Надо запилить локализованную версию ISO EBNF на русском, сделать на ней конпилятор конпиляторов, и разрабатывать синтаксис уже в EBNF.
#7 #1036693
>>1036690
А чтобы не изобретать велосипед, можно транслировать этот метаязык в LEX/YACC просто. Вот и вротенд. А для бэкэнда - LLVM.
#8 #1036721
>>1036677
с лмбдами!
#9 #1036758
>>1036677
C++ это си с классами от Страуструпа, шаблонами от Степанова, с лямбдами от Черча, со стандартной библиотекой от Плаугера, c метаклассами от Саттера, с программной транзакционной памятью от Найта... вы не заскучали? A то уже новый стандарт подоспел:
https://en.wikipedia.org/wiki/C++20

Там будет еще тысяча новых свистоперделов, чтобы вы НИКОГДА не смогли выучить этот ебланский язык.
#10 #1036765
>>1036758
А еще я сосу хуи

1036758-кун
#11 #1036766
>>1036758
Ура, зато сетевая либа стандартная наконец-то будет! Лет через 20 джаву догонят
#12 #1036993
Нужно распарсить последовательности целых чисел вида "X", "X/Y", "X//Z", "X/Y/Z" при помощи boost spirit.

Пока навелосипедил несколько мелких структур для не полных наборов, и одну общую для полного набора (с конструкторами для инициальзации из не полных наборов)

struct TRIV { int v; };
struct TRIVT { int v; int t; };
struct TRIVN { int v; int n; };
struct TRI
{
int v = 0;
int t = 0;
int n = 0;

TRI() { };
TRI(int V, int T, int N) : v(V), t(T), n(N) { };
TRI(TRIV t) : v(t.v) { };
TRI(TRIVT t) : v(t.v), t(t.t) { };
TRI(TRIVN t) : v(t.v), n(t.n) { };
};

и соответствующие парсеры для считывания этих вариантов.

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

Если гонять парсеры по отдельности, все нормально работает, но когда смешиваю их в одно общее правило, спирит не может привести все к одному виду:

d:\libs\boost\boost\spirit\home\x3\support\traits\move_to.hpp(181): error C2665: 'boost::spirit::x3::traits::detail::move_to': none of the 3 overloads could convert all the argument types
1>d:\libs\boost\boost\spirit\home\x3\support\traits\move_to.hpp(150): note: could be 'void boost::spirit::x3::traits::detail::move_to<TRIV,Dest>(Source &&,Dest &,boost::spirit::x3::traits::variant_attribute)'
1> with
1> [
1> Dest=TRI,
1> Source=TRIV
1> ]

Как это разрешить? Полный текст: https://pastebin.com/2cp5NziH
#12 #1036993
Нужно распарсить последовательности целых чисел вида "X", "X/Y", "X//Z", "X/Y/Z" при помощи boost spirit.

Пока навелосипедил несколько мелких структур для не полных наборов, и одну общую для полного набора (с конструкторами для инициальзации из не полных наборов)

struct TRIV { int v; };
struct TRIVT { int v; int t; };
struct TRIVN { int v; int n; };
struct TRI
{
int v = 0;
int t = 0;
int n = 0;

TRI() { };
TRI(int V, int T, int N) : v(V), t(T), n(N) { };
TRI(TRIV t) : v(t.v) { };
TRI(TRIVT t) : v(t.v), t(t.t) { };
TRI(TRIVN t) : v(t.v), n(t.n) { };
};

и соответствующие парсеры для считывания этих вариантов.

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

Если гонять парсеры по отдельности, все нормально работает, но когда смешиваю их в одно общее правило, спирит не может привести все к одному виду:

d:\libs\boost\boost\spirit\home\x3\support\traits\move_to.hpp(181): error C2665: 'boost::spirit::x3::traits::detail::move_to': none of the 3 overloads could convert all the argument types
1>d:\libs\boost\boost\spirit\home\x3\support\traits\move_to.hpp(150): note: could be 'void boost::spirit::x3::traits::detail::move_to<TRIV,Dest>(Source &&,Dest &,boost::spirit::x3::traits::variant_attribute)'
1> with
1> [
1> Dest=TRI,
1> Source=TRIV
1> ]

Как это разрешить? Полный текст: https://pastebin.com/2cp5NziH
#13 #1036997
>>1036758
Когда уже мелкомягкие вытащат filesystem из эксперименталки?
#14 #1037009
>>1036993
Два часа работы на перле и 10 дней ебанины на С++. Зато будет работать за 5 мс. Охуительная выгода.
#15 #1037011
>>1037009
На перле импортер моделей не напишешь.
#16 #1037013
>>1037009
В плюсах тоже есть регекс.
#17 #1037016
>>1037013
Медленнее.
#18 #1037021
>>1037009
Зря ты перл упомянул. Местные макакены никогда с ним не работали, но точно знают что он хуже чем js/peton/любой другой язык нейм.
sage #19 #1037111
>>1037021
Местные макакены, которые с ним работали, ещё точнее знают, что он хуже чем js/peton/любой другой язык нейм.
#20 #1037191
>>1036677
Массивы это указатели
#21 #1037366
>>1037191
Указатели это массивы

трустори, в B или BCPL так было
#22 #1037611
>>1037021
Щас бы понтоваться знанием юзлесс некроговна некромамонта в 2017 году. Может еще коболом попонтуешься, или там PL/1 ?
#23 #1037616
Чому qt creator не могут научить нормально выводить типы для auto?
#24 #1037647
>>1037616
Потому что есть VS и CLion
#25 #1037648
>>1036675 (OP)
Что точно делает std::thread::join()? Переустанавливает EIP на первую инструкцию кода потоковой функции? Почему называется join? Почему после выполнения join вызывающий код ждет завершения потока?
#26 #1037651
>>1037648

> Почему называется join? Почему после выполнения join вызывающий код ждет завершения потока?


Потому что ждет, когда поток присоединится заджойнится к нему.
#27 #1037664
Делаю нечто похожее на скайп, и нужно видео по сети передавать. Чтобы уменьшить трафик хочу передавать сжатое видео. Посоветуйте видео кодеки (желательно опенсорс с LGPL). Для аудио пробовал opus и speex, может есть еще годные кодеки?
#28 #1037671
>>1037611
Дурик, перл изучают в универах британии на ай ти факультетах.
Обосрался? Подотрись и уйди молча.
#29 #1037674
Сижу на работе пинаю хуй уже неделю без дела (С# ASP.NET веб макакен)

учу кресты

знаю Си

ПОЖЕЛАЙ МНЕ УДАЧИ
ГРУППА КРОВИИИИИИИИИИИИИИ
#30 #1037688
>>1037664
какие кодеки епт
берепт - береж и реализуешь какой-нибудь стек протоколов по передаче потокового видео в сетяй tcp/ip
там будут указаны и кодеки и все остальное
#31 #1037743
>>1036675 (OP)
В каких случаях возвращать из геттера ссылку, а в каких значение?
#32 #1037787
>>1037616
Тому что ты плагин Clang Code Model не включил.
>>1037648

>Переустанавливает EIP на первую инструкцию кода потоковой функции?


Что, блядь? Где в стандарте плюсов есть слова "инструкция" и "EIP"?

>Blocks the current thread until the thread identified by *this finishes its execution.


http://en.cppreference.com/w/cpp/thread/thread/join
>>1037688
Нихуя не понял.
>>1037743
Нахуй тебе геттер, если ты ссылку возвращаешь?
#33 #1037856
Как протраверсить дерево без рекурсии?
#34 #1037866
>>1037856
Сделай конечный автомат, который либо пишет путь в стек, либо ссылки разворачивает.
#35 #1037951
>>1036993
Таки разобрался со спиритом. Даже если оба операнда вариативного парсера возвращают типы, которые могут быть неявно преобразованы друг в друга, он все равно вернет variant<A, B>. Пришлось сделать для него визитор на шаблоне, чтобы он внутри себя все преобразовывал в итоговый тип.
#36 #1037968
>>1037647
В клионе можно собирать кутовские проекты?
#37 #1037970
>>1037787

>Тому что ты плагин Clang Code Model не включил.


Чому нет из коробки?
#38 #1037971
>>1037968
А что ему помешает?
#39 #1037973
>>1037971
я хуй знает. qmake вызывать надо
#40 #1037976
>>1037787

>Тому что ты плагин Clang Code Model не включил.


Ебать, вот это действительно круто!
#41 #1038018
>>1037968
Если на CMake, то все норм будет, иначе - никак. Они пока что даже не собираются нормальную поддержку редактирования CMake скриптов сделать, что уж говорить о других системах сборки (того же make, например, как самой простой и одновременно дурацкой системы сборки). Если подумать, если можно системой сборки сгенерировать проект для CodeBlocks, тогда и подключить CLion к нему плевое дело.
#42 #1038067
>>1037664
Реализуй WebRTC, нахуй изобретать что-то.
#43 #1038097
В каких случаях возвращаемое значение функции должно быть const?

Вообще, насколько фанатично надо использовать const?
#44 #1038120
>>1038097
Ни в каких не надо использовать. Это страуструповый рак. Такое нужно лечить химиотерапией и полуторалитровыми клизмами.
#45 #1038158
>>1038097

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


Только в тех случаях, когда ты возвращаешь класс, который ты ну никак не разрешаешь менять. Тупой вопрос.
#46 #1038309
Плюсаны, у меня проблема. Когда я заменяю один файл в проекте другим, одноименным, visual studio не перекомпилирует его. Только если я зайду в файл, что-то поменяю и потом нажму ctrl+s, она увидит, что файл поменялся и перекомпилит его. Почему так происходит, и как настроить так, чтобы она рекомпилила файл в любом случае?
#47 #1038315
>>1038309
Время модификации скопированного файла где-то в прошлом.
#48 #1038330
>>1038158
а если я хочу вернуть const int?
#49 #1038342
>>1038330
Скалярные типы и так передаются по значению, ты не сможешь его изменить, лалка.
другой
#50 #1038385
1. Почему тип fun перестаёт подходить, есть я захватываю "a" и "b" (или что угодно ещё, даже обычную переменную не выходит)? Вон, "с" с помощью auto создалась и её можно даже передавать в другие функции. Что это за тип такой образуется, что он отличается от типа fun? Я вроде как прочитал главу про лямбды из "Современный и Эффективный С++", но это всё-равно непонятно.

2. Что почитать про разбор текстовых форматов файлов и вообще текста? Постоянно получаются чудовище на несколько сотен строк, примерно как на второй картинке. Можно, конечно переменные подписывать, но код и так очевидный по большей части, просто длиннее будет. Достаточно применение этих однобуквенных в начале указать. Тут для себя файлы с jps-ки запарсить, они изначально все верные, а если туда добавлять ещё проверки на корректность файла, то это же вообще ужас будет.
#51 #1038395
>>1038385
Потому что у каждой лямбды уникальный тип. Это во первых, во вторых лямбда - это объект класса, а ты пытаешься приравнять его к указателю на функцию.
#52 #1038400
>>1038395

> у каждой лямбды уникальный тип.


Лол. Система типов уровня крестоговна.
#53 #1038429
>>1036675 (OP)
Надо ли каждый метод перегружать const и не-const версиями, или достаточно сделать одну const версию?
#54 #1038447
>>1038400
>>1038395
Оба пиздят. Тип лямблы в общем случае - std::function<int(huint)>, а >>1038385 пытается привести лямбду к функции. Ясен хуй, когда ничто не захвачено, лямбда - функция.
#55 #1038449
>>1038429
Пиздец, можно задать такой вопрос о любой черте языка. Ты охуел?
#56 #1038460
>>1038447

>> std::function<int(huint)>


Попизди-ка мне тут. Открой стандарт и там написано, что лямбда представляет собой класс с определенным operator(), ну и еще некоторыми дополнениями, суть которых здесь не особо важна.
Стандартная библиотека лишь позволяет завернуть лямбду в std::function.
#57 #1038470
>>1038460
Ты прав. А теперь ответь на исходный вопрос.
#58 #1038488
>>1038470
Я вообще не тот тип, которому ты отвечал Я мимокрокодил.
#59 #1038490
Как реализовать наследование метода общего класса, который выполняет одни и те же действия для всей иерархии под классов? Как обычный метод или как virtual?
#60 #1038493
>>1038490
virtual имеет значение только тогда, когда ты пользуешься полиморфизмом указателей.
#61 #1038495
>>1038490
Если планируется его переопределять в подклассах, то виртуал, если нет, то нет, очевидно же.
#62 #1038531
>>1038447

>Тип лямблы в общем случае - std::function<int(huint)>


Ебать дебил.
#63 #1038584
Есть ли возможность очистить вектор без освобождения памяти? Аналог
auto cap= vector.capacity();
vector.clear();
vector.reserve(cap);

только без деаллоков-аллоков лишних.
#64 #1038602
>>1038097

>Вообще, насколько фанатично надо использовать const


Везде. Не слушай долбоебов. Запрещено все, что не разрешено явно - хорошая полиси, помогает освободить от множества головняков на последующих итерациях разработки.
12 Кб, 727x184
#66 #1038640
>>1038614

>никогда не доверяй референсам на русском языке


Эмпирическое правило опять сработало. Стандартом это не оговорено. Implementation dependent короче.
#67 #1038675
>>1038447>>1038395

>std::function<int(huint)>


Благодарю, заработало. Правда, как-то вслепую использовать...
Я просто хотел добавлять в некоторый класс функции, и потом их как из массива использовать. Надеюсь, это нормальное решение, потом почитаю.
40 Кб, 1620x774
#68 #1038677
C++ индусы ебанные как дела идут? Богомерзкие пидарасы.

мимо Си-бог
#69 #1038690
>>1038602
Да-да, возвращай const-значение. Не забудь помахать ручкой move-конструктору.
#70 #1038692
>>1038690

>возвращай const-значение.


Еще забыл конст ссылку. Про откровенное петросянство речи не было.
#71 #1038707
Блять, пока полчаса писал sntp-клиент - успел почувствовать себя дауном. А все из-за ебучих Little и Big endian, которые в документации к протоколу не упоминаются.
#72 #1038712
>>1038707
В RFC все есть. Вообще это обычная практика в сетевых протоколах, зато моторолобояре довольны.
#73 #1038736
>>1038712
Какая-то неочевидная практика. Ну и протокол я реализовывал по Википедии, да
#74 #1038738
>>1038309
Пересобирать проект после замены файла пробовал?
#75 #1038754
>>1038640
В англоязычной версии написано то же самое и есть ссылка на ответ на стаке. Клир эквивалентен эрейзу от начала до конца, на стаке говорят, что эрейз не может менять капасити. В стандарте не нашёл:
http://eel.is/c++draft/vector#modifiers
>>1038736
>>1038707
Родина дала тебе itons и кучу всего другого.
#76 #1038755
>>1038754
Так неочевидно было, что порядок байтов разный будет. Вот и мучился. Теперь буду rfc читать все-таки.
#77 #1038756
>>1038754

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


Где нет внятного доказательства, что clear не меняет capacity.

> Клир эквивалентен эрейзу от начала до конца


Это до C++11 так было.
#78 #1038822
>>1038385

>Что почитать про разбор текстовых форматов файлов и вообще текста?


boost::spirit. Базарю еще захочешь.
#79 #1038848
>>1038677
Хреново. Стандартопетухи все тащят и тащят в стандарт все говно, что найдут вокруг. Прям, как Вован из пасты.
#80 #1038866
>>1038848
std::vector<bool> bools;
// ...
bool *b = &bools[5];
#81 #1038878
const
#82 #1038880
>>1038878
unsigned
#83 #1038904
>>1038880
reinterpret_cast
#84 #1038942
>>1036675 (OP)

> C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Redirect.14.props(46,3): импортированный проект "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.cpp.props" не обнаружен. Проверьте правильность пути в объявлении <Import> и убедитесь в наличии файла на диске.


Как фиксить? Файла-то там нет этого. Даже если подложить из Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets его - та же ошибка.
#85 #1038957
>>1038942
А, всё понял.

> The WDK is not yet compatible with Visual Studio 2017.


Заставляют жрать недоделанное говно.
#86 #1039148
ананасы, где можно почитать, как работает rtti?
#87 #1039190
А как передать произвольное число аргументов в другую функцию функции? Типа, у меня есть функция prn(), которая эти аргументы должна передать дальше в printf или fprintf. Конечно, есть vsprintf специально на этот случай, а в общем случае есть возможность без изменений передать всё это дальше?
#88 #1039220
>>1039190
Ну например так:
template<typename ... Args>
void fwd_call(Args ...args) {
some_fn(args...);
}
#89 #1039268
>>1039220
А в сишных функциях (без тимплитов) как?
#90 #1039293
>>1039268
В си тред пиздуй va_args
#91 #1039381
Привет Анон, хочу вкатиться в программирование. Решаю задачки от яндекса и пытаюсь освоить for
https://pastebin.com/A9g93esN
Не могу понять почему у меня count увеличивается даже когда значения a и a[j] не равны. Объясните пожалуйста почему? И как сделать цикл так что бы сверять значения друг с другом
Вот задача что бы понять контекст: Дан массив. Выведите те его элементы, которые встречаются в массиве только один раз. Элементы нужно выводить в том порядке, в котором они встречаются в списке.
Формат входных данных
В первой строке вводится количество элементов в массиве. Во второй строке вводятся элементы массива.
Формат выходных данных
Выведите ответ на задачу.
#92 #1039382
>>1039220
Мм, благодарю.
#93 #1039440
>>1039381
Была похожая задача на собеседовании (привести как можно больше способов узнать количество повторений значения).
На векторах сделать можно, но пердолинг выходит, попробуй сделать на std::map или std::unordered_map.
По твоему вопросу - ты не обнуляешь счетчик.
Можно оптимизировать присваивая счетчику сразу 1, а внутренний цикл начинать не с 0, а с j + 1.
#94 #1039462
>>1039440
https://stepik.org/lesson/13025/step/14?unit=undefined - эта задача
Идея в том что, если в массиве нету второго такого же элемента, то счетчик будет равен одному (когда его будут сравнивать с самим собой), но у меня почему то этот иф не работает и счетчик увеличивается каждый цикл независимо от значений, почему? А про обнуление это точно, спасибо
#95 #1039547
>>1039462
Кстати заметил, на этапе инициализации ты создаешь вектора размера n, а потом пушаешь еще значения. Создавай или пустые вектора или не пушай, а присваивай, обращаясь по индексу (a = temp).
Счетчик, походу, по этому и увеличивается.
#96 #1039854
>>1039381
Я хз как кодировать на Си, но алгоритм такой:
Берем первый элемент X далее пробегаемся по массиву X+1 и делим каждый на X если резуьтат деления 1 без остатка. значит мы нашли повторяющийся элемент.
ну и сообственно от этих данных строим массив.
Если результат деления не 1, то пустое значение, если результат 1, то пишем элемент.
Как то так.
На питоне бы ебанул на СИ хз как
#97 #1039859
>>1039854
Это квадрат, нахуй такое решение. Даже предварительное упорядочивание и проход по упорядоченному массиву будет значительно быстрее.
#98 #1039870
>>1039859
какой нахуй квадрат. ты береш первый элемент массива и делишь все элементы, потом второй и так далее.
#99 #1039886
>>1039870

> ты береш первый элемент массива и делишь все элементы


(n-1) операций,

> потом второй


(n-2) операций.

> и так далее


(n-3)
...
1

Сумму сам найдешь?
#100 #1039896
>>1039886
n(n-1)/2 ~ O(n^2).
Тогда как эту задачу можно решить за O(nlogn).

Кроме того, зачем использовать деление, если можно тупо сравнивать элементы?
#101 #1039954
>>1039896

>nlogn


блеа пиздец весь матан забыл. Братюни подскажите че почитать, чтоб освежить память?
#102 #1039958
>>1039954
Да по алгоритмам и структурам данных что-нибудь стандартное почитай. Тут от матана только логарифм и O-нотация.
Просто гугли "алгоритмы и структуры данных". Там видео, статьи, книги, вики. Что нравится больше, то и изучай.
#103 #1039982
>>1039462
Какой интересный сайт, первый раз такое вижу, 10/10 идея.

Есть что-то такое в несколько раз сложнее? Я с другого языка перекатываюсь, и мне бы стоило попривыкать к стандартной библиотеке. А то всё руки тянуться вручную все массивы на указателях делать и прочее такое.
А тут попробовал для твоей задачи std::unordered_map из поста выше (я никогда ничего такого не использовал — в моём языке любой двухсвязный список вручную нужно было для каждого типа, шаблонов то нет. Максимум, у меня была обёртка вокруг указателей, так что указываешь размер типа и он создаёт для неё этот список. Но при обращении к любому элементу нужно использовать приведения типов. И ещё там куча лишних вызовов функций возникает и куче другого мусора.) и это бесподобно, в три тысячи раз удобнее - решение за минуту пишется, где раньше пришлось бы или насиловать массивы, или копировать откуда-то код для аналога std::map изменяя все типы.
#104 #1040090
Читаю учебник по крестам, пишу мелкие проекты вроде крестиков и ноликов, снейк. Пока не собираюсь(в ближайшие 2 года) искать работу программистом, начинаю учебу, первый курс. Стоит идти изучать фреймворки или лучше сосредоточиться на изучении языка, изучая разные библиотеки и так далее?
#105 #1040123
>>1040090
На крестах не то, чтобы легко работу найти. Или легко, но разгребать какое-нибудь легаси на пару с Delphi.
Если есть желание, то можешь какой-нибудь другой язык учить. Даже если кресты останутся твоим основным языком, изучение языков даёт пощупать другие концепции и подходы, что улучшит твои навыки программирования в целом .
#106 #1040144
>>1040090
Там если этот один стандарт читать и пытаться понять его займет столько времени, что уже новый стандарт выйдет. Касательно работы, есть множество контор, некоторые требуют глубокого знания языка (SFINAE и прочие шаблонные ништяки), в других случаях хватает только поверхностного знания языка (что такое деструкторы, порядок инициализации, время жизни, и др), короче, база, потому что шаблоны, конечно, полезны, но никто подход OOD еще не отменял, поэтому, кроме случаев контейнеров, бывает, обходятся и без них.
Вообще, посмотри на Python, например, он вообще, в целом универсальный, выразительный и простой язык, в дальнейшем его понимание может пригодиться для постройки прототипов (а прототипы зачастую нужны, чтобы проверить, верна ли твоя теория по поводу склеивания паттернов или нет или еще каких), да и с крестами вяжется вполне нормально, так что его преимущества можно будет тоже подтянуть.
Ну а фреймворки - это дело такое, их пиздецки много (если речь идет не о монструозных, наподобие Qt), там уже по интересам, куда пойдешь, может будешь всю жизнь макакой писать GUI для макдака, или, например, уйдешь в сетевое программирование (а там уже придется изучать системные вызовы), так что тут дело неоднозначное.
#107 #1040250
>>1040144
>>1040123
Спасибо за ответы. Я собираюсь идти по пути C++/Java/python. С++ скорее для себя изучаю, как основу программирования. Там где я живу(Кипр) вряд ли есть работа для мидлов и джунов на С++. Тогда продолжу заниматься по учебнику, наверну Effective C++ потом есть книга про 47 задач в С++ и перейду к Джаве, она будет у меня еще в университете.
#108 #1040413
Я что-то понять не могу, сколько чисел могут хранить float и double после точки, может кто подсказать?
#109 #1040417
>>1040413
Число с плавающей запятой представляется с использованием мантиссы, показателя степени и знака. Это ДВОИЧНОЕ число, скорее всего, ты не сможешь представить его в виде конечной десятичной дроби, поэтому при вычислениях выходит пиздец сколько знаков. Точное значение дает только оригинальное двоичное представление в формате (+/-) M * 2^F.
#110 #1040418
Плюсач, я решил написать себе 2d игровой движок. Что мне взять для основы графической системы? В универе рисовал сферы в DirectX, но там у меня были некоторые проблемы с производительностью на древних университетских компьютерах. С нуля написать самому не осилю.
#111 #1040421
>>1040417
Пиздец какой-то, пожалуй я пропущу этот момент.
#112 #1040422
>>1040413
Сколько реализовано, столько и хранят. float и double - числа в формате IEEE 754.
http://en.cppreference.com/w/cpp/types/numeric_limits
#113 #1040428
>>1040413
Пришло время читать 754 стандарт.

Если правильно помню, то для float вроде бы около 26 цифр после запятой максимум. Алсо printf майкрософта не умеет их все напечатать.
#114 #1040430
>>1040428
Float 7 значащих, double 15. Число цифр после запятой нельзя предсказать. Ну что же вы, плюсисты!
#115 #1040444
>>1040430

> Ну что же вы, плюсисты!


Они плохо разбираются в десятичных числах.
sage #116 #1040457
>>1040413
На практике похуй, сколько там десятичных циферок после запятой (тем более, это сложно определить и зависит от компилятора и от самого числа). Ты для чего такой вопрос задаешь? Какая у тебя задача?
#117 #1040458
Подскажите что лучше (или как правильней), в очень очень часто используемом методе (функции члене) у меня используются переменные, так вот у меня вопрос, где эти переменные лучше создавать, в самом методе или перенести их в приватные переменные? Просто если вписать создание переменных в метод, то получится что при каждом заходе в метод эти переменные будут пересоздаваться, а если вписать их в качестве приватных переменных и делать присваивание, то интерфейс класса будет несколько засран.
#118 #1040460
>>1040458
Если они используются только этим методом - это его локальные данные, и в классе они на хуй не нужны. Чтобы не пересоздавать - кури мануалы по кейворду static.
#119 #1040464
>>1040460
Если я правильно понимаю, то со словом static все экземпляры класса будут разделять эту переменную, мне это не нужно.
#120 #1040467
>>1040464
Можно запилить структорой в одно приватное поле.
#121 #1040469
>>1040467
Не решение проблемы.
#122 #1040470
>>1040464
т.е.

class huias {
private:
//...
struct {
int huint;
std::string huing;
std::vector huector;
} p_myMethodData;
//...
};
#123 #1040473
>>1040469
Решения проблемы всего два: ты либо сохраняешь данные в объекте, либо не сохраняешь. Сохранение в отдельной структуре просто минимизирует засерание интерфейса.
#124 #1040474
>>1040469
И, потом, как ты их инициализируешь? Как узнаешь, что они не инициализированные? Что возвращает метод?
#125 #1040534
#define BOOL(param, cliopt) \
s += sprintf(s, " %s", (param) ? cliopt : "no-"cliopt);
ошибка: невозможно найти оператор строкового литерала «operator""cliopt» с аргументами «const char [4]», «long unsigned int»
Я не шарю в cpp, мне только скомпилировать прогу, msys2 ругается.
#126 #1040535
Решил тут изучать этот язык и тут же столкнулся с проблемой. В книге приведена программа
while (std::cin >> value)
{
a+=value;
}
cout <<a;
Но у меня эта программа не работает. После ввода чисел ничего не происходит. Почему так?
Алсо, сейчас вроде уже c++20 выходит, а учебник по 11 версии, это сильно плохо?
#127 #1040547
>>1040535
Вcе работает:
http://ideone.com/hpDEUh
#128 #1040548
>>1040535
C++11 считается хипсторским новшеством, которое до конца ещё не все компиляторы поддерживают. Т.е., даже на C++17 писать ещё рано.
#129 #1040552
>>1040547
Если добавить букву в конце то и у меня работает, просто в книжке про это написано не было, просто ввод чисел и заебись, вот я и подумал, что сделал что то не так
#130 #1040554
>>1040548
Маня, везде уже С++14, кроме несчастных людей, с поддержкой WinXP и прочим некроговном некромамонта.
#131 #1040559
>>1040554
Везде это где? MSVC только с 17 более менее начала стандарт поддерживать, gcc с 5 (учитывая что актуальная для RHEL версия - 4.8.5).
#132 #1040567
>>1040559
Я скажу по другому - единственная контора, где был C++98, это чуваки, делающие что-то для военки под WinXP. Во всех остальных конторах, о которых я знаю - минимум С++14. В том же Яндексе - Шланг 4.0. У меня в конторе - чуваки балуются с g++7, хотя в продакшене 5.4 (которая умеет в 14). На прошлом месте работы я писал в 2015 студии, которая умела в практически весь 14. И везде так. Самое сложно было лет 5 назад уйти с говнокомпиляторов на что-то модерновое, с поддержкой 11. А сейчас это уже проще.
#133 #1040574
>>1040567
Во всех более менее крупных конторах тем не менее 11 это предел мечтания, опять же потому что энтерпрайзные линуксы держат маааксимум 138-139 ABI. Соответственно остается ubuntu, но там денег нет как таковых чтобы под нее продукты делать в 2к17.

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

MSVC15 поддерживает 14 стандарт на пол шишечки. https://msdn.microsoft.com/en-us/library/hh567368.aspx
#134 #1040604
>>1040418
OpenGL
#135 #1040621
Товарищи эксперты, разъясните зеленому. Имеется такой говно-класс (не кидайтесь тапками, он специально такой говенный); собственно, я хотел разобраться с forwarding references. Для этой цели имеется не менее говенная функция func(). В итоге, все вроде бы работает так, как надо, но одного я не могу понять: почему _s сохраняет свое значение при вызове конструктора, принимающего std::string&& _s ? Здесь же, по сути, в момент вызова s(_s) должен вызываться перемещающий конструктор, ибо _s имеет тип std::string&&, но _s сохраняет свое значение.
Если кто-нибудь объяснит тупому, буду благодарен
9 Кб, 846x553
#136 #1040622
>>1040621
забыл вывод
#137 #1040635
>>1040604
А может быть ты знаешь? Я не очень хорошо в этом разбираюсь, может быть что-то очевидное пропустил.
Есть DirectDraw. Если выводить двухмерную графику через него, то даже на древнем ноутбучном целероне без видеокарты оно выдавало 60 фпс, даже если там в два слоя экран зарисовать. Если я просто вывожу что-то размером с экран на том же ноутбуке через openGL, то выше 40 фпс мне не оторваться, даже если отключить все линейные интерполяции и корректность перспективного преобразования поставить в минимум. Там же все эти матрицы преобразования и прочий мусор считаются для каждого пикселя, никаких оптимизаций от 2d оно не использует.
Сейчас эта проблема ушла в прошлое, конечно, но всё-равно, пустое opengl-окно загружает ядро процессора где-то на четверть, когда полноэкранная directdraw-программа где-то на 2-3% (да и не пустая тоже, если посмотреть на древние dd-игры).
Есть glRasterPos/glDrawPixels которые решают эту проблему, но там вроде как только масштабирование и простейшие фильтры на цвета есть, а я совершенно точно видел в играх плавные повороты в 2d. И новые версии opengl в общем-то вовсе не содержат эти glDrawPixels. Как быть? Эту dd-производительность можно вытащить не используя gl-контекст версии 1.1?
#138 #1040643
>>1040418
в опенгл рисуй с ортогональной матрицей трансформации. А вообще - забей на древние универские компы, в которых стоит железо, на которое насрать вообще всем. Если надо что-то показывать - спизди любой ноутбук с коре2дуо, там уже опенгл 3.х работает
#139 #1040668
>>1040534
А что конкретно этот макрос должен делать? Похоже на какую-то отладочную фигню. Можно попробовать просто выпилить его тело, или заменить на 's+="foobar"'
#140 #1040671
>>1040559
C L I O N
L
I
O
N
Он буквально только пару фич 17го стандарта не умеет.
#141 #1040678
>>1040621

>Foo(std::string&& _s) :s(std::forward(_s))



У _s тип rvalue-ссылки, но само по себе _s - это lvalue-значение (к нему можно обратиться по имени, потыкать что-то, поменять). Получается & && => &.
#142 #1040680
>>1040671
Пять гигабайт памяти для хелловорлда - это норма!
#143 #1040681
>>1040635
DirectDraw сами майки давно закопали, сейчас ЛЮБОЕ 2d на самом деле 3d, без матрицы искажения перспективы.
Тормозит, потому что пишешь через легаси, на огле не имеет смысл писать если его версия старше 3.0 (нужны свежие драйверы видюхи, и может не взлететь на совсем некроговне). Учи пайплайны и шейдеры, чтобы не быть батхертом, и пиздуй в огл-тред /gd.
Не плохой старт можно освоить через opengl-tutorial.org
#144 #1040684
>>1040680
Ты ебанутый крестовый код в интерпретаторе гонять? Конпеляй нормально.
#145 #1040725
сразу прошу прощения за нуфаговопрос, но в связи с тем что не могу сформулировать запрос гуглу пишу сюда.

есть функция с тремя аргументами вида:
someClass::func (int a, bool b = false, int c = -1);

Как видно, "b" и "c" имеют дефолтные значения.
Можно ли как-то сделать так, чтобы третьему аргументу (с) надо было обязательно присваивать значение при вызове функции в том случае, если явно задается второй (b)? Помимо перегрузки, конечно.

Суть в том, что мне нужно, чтобы аргумент "с" обязательно был задан, только когда b = true, для случая, когда b=false, значение "с" просто не используется.
#146 #1040728
>>1040678
Большое спасибо
#147 #1040735
>>1040725
А зачем тебе тогда b? Сделай две перегрузки, первую только с параметром a, а вторую с a и с. Общий функционал вынеси в отдельный метод. Если не хочешь светить его, можешь объявить в анонимном пространстве имен внутри сорца.
12 Кб, 410x114
#148 #1040754
>>1040681

>сейчас ЛЮБОЕ 2d на самом деле 3d


Ой ли? Почему тогда Age of Empires II 2000 года всё ещё задействует ядро максимум на 2-3%? Тогда как ремейк AoE II HD (сделанный уже как 3d для совместимости с win7 и старше) ядро полностью загружает, при том, что скриншоты почти 1 в 1 совпадают? Ясно конечно, что они намутили с двойной буферизацией и из-за ожидания буфера там ядро полностью загружается даже пустой сценой. Но даже если это исправить в своём коде - меньше 25% ядра ну никак не выходит загружать (если выводить хоть какое-то изображение на весь экран в "3d режиме" с матрицами).

>Тормозит, потому что что пишешь через легаси, на огле не имеет смысл писать если его версия старше 3.0


Я знаю как использовать новые версии гл. Почему не имеет смысла, объясни пожалуйста? Создавая древний 1.1 контекст мне всё-равно доступен весь функционал 3.0+ через расширения без потери производительности и с сохранением древних функций.
Я сейчас переделал одну небольшую хрень с 1.1 на 3.0+, загнал свои glBegin/glEnd в VAO и всё такое. Разницы - никакой вообще, только появилось много лишних строк для этих массивов вершин и шейдеров-заглушек. Ради чего мне использовать 3.0+ сейчас? Я не собираюсь писать под телефоны на GL ES, и мне есть чем заняться, кроме как писать обёртку вокруг вершинных массивов (для того чтоб получить удобный аналог glBegin/glEnd на 3.0+). Имхо, это всё-таки удобно, когда нужно три треугольника для мелкой детали интерфейса нарисовать, чем каждую точку хранить в массиве или буфере.
#149 #1040755
>>1040430
>>1040428

>сли правильно помню, то для float вроде бы около 26 цифр после запятой максимум.


>Float 7 значащих, double 15.


В каком стандарте так написано?
>>1040457

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


http://en.cppreference.com/w/cpp/types/numeric_limits
Единственное, о чём там не сказано - это denormalised-числа.
>>1040534
У тебя cliopt не определён. Когда он определён, у тебя будут соединены две строки. Когда он не определён, будет такая шняга, как эта (компилятор ищет user-defined literals).
Нужно больше кода, тогда подскажу. Олсо:

> the \ character must be the last character on the line.


>>1040552
operator>> объекта std::istream возвращает другой std::istream. std::istream преобразуется в bool (как того требует использование выражения в скобках около while/if) следующим образом:
http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool (снизу табличка)
>>1040548

>которое до конца ещё не все компиляторы поддерживают.


ГЦЦ и кланг поддерживают, а Студии всегда насрать на это.
>>1040559

>учитывая что актуальная для RHEL версия - 4.8.5).


https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
С++11 там есть.
>>1040621
Выбирается идеально подходящий оверлод конструктора - принимающий ссылка на конст-строку, никакого мува там быть не может, аргумент-то:
1) конст
2) лвалью, то есть для него будет вызван деструктор в другом месте программы, и будет пиздец
Даже если бы ты сделал не const-ссылку, то никакого мува там бы не было по причине 2, там было бы копирование. Мув применяется только для рвалью, а передать лвалью в качестве рвалью-ссылки без std::move() ты не можешь.
>>1040635

>Есть DirectDraw.


Это же, типа, рисование во фреймбуфер процессором? Попробуй так же делать в ОпенГЛ.
https://open.gl/framebuffers
Про ДиректДрав что-то знаю, про 3Д ничего не знаю.

>я совершенно точно видел в играх плавные повороты в 2d


Это всё вычисления на процессоре.
>>1040671
Клион - это не компилятор.
>>1040684
Жир - часть рациона.
>>1040725

>Можно ли как-то сделать так, чтобы третьему аргументу (с) надо было обязательно присваивать значение при вызове функции в том случае, если явно задается второй (b)? Помимо перегрузки, конечно.


Нет.
Но если тебе прям очень сильно хочется выебнуться, то ты делаешь следующее:
http://coliru.stacked-crooked.com/a/e453ba6921447a67
Я лишь не смог защитить функцию от передачи в неё строки.
#149 #1040755
>>1040430
>>1040428

>сли правильно помню, то для float вроде бы около 26 цифр после запятой максимум.


>Float 7 значащих, double 15.


В каком стандарте так написано?
>>1040457

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


http://en.cppreference.com/w/cpp/types/numeric_limits
Единственное, о чём там не сказано - это denormalised-числа.
>>1040534
У тебя cliopt не определён. Когда он определён, у тебя будут соединены две строки. Когда он не определён, будет такая шняга, как эта (компилятор ищет user-defined literals).
Нужно больше кода, тогда подскажу. Олсо:

> the \ character must be the last character on the line.


>>1040552
operator>> объекта std::istream возвращает другой std::istream. std::istream преобразуется в bool (как того требует использование выражения в скобках около while/if) следующим образом:
http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool (снизу табличка)
>>1040548

>которое до конца ещё не все компиляторы поддерживают.


ГЦЦ и кланг поддерживают, а Студии всегда насрать на это.
>>1040559

>учитывая что актуальная для RHEL версия - 4.8.5).


https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
С++11 там есть.
>>1040621
Выбирается идеально подходящий оверлод конструктора - принимающий ссылка на конст-строку, никакого мува там быть не может, аргумент-то:
1) конст
2) лвалью, то есть для него будет вызван деструктор в другом месте программы, и будет пиздец
Даже если бы ты сделал не const-ссылку, то никакого мува там бы не было по причине 2, там было бы копирование. Мув применяется только для рвалью, а передать лвалью в качестве рвалью-ссылки без std::move() ты не можешь.
>>1040635

>Есть DirectDraw.


Это же, типа, рисование во фреймбуфер процессором? Попробуй так же делать в ОпенГЛ.
https://open.gl/framebuffers
Про ДиректДрав что-то знаю, про 3Д ничего не знаю.

>я совершенно точно видел в играх плавные повороты в 2d


Это всё вычисления на процессоре.
>>1040671
Клион - это не компилятор.
>>1040684
Жир - часть рациона.
>>1040725

>Можно ли как-то сделать так, чтобы третьему аргументу (с) надо было обязательно присваивать значение при вызове функции в том случае, если явно задается второй (b)? Помимо перегрузки, конечно.


Нет.
Но если тебе прям очень сильно хочется выебнуться, то ты делаешь следующее:
http://coliru.stacked-crooked.com/a/e453ba6921447a67
Я лишь не смог защитить функцию от передачи в неё строки.
#150 #1040757
>>1040725
Прямо так, нельзя. Было предложение в стандарт, чтобы ввести пустые аргументы через зяпятые (типа как for. Foo(fuck, , you), но не взлетело.
#151 #1040758
>>1040755
Ну, под клионом я и его бекенд подразумевал, он может и в нативный код с оптимизациями.
#152 #1040763
>>1040754
1) кривой порт, той игры, например?
2) с пустым окном конечно разницы не будет. Попробуй на легаси реализовать отложенное освещение, например.
3) нужно не обертки делать, а думать над архитектурой рендерера
#153 #1040769
>>1040758
Ты путаешь IDE и компилятор, перестань делать это.
#154 #1040785
>>1040769
Но клион это не ide (или я с чем-то путаю)
#155 #1040786
>>1040785
Блин, точно, я clang имел ввиду
#156 #1040790
>>1040785
Ну да, клион - это make-файлы, gcc - это ide, а grub - компилятор, ты все правильно понял.
#157 #1040793
>>1040790
Я же ниже пофиксился
#158 #1040799
>>1040763
2) Почему бы и нет, попробую на днях. Почту, телеграмм? Куда написать о результатах, если тебе интересно?
#159 #1040838
>>1040799
Почему бы не в этот тред?
#160 #1040846
>>1040621

>Если кто-нибудь объяснит тупому, буду благодарен


Ты, как и многие ньюфаги, путаешь типы с категориями значений.
В s(_s), _s это lvalue с типом std::string. lvalue не биндится к rvalue-ссылкам, поэтому перемещающий конструктор вызван быть не может, т.к. у него параметр — rvalue-ссылка.
Если написать s(std::move(_s)), то перемещающий конструктор будет вызван, т.к. std::move(_s) это xvalue типа std::string.
#161 #1040847
>>1040559

>учитывая что актуальная для RHEL версия - 4.8.5


В RHEL ставится devtoolset-6 с gcc 6.2.1
#162 #1040859
>>1040678

>>Foo(std::string&& _s) :s(std::forward(_s))


Foo(std::string&& _s) :s(std::move(_s))
#163 #1040892
>>1040859
Обе работают, но forward преобразует в ссылку, соответствующую типу, таким образом предпочтительнее в таких случаях.
#164 #1040938
>>1040859
Большое спасибо
Голова кругом весь день с этого
#165 #1040948
>>1040892
Мейерс считает, что std::move предпочтительнее. Извени.
#166 #1040954
>>1040892

>но forward преобразует в ссылку, соответствующую типу


Нихуя не понял.
#167 #1040987
SDL2 подходит для реализации игры, где в основном на экране менюшки и статичная картинка,или надо чего попроще/посложнее?
#168 #1040988
>>1040755

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


Какую-то хуйню я написал, могу я сказать после чтения доков.
#169 #1041004
>>1039547
Подредактировал, но теперь, когда в массиве есть повторяющиеся значения он добавляет в новый массив 0. Откуда он берется не понимаю. Не можешь подсказать откуда он появляется и как от него избавиться?
>>1039440

>попробуй сделать на std::map или std::unordered_map.


Такие штуки я пока еще не проходил))
#170 #1041019
>>1041004
Я у мамы сишник, но вопреки всему такое решал весьма неоптимально (2^n грубо округляя). Если оптимизации не пытаться делать, то задача простая
#171 #1041024
>>1040755

>С++11 там есть.


Речь за 14 шла.
#172 #1041026
>>1040847
Пока админ не ебанутый - не ставится.
#173 #1041027
>>1041026
Дебил.
#174 #1041028
>>1041027
Да, тоже вариант. Но нормальный админ на это не пойдет.
#175 #1041030
>>1041028
Почему?
#176 #1041033
>>1041030
Потому что на не-девелоперском RHEL'e за добавление rhscl расширений велика вероятность получить дроп лицензии, стоит, которая, на секунду, не мало даже для небольшого 16-сокетного сервера.

http://www.linuxcenter.ru/shop/distros/linux-distros/Red_Hat_Enterprise_Linux_for_IBM_POWER_Premium_16_sockets_Up_to_120_LPARs_with_Smart_Management_3_Years/
#177 #1041034
>>1041033
А зачем на не-девелоперском RHEL'е беспокоиться о версии gcc?
#178 #1041035
>>1041034
А как ты будешь на нем деплоится?
#179 #1041042
>>1041035

>деплоится


Если я правильно понял твоё хуесосовское наречие, ты говоришь о запуске.
Для запуска важна версия libstdc++, а не gcc.
#180 #1041043
>>1040954
lvalue-ссылку преобразует в lvalue-значение, rvalue-ссылку преобразует в rvalue-значение.
В крестах кроме rvalue-lvalue-ссылок есть ещё аналогичная таксономия значений, которая принимает участие во всей этой мишуре с rvalue-lvalue дичью.
Сам я всю таксономию тоже слабо осознаю.

>https://www.justsoftwaresolutions.co.uk/cplusplus/core-c++-lvalues-and-rvalues.html


>Finally, a named object declared with an rvalue reference (declared with &&) is also an lvalue. This is probably the most confusing of the rules, if for no other reason than that it is called an rvalue reference. The name is just there to indicate that it can bind to an rvalue (see later); once you've declared a variable and given it a name it's an lvalue. This is most commonly encountered in function parameters.


>>1040948
Может Мейерс и прав.
#181 #1041044
>>1041042
Ебать ты гений, а откуда ты высрешь под рхелом нужную версию libcxx?
#182 #1041046
>>1041044
https://stackoverflow.com/a/15602073

> 2) Statically linking libstdc++ would work around the problem, but you don't need to, because that's what the Red Hat Developer Toolset (devtoolset) does for you anyway. The whole point of devtoolset is that it allows you to use a newer GCC and newer libstdc++ but without creating any run-time dependencies on the newer libstdc++ library. The compiled executables only need the system version of libstdc++.so that is always present on RHEL/CentOS, even systems without devtoolset installed.

#183 #1041047
>>1041046
Збс, ты решил задачу для laba1, теперь слинкуй статически все зависимости чтобы не было ABI-конфликтов.
#184 #1041049
>>1041047
-D_GLIBCXX_USE_CXX11_ABI=0
#185 #1041050
>>1041043

>Сам я всю таксономию тоже слабо осознаю.


Там всё очень просто. Как только осознаешь, что у выражений есть 2 свойства: тип и категория значения.
119 Кб, 1134x756
#186 #1041052
>>1041049
Ну и пройдя полный цикл ты таки сам родил что придется отказаться от нового ABI. Браво.
#187 #1041058
>>1041019
А можешь пояснить откуда в ауте нули берутся
Например я ввожу :
5
1 2 3 2 3
И мне вместо того что бы выдать просто 1, выдает 1 0 0 0 0
Откуда эти 0 берутся и как их пофиксить?
#188 #1041062
>>1041004

>Подредактировал


Код показывай.
Но наперёд могу предположить что вектор с результатом у тебя сразу на n элементов, ты не можешь знать сколько их будет.
#189 #1041073
>>1041058
Хуй его знает, вот тебе мое всратое рабоче-крестьянское решение. В ТЗ сказано тупо вывести уникальные элементы, а не копировать их в отдельный массив.
#190 #1041077
>>1041062
отклеилась ссылка, я и не заметил https://pastebin.com/gsMnzzRC
#191 #1041080
>>1041077

> for (int i = 0; i < n; i++)


в цикле, в котором ты выводишь элементы вектора b, условие продолжения цикла неверное.

Правильно так:
for (int i = 0; i < b.size(); i++)

Или так:
for (const auto& i: b)

мимо другойанон
#192 #1041086
>>1036675 (OP)
Есть файл с данными вида:

header число
type число
type число
type число

Как из него выделить все числа и обработать их соответствующим образом, как указано в префиксе? Паттерн state machine и регэксы?
#193 #1041098
>>1041086
ifstream + operator >> Wow
#194 #1041102
>>1041077
Этот >>1041080 правильно сказал. В итоге ведь в векторе b может быть [0..n] элементов.
#195 #1041124
>>1041080
>>1041102
Спасибо большое аноны!
#196 #1041154
>>1041052
Ты что-то пытался кукарекать про установку devtoolset для деплоя... Короче, обтекай молча.
#197 #1041198
Двач, подскажи, мне нужно что-бы было как в классе только без класса, пишу в заголовочном файле глобальные переменные, функции должны менять значения этих переменных, только у меня происходит "multiple definition", я знаю про extern и перенос определения переменных в исходный файл. У меня вопрос, это единственный способ обхода multiple definition и возможность работы по описанному мною способу? Как вообще в C это делали?
#198 #1041220
>>1041198
Надо делать структуры и передавать функциям поинтер на них. Никаких глобальных переменных, они хуёвые.

struct huiuct {
int huint;
char huiar;
} huiuct_t, *phuiuct_t;

bool huiunc(phuiuct_t object, int param, int huiam) {
if (!object) {
return true;
}
return false;
}
#199 #1041225
>>1041220

> typedef struct huiuct {


Фикс.
#200 #1041226
>>1041198
В хедерах перед объявлениями добавь extern (без определений!), в исходниках сами определения.

// fuck.h
extern long long YRMOM;

// fuck.c
#include "fuck.h"
YRMOM = GetYrMom();

// somewhereelse.h
#include "fuck.h"
void fuckYrMom()
{
. short yrDick;
. PutIn(yrDick, YRMOM);
}

И да, в зависимости от архитектуры программы, это может быть очень не хорошим решением.
#201 #1041280
>>1041198
В хедере объявляешь переменные "extern". Для каждого хедера с глобалами/статиками делаешь .c-файл, в которой ты пишешь то же самое, но без extern.
#202 #1041596
А возможно ли записать класс в файл в бинарном виде, как структуру в Си?
#203 #1041610
>>1041596
можно, нахуя?
что с указателями делать?
#204 #1041612
>>1041610
А как мне собственно попроще сохранить на диске все данные, которые располагаются в различных экземплярах классов ( или как правильно называть?). Мой байтоебский мозг ничего лучше, чем напрямую скинуть байтики, не придумал.
#205 #1041613
>>1041612
гугли сериализация с++
что с указателями?
что с не ПОД-типами типа строк, мап, векторов?
#206 #1041614
>>1041613
я к тому, что руками придется писать то, что нужно, это тебе не жаба.
#207 #1041666
В каком языке самое каноничное ооп? Я думаю на с++, а вы что скажете?
#208 #1041671
>>1041666
Smalltalk
#209 #1041686
>>1041596
Если класс trivial (т.е. все данные в нём интегральны) - сохранение класса на диск путём копированием из памяти будет правильным.
#210 #1041704
>>1041666
Eiffel.
#211 #1041705
Есть std::string. Можно ли из него как-то по быстрому вырезать кусок в духе:

std::string s = "......";
auto it1 = s.begin() + pos1;
auto it2 = s.begin() + pos2;
it1 = it2;

?
#213 #1041710
>>1041705

>по быстрому вырезать кусок


стринг_вью?
#214 #1041778
Посоны, тяжело ли вкатиться в джуна с вышкой?
И как обстоят дела с работой на С/С++ за рубежом.
#215 #1041781
>>1041778
В госконтору легко.
#216 #1041784
>>1041686
да ты что, серьёзно?
а потом на другой архитектуре прочитаешь?
а если собрать с другими опциями выравнивания?
нубяра, уходи, велосипедаст.
#217 #1041788
>>1041778
зарубеж - украина, бульбостан?
нормально.
Европа - нормально.
СШП - нормально.
#218 #1041791
>>1041781
Нет, только не в туда. Лучше заняться гомопроституцией, чем в госконтору.
>>1041788

>зарубеж - украина, бульбостан?


Ну это на случай, если в высокодуховной начнется инфернальный пиздец

>Европа - нормально.


СШП - нормально.
А здесь можно поподробнее?
#219 #1041803
>>1041784
Прочитай вопрос ОПа, уёбок.

>как структуру в Си?


Если тебе не нравится fwrite, то напиши об этом автору вопроса а не мне, рептилоид.
#220 #1041817
Есть контейнер, содержащий некоторые тривиальные структуры (например вектор троек даблов, или двусторонняя очередь пар интов). И есть библиотечная функция в Си-стиле (не умеет в итераторы, и прочие ништяки), которая принимает указатель на массив с типом элементов этих структур.
Как сделать по уму, чтобы данные из крестовых контейнеров попали в эту функцию?
Пока не вижу альтернативы впиливанию буфера из std::array, заполнению его итераторами из контейнера, передаче через c_ptr в ту функцию, и выпиливанию этого буфера.
#221 #1041822
>>1041817
1. C std::vector всё просто, берешь поинтер на первый элемент и передаешь его: &huector.front(). Или, если у тебя проект >= С++11, то там даже есть специальный метод для получения ссылку на массив сырых данных: huektor.data()

2. Списки-хуиски надо сначала преобразовать в векторы-хуекторы, затем см. п. 1.
#222 #1041875
Привет, хочу вкатиться в кодинг.
С чего начать, с Си или С++?
Читал что лучше с Си, потому что С++ это типо расширенная версия с классами.
#223 #1041877
>>1041875
Тебя обманули. C++ не требует знаний С и его можно учить независимо.
#224 #1041884
>>1041875

Учи С конечно же. Сеплэплас это язык для индусо-макак.

Вон одна уже пишет что даже Си знать не надо. Пердолить Страуструпские говноабстракции
#225 #1041885
>>1041875
что угодно кроме крестов
#226 #1041891
WinSock2 и WS2tcpip.h какие плюсы и минусы?
#227 #1041901
Можете ответить ТВЕРДО и ЧЕТКО, умрут ли кресты в ближайшие 10-25 лет?
77 Кб, 1028x742
#228 #1041912
Какое же говно эти .h файлы, как люди этим вообще пользуются столько лет?

Выходит, я не могу просто описать наличие типа в .h, а в .cpp уже полностью раскрыть функциональность.
А если таки сделать в .h полное описание структуры, то:
Можно определить метод прямо в структуре или же можно объявить его в структуре, а определить в другом .cpp файле. То есть, варианта определить метод после структуры в .h нет.
Ещё хуже ситуация со статическими методами, их вообще можно только внутри структуры определять.
Аналогично с функциями, inline-функции определять прямо в .h (иначе они будут вовсе и не inline на самом деле, если я правильно понял это всё), а реальные функции в любом случае определять в .cpp, объявлять в .h. Даже если две функции с точки зрения логики программы делают что-то схожее, но одна из них inline, то описать их рядом нет возможности.

Не знаю, какую-нибудь простую идею модульности нельзя внедрить за столько лет? Типа, в каждом файле две части. В первой объявлены все глобальные переменные, функции и структуры для использования из других модулей. Во второй части структуры и функции использующиеся только внутри этого модуля и код для всего из первой части - для inline-функций, для не inline-функций, для статических методов, чтоб всё было однообразно и легко читалось. Так как пары объявлений-определений будут всегда строго в одном файле, всяким компоновщикам-линковщикам не придётся ругаться на множественные определения в разных единицах трансляции и прочие искусственные проблемы. В началах первой и второй части указываются другие востребованные для объявлений или определений внешние модули.
Можно даже обёртку вокруг текущего с++ сделать, которая будет засовывать все определения методов прямо в структуры, распиливать определения inline и не-inline функций в .h и .cpp файл - а для программистов всё будет выглядеть красиво и в одном месте.
#229 #1041916
>>1041912

> inline


Лел, G++ вообще игнорирует эту байду и инлайнит, что ему захочется, а что не захочется - не инлайнит, вне зависимости от того, пишешь ты inline или нет.
#230 #1041919
>>1041901
Твердо и четко отвечаю - нет.
#231 #1041923
>>1041891
Нинужно будет через 4 года, когда asio впилят в стандарт.
#232 #1041930
>>1041919
Спасибо, убежал учить Си
#233 #1041943
>>1041901
определить смерть не забудь
#234 #1041948
>>1041916
inline не совсем для встраивания функций придуман на самом деле. В крестах это к ODR, а компилятор и без inline может функцию сделать встроенной. Для этих дел есть __forceinline (MSVC) и __attribute__((always_inline)) (GCC, ...)
#235 #1041956
>>1041919
>>1041788
>>1041781
охуенный рекрутинг проводишь
ну, жди, уебок, когда тебя сменит молодое мясо на твоей и так не сильно оплачиваемой работке по пилению какого-нибудь говна на крестах
#236 #1041958
>>1041956
Но если кресты с твоей точки зрения умирают, что к чему столько ненависти? У тебя же конкурентов меньше, одни профиты.
#237 #1041973
>>1041958
а сколько ненависти у пяти крыс в жестяном ведре когда им кидают краюху хлеба на всех?
#238 #1041975
>>1041973
Пока сюда не залетают хейтеры типа тебя, тут довольно лампово.
#239 #1042026
>>1041975
блядь, ты еще и тупой
это не оскорбление, это факт
#240 #1042065
>>1041875
Начни с хаскеля.
#241 #1042088
>>1041912

>Не знаю, какую-нибудь простую идею модульности нельзя внедрить за столько лет?


Тем, кто привык, по-большому счёту до фени. Остальным не до фени - доля плюсов сокращается.
#242 #1042114
>>1042026
Ты рвешься ровном месте, это просто факт. Хотя может для тебя это и оскорбление.
#243 #1042147
Попцаны, как считаете, стоит она того или нет? http://www.ozon.ru/context/detail/id/31924296/
#244 #1042164
Нужно реализовать некие события, которые могут происходить, а могут и не происходить, в зависимости от условий, приоритета, если событий несколько, и подобное. Так вот, как бы все это попроще реализовать, чтобы было возможно увеличивать количество событий без залезания в код? На ум приходит только взять готовый или написать свой скриптовый движок.
#245 #1042172
>>1041956

>В госконтору легко


>рекрутинг


Ебать ты.
#246 #1042265
>>1041912

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


Есть.
#247 #1042266
>>1041916

>> inline


>Лел, G++ вообще игнорирует эту байду и инлайнит, что ему захочется, а что не захочется - не инлайнит, вне зависимости от того, пишешь ты inline или нет.


Говорят, что это зависит от уровня оптимизаций. До -O3 он инлайнит (или нет) только inline-функции, а не-inline функции никогда не инлайнит. При -O3 может инлайнить любые.
#248 #1042274
>>1042147
Стоит, но можно же так скачать
#249 #1042283
>>1042265
Как же? Я нее могу нагуглить ничего.

Единственное что могу придумать - обернуть через "#ifdef opr_metod" определение метода в .h , и в одном из .cpp файлов перед #include прописать "#define opr_metod". Но это костыль ещё более кривой и толстый...
#250 #1042293
>>1042283

>Как же?


inline
#251 #1042297
>>1036675 (OP)
Ребята, не думали что компилятор может перехватывать ваши данные и кроме компиляции отправлять их кому следует?
Все ищут вирусы не там где нужно, а на обычный компилятор вряд ли кто то подумает.
Как вам идея?
#252 #1042302
>>1042297

>Как вам идея?


Куда шапочку из фольги выслать?
#253 #1042309
Сап.
Помогите, пожалуйста, разобраться с одной вещью.
Меня напрягает необходимость объявления fout в 15 строке
и 31.Можно ли как-то это объявить в одном месте?
Такая же история и с переменными(29,30 строчки). Возможно ли их куда-то поставить в ОДНО место?Для повышения читабельности кода и его структуризации.
Заранее благодарю.
http://ideone.com/ZWkBrv
#254 #1042314
>>1042309
В 31 fout не требуется, ты же её вообще не используешь.

>Такая же история и с переменными(29,30 строчки). Возможно ли их куда-то поставить в ОДНО место?


Мм? Ты о чём? Они же и так в одном месте - на соседних строчках. Технически, можно написать в одну строчку, но читаемость от этого не повыситься.
Очень непонятно спрашиваешь, я даже приблизительно не могу предположить что ты имеешь ввиду под "одним" местом. Какой-нибудь пример, как это могло бы выглядеть. Может быть в каком-то другом языке было так, как ты имеешь ввиду?
Самое читабельное, что могу тут придумать - разместить красивый комментарий. Но эдак далеко не уплывёшь.
Писал бы хоть уровень знаний. Складывается впечатление, что ты не слышал даже про глобальные переменные и упоминая их не совсем ясно, то ли это будет оскорблением и тебе покажется, что тебя за дурака держат, то ли ты в самом деле не знаешь о них.
Может объявить один раз в файле глобально fout (и все остальные переменные) вне функций на 9..10 строчке (перед ними придётся прописать строчку "class MainProgramCore;", чтоб можно было объявить переменную objMainProgramCore) и потом использовать всюду, как cin/cout. Не делай этого.
#255 #1042316
>>1042314

>прописать строчку "class MainProgramCore;"


Наврал, это не так работает.
#256 #1042328
>>1042164
хуясе ты ТЗ описал. Давай-ка поконкретнее.

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

>>1042314
fout объявленный на 31 строке не используется дальше, разве компилятор не уведомляет тебя об этом?
#257 #1042349
Двач, я тупой, может кто подсказать куда ведёт эта строка? Я уже два часа ищу и не могу найти. https://github.com/glfw/glfw/blob/213dd2d0d6201a1e17dacce2ff35bdc8dd14e309/src/x11_window.c#L2439
#258 #1042368
Какие подводные в этой вакансии?

https://rostov.hh.ru/vacancy/22245394?query=C++
#259 #1042419
>>1042368
подозреваю, что будет очень долгий испытательный срок в конце которого ВЫ НАМ НЕ ПОДХОДИТЕ
#260 #1042447
>>1042349
Задай вопрос так, чтобы я его понял - помогуж
#261 #1042449
>>1042447
Не знаю что там может быть не понятного, я привёл ссылку которая указывает на строку исходного кода которая выглядит подобным образом - "_glfw.x11.xi.available", так вот мне не понятно, где вообще находятся эти "x11" и "xi"? Я слабовато понимаю в исходных кодах и вообще имею мало опыта в программировании, у меня не получилось найти эти элементы в исходных кодах, может быть вы подскажите?
#262 #1042468
>>1042449

>_glfw.x11.xi.available


Обычно такие вещи с передней нижней чертой обозначают кишки библиотеки, которые клиентам видеть не надо.
Собственно зачем ты туда лезешь? Возникает какая-то конкретная ошибка?
#263 #1042471
>>1042468
Ничего кроме вопроса на мой вопрос я и не ожидал. Мне нужно разобраться как функция работает на нижнем уровне.
#264 #1042476
>>1042471
Ты на линуксах? Эта штука явно откуда-то из xinput достает доступны ли устройства ввода.
Если работаешь в ide, разберись как у неё работает поиск определения (в visual studio это Go to defenition)
#265 #1042477
>>1042476
Да, это мысль поставить ide.
#266 #1042487
>>1042328

>fout объявленный на 31 строке не используется дальше, разве компилятор не уведомляет тебя об этом?


Нет, не уведомляет. Спасибо.
>>1042316
Я просто хочу понять этот принцип("разделение обязанностей" через функции).
>>1042314
Вот, понял, когда засыпал думал как раз про глобальные переменные. Сейчас изучу материал, спасибо.
В одно место имелось ввиду объявить один раз в коде и дать объяснение по поводу их назначения. Сейчас я понял то, как это реализовать. Спасибо. Если можешь, ответь на вопрос выше!
#267 #1042489
Можно ли на Qt написать функцию, отправляющую POST-запрос по опроделенному IP и порту и возвращающую нихуя?

Везде в примерах какие-то сложные классы, клиенты...
#268 #1042493
>>1042489
Можно.
#269 #1042498
>>1042314
27-30 строчка. Получился "блок", в котором я объявляю переменные. Я правильно всё понял?
http://ideone.com/iL54Ev
#270 #1042500
>>1042493
Ой, спасибо. А я-то думал нельзя.

Где есть пример?
#271 #1042513
>>1042500
QNetworkAccessManager *huenager = QNetworkAccessManager ();

QNetworkRequest huequest(QUrl("http://huesite.ru));
QByteArray huiarray;
huiarray.append("param=Hello&");
huiarray.append("huiam=world");

huenager>post(huequest, huiarray);
#272 #1042514
>>1042513

> QNetworkAccessManager *huenager = new QNetworkAccessManager();


> QNetworkRequest huequest(QUrl("http://huesite.ru"));


Фиксики.
#273 #1042519
>>1042513

> huenager->post(huequest, huiarray);


Ещё фикс.
#274 #1042531
>>1042498
Да, так сделать можно. Зачем оно только тебе?
А вот правильно это или нет, это как посмотреть. С одной стороны всё работает и с этой точки зрения это верно.
А с другой у тебя может быть переменная требующая явной инициализации. Например, тебе внутри функции нужно изображение. Но в первых строчках функции размер изображения ты ещё не знаешь. Если изображение не умеет менять размер (а даже если и умеет, зачем лишний раз грузить машину изменением размера?), то тебе придётся объявлять переменную не в самом начале, хочешь ты того, или нет.
"for (int i = 0; i < number; i++) " тебя же не мешает, насколько я понял. Доводи до абсурда тогда уж - напиши "int i" в начале, а цикл поменяй на "for (i = 0; i < number; i++) ", лол. Или даже объяви i как глобальную переменную первой строчкой кода до начала любых функций, тогда тебе одного объявления хватит на всю программу. Только будут проблемы с рекурсией, вложенными циклами или многопоточностью. Ну да этого пока что нет, верно?
#275 #1042541
Как искать удаленку на С/С++
Только не говорите, что ее нет
#276 #1042548
>>1042541
нужно обладать конкретными скиллами, кресты тут будут только инструмент
например, быть способным написать бота, что работает в обход gameguard
или быть способным в течении нескольких часов написать рабочий эксплойт на предоставленную 0day уязвимость что не будет валится на каждый чих и по быстрому интегрировать его в предоставленный эксплойт пак или что еще
или же пытаться устроится на toptal, crossover и прочее, но тут надо быть монстром с 10-15 годами опыта в офисе и тереть на инлише более-менее свободно
в ЛЮБОМ случае все это требует просто невьебенных скиллов, вкатывальщикам в 2к17 лучше сразу обоссать самим себя, так будет быстрее и эффективней
#277 #1042560
>>1042531
Понял, спасибо. Мне просто было интересно конкретно про ту ситуацию, когда одна переменная используется несколько раз в коде(=глобальная). Офк есть ситуация, когда переменная нужна только в рамках одной функции(=локальная), и её нет смысла объявлять в том блоке.
У меня появился небольшой вопрос.
Смотри, допустим, что у меня формат записи в текстовой файл такой:
Name:Price$ (/n ).
Идея такая: я делаю счётчик проданных книг( получается, что я просто считаю кол-во строк через
[code]iout.getline(str, 1024, '\n'); [/code]
Теперь я хочу сделать счёт по полученным деньгам(они стоят в текстовом файле через ":" после имени). Подскажи, пожалуйста, как запилить такое, чтобы считывалось только ПОСЛЕ ":" и до "$"?
Я понял принцип работы getline, но не могу найти нужную функцию для реализации задуманного.
Если знаешь, подскажи, пожалуйста. (ещё лучше будет, если сможешь подсказать где можно подробней прочитать про работы с файлами ввода/вывода в C++, читал на каком-то русском сайте, но очень мало информации про то, что нужно. Только в общих чертах)

Общий код, чтобы было понятно: http://ideone.com/6VPl4Q (37-39)
34 Кб, 806x339
#278 #1042587
>>1042560
Я тебе не подскажу функцию которая прям сделает всё за тебя (гугли функцию поиска подстроки), очень плохо разбираюсь в этих стандартных функциях. Что мешает сделать такую простую штуку вручную, тебе же только какое-то двоеточие найти?
У тебя же есть str на каждой итерации. Вот и добавь там функцию на три строки (перемещаю u, пока не дойду до двоеточия. Потом прыгаю ещё на символ вперёд и считываю число. atoi - из строки извлекает число, то немногое стандартное, что я помню.).
Можно конечно вручную вырезать именно кусок строки до "$", но я думаю цена там в любом случае в числом представлении и atoi будет достаточно.
#279 #1042602
>>1042560
Вот тебе регекспы.
http://ideone.com/qhJSHJ
#280 #1042631
>>1042602
>>1042587
Понял, спасибо большое за помощь
#281 #1042865
>>1042449

>Я слабовато понимаю в исходных кодах


Вот пиздец. Ладно, рассказываю.

_glfw.x11.xi.available - это член available класса (или структуры) xi класса x11 класса _glfw. Найти эти классы та можешь либо текстовым поиском в том же репозитории (если только с форматированием кода не намудрили):
_glfw;
это конец объявления или
_glfw =
это инициализация
и так далее с другими классами.
>>1042477
Попробуй, но ты же опять придёшь сюда и будешь никакующие вопросы задавать.
#282 #1042986
>>1042541
Удалёнка есть, но её хуй найдёшь и нужно иметь нехуёвые скилы
#283 #1042989
>>1042986
Удаленка на C/C++ как суслик

https://www.youtube.com/watch?v=ihZyUBaG_8Y
#284 #1042991
Cтоит ли читать C++ Core Guidelines?
#285 #1043016
>>1042991
С учётом их скромного объёма и мелкой структурированности - стоит.
#286 #1043159
Ананасы, порой наблюдаю такую хуйню:
struct StructName {
/type/ operator() (/arguments/)
{
//...
return /something/
}
};
Оно бывает шаблоном и constexpr. И у меня вопрос, в чём отличие от простой функции?
#287 #1043160
>>1043159
блядь, забыл про звёздочки, которые проебались
10 Кб, 548x283
#288 #1043163
>>1043159
>>1043160
Например, вот такое вот. Почему нельзя использовать просто функцию?
#289 #1043166
>>1043163

>functor


Ояебу
#291 #1043181
>>1043163
Потому что для функций недоступна, например, частичная специализация шаблона, а для класса со статической функцией - доступна.
#292 #1043182
>>1043163
constexpr дает подсказку компилятору, что значение выражения можно подсчитать во время компиляции. А так как у тебя тут шаблон, то:

>> A constexpr function must satisfy the following requirements:


>> ...


>> there exists at least one set of argument values such that an invocation of the function could be an evaluated subexpression of a core constant expression (for constructors, use in a constant initializer is sufficient) (since C++14). No diagnostic is required for a violation of this bullet.



То есть возможно существование значений параметров шаблона, при которых выражение бы могло быть помечено constexpr. Так так в теле метода не создается нелитеральных типов (например std::string/vector и т.д., но, к примеру std::unique_ptr - это литеральный тип) тогда, предположительно, ничего не мешает таким значениям быть.

std::less используется в качестве шаблонного параметра для std::map или std::set, к примеру, чтобы упорядочивать ключи в деревьях. Более того std::less имеет constexpr конструктор, поэтому создание экземплятора компаратора имеет нулевую сложность (фактически, он не создается, поскольку нет виртуальных методов, наследуемых классов), а вызов operator(), скорее всего, заинлайнится, потому что он представлен оберткой для другого метода.
#293 #1043183
>>1043181

>> Потому что для функций недоступна, например, частичная специализация шаблона, а для класса со статической функцией - доступна.


operator() не статический и статическим быть не может
функции могут быть частично специализированы, а шаблонные структуры и классы - нет
#294 #1043187
>>1036766
Как будто это сейчас представляет сколь-либо значимую проблему.
#295 #1043203
Помогите немного с классами и конструкторами, мне кажется я не понимаю чего-то совсем очевидного.

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

Хотелось бы написать примерно как на первой картинке. Это немного искусственная ситуация, но суть в том, что сначала выполняется какой-то код (чтение размера из файла) и только потом становится известен размер. Но в таком случае оно выдаёт ошибку (мол нужно после двоеточия указать инициализацию как "img(char fname):bmp{size,size}{..}".
Но даже если написать так, оно упадёт с ошибкой, так как до вызова GdiplusStartup() использовать Bitmap нельзя вообще. Как и удалять его в деструкторе после вызова GdiplusShutdown(). Можно как-то явно указать в какой момент в конструкторе вызывает конструктор для bmp и то же самое для деструкторов? (если явно вызвать деструктор bmp.~Bitmap(), то ошибки компиляции нет, но деструктор суммарно вызывается два раза - второй раз автоматически)

Приходит в голову только решение с указателем со второй картинке. Но это как-то неэстетично. Мне не нужен этот указатель и его возможности. Лишняя переменная и лишний раз мучаю менеджер памяти.
#296 #1043234
Все поля класса, конструируются до вызова конструктора, а разрушаются после того, как выполнится деструктор может быть это не совсем верно, ананасы, поправьте, если я не прав. Ты можешь вместо инициализации по умолчанию инициализировать объект нужными тебе данными (мол нужно после двоеточия указать инициализацию как "img(char fname):bmp{size,size}{..}"

>Но даже если написать так, оно упадёт с ошибкой, так как до вызова GdiplusStartup() использовать Bitmap нельзя вообще.


Ну и? Значит надо вызвать эту функцию перед созданием объекта класса img, а функцию GdiplusShutdown() после удаления этого объекта.

>Приходит в голову только решение с указателем со второй картинке. Но это как-то неэстетично. Мне не нужен этот указатель и его возможности. Лишняя переменная и лишний раз мучаю менеджер памяти.


И в каком месте это лишняя переменная?

И вообще, твой код нихуя не правильный. Нехуй вызывать функцию для инициализации чего-либо gdi в твоём случае в конструкторе. Если ты создашь 10 объектов img, ты 10 раз инициализируешь эту библиотеку, что, как мне кажется, не есть верно. Точно также, уничтожив один объект img, ты сломаешь все остальные.
Так что убирай их нахуй из конструктора и деструктора
#297 #1043235
Либо это должен быть ебучий singleton, тогда это можно обыграть.
#298 #1043237

>Но это как-то неэстетично


Тоже мне, блядь, эстет нашёлся
#299 #1043256
>>1036675 (OP)
Скажите, если имеется определение глобальной функции в программе, то область памяти для нее выделяется заранее или когда происходит вызов данной функции, к примеру, из main?
#300 #1043259
>>1043256
Ты лучше скажи, зачем тебе это знание.
#301 #1043264
>>1043256
Это не лисп, это компилируемый язык, для любой функции есть:
- место хранения в образе
- место хранения в адресном пространстве программы для статических переменных
- место в стеке
Как ты мог догадаться, из всего этого что-то выделяется в начале выполнения, а что-то - в момент вызова. Догадайся.
#302 #1043326
>>1043183

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


Просто иди на хуй.
#303 #1043328
>>1043264

>для любой функции есть


>место в стеке


Что, для каждой функции отводится своё место в стеке?
#304 #1043338

>Значит надо вызвать эту функцию перед созданием объекта класса img, а функцию GdiplusShutdown() после удаления этого объекта.


Эта функция инициализирует gdi+. До неё любая попытка создать Bitmap (он тоже относится к gdi+) и вообще использовать любую функцию gdi+ на сработает.

>И в каком месте это лишняя переменная?


Заместо непосредственно одного объекта Bitmap на стеке у меня один Bitmap в динамической памяти, один указатель на стеке и ещё лишняя запись про Bitmap в менеджере памяти. Не считая всего того, что порождает Bitmap внутри себя.

>ты сломаешь все остальные.


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

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

Хрен с ним, нет альтернативы двоеточию - будут планировать всё так, чтоб и не возникали такие потребности.
24 Кб, 680x401
#305 #1043342
#306 #1043344
>>1043328
Если она не заинлайнена или ещё какой понос - да, на каждый вызов требуется некоторое количество памяти. У функции нет своего места в стеке, у ВЫЗОВА функции есть своё место в стеке.
#307 #1043353
>>1043326
В самом деле, затупил. Спасибо, что ткнул носом.
#308 #1043441
>>1043183
Что такое ЧАСТИЧНАЯ специализация? Часть аргумент шаблона определена, а другая - нет?
#309 #1043455
Ананасы, пришло время потрогать Qt, вопрос такой: стоит ли читать Шлее?
#310 #1043458
>>1043259
Честно говоря, я так чувствую себя в плане программирования более увереннее. Вот например знаешь как выглядит схема массива изнутри при определении и я себе это представляю, мне так проще. Также и с функциями для меня
#311 #1043482
#312 #1043484
>>1043441
Или даже все не определены, но у них более специализированная форма. Например, вместо T std::vector<T>
#313 #1043498
>>1038736

>Ну и протокол я реализовывал по Википедии, да


@ Один долбаёб как смог объяснил на пальцах суть rfc в википедии
@ Домохозяйка из Рязани, исправляя орфографические и стилистические ошибки в статье, дополнительно извернула смысл
@ Третий долбаёб по этой статье реализует протокол
#314 #1043571
>>1043498
@
Заработало.
#315 #1043580
Есть набор файлов в директории, из них некоторые файлы имеют определенный формат имен. Как мне обойти эту директорию и обработать только файлы, удовлетворяющие этому формату имен?
#316 #1043581
>>1043580
Меня обоссут, но в винапи поиск по шаблону есть вроде как. Если не форточки - не знаю
#317 #1043584
#318 #1043586
>>1043581
Так-то filesystem подвезли, нахуй винапи
#319 #1043589
>>1043580
http://man7.org/linux/man-pages/man3/readdir.3.html
Для *nix ов прокатит, как в шиндус хуй знает. Вообще, можешь воспользоваться boost::filesystem
#320 #1043590
>>1043586
Хуй знает, в моей версии MinGW не подвезли.
#321 #1043593
>>1043590
Оно уже даже в последней студии есть, люль.
Иначе тащи boost::filesystem — то же самое, в другом неймсепейсе.
#322 #1043596
>>1043593
Ага. и поебись со сборкой буста, если до этого его не собирал
#324 #1043603
>>1043596
Спермогоспода должны страдать.
#325 #1043604
>>1043603
Ну, написать дрова на свой ноут для линукса все-таки сложнее,чем собрать буст.
#326 #1043605
>>1043604
Покупающие ноут с ноунейм китайским хламом вместо железа должны страдать.
#327 #1043606
>>1043605
Acer, конечно, хлам, но за те деньги ничего лучше было не взять.
#328 #1043607
>>1043606
Небось ещё глянцевый экран, который годится разве что в качестве зеркала.
#329 #1043613
>>1043593
>>1043593
>>1043602
А сделать портабельно и без буста?
#330 #1043614
>>1043613

>портабельно


POSIX — Portable Operating System Interface
#331 #1043627
>>1043613
Без буста и последнего стандарта — портабельно никак от слова совсем.
#332 #1043651
>>1043613
дзен заключается в том что "сделать портабельно" - это значит захуярить кривой порт на винду с линукса
взять тот же pidgin или qtorrent, парадоксальная ситуация: абсолютное большинство пользователей на винде, но изначально это напердолено под линукс
и так с любым так называемым "кроссплатформенным софтом"
#333 #1043690
Анон, такой вопрос.
Есть абстрактный класс сущности. От него наследуются другие сущности (например, предмет, какая-то область на карте, противник, сам класс игрока делаю игру и тд).
При старте читается файл карты в котором сущностей для уровня: тип, имя если есть положение на карте и тд.
Например:
type item_health
origin 32 64
Так вот, тип внутри игры представлен строкой, можно ли как-то избежать кода вида
if( str == "item_health" ) { ent = new Item(); } ??
#334 #1043715
1. Как ответить на вопрос "что происходит в вижуал студии после нажатия F5"?
2. Что почитать о системе типов в C++?
3. Чем отличается перегруженный оператор от функции?
#335 #1043716
>>1043690
Ассоциативный массив.
#336 #1043722
>>1043614

>glob.h


Заинклудил в студии и получил ошибку, потому что хедер не найден. Если это не часть библиотеки C++, нахуй надо.
#337 #1043756
Какое определения типа в C++? Уебища в стандарте пишут, что в языке все имеет тип, но само определение типа не дают.
#338 #1043759
Что за убого дается понятие типа в стандарте: "типы описывают объекты". А кроссовки - это когда ты бегаешь по траве, но отсюда мы никак не можем понять, что такое кроссовки.
#339 #1043764
>>1043716
Алсо если не читать просто стринговый тип, а юзать сущности объектов на карте, то в абстрактном классе сущности можно сделать абстрактный метод получения нового инстанса конкретной сущности, который реализуют все наследники. Тогда тоже не придется ебашиться с кучей ифов.
#340 #1043766
>>1043764

>Тогда тоже не придется ебашиться с кучей ифов


Про рефакторинг и замену условий полиморфизмом слышал?
#341 #1043807
>>1043766
Долбоеб, я как раз такое и расписал.
#342 #1043871
>>1043766
Подробнее.
Мимонуб
#343 #1043938
Есть файлы, в которых записаны десятичные цифры, двоичные, и числа, записанные словами (например, nine). Мне нужно их отсортировать. Как написать обобщенный алгоритм, который отсортирует числа в каждом файле? Как рассматривать все эти записи? Как числа или строки?
#344 #1043955
>>1043938

>> Как рассматривать все эти записи?


>> Как числа


Очевидно же

>> Есть файлы, в которых записаны десятичные цифры, двоичные, и числа, записанные словами (например, nine).


По идее, если бинарное представления числа имеет какой-то префикс, например 0b, тогда там все очень просто: проверяешь префикс и определяешь метод для парсинга числа, заносишь число либо во временное хранилище либо, к примеру, в мульти-множество или хэш-контейнер.
#345 #1043958
>>1043955

>По идее, если бинарное представления числа имеет какой-то префикс, например 0b


Не имеет. Три файлы содержат строки типа 0100, 432, twenty.
#346 #1043967
>>1043938
Их нужно строками сматчить к числу, по маске, а потом уже сортируй. Но как ты например отличишь 10 в десятичной от 10 в двоичной - не ясно. Если как в твоем примере тут >>1043958 абсолютно у всех двоичных чисел в файле старший разряд - нулевой бит, то тогда все просто.
sage #347 #1043972
>>1037674
Пашел нахуй, макакен
#348 #1043973
Я очень плох в кодинге на Си++, еще и мыслю в стиле обычной сишки, поэтому прошу помощи. Как можно примерно сконструировать архитектуру интерфейса для недоигры в стиле Кризиса в Кемле? У меня выходит лишь нагромождение костылей. Из внешнего используется только SFML.
#349 #1043974
>>1038692
Проиграл
#350 #1044075
>>1039982

>Какой интересный сайт, первый раз такое вижу, 10/10 идея.


У меня для тебя http://www.codeabbey.com/
#351 #1044160
>>1043613
Буст - это и есть портабельно. Если доступа к ФС нету в языке, ничто тру портабельное с использованием доступа к ФС написано быть не может, расслабь булки.
>>1043590

>в моей версии MinGW не подвезли.


Стандарты переключать не умеешь? Посочувствовать твоему безультернативному использованию допотопной версии GCC?
>>1043756
Все свойства объекта (реально все) определяются через его тип и размазаны по стандарту. Уёбище - это ты. Есть куча других недосказанностей в стандарте, про которые ты не спрашиваешь.
>>1043871
Лол. -> >>1043764
>>1043938

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


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

>Не имеет.


Что значит не имеет? Если тебе дают числа, из которых надо выбрать двоичные просто по наитию, шли таких людей нахуй.
#352 #1044164
>>1044160

>так что хранить в строках нахуй не надо.


Точнее, хранить в строках нужно только для сохранения исходного написания числа.
#353 #1044174
>>1044160
Ну его нахуй ваше ООП, оно блять для академиков. Пойду дальше на Сишке предолиться.
#354 #1044176
Вопрос на мильёон инкриментов! Кто-нибудь здесь понимает кишки и детали реализации Qt5? Вопрос в том, как устроена событийная модель и модель потоков? Как QCoreApplication взаимодействует с QEventLoop? Как устроен QSignalSpy?

Проблема в том, что приходится дружить Google Tests & Mocks с Qt мордой и кое-каким промежуточным слоем. Хочется сделать малой кровью и кое0что вынести для себя.
#355 #1044182
>>1043722

>Если это не часть библиотеки C++, нахуй надо.


Шапку читал?

> "Как мне сделать Х на чистых крестах без библиотек" идут на хуй

#356 #1044196
>>1044176
Посмотри исходники по диагонали, многое поймёшь.
#357 #1044263
>>1036675 (OP)
Хачу вкотиться в кресты, есть ли учебник по типу теория - упражнение
#358 #1044359
изучаю С++, что ещё надо изучать для тупого устройства на работу
#359 #1044366
>>1044263
c++ за 21 день. Хачу типа тебя пойдет.
#360 #1044368
>>1044359
Изучить вакансии в твоей досягаемости и что они требуют?
#361 #1044370
>>1044366
гляну, спс
#362 #1044371
>>1044368
В смысле смежные языки какие?
#363 #1044390
>>1044359
для "тупого устройства на работу" изучать с++ крайне не рекомендуется
#364 #1044391
>>1044359

>изучаю С++


С++ джуны нахуй никому не нужны. Даже в НИИ батрачить за доширак только по блату возьмут.
#365 #1044394
Салам всем правильным. Есть локальная сеть. Как узнать мак-адрес удалённого компа в данной сети с помощью сокетов? Ну или на крайняк с помощью asio?
#366 #1044410
>>1044371
в смысле есть ли вообще спрос на кресты
#367 #1044419
>>1044394
На винде есть способ для WinSock. Можно загуглить.
#368 #1044427
>>1044410
с каждым годом количество вакансий сокращается
те это не обвал, но систематическое уменьшение
по крайней мере в россии так
в сша если судить по форумам где русскоязычные кодеры отписываются, такая же ситуация
тут, кажется какая проблема: в крестах нету стандартизированного abi, следствием чего невозможно организовывать динамическую горячую загрузку-выгрузку классов, невозможно без геморроя пробрасывать иключения через динамически подгружаемые библиотеки, крестовые шаблоны отличаются от дженериков в ява и шарпе, но эти же дженерики также позволяют грузить-выгружать классы, как следствие всего этого на крестах не построить сложные энтерпрайз системы, которые по сути и основаны на возможности сделать программу-конструктор из плагинов
(а то что было сделано, было основано на сишном abi, поверх которого зачастую сооружались либо самописные компонентные системы, либо пользовались чем то готовым типа com или gtk, НО ведь это возврат в каменный век, тогда сразу же становится на границе динамически загружаемых модулей отказыватся от всех вкусностей крестов, и возвращатся к си, по сути)
была надежда на веб-сервисы, типа думали что будут писать относительно независимые компонены системы, которые общаются через эти самые протоколы веб-сервисов, тогда уже похуй на чем писать, и тупо думали что кресты зайдут
НО как раз именно что и похуй, и теперь и веб-сервисы тоже предпочитают реализовывать на чем-нибудь более легком, например, на каком-нибудь варианте серверного ява-скрипта, потому что оказалось что производительности достаточно, а важнее скорость запила фич и наличие обезьян готовых это кодить на рынке
крестам пиздец, это они становятся нишевым инструментом, например, неплохо заходят в игрострое, потому что позволяют сочетать нативное быстродействие с возможностями ооп (тк игры по большому счету это моделирование, а опп как раз и подходит для задач моделирования, симуляции чего-то)
#369 #1044428
Ncurses
[code lang="c++"]
initscr();
//refresh();
Wlog = newwin(LINES / 5, COLS, 4 LINES / 5, 0);
box(Wlog, 0, 0);
wrefresh(Wlog);
[/code]

Глаза протер, а так и не увидел в документации, почему без refresh()
до newwin()* не отрисовываются границы. Что я делал не так?
#370 #1044430
>>1044428
meh, разметка
#371 #1044441
>>1044419

>Можно загуглить


Нашёл только как свой мак-адресс узнать
#372 #1044446
>>1044427
Надо это в шапку закинуть, чтобы ньюфаги не бежали учить кресты.
#373 #1044454
>>1044427

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


В играх почти без ООП пишут, там сишка с чуть подсахаренная шаблонами:
https://youtu.be/rX0ItVEVjHc?t=1h23m50s
#374 #1044455
>>1044446

>чтобы ньюфаги не бежали учить кресты


Они из-за игр в основном учат. Хотят игры делать.
#375 #1044457
>>1044394
Можешь на указанный ip отправить сообщение и потом посмотреть arp-таблицу, чтение из некоторых файлов позволяет на никсах посмотреть ее https://codereview.stackexchange.com/questions/58097/parsing-arp-cache-in-c . В принципе, можно захватить вывод программы arp.
#376 #1044463
>>1044457
А есть что-то похожее на winsock? Если да, кинь ссылку на MSDN.
#377 #1044477
>>1044463
Тебе нужно создать UDP сокет и послать, просто послать пакет на рандомный порт узла назначения, после этого твоя таблица гарантированно будет иметь MAC адрес назначения (хотя он может уже находиться в кэше ARP'а), потому что такова суть IP, нужно сначала получить MAC и потом только отправлять пакет с указанным адресом и маком в хэдере Ethernet. Здесь тебе и понадобится винсок.
Потом делаешь что-то вроде такого:
https://stackoverflow.com/questions/14147138/capture-output-of-spawned-process-to-string
То есть вызываешь arp и перехватываешь вывод приложения, и затем уже, как тебе нравится (регекспом или посимвольным считыванием) определяешь необходимый тебе MAC для адреса.
На никсах это делается очень быстро, даже если бы мне пришлось получить вывод от ARP, но тут какой-то пиздос.
Возможно, есть какой-то системный сокет, который позволяет общаться с ядром и запросить ARP таблицу без этих изъебств, но тут я не помощник даже.
#378 #1044479
>>1044477
Кстати, вот ту в пару тычком мышкой нашел https://msdn.microsoft.com/en-us/library/windows/desktop/aa366398(v=vs.85).aspx
Похоже, все делается в один вызов, так что удачи. Винсок не нужен даже.
#379 #1044480
>>1044477
Архитектура мне ясна. Просто как запросить эту самую ARP-таблицу на винсоке?
#380 #1044482
>>1044479
Спасибо. Добра тебе
#381 #1044508
>>1044454
в играх часто требуется реализовывать полиморфное поведение при реализации взаимодействия предметов, персонажей и мира
чтобы ручками vtable не эмулировать по старинке, гораздо проще воспользоватся виртуальными функциями в крестах
#382 #1044509
>>1044463

>погугли за меня

#383 #1044511
>>1044196
Ну так я и начал с просмотра сорцов, но чёт не выдержал. Вот сейчас выяснил, что QEventLoop должен быть запущен в каждом потоке и процесс сигнализации в этом контексте не совсем тривиален.

Проблема в том, что не оч правильно завязывать на конкретную реализацию, как в случае файлами с суффиксом _p.h.

Сейчас не ясна другая деталь. Как вкладываются QEventLoop'ы? Как вложенный цикл сообщений понимает, что он должен обрабатывать событие, а не другой?
#384 #1044522
>>1044508

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


Не проще и тормознее. Там почти все без ООП делают, гугли "data oriented design", и видео посмотри с Эктоном >>1044454.
#385 #1044535
>>1044511

>int QEventLoop::exec(ProcessEventsFlags flags = AllEvents)


http://doc.qt.io/qt-5/qeventloop.html

>Как вкладываются QEventLoop'ы?


КутыВиджетс - однопоточная хуйня, пока ты сам ручками на треды не разделишь, всё происходит в одном треде. Когда ты делаешь exec() евентлупа - всё замирает, и выполняется этот эвентлуп.

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

http://doc.qt.io/qt-5/eventsandfilters.html

Такая же жопа в винапи: всё в одном треде, и пока ручками треды не сделаешь, ничто не поменяется.
#386 #1044574
У меня есть проприетарная легаси библиотека на крестах без документации. Я начал потихоньку в ней разбираться и писать документацию.

Но чтобы отслеживать свою скорость мне нужно узнать сколько там еще говна надо разобрать.

Мне нужна программа, чтобы умела считать число C++ классов в файле, число функций в классе. Посоветуйте что-нибудь.
#387 #1044579
>>1044522
иди нахуй, ничего я гуглить не буду
"тормознее" блядь
#388 #1044580
>>1044574
IDA PRO
#390 #1044591
>>1044584
Ну функции она посчитает, а классы никто никогда уже не узнает
#391 #1044592
>>1044591
У меня есть исходники.
#392 #1044595
>>1044592
Тогда считай вручную, хули как лох
#393 #1044596
>>1044427
Как боженька смолвил
#394 #1044602
>>1044535

>Такая же жопа в винапи


Писал на этом по малолетке. Вообще концепция event loop шире. Сейчас есть в любом довольно универсальном языке от петна до f#. А вот в плюсах нативного нет? Я так понимаю в новых выпусках(стандартах) появится? Корутины ведь тоже на event loop завязаны? Есть какие-нибудь фундаментальные основы, оч заебало читать маны и исходники, чтобы по крупицам собрать общую картину.

> Когда ты делаешь exec() евентлупа - всё замирает, и выполняется этот эвентлуп.


С этим ок. Есть main thread c loop'ом, который создан QCoreApplication, затем тут же я создаю новый QEventLoop. Так вот вопрос: кто будет обрабатывать мои сигналы? Тот же вопрос, но, если я соеденю слот QEventLoop::quit() с каким-нибудь сигналом?
#395 #1044683
>>1044579

>"тормознее" блядь


Ты думаешь, что виртуальный вызов бесплатный? Что классы по 20 килобайт с нехуевой цепочкой наследований бесплатные? Что дереференс указателя ничего не стоит? За ООП приходится платить.
#396 #1044698
>>1044602
Сорян, боюсь наврать, а погружаться в это сейчас не хочу. Попробуй книгу найти. Можешь проверить предположение: обрабатывает только те эвенты новый луп, которые заданы флагом, который я упомянул, а остальные дропаются (т.е., никогда не буду накоплены движения мышкой, например).

http://doc.qt.io/qt-5/threads-qobject.html#per-thread-event-loop - попробуй ещё это, я понял чуть больше после прочтения.
#397 #1044740
>>1044683
Мне кажется, что в игровом мире не так много объектов, чтобы высасывать столько производительности, скорее, это проблема физического контекста, то, действительно, может откусить очень и очень весомый кусок процессорного времени. За ее пределами не будет такого абсолютного выигрыша в производительности.
#398 #1044828
Ребята, неординраный вопрос имееца.
Мы знаем что си код компилится в машиный код
А можно ли машиный код скомпилить в сишный?
Есть ли приблуды для этово? Если написать что то такое то взлетит?
#399 #1044830
>>1044828

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


Нет.
#400 #1044837
>>1044828
Конечно взлетит.
#401 #1044851
>>1044828

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


ида и подобные ему инструменты умеют и "восстанавливать" машкод в сишный, но делают хуево
реверсеры чаще всего дизассемблированный код анализируют
#402 #1044854
>>1044830
Вкатываешся братан?
#403 #1044865
>>1044854
да щас наверное все компиляторы, не только шланг в промежуточное представление сначала перегоняют код
так что ж он прав
#404 #1044868
>>1044854
Ага, 12й год уже. C компилится обычно в ассемблер, реже в roc. Если бы он компилился в машинное коды то ты бы имел необходимость на каждой машине перекомпилировать свое поделие заново.
#405 #1044875
>>1044868
Разве код, написанный на языке ассемблера, не отображается в машинный код 1 к 1?
#406 #1044876
>>1044868

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


с каким же дном сижу на одной борде ))
#407 #1044882
>>1044875
Нет, схуяли?
#408 #1044885
>>1044876
Не ссы, курсу к третьему тебе и про это расскажут.
#409 #1044887
>>1044885
ты, сука, дебил, правда 12 лет хуячишь кодером и с серьезным лицом тут вещаешь что си в ассемблер компилится?
да иди ты нахуй, лол
#410 #1044906
>>1044885
Без оптимизаций возможно, но чтобы провернуть все механизмы, которые есть в современных кококомпиляторах нужно строить AST или что-то еще в этом роде.
#411 #1044931
>>1044906
Ты о чем? Оптимизации на всех уровнях компиляции задействованы, что в RTL построении, что в AST.

>>1044887
Хуясе ты порвался. Ну давай, тащи свой чудо компилятор компилирующий C напрямую в объектный код. Естественно не очередной ToyMachine который тебе Марьванна задала до пятницы.
#412 #1044939
>>1044882
Насколько я знаю, это так. Сам факт возможности перевести команду ассемблера вручную в двоичный код это символизирует.
#413 #1044944
>>1044931
Не думаю, что у лексера есть какие-то другие задачи, чем высрать кучку токенов по требованию. Парсер разбирает входные токены и строит семантическое дерево, потому что даже с постоянным захватом токенов еще не вполне понятно, что с ними нужно делать. А с этим деревом хоть ебать, хоть сохранять, хоть завернуть ... все, что угодно можно делать.
Не могу понять что за RTL такой, был бы признателен, если бы ты скинул хоть какую-то инфу.
#414 #1044945
>>1044944
А ну действительно, вспомнил про препроцессор. Лексер с парсером тоже участвуют, стало быть.
#415 #1044952
>>1044944
RTL - это регистровый псевдоязык.

https://en.wikipedia.org/wiki/Register_transfer_language

Как он участвует в оптимизации:
https://gcc.gnu.org/onlinedocs/gccint/RTL-passes.html
#416 #1044971
Крестач, а есть где англоязычный форум по крестам, где разрешено было бы создавать темы не по конкретным вопросам (как на SO), а более общие, и где было бы интересно посидеть почитать что-нибудь полезное.

>>1044454
Послушал я этого Эктона и только отчасти с ним согласен. Естественно, любая программа занимается только трансформацией разного рода данных. Естественно, если мы заранее знаем, с какими типами данных нам придётся работать, и какое железо будет всё это обрабатывать, то городить лишние абстракции нет необходимости. Но штука в том, что на суперкомпьютерах, серверах, рабочих станциях, десктопах, планшетах и смартфонах РАЗНОЕ ЖЕЛЕЗО (в т. ч. внутри класса устройств), которое работает под РАЗНЫМИ ОПЕРАЦИОННЫМИ СИСТЕМАМИ, и далеко не всегда данные можно представить какой-то структурой фиксированного размера или массивом структур. Поэтому многое из того, что этот мужик там говорил про data-oriented design неприменимо даже при разработке только под какую-то одну ОС. Про кросс-платформенную разработку вообще молчу.
Какие-то дебильные куски кода там пытался разбирать с точки зрения работы с кешем. Давайте теперь все сядем и при написании любой тулзы, приложения или движка будем думать о том, что там и как работает с кешем на хуевой туче устройств.
Вообще этот Эктон какой-то балабол зашоренный - сидит со своей консолью, в которой железо годами не меняется, и ничего вокруг не видит и не хочет видеть. Ему там пара чуваков задавали хорошие вопросы:
1. Как они избегают дублирования кода (они не используют шаблоны), который должен одинаково обрабатывать разные типы данных?
Ответил, что, мол, люди изобретают вещи (подразумевая, бесполезные вещи), приводящие к дублированию кода, а потом изобретают вещи, помогающие решать проблему дублирования кода. И вообще, обработка шаблонов в C++ - это просто обработка текста посредственным текстовым обработчиком (не такой уж он и посредственный, т. к. позволяет, всё-таки, надёжно обеспечить type-safety), и что там, где разумно использовать шаблоны, лучше ГЕНЕРИТЬ КОД СПЕЦИАЛЬНОЙ ТУЛЗОЙ, которая с этим справится лучше компилятора.
Ну и кто скажет, что он не дебил после этого.
2. Есть программа, и заранее неизвестно, под каким железом и осью эта программа будет работать. Где тут место для data-oriented design?
Ответил, что предъява о том, что характеристики железа могут быть заранее неизвестны - это всё НИПРАВДА. Что всегда нужно думать о том, под какое железо ты пишешь программу, и что портабельность в общем смысле недостижима и для дураков.
3. Вот написали они движок под железо PS3, а потом бац и его надо переписывать под PS4. И, поскольку железо совершенно разное, то старый движок оказывается почти бесполезным, т. к. у ких там везде используются определённые структуры данных под железо PS3. И не показывает ли это, что весь этот data-oriented design себя не оправдывает?
Ничего конкретного не ответил. Нёс какую-то херню.

Нахер таких дебилов-болтунов, короче.
#416 #1044971
Крестач, а есть где англоязычный форум по крестам, где разрешено было бы создавать темы не по конкретным вопросам (как на SO), а более общие, и где было бы интересно посидеть почитать что-нибудь полезное.

>>1044454
Послушал я этого Эктона и только отчасти с ним согласен. Естественно, любая программа занимается только трансформацией разного рода данных. Естественно, если мы заранее знаем, с какими типами данных нам придётся работать, и какое железо будет всё это обрабатывать, то городить лишние абстракции нет необходимости. Но штука в том, что на суперкомпьютерах, серверах, рабочих станциях, десктопах, планшетах и смартфонах РАЗНОЕ ЖЕЛЕЗО (в т. ч. внутри класса устройств), которое работает под РАЗНЫМИ ОПЕРАЦИОННЫМИ СИСТЕМАМИ, и далеко не всегда данные можно представить какой-то структурой фиксированного размера или массивом структур. Поэтому многое из того, что этот мужик там говорил про data-oriented design неприменимо даже при разработке только под какую-то одну ОС. Про кросс-платформенную разработку вообще молчу.
Какие-то дебильные куски кода там пытался разбирать с точки зрения работы с кешем. Давайте теперь все сядем и при написании любой тулзы, приложения или движка будем думать о том, что там и как работает с кешем на хуевой туче устройств.
Вообще этот Эктон какой-то балабол зашоренный - сидит со своей консолью, в которой железо годами не меняется, и ничего вокруг не видит и не хочет видеть. Ему там пара чуваков задавали хорошие вопросы:
1. Как они избегают дублирования кода (они не используют шаблоны), который должен одинаково обрабатывать разные типы данных?
Ответил, что, мол, люди изобретают вещи (подразумевая, бесполезные вещи), приводящие к дублированию кода, а потом изобретают вещи, помогающие решать проблему дублирования кода. И вообще, обработка шаблонов в C++ - это просто обработка текста посредственным текстовым обработчиком (не такой уж он и посредственный, т. к. позволяет, всё-таки, надёжно обеспечить type-safety), и что там, где разумно использовать шаблоны, лучше ГЕНЕРИТЬ КОД СПЕЦИАЛЬНОЙ ТУЛЗОЙ, которая с этим справится лучше компилятора.
Ну и кто скажет, что он не дебил после этого.
2. Есть программа, и заранее неизвестно, под каким железом и осью эта программа будет работать. Где тут место для data-oriented design?
Ответил, что предъява о том, что характеристики железа могут быть заранее неизвестны - это всё НИПРАВДА. Что всегда нужно думать о том, под какое железо ты пишешь программу, и что портабельность в общем смысле недостижима и для дураков.
3. Вот написали они движок под железо PS3, а потом бац и его надо переписывать под PS4. И, поскольку железо совершенно разное, то старый движок оказывается почти бесполезным, т. к. у ких там везде используются определённые структуры данных под железо PS3. И не показывает ли это, что весь этот data-oriented design себя не оправдывает?
Ничего конкретного не ответил. Нёс какую-то херню.

Нахер таких дебилов-болтунов, короче.
#418 #1044994
>>1044828

>А можно ли машиный код скомпилить в сишный?


Абсолютно точно можно - каждую инструкцию можно портабельно переписать на C. Вопрос лишь в одном - нахуя? Олсо - компиляция - это ещё и линковка, т.е. сборка объектных файлов в один. Зачем делать то же самое с экзешником в обратную сторону? Наверное, ты говоришь о симуляции или трансляции.
>>1044851
Не, это не то, они пытаются оптимизировать и сделать код читаемым. Просто сделать трансляцию в C - запросто.
>>1044865>>1044854
Начнём с того, что компилировать машинный код нельзя по определению компиляции, так что вопрос изначально дебильный. С другой стороны, структура процесса компиляции во время обратной трансляции не имеет вообще никакого значения.
#419 #1045014
>>1044931
блядь, все компляторы сейчас компилят в промежуточное представление, но на выходе в исполняемом файле будет машкод под конкретную архитектуру
и, да

>12й год уже [кодинга]


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


просто напиши сколько зарабатываешь, чтобы мне окончательно жопу разорвало
ты пишешь полную чушь, просто пиздец
#420 #1045015
>>1044994
ой, все
как можно пороть хуйню с серьезным лицом? это прокатывает вообще?
#421 #1045027
>>1045015
Такое ощущение что какой то синиор из силиконовой долины вкинул вопрос и сам же толстит на него отвечая.
#422 #1045046
>>1045014
Будет байтовый ассемблер. Открой экзешник в hiew и посмотри, прежде чем кукарекать.
мимо
#423 #1045049
>>1045046

>байтовый ассемблер


какой нахуй "байтовый ассемблер"
ты троллишь что ли? это такая тонкота что ли?
ассемблеры - это семейство языков программирования, компилируемых в машинный код, такие же яп как и си, и с++, и паскаль семейства, и вообще любая хуйня что может генерировать машкод, вплодь до некоторый реализаций лиспа
123 Кб, 730x620
#424 #1045055
Когда уже концепты будут? Я их уже лет джвадцать жду, если не больше.
#425 #1045056
>>1045055
Чё это такое, расскажи вкратце
#426 #1045057
>>1045014
Примеры то охуительного компилятора кроме силанга в режиме анализа будут с промежуточным представлением?
#427 #1045060
>>1045056
Если просто - позволяет ограничивать параметры темплейтов без хаков вида enable_if и SFINAE.

https://stackoverflow.com/questions/15669592/what-are-the-differences-between-concepts-and-template-constraints
#428 #1045064
>>1045057
и gcc и майкрософтофский компилер тоже используют промежуточное представление
да все используют
фишка llvm была же не в том что они первые сделали это, а в том что предоставили легкодоступное программное api на доступ к ir (intermediate representation)
и наверное мне здесь стоит прекращать просветительские посты, тк судя по постам, сегодня дурной контингент в этом треде
один только специалист с 12ти летним стажем упорно доказывающий что сишка компилится в ассемблер чего стоит

> Если бы он компилился в машинное коды то ты бы имел необходимость на каждой машине перекомпилировать свое поделие заново.


а вот от этого вообще на смех пробивает
#429 #1045072
>>1045064
Долго еще будешь продолжать троллинг тупостью?
Вот тебе линк для альтернативно одаренных:
http://cs-fundamentals.com/c-programming/how-to-compile-c-program-using-gcc.php

Где ты здесь видишь свое промежуточное представление?
#430 #1045082
>>1045072
нет, блядь, это ты необразованное уебище
в gcc целое семейство промежуточных представлений, с той же ссаной википедии
the historical Register Transfer Language (RTL)
the tree language GENERIC
the SSA-based GIMPLE.
Standard Portable Intermediate Representation SPIR/SPIR-V
LLVM Intermediate Representation
HSA Intermediate Layer
другое дело что к ним нет общедоступных программных апи, как у шланга поверх llvm
#431 #1045084
>>1045082

> с той же ссаной википедии


Попробуй почитать что-то сложнее, базарю, заходит. Возможно даже начнешь трансформацию во что-то разумное.

>the historical Register Transfer Language (RTL)


>the tree language GENERIC


>the SSA-based GIMPLE.


Вот эти три хуевины нужны для преобразования препроцессированного кода в ассемблер.

>Standard Portable Intermediate Representation SPIR/SPIR-V


Это низкоуровневое представление для трансляции в GPU/CPU команды которое использует OpenCL/Vulkan и другие подобные стандарты.

>LLVM Intermediate Representation


Ну, я думаю даже такая тупая макака как ты слышала что это.

>HSA


Надстройка над ассемблером для серверных GPU.

Как все это тобою высранное относится к компиляции си, лол? Ты всегда когда обсираешься начинаешь кидать все до чего дотянешься из википедии?
#432 #1045085
>>1045084

>Ну, я думаю даже такая тупая макака как ты слышала что это.


То есть LLVM не относится к компиляции Си? То есть это не промежуточное представление? Или что вы хотели этим сказать?
#433 #1045087
>>1045085
У LLVM в процессе компиляции есть еще один дополнительный шаг, которого нет у других компиляторов, если на пальцах.
#434 #1045094
>>1045084

>препроцессированного кода в ассемблер.


>в ассемблер


просто скажи мне, сучка, что ты троллишь
иначе нельзя быть таким упоротым
#435 #1045096
>>1045087
КАКОГО ТАМ "ШАГА" НЕТ?
llvm, блядь, это ir с публичным программным api, что и отличает его от предшественников
#436 #1045098
>>1045096
Нет, его отличает от предшественников четкое деление на бекенд и фронтенд. Посередине есть маняпредставления для перебрасывания кода между языками, но это отдельный разговор. Входы и выходы у всех компиляторов примерно одинаковые.
#437 #1045099
>>1045094
Давай, еще раз запусти шутейку со своим "промежуточным" представлением. Чую к следующему треду ты и виртуальную си-машину родишь со своим форком джаваскрипта.
#438 #1045102
>>1045099

>Не знать элементарных вещей


Скажи, ты только вкатываешься?
#439 #1045103
>>1045099

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


>12 кодинга


иди нахуй
#440 #1045104
Что если запилить прогу которая компилит с++ код в асемблер? и наоборот асм в с++? Думаете взлетит?
#441 #1045105
>>1045049
Маша, иди читай про опкоды ассемблера и не позорься.
#442 #1045106
>>1045105

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

#443 #1045109
Этот тред достиг какого-то нового уровня. Я ваще не понимаю, что происходит.
#444 #1045110
Расскажите ньюфагу, как компилируется си?
#445 #1045112
>>1045106
Ничего кроме ассемблера твоя кора дуба не может исполнить напрямую.
#446 #1045113
>>1045109
Подтягиваемся к стандарту самих плюсов
#447 #1045114
>>1045112
Си->cisc ассемблер->risc ассемблер, который выполняется напрямую
#448 #1045115
>>1045112

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


блядь, ты пробиваешь дно, или все же троллишь?
#449 #1045116
>>1045115
Ты чо дебил?
Во что может компилироваться си, как не в асм? В какой-то другой язык? Асм же и выполняется на процессоре напрямую, без трансляций
#450 #1045117
на проце исполняется бинарный машинный код, никакого ассемблера там нет
#451 #1045118
>>1045116
в машкод
уебище
#452 #1045119
>>1045114
Какой ещё риск на x86? Выполняется ровно то что тебе конпилятор высрет.
#453 #1045121
>>1045118
Манюша, я тебе ещё раз повторяю, открой любой бинарник в дизассемблере и прекрати обсирать портки.
#454 #1045122
>>1045118
машкод и есть асм, ебать ты тупой
каждая асм мнемоническая инструкция равносильна одной машинной команде
#455 #1045123
>>1045121
Асссемблер это мнемоническая запись машкода, если забыть про макросы.
#457 #1045125
>>1045124
Каким боком внутренние костыли штеуда к софтверной части?
#458 #1045127
>>1045125
Компилятор высирает cisc код, который все равно еще транслируется в risc код.
#459 #1045128
>>1045127
Но это уже в железе и зависит от процессора. Принимает он именно классический 86 бинарник.
#460 #1045130
>>1045114
cisc ассемблер->risc ассемблер
Я бы не сказал, что микрокод это risc ассемблер.
#461 #1045147
Что именно происходит во второй строке и как объяснить оказавшееся в p значение?

char array = "1111";
int
p = (int*)array;
#462 #1045149
>>1045147
Мама, чому я дебил.
[code lang=c++]
char array = "1111";
int
p = (int*)array;
[/code]
#463 #1045150
>>1045123
Позволь чуть добавить: это мнемоническая запись обернутая в метаданные, но так оно и есть.
#464 #1045151
>>1045147
В инт запихивается ( а точнее пишется ворнинг/еррор) значение указателя (адрес).
#465 #1045157
>>1045151
А значение по этому адресу - 825307441. Почему?
#466 #1045159
>>1045121
"дизассемблер" поэтому и называется дизассемблером что "восстанавливает" с той или иной степенью успешности машкод в тексты ассеблера
я повторюсь, ты троллишь так?
#467 #1045165
>>1045159
И чем же по твоему являются машинные коды? Или ты у нас убежденный фортранщик?
#468 #1045182
>>1045159

>с той или иной степенью успешности


Для x86 степень успешности составляет 100% ибо у инструкций ассемблера и опкодов имеется соответствие 1 к 1.
мимоаллигатор
#469 #1045184
>>1036758
Просто не нужно выучивать язык до корки. Зачем знать о специфических вещах, которые используют разве что всякие MPL программеры. С++ крут своей моделью памяти, а не сахарком.
#470 #1045186
>>1045184

>MPL программеры


Кто?
#471 #1045215
#472 #1045231
>>1044974
А ты хорош
#473 #1045236
>>1045122

>машкод и есть асм


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

>Почему?


Потому что это адресс, по которому лежит твоя строка (или половина байтов адреса, если компилируешь под х64).
#475 #1045239
>>1045165

>И чем же по твоему являются машинные коды?


Машинные коды - последовательность байт, программа на ассемблере - текстовый файл. Ты эту разницу способен осознать?
#476 #1045241
>>1045182

>100% ибо у инструкций ассемблера и опкодов имеется соответствие 1 к 1


Ну и какому опкоду соответствует строчка jmp pizdatvoeymamki? Какому из этих девяти http://x86.renejeschke.de/html/file_module_x86_id_147.html, например?
#477 #1045245
>>1045182

>ибо у инструкций ассемблера и опкодов имеется соответствие 1 к 1.


Про псевдоинструкции слышал? В х86 тоже есть.
#478 #1045298
>>1045239
Т.е. байтовый ассемблер (с метаданными на регистры) - это уже не ассемблер, это МАГИЯ
#479 #1045302
>>1045165
инструкция ассемблера это строка
например

>mov eax ebx


ее машинный код, это всего два байта

>0x66 0xA1

#480 #1045303
>>1045165
И алсо, у множества архитектур, есть валидные недокументированные опкоды, которые ты никогда не выразишь на языке ассемблера, но при этом они вполне себе могут быть исполненны процессором.
#481 #1045307
>>1045302

>>0x66 0xA1


три байта
0x66 0x89 0xD8
fixed
#482 #1045309
>>1045302
Т.е. от смены представления меняется семантика языка. Понятно. Очень оригинально.

>>1045303
Ага и микрокод инженеры пишут руками, как диды завещали. Походу ты просто немножко устарел, лет так на 30.
#483 #1045319
>>1045298
Суть ассемблера не в тексте, а в том, что он собирает программу, то есть вместо меток проставляет адреса переходов, вместо имени ресурса ставит его адрес и т.д. То есть если ты пишешь в машкодах и какая-то функция поменяла расположение, то надо пройтись по всему бинарнику, и поменять адрес на новый. Ассемблер делает это автоматически.
#484 #1045328
>>1045319
Это здорово что у тебя есть половина понимая работы ассемблера. Ну да не суть, оригинальный вопрос был - во что компилируется си, если я правильно понимаю. Вот он как раз компилируется в то, что ты называешь текстовым ассемблером, а затем в зависимости от бекенда или насмом или гасом ассемблируется в "бинарные волшебные строки".
#485 #1045331
>>1045328

>Вот он как раз компилируется в то, что ты называешь текстовым ассемблером


Правильный ответ - си компилируется в объектные файлы. Никаких текстовых ассемблеров и бинарных строк.
#486 #1045332
>>1045331
Компилятор си использует для этого сторонний ассемблер. Был DragonEgg который пытался собирать сразу бинарники из сей минуя rtl и ассемблер, но получалась хуита. Иди читай документацию, если не веришь тому что тебе говорят.
#487 #1045335
>>1045332

>Компилятор си использует для этого сторонний ассемблер


Да какая разница что он использует, и какое у него промежуточное представление? Компилятор принимает на вход текстовый файл и выдает объектный. Результат работы компилятора си - объектный файл. Си компилируется в объектные файлы. Точка.
#488 #1045336
>>1045335
Буду теперь на собеседованиях это спрашивать, чтобы дебилы сразу отсекались.
#489 #1045340
>>1045336
Мамка набирает конкурентов на борщи?
#490 #1045342
>>1045335

>Си компилируется в объектные файлы.


Ага, джаваскрипт тоже компилируется в исполняемые файлы, ну браузер же он исполняемый.
Dmitry #491 #1045343
Вас не смущает что в c++ никогда небыло и не будет
- Стабильного ABI
- Нормального синтаксиса
- Нормальной производительности
- Нормальной масштабируемости
- Нормальных тимлидов
- Нормальных компиляторов
#492 #1045345
>>1045343
А зачем все это?
#493 #1045346
>>1045343
Нет.
Dmitry #494 #1045348
>>1045345
Чтобы не стать умственным инвалидом на дно-должности мидла а то и джуна.
Чтобы не быть ограниченым одним языком и нихуя не уметь.
#495 #1045350
Посоны, подскажите прием, как реализовать грамотное закрытие программы, в случае ошибки.
Есть несколько подсистем, которые держат какие-то ресурсы, и освобождают их при вызове деструкторов. Обычно при удачном завершении main().
Но где-нибудь в другом месте может случится ошибка, после которой желательно все бросить, и заняться освобождением ресурсов.
#496 #1045353
>>1045348
Как вот это все

>- Стабильного ABI


>- Нормального синтаксиса


>- Нормальной производительности


>- Нормальной масштабируемости


>- Нормальных тимлидов


>- Нормальных компиляторов



Связано с вот этим вот:

>Чтобы не стать умственным инвалидом на дно-должности мидла а то и джуна.


>Чтобы не быть ограниченым одним языком и нихуя не уметь.



Или ты из инвалидов, которые умеют одну джаву или шарп, и идут выебываться на кресты?
#497 #1045356
>>1045348
Ну хорошо, мысль твоя ясна, кто твоя мать тоже. Что сам предлагаешь? На чем нативные аппликухи писать?
#498 #1045368
>>1045356
go для сервисов и нетворкинга.
C для системщины, игр, графики.
#499 #1045369
>>1045350
exit(ERROR_CODE)
#500 #1045371
>>1045368

>go


Мде, насчет мамаши я явно не ошибся.
#501 #1045372
>>1045368

>C для системщины


Итак.

>игр, графики


Было, не взлетело.

>go для сервисов и нетворкинга


go не может ни в первое ни во второе. Даже его создатели скоро его дропнут, новые проекты все на питоне (который он должен был убить, лол)
#502 #1045373
>>1045372
Маняоправдания.
#503 #1045378
>>1045369
На stack overfow говорят что это хреновый подход.
#504 #1045380
>>1045373
Безосновательный вскукарек. Поясняешь за плюсы своего goвна относительно крестов, и тогда, так и быть, сможешь уйти их треда с обоссаной лишь головой.
#505 #1045408
https://github.com/cplusplus/draft/blob/master/papers/n4688.md
Читанул я на досуге, значит, что там принимают... Сетевая библиотека, рейнджи, концепты, параллелизм, и еще какое-то говно, которое возможно добавится в список ебанутых вопросов на собеседованиях. Среди этого всего самое полезное это концепты, а остальное лишь библотэки, которые к тому же УЖЕ ЕСТЬ. Так вот нахуя пихать то, что есть, и никому нахуй не упрется, разве что каким-то хипстерам, которые "STL - One Love". Где моя сериализация, суки?! СТАТИЧЕСКАЯ ебать вас в рот, никто не просит динамическую сериализацию, блять, предложения давно висят, сука, а они только BYTE ORDER высрали!!!!1!111
Вилли, убирай добрый кнут, доставай жестокий кнут!
#507 #1045413
>>1045408
Главное рефлекшон завезут. Ну и модули неплохо бы.
#508 #1045430
>>1045413
не увидел там рефлексию, или все же есть
#509 #1045484
>>1045343

>- Нормальных тимлидов


А я кто тогда?
#510 #1045870
>>1045408
Найс порвался.
#511 #1045872
>>1045343

>Вас не смущает


Нет.
#512 #1045969
>>1045343
Дык, все кроме аби есть.
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 8 сентября 2017 года.

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

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