Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / C++20 vs C11 (4 стр)

C++20 vs C11 (4 стр)

Страницы: 1 2 3 4 5 Следующая »
DelfigamerПостоялецwww5 июня 20187:28#45
exchg
> Delfigamer
> > В общем, моя версия макросомагии выглядела бы так
> Сравни ее с моей и объясни зачем? )))
Delfigamer
> > - лёгкость для чтения,
> > - вероятность совершить ошибку при написании - или, что практически
> > эквивалентно, вероятность упустить ошибку при повторном прочтении,

Went
> Я говорил, что стандарт языка С проще и однозначней, чем стандарт С++ и это
> дает ему неоспоримые преимущества в некоторых (довольно узких, должен признать)
> областях.
В каких областях, помимо реализации велосипедных компиляторов, меньший объём си даёт ему преимущество?

Went
> И если придется иметь дело с какими-то экзотическими платформами, то с С++
> можно облажаться.
На каких платформах есть компилятор C, но нет компилятора C++11?

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

Правка: 5 июня 2018 7:28

MrShoorУчастникwww5 июня 20187:35#46
Delfigamer
> По-твоему, #32 - это пример здорового кода?
Да на любом языке можно писать наркоманский код.
Но вот родить подобную рабочую макросню на С несколько сложнее, чем родить треш и угар на С++. Более того, треш и угар на С++ возвели чуть ли не в стандарт. Посему да, С в этом плане выигрывает у С++.

Правка: 5 июня 2018 7:36

kiparУчастникwww5 июня 20189:17#47
Delfigamer
> На каких платформах есть компилятор C, но нет компилятора C++11?
Из того на чем я работал - на 8-битных PIC.
u960Постоялецwww5 июня 20189:29#48
MrShoor
> Более того, треш и угар на С++ возвели чуть ли не в стандарт. Посему да, С в
> этом плане выигрывает у С++.
>
У  меня такое же впечатление складывается.
Blew_zcПостоялецwww5 июня 20189:32#49
kipar
> на 8-битных PIC.
Даешь std::thread на PIC16F84 !
WentПостоялецwww5 июня 201811:22#50
Delfigamer
> В каких областях, помимо реализации велосипедных компиляторов, меньший объём си даёт ему преимущество?
В тех, где даже реализовать современный компилятор С++ уже проблема. Например, простой С был даже на Z80.
elviras9tПользовательwww5 июня 201811:38#51
Went
> В тех, где даже реализовать современный компилятор С++ уже проблема. Например,
> простой С был даже на Z80.
Говорят в ARM64 придет полноценный C++17 и даже C++20, причем загуляют все, и Qualcomm, и MediaTek, и Exynos с очень высоким TDP по меркам смартфонов
Уже заговорили о голом C# 8.1 со всеми возможностями (включая даже те что не умеет C++ или обычная Java) на ARM64

Правка: 5 июня 2018 11:42

Blew_zcПостоялецwww5 июня 201811:42#52
elviras9t
> Говорят в ARM64 придет полноценный C++17 и даже C++20
Ну, как бы gcc в линупсе везде доступен.
Sbtrn. DevilПостоялецwww5 июня 201811:44#53
kipar
> Из того на чем я работал - на 8-битных PIC.
Там, наверное, и Ц-то порядка C89.
МизраэльПостоялецwww5 июня 201812:33#54
Delfigamer
> Ну окей, C++14 таки поддерживает.
Как бы и 17-й поддерживает :) И получше, чем GCC.
exchgПостоялецwww5 июня 201812:40#55
Delfigamer
> > > - лёгкость для чтения,
> > > - вероятность совершить ошибку при написании - или, что практически
> > > эквивалентно, вероятность упустить ошибку при повторном прочтении,
Ты смеешся? Смотри...
#define GPU_MODEL_LIST(def) \
    def(AMD,    "AMD"), \
    def(ATI,    "ATI"), \
    def(INTEL,  "INTEL"), \
    def(NVIDIA, "NVIDIA")

Вот этот трюк как, ты его назвал, называется Хмакрос, он существует столько, сколько
существует Си, это устоявшееся название. Причем это не дикое использование макросов
Александреску стайл. А что такое def, звачем? Это снизило читаемость/узнаваемость шаблона,
но это так, субъективизм.

Дальше, этот блок служит для задания имен/значения переменных и их связывания в
одном месте, но ты ниже делаешь просто падлянку:

#define GPU_MODEL_ENUM_DEF(name, str) GPU_MODEL_ ## name
С какого перепуга я как программист определил имя переменных в энуме и код его испоганил?
+ префиксы мне нужно менять в двух местах. И как типерь в случае чего человек должен быстро
найти место где определен GPU_MODEL_ATI например? Зачем это вообще, показать, что написавший
осилил конкатенацию?

#define GPU_MODEL_ARRAY_DEF(name, str) /* [GPU_MODEL_ ## name] = */ str
Опять субъективизм, тут нейминг из серии масло-масянное, а бумажка-бумажная. Зачем
суффиксы "_DEF(" и (name, str) ?
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
В принципе можно и так, но специально для этих дел, в конец энума был вставлен
элемент с именем UNKNOWN. И это тоже общепринятый в Си способ получения длинны энума.
А зачем он у тебя в конце, если ты его не используешь?
  ...
  enum gpu_model model = GPU_MODEL_UNKNOWN;
  ...
      model = (enum gpu_model)i;
  ....
  return model;
}
Энум в рамках Си чисто фантик,  вот эти строки только замусоривают код. Они бессмысленны.
+ Это еще и ввод новой переменной, в компиляторах которые не умеют в качественную
оптимизацию, это так и станется висеть. В принципе функция не большая и по определения
четко видно, что именно она возвращает.
  for (i = 0; i < ARRAY_SIZE(gpu_model_str); ++i)
  {
    if (strstr(vendor_str, gpu_model_str[i]))
    {
Все кривляния с упрощение условия для меня странны. Есть блок цикла, у него есть поле для условий
прекращения/продолжения цикла и тут я слышу, что этим самым условиям там не место )))) Кроме того,
напомню у нас структурное программирования каждый блок имеет одну точку входа и одну выхода, а
конструкции break/continue нужно использовать в крайних случая. Кроме того многие кодестайлы четко
прописывают когда можно, а когда нет. Ты же не просто сделал вторую дырку но и + ко всему просто
ухудшил ту самую читабельность и насыпал от души скобочек и ифов которые так "любят" в Си. ))
enum gpu_model {
  GPU_MODEL_LIST(GPU_MODEL_ENUM_DEF),
  GPU_MODEL_UNKNOWN };

static const char* gpu_model_str[] = {
  GPU_MODEL_LIST(GPU_MODEL_ARRAY_DEF) };

Вот ахи-вздохи вокруг этого я вообще не понял, четко написано - энум содержащий имена моделей,
инициализируем его неким макросом. И тут самое время задаться вопросом, что происходит? Чем мы его
инициализируем? Тоже самое с массовом строк которые называется "модель гпу строковая" - реально,
вот так сразу и не понять чем она будет инициализирована, есть предположение, что тут будут
колбеки для сортировки массива. ))))

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

Delfigamer
> На каких платформах есть компилятор C, но нет компилятора C++11?
А вот на 6502 с которой я сейчас вожусь.

Правка: 5 июня 2018 13:06

entrywayПостоялецwww5 июня 201812:52#56
Давайте у кого смешнее:
+ Показать
elviras9tПользовательwww5 июня 201812:54#57
exchg
Сколько не пиши длиннотекстов, мне кажется подавляющему большинству с опытом это будет и так не интересно.

entryway
Опять приведу свой тафтологичный дальномер в C++, я мог бы тоже дать пояснения, но что-то не хочется.

+ Показать

Суть одна - практически никакого копирования (для case_insensitive уйдет больше времени и памяти).

Правка: 5 июня 2018 13:36

exchgПостоялецwww5 июня 201813:04#58
elviras9t
> Сколько не пиши длиннотекстов, мне кажется подавляющему большинству с опытом
> это будет и так не интересно.
Ну с одной стороны да, с другой стороны, а мы что играем в игру понравься как можно
большему числу с опытом? )))
entrywayПостоялецwww5 июня 201813:12#59
elviras9t
> Опять приведу свой тафтологичный дальномер в C++
Тут у всех примеры делают case insensitive поиск вхождения подстроки.
Страницы: 1 2 3 4 5 Следующая »

/ Форум / Программирование игр / Общее

2001—2018 © GameDev.ru — Разработка игр