abcd0x00: Это не совсем то, о чём я говорил Я имел в виду код типа: "n = f(Func(A)) || f(Func(B));". Т.е., что Func(A) и Func(B) выполняются до вызова f(Func(A)).
Но теперь я не уверен на 100%, что это действительно возможно, а специально написать подобный код невозможно...
MiiNiPaa: Правая часть - это правая часть. А аргументы - это аргументы. Аргументы могут вычислиться в любом порядке, на усмотрение компилятора. А вот вторая функция выполнится только если первая вернёт false - именно это говорит стандарт языка.
Олег Смирнов: Ну да, включение оптимизации компилятором это первый шаг. Но 10 раз это пшик и не позволяет увеличивать глубину поиска. Про выбор ходов написано в упомянутой вами книге, там вообще много полезного написано, включая битборды и хэши. Но это уже оптимизации по памяти, по скорости, но на глубине поиска принципиально не скажутся. В первую очередь стоит пытаться увеличить глубину поиска, а для этого нужно отбрасывать заведомо проигрышные ходы. В книжке описано и про оценку позиции на доске и про порядок фигур и прочее. По хорошему, нужно делать оценку не только по положению исследуемой фигуры, но и по взаимному расположению других фигур, но это уже высший пилотаж и нужно хорошо в шахматы играть.
Лично от себя рекомендую сперва реализовать шашки, а уже потом браться за шахматы. Как раз и в алгоритмах разберётесь и в структурах данных и прочем.
Виталий Столяров: Элементарно. Можно отсудить название. Но это чисто теоретически, в реальности вряд ли проблемы у вас будут. Только если игра выстрелит и начнёт приносить миллионы долларов.
Виталий Столяров: А эту грань найдут юристы, если будет шанс нажиться.
Конкретно вашу проблемы обычно решают при помощи EULA, в которой чётко сказано, что разработчик не несёт ответственности за контент, добавляемый пользователем. По идее, при возникновении проблем, вы лишь должны сразу удалять спорный контент и фсё. Но, если целью будет вас прикрыть или отжать права на проект, то и купленная лицензия может не помочь.
Denis Zagayevskiy: "Википедия не согласна с документацией." Ваши слова? Ваши. При этом в этой самой статье, среди приёмов обфускации указано переименование понятных названий в непонятные (минификация - побочный эффект данного вида обфускации, когда назначаются короткие имена). Вместо одно-двухбуквенных имён можно назначать GUID'ы или 100 символьные имена, например. Никакой минификации не будет, Будет наоборот.
Denis Zagayevskiy: Вы сослались на википедию. Я сослался на эту же самую статью, которую вы дали. Это не моё, это Ваше мнение. Мнение, написанное в той самой статье, которую вы привели в качестве своего аргумента.
have_a_questions: Объявление переменной, а не типа. В Си/С++ это было бы создание переменной в стеке, в java в стеке только примитивные типы создавать можно, а классы только в куче. Так что относительно памяти, первая запись это не инициализированный "указатель", а вторая запись это создание реального объекта по "указателю". Это если в терминологии крутых языков программирования говорить.)
MicroSDA: считываешь строковый токен, через if-elseif-else выбираешь нужный блок кода. В нём считываешь слова/числа в зависимости от того, что в блоке может храниться. Как я уже писал, лучше предварительно загрузить весь файл в память, тогда можно будет использовать сишные функции substr и прочие. atoi - для преобразования строки в число.
Единственная сложность - переменное число аргументов. Например, для точки может быть xyz или xyzw. Т.е. считывать нужно до конца строки столько аргументов, сколько получится.
Там нужен примитивнейший парсер, указанный объём будет за секунды обрабатывать.
Ринат Велиахмедов: В Сишке нет std::vector, а эта структура позволяет хранить длину массива и указатель на него совместно. Костыль для тех, кто не умеет в vector.)
Я бы выпилил такую запись из стандарта с громкими ругательствами.
Николай Романович: Согласен, был не прав, это не UB. Это стандартизированный сишный костыль.) Будет весело написать такое на С++ и использовать такую структуру в качестве базового класса при множественном наследовании.
И я не заметил, что в malloc суммирование, а не умножение на sizeof(), так что перерасхода памяти и правда нет.
Николай Романович: Это не "фича", а некорректное использование. Поменяйте местами int и char[] и будет очень весело. Опять же, нельзя нарисовать два "нулевых" массива в одной структуре. Это ужаснейший косяк языка, позволяющий говнокодить.
Николай Романович: Я прав, а malloc вообще не выделяет структур, он выделяет блок байт. somaArray[] содержит адрес пустого массива. Пытаясь его индексировать, вы обращаетесь к памяти ЗА пределами структуры. Размер структуры равен sizeof(int) + sizeof(someArray[]) + возможное выравнивание. Ни о каких 100500 и речи быть не может.
Такая путаница ещё раз подтверждает, что в 99.99% случаев лучше забыть про malloc, т.к. понять его работу гораздо сложнее, чем new.
Николай Романович: Ну так это вы просто не правильно с памятью работаете. Выделяете не структуру с массивом в 100500 байт, а выделяете 100500 структур размером sizeof(SomeStruct). Её размер как минимум 4 байта (размер someArray[] может варьироваться в зависимости от 100500 факторов). Т.е. выделяете памяти минимум в четыре раза больше, чем хотите, а потом делаете вид, что это new кривой и не позволяет писать неадекватную чушь.)
Николай Романович: Не уверен на счёт нового стандарта, но в старом стандарте это не безразмерное поле, а массив фиксированного размера, но размер определяется правой частью. Либо массив нулевой длины, но от него смысла вообще минимум.
Pavel Designer: Я не правильно выразился.) C переключает на команду crop, которой потом надо выделять область и нажимать enter. Я же имел в виду M, чтобы именно выделить и сделать crop выделения (через меню команда есть). Тогда можно сразу выделять область для размытия, не переключая инструмент. Хотя это переключение занимает целое одно нажатие кнопки...
Но теперь я не уверен на 100%, что это действительно возможно, а специально написать подобный код невозможно...