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

Выбор между C и C# (3 стр)

Страницы: 1 2 3 4 512 Следующая »
#30
0:19, 17 мая 2023

Чувак, бери C++ и не парься.

Аргументы:

1. C++ может дать понимание сразу о двух концах: высокий уровень и низкий уровень программирования. Так как этот язык является некой солянкой из того, что есть в классическом C, и более современных, "высоких" языках программирования.

2. Со знанием С++ перейти к C# не составит особой проблемы. Языки очень близки в плане синтаксиса и подхода в целом. Про переход с C++ на C# для unity говорю на своём личном опыте.

#31
0:26, 17 мая 2023

event
Спасибо, но я уже выбрал свой, возможно более тупой, путь, поэтому ты опоздал. Но всё равно спасибо, так как вы тут все приводите аргументы в пользу какого-либо варианта без тупого "мой варик лучше и точка". :з

#32
0:30, 17 мая 2023

Der FlugSimulator
> Так если нет памяти, то тем более нужно линукс ставить.
А гайды ?
Ты ведь представляешь объём изучения линукса после винды ? Это пипец.
Лучше сначала выучить ЯП что бы можно было читать исходники линукса потому что в гайдах по линуксу нифига нет нужного, а есть только поверхностная инфа в которой не объясняют как это всё устроено, т.е. они показывают простыню с терминальными командами но не объясняют как это работает под капотом.
Соответственно с гайдами по gamedev могут возникнуть ещё большие траблы.

#33
1:15, 17 мая 2023

event
> Языки очень близки в плане подхода в целом
яб не был бы настолько катигоричен

#34
1:47, 17 мая 2023

skalogryz
> + Показать
прикалываешься? Её ещё найти нужно было. А документацию искать не надо было + примеры все были, не надо было и английский знать.

#35
3:02, 17 мая 2023

Самый трушный путь: Basic/Pascal -> ASM -> C -> C++ -> C#

#36
3:34, 17 мая 2023

В 15-16 лет лучше учить C, с рассчетом сдать ЕГЭ по информатике именно на нем. И по результатам попробовать пройти в вуз посильнее в Мск или Питере.

Игроделом может и не станешь, а вот получить денежную должность шанс выше точно станет. Правда ChatGpt может за 5-7 лет всё изменить.

#37
6:38, 17 мая 2023

Zoobastik
Я не за деньгами -_-

#38
9:16, 17 мая 2023

gamedevfor
> Самый трушный путь

Мой начинался с асма (правда не для PC-совместимых компов, а для радиолюбительских), что в дальнейшем позволяло сразу понимать, что находится за кулисами всяких массивов/указателей/строк в Си, и не путаться с тем, что получится в результате sizeof в том или ином случае.

Yonfain, у тебя путаница с переменной nickname. В одном случае это у тебя массив длиной 10 байт (sizeof к нему дал бы 10), а в другом случае - указатель на char (его sizeof зависит от разрядности проца/программы, поскольку это всего лишь размер переменной, содержащей адрес). Поэтому у тебя и "сокращается" в функции hello, поскольку в ней nickname это лишь указатель, его sizeof - это лишь размер указателя, а не исходного массива nickname из функции main (хотя этот указатель и указывает на ту область памяти, которую использует массив nickname в main).

Тебе надо либо явно передавать размер массива в функцию hello, либо завести глобальную константу для длины массива под ник.

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

В Си++ с массивами ситуация не намного лучше, просто в Си++ сырые массивы использовать очень не рекомендуется - там вместо этого есть различные варианты (для массивов фиксированного размера, для массивов переменного размера)

#39
9:26, 17 мая 2023

Dmitry_Milk
Ага, понятно, а это уже для меня удивительно. Я так понял, что массивы в C/C++ это такая штука, что с ней, если неправильно воспользоваться, можно угодить в яму, да? А учиться, как ими пользоваться, трудно, так как там нужен большой контроль и внимательность. Надеюсь правильно всё понял. •-•

#40
9:36, 17 мая 2023

Dmitry_Milk
> Мой начинался с асма
Это слишком экстремально, сначала нужно хотя бы увидеть как выглядят основные конcтрукции языка, освоить так сказать процедурное программирование на Basic/Pascal без ООП.
А в ASM-e все эти jmp, jnz сходу хорошему не научат.

#41
10:20, 17 мая 2023

Yonfain
> Я так понял, что массивы в C/C++ это такая штука, что с ней, если неправильно
> воспользоваться, можно угодить в яму, да?

В С++ можно (и даже нужно) не пользоваться т.н. сырыми массивами, указателями, итд.  Есть соответствующие абстракции для любых типов данных.  Совсем уж низкий уровень нужен, когда программа пишется под ограниченные ресурсы, типа микроконтроллеров. 

+ Показать

Yonfain
> А учиться, как ими пользоваться, трудно, так как там нужен большой контроль и
> внимательность. Надеюсь правильно всё понял. •-•

Нет, не трудно, достаточно внимательно прочитать книжку  "Язык программирования Си", авторы Брайан Керниган,  Деннис Ритчи.  Ну и немного самодисциплины, типа выделил память, сразу напиши парный вызов её освобождения (это снимает 98% проблем с управлением памятью).

#42
10:22, 17 мая 2023

gamedevfor
> Это слишком экстремально

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

gamedevfor
> А в ASM-e все эти jmp, jnz сходу хорошему не научат

Третьим (после второго бейсика) был Паскаль, циркулем мозг под структурное программирование форматировать не пришлось (а бейсик был старый, на номерах строк, так что там было ближе к тому, как на асме).

Yonfain
> Я так понял, что массивы в C/C++ это такая штука, что с ней, если неправильно
> воспользоваться, можно угодить в яму, да?

Проблемы с массивами вообще из-за того, что фактически в компьютерах нет ни массивов, ни строк - есть только отдельные числа и адресуемая память. Массивы и строки делаются просто путем расположения данных подряд в памяти. Разные языки эту реализацию массивов и строк делают по-разному:

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

- Си - умеет автоматически выделять память под константные строки и массивы неизменяемого размера, в большинстве случае оперируя просто указателем на выделенный кусок памяти. Для изменяемых строк и массивов переменного размера - программист должен вручную выделять (и не забывать потом освобождать) в куче с помощью malloc/free.
Никак не предотвращает от возможности обратиться за пределы массива/строки.

- Си++ - в дополнение к Си имеет механизм классов и библиотечные конструкции, которые позволяют в большинстве случаев не думать о выделении/освобождении памяти (хотя она и происходит), а вручную работать с выделением/освобождением памяти хоть и возможно, но не рекомендуется. В библиотечных конструкциях умеет предотвращать обращение за пределы массива/строки (естественно, ценой проверки во время исполнения). Но в общем случае возможность ошибиться и обратиться к неверной памяти остается.

- С#/Java и прочие подобные языки со сборкой мусора - позволяют не думать об освобождении памяти и практически полностью предотвращают возможность обратиться к неверной памяти, но за это приходится платить заметным снижением производительности

- Rust - также позволяет не думать об освобождении памяти, но использует не сборку мусора, а учет владения/заимствования во время компиляции. Работает шустрее языков со сборкой мусора, но при программировании приходится сильно изворачиваться, чтоб не нарушать требования владения/заимствования.

#43
11:06, 17 мая 2023

Dmitry_Milk
0iStalker
Сегодня значит у меня выходной в программировании - мозг начинает уже кипеть. Спасибо за объяснение!

#44
13:53, 17 мая 2023

Yonfain
> чтобы лишь научиться программировать
выбрось Си.

бери
С++ и библиотеку SFML(библа очень проста и за счет этого мощна)
что в итоге можно получить:
https://sfmlprojects.org/games

80% того что есть в языке С++ можно не юзать,
а значит можно и не знать.

а раз можно и не знать, то можно и не учить.

как узнать что можно не учить?

для этого нужно начать сразу делать игру.

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

Страницы: 1 2 3 4 512 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.

Тема закрыта.