Зачем нужен signed в Си?
Хотел бы узнать, зачем нужен модификатор signed, если по умолчанию int является signed?
Есть ли какие-то ситуации, когда использование signed является предпочтительным или, возможно, даже нужным, либо же это только зависит от предпочтения самого программиста?
- Вопрос задан более года назад
- 175 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 1
«I’m here to consult you» © Dogbert
по умолчанию int является signed
А вот о char этого сказать нельзя, знаковость char зависит от реализации. Вдобавок, в стандарте есть следующая сноска (https://www.open-std.org/JTC1/SC22/WG14/www/docs/n. 6.2.5:15):
Irrespective of the choice made, char is a separate type from the other two and is not compatible with either.
signed char — это, пожалуй, единственное не вызывающее вопросов применение ключевого слова signed в C-коде написанном человеком. В остальных случаях роль signed — чисто декоративная.
Ответ написан более года назад
Комментировать
Нравится 5 Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- C++
- +1 ещё
Как решить данную задачу на двумерные массивы c++?
- 1 подписчик
- 22 нояб.
- 124 просмотра
Зачем нужен Zig, если уже есть C++, D и Rust?
Если код на Zig не выглядит как вызов какой—то функции, тогда так оно и есть. Это значит, что вы можете быть уверены, что данный код вызывает только foo() и затем bar() , и это гарантировано независимо от типа:
var a = b + c.d; foo(); bar();
Примеры скрытых потоков управления:
- D поддерживает @property функции, что есть методы, которые выглядят как доступ к полю, так что в примере выше c.d может вызывать функцию.
- C++, D и Rust позволяют перегружать операторы, так что оператор + может вызывать функцию.
- C++, D и Go поддерживают исключения, так что foo() может выбросить исключение и предотвратить вызов bar() . (Конечно, даже в Zig foo() может вызвать блокировку и предотвратить вызов bar() , но такое может произойти в любом Тьюринг–полном языке.)
Цель этого технического решения — улучшить читаемость.
Без скрытых выделений памяти
Zig не вмешивается в процесс выделения кучи. Нет ни одного нового ключевого слова или любой другой возможности языка, которая задействует распределитель кучи (например, оператор конкатенации строк[1]). Вся работа с кучей осуществляется библиотекой и прикладным кодом, а не языком.
Примеры скрытых выделений:
- Функция defer в Go выделяет память для локального стека функции. Помимо того, что этот способ работы потока управления неинтуитивен, он может привести к нехватке памяти, если вы используете defer внутри цикла.
- Сопрограммы C++ выделяют память кучи, чтобы вызвать сопрограмму.
- В Go вызов функции может привести к выделению кучи, поскольку горутины выделяют небольшие стеки, которые изменяют свой размер, когда стек вызовов становится достаточно глубоким.
- Основные API стандартной библиотеки Rust паникуют при нехватке памяти, а альтернативные API, принимающие в качестве параметра распределитель кучи, недоработаны. (см. rust-lang/rust#29802).
Почти во всех языках со сборщиком мусора есть скрытые выделения памяти, поскольку сборщик мусора прячет сведения об очистке.
Основная проблема со скрытыми выделениями памяти заключается в том, что они препятствуют переиспользованию части кода, излишне ограничивая количество окружений, в которых код мог бы быть развернут. Короче говоря, есть случаи использования, когда необходимо полагаться на то, что поток управления и вызовы функций не будут иметь побочного эффекта выделения памяти, следовательно, язык программирования может обслуживать такие сценарии использования, только если он может реально обеспечить такую гарантию.
В Zig есть функции стандартной библиотеки, которые предоставляют и работают с распределителями кучи, но это необязательные функции стандартной библиотеки, которые не встроены в сам язык. Если вы никогда не инициализируете распределитель кучи, вы можете быть уверены, что ваша программа не будет выделять кучу.
Каждая функция стандартной библиотеки, которой необходимо выделить память кучи, принимает для этого параметр Allocator . Это означает, что стандартная библиотека Zig поддерживает “голое железо” (freestanding). Например, std.ArrayList и std.AutoHashMap могут быть использованы для программирования “на голом железе”!
Пользовательские аллокаторы упрощают ручное управление памятью. Zig имеет отладочный распределитель, который поддерживает безопасность памяти в условиях “использования после освобождения памяти” и “двойного освобождения памяти”. Он автоматически обнаруживает и печатает трассировку стека для утечек памяти. Также существует распределитель на основе регионов, позволяющий объединять любое количество выделений памяти в одно и освободить их все сразу, а не управлять каждым выделением отдельно. Специальные аллокаторы могут быть использованы для повышения производительности или улучшения использования памяти для нужд конкретного приложения.
[1]: На самом деле, существует оператор конкатенации строк (в широком смысле оператор конкатенации массивов), но он работает только во время компиляции, так что он всё ещё не выполняет никакого распределения кучи во время выполнения.
Первоклассная поддержка отсутствия стандартной библиотеки
Как было сказано выше, Zig имеет совершенно необязательную стандартную библиотеку. Каждый API стандартной библиотеки компилируется в вашу программу только тогда, когда вы его используете. Zig имеет равную поддержку для связывания с стандартной библиотекой C или отсутсвия оной. Zig дружелюбен к высокопроизводительной разработке и разработке “на голом железе”.
Это лучшее из двух миров; например, в Zig программы на WebAssembly могут одновременно использовать обычные возможности стандартной библиотеки и при этом создавать самые маленькие бинарные файлы по сравнению с другими языками программирования, поддерживающими компиляцию в WebAssembly.
Переносимый язык для библиотек
Одним из “святых Граалей” программирования является переиспользование кода. К сожалению, на практике мы сталкиваемся с тем, что нам приходится снова и снова “изобретать велосипед”. Зачастую это оправдано.
- Если приложению нужны гарантии реального времени, то любая библиотека, использующая сборку мусора или любое другое недетерминированное поведение, отбрасывается как зависимость.
- Если в языке слишком легко игнорировать ошибки и, следовательно, трудно проверить, что библиотека правильно обрабатывает и выводит ошибки, может оказаться весьма заманчивым желание проигнорировать библиотеку и реализовать её заново, зная, что все соответствующие ошибки будут обработаны правильно. Zig разработан таким образом, что самое лёгкое, что может сделать программист, это правильно обработать ошибки, и поэтому можно быть достаточно уверенным в том, что библиотека будет правильно обрабатывать ошибки.
- В настоящее время с практической точки зрения верно, что C является наиболее универсальным и переносимым языком. Любой язык, не имеющий возможности взаимодействовать с кодом на C, рискует остаться неизвестным. Zig пытается стать новым переносимым языком для библиотек, одновременно обеспечивая простоту соответствия “бинарному интерфейсу приложений” (ABI) языка C для внешних функций, а также предлагая безопасность и модель языка, который предотвращает распространенные ошибки в реализациях.
Пакетный менеджер (скоро) и система сборки для существующих проектов
Zig — это язык программирования, но он также поставляется с системой сборки и (в будущем) пакетным менеджером, которые должны быть полезны даже для традиционного C/C++ проекта.
Вы можете не только писать код на Zig вместо кода на C или C++, но и использовать Zig в качестве замены autotools, cmake, make, scons, ninja и т. д. И в дополнение к этому, он (будет) предоставлять пакетный менеджер для нативных зависимостей. Эта система сборки предназначена для использования даже в том случае, когда вся кодовая база проекта написана на C или C++.
Системные пакетные менеджеры, такие как apt-get, pacman, homebrew и т.д., играют важную роль для конечного пользователя, но их может быть недостаточно для нужд разработчиков. Пакетный менеджер для конкретного языка может стать изменить ситуацию с отсутствием разработчиков или их большим количеством. Для проектов с открытым исходным кодом сложность загрузки проекта для сборки может стать огромным препятствием для будущих разработчиков. Для проектов на C/C++ наличие зависимостей может стать фатальным, особенно на Windows, где нет пакетного менеджера. Даже при сборке самого Zig большинство потенциальных участников проекта испытывают трудности с зависимостью от LLVM. Zig будет предлагать проектам возможность напрямую зависеть от нативных библиотек — не полагаясь на наличие нужной версии в системном пакетном менеджере пользователя, и практически гарантированно успешно собирать проекты с первой попытки, независимо от используемой системы и платформы.
Zig разумно предлагается для замены системы сборки проекта на язык, использующий декларативный API для сборки проектов, который также обеспечивает управление пакетами, и, таким образом, возможность фактически зависить от других библиотек на C. Возможность иметь зависимости позволяет создавать абстракции более высокого уровня и распространять переиспользуемый высокоуровневый код.
Простота
C++, Rust и D обладают таким большим количеством функций, что они могут отвлекать от реальной логики приложения, над которым вы работаете. Вместо того, чтобы заниматься отладкой приложения, разработчик начинает отлаживать свои знания языка программирования.
В Zig нет макросов и метапрограммирования, но при этом он достаточно мощный для того, чтобы выражать сложные программы понятным, немногословным способом. Даже в Rust есть макросы с особыми случаями, например, format! , который реализован в самом компиляторе. Между тем, в Zig эквивалентная функция реализована в стандартной библиотеке без использования специального кода в компиляторе.
Удобство
Zig может быть скачан в разделе Загрузка. Zig предоставляет архивы с двоичными файлами для Linux, Windows, macOS и FreeBSD. Ниже описано, что вы получите вместе с одним из этих архивов:
- устанавливается путем загрузки и распаковки одного архива, не требует настройки системы
- статически компилируется, поэтому не имеет зависимостей во время выполнения
- использует развитую и хорошо поддерживаемую инфраструктуру LLVM, которая обеспечивает глубокую оптимизацию и поддержку большинства основных платформ
- поддерживает кросс–компиляцию “из коробки” для большинства основных платформ
- поставляется с исходным кодом стандартной библиотеки C, которая будет динамически компилироваться при необходимости для любой поддерживаемой платформы
- содержит систему сборки с поддержкой кэширования
- компилирует код на C и C++ с поддержкой стандартной библиотеки C
Кому и для чего нужен C++

C++ — как конструктор Lego: вы можете собрать свой замок мечты, а можете кричать от боли, наступая на забытые на полу детали. На нем пишут игры и обучают нейросети, благодаря ему работает поиск Google и роботы торговых бирж. Вместе с Никитой Лестенко, ментором курса «Программирование на C++», рассказываем, где применяют язык и зачем его учить.
Что такое язык программирования C++

C++ — это язык программирования, который был разработан в 80-х годах прошлого века как расширение языка C. Этот язык отличается от Си тем, что имеет больший набор возможностей, включая объектно-ориентированное программирование и шаблоны.
Для чего нужен C++
C++ используется для создания программного обеспечения разного рода: от игр до операционных систем. Этот язык также широко применяется в интенсивной обработке данных и научных расчетах. C++ предоставляет разработчикам мощный и гибкий инструмент для создания программного обеспечения. Он позволяет писать эффективный и быстрый код, что делает его одним из наиболее популярных языков программирования в мире.
Что можно написать на C++
C++ позволяет создавать приложения и программы любой сложности: от простых консольных утилит до сложных игровых движков. Также на этом языке можно программировать микроконтроллеры и системы в реальном времени. На C++ можно написать практически все что угодно, от системных приложений до мобильных приложений. Этот язык используется для создания операционных систем, программного обеспечения разного рода и игровых движков.
Где используется C++
C++ используется во многих областях, таких как разработка игр, научные исследования и разработка системного программного обеспечения. Он также широко применяется в области финансов и банковского дела.
Что пишут на C++
Многие известные приложения были написаны на C++, включая операционные системы Windows и OS X, многие игры, такие как World of Warcraft и Counter-Strike. На C++ можно написать практически любое программное обеспечение, от простых консольных утилит до сложных приложений. Благодаря C++ работают Unreal Engine 4, Microsoft Office и Adobe Photoshop.
Кратчайшая история создания C++
Первые версии языка C++ (си-плюс-плюс, еще его называют «си-пи-пи», С plus plus, «плюсы») появились в начале 1980-х годов. Их создатель — датский программист из компании Bell Laboratories Бьерн Страуструп. Он моделировал распределения вызовов по АТС (автоматическим телефонным станциям). Тогда у Страуструпа было два типа языков: низкоуровневые и языки на основе Фортрана или Алгола, которые были очень медленными.

«IT-специалист с нуля» наш лучший курс для старта в IT
IT-специалист с нуля
Наш лучший курс для старта в IT. За 2 месяца вы пробуете себя в девяти разных профессиях: мобильной и веб-разработке, тестировании, аналитике и даже Data Science — выберите подходящую и сразу освойте ее.

Профессия / 8 месяцев
IT-специалист с нуля
Попробуйте 9 профессий за 2 месяца и выберите подходящую вам
3 742 ₽/мес 7 483 ₽/мес


Низкоуровневые языки дают полный контроль над ресурсами компьютера: процессором, памятью, периферийными устройствами. Но в таких языках мало готовых инструментов, а значит, любые сложные концепции и функции придется кодить самостоятельно. В языках высокого уровня уже есть все необходимые абстракции. Страуструп объединил возможности объектно-ориентированного C и языка Simula, основанного на Алголе. Главное привнесенное в C новшество — классы, основной элемент в объектно-ориентированном программировании, содержащий в себе данные и код, который ими управляет. Так появился «C с классами» или «новый C», который в 1983 году получил свое окончательное название — C плюс-плюс. «++» — это оператор, который означает «добавить единицу». То есть к возможностям языка C добавили еще одну.
А мне нужен C++?
Да, если вы хотите разрабатывать сложные продукты и сервисы. Опытные C++-программисты — это разработчики ИИ, беспилотных автомобилей, нейронных сетей, банковских, поисковых и ГИС-систем, операционных систем, микроконтроллеров, браузеров, серверов и видеоигр.
Основные области использования C++
- разработка игр и игровых движков (Unreal Engine, Unity);
- GPU-вычисления (cryptocurrency, deep learning);
- разработка высоконагруженных и высокопроизводительных приложений.
C++ — производительный язык, он помогает дорожным картам в GPS не тупить и строить оптимальные маршруты, любимым играм — не лагать и выдавать максимальное качество с выкрученными до предела настройками графики, банковским сервисам — быть круглосуточными, а переводам — моментальными.

Курс для новичков «IT-специалист
с нуля» – разберемся, какая профессия вам подходит, и поможем вам ее освоить
Производительность — важная характеристика любой компьютерной игры. Counter-Strike, StarCraft: Brood War, Diablo I, World of Warcraft — все они появились давно и были написаны на C++, как и операционные системы консолей Xbox и PlayStation, ядра популярных игровых движков Unreal Engine или Unity, на базе которых сделано огромное количество 3D-игр, симуляторов, шутеров и стратегий.
Все потому, что на C++ можно использовать объектно-ориентированное программирование, а когда понадобится — обратиться к низкоуровневым возможностям языка, позволяющим хорошо оптимизировать игру под конкретные платформы и очень эффективно производить расчеты для графики. По этой же причине C++ применяется в графических редакторах (Adobe Photoshop).
Благодаря распараллеливанию (одновременному выполнению большого количества несложных математических операций) язык подходит для биткоинов и нейросетей. Первые можно майнить на C++, вторые — обучать: большинство библиотек для глубокого обучения (TensorFlow, Caffe, Shogun, Pytorch C++ API и т.д.) используют C++-код CUDA и OpenCL.
C++ незаменим для высоконагруженных приложений, его используют для разработки поисковых движков, роботов торговых бирж, систем управления базами данных и маршрутизации сетевого трафика.
С помощью C++ Mozilla Corporation разработала opensource-браузер Firefox, была создана Amadeus — система электронного бронирования авиабилетов, гостиниц, круизных туров и проката автомобилей (через нее проходит 5000 транзакций в секунду, более миллиарда транзакций ежедневно), благодаря C++ работают Яндекс.Поиск и поисковый движок Google.
C++ нужен не только программистам, но и:
- техническим художникам: связующему звену между обычными художниками и 3D-моделистами на игровом проекте и разработчиками игрового движка (у которых очень популярен C++) для решения проблем необходимо разбираться в языке и понимать, как все запрограммировано;
- математикам: такие типовые задачи вычислительной математики, как решение систем алгебраических уравнений, дифференцирование и интегрирование функций, оптимизация, интерполяция, экстраполяция и аппроксимация, решаются при помощи реализаций численных методов на C++;
- физикам и химикам: на C++ моделируются среды и физические процессы;
- музыкантам: да, даже им! Это могут быть исследования акустических эффектов, попытки формализации творческого процесса или даже создание музыки: на «алгорейвах» люди зажигают под треки, генерируемые алгоритмами, которые вживую на сцене пишет диджей-программист, — вот это настоящий киберпанк.
А еще C++ — это круто, потому что с его помощью:
- пишут критическое ПО для истребителей F-16 и F-35;
- разрабатывают пакеты программ и библиотек ROOT для обработки экспериментальных данных физики высоких энергий;
- по поверхности Марса самостоятельно ездят роверы NASA и летает телескоп Хаббл;
- делает практически все Microsoft (Windows OS, пакет Office, Internet Explorer, Visual Studio);
- творят искусство (генеративное) художники: пишут алгоритмы для генерации предметов живописи и скульптур.
C++: плюсы и минусы
Плюсы
- Высокая производительность, потому что он не накладывает никакой избыточной нагрузки на программу, не использующую какие-либо возможности.
- Поддержка множества стилей программирования (процедурное программирование, абстракцию данных, объектно-ориентированное программирование и обобщенное программирование). Поэтому разработчик может сам выбрать, в каком стиле ему писать программу.
- Большое сообщество.
Помимо того что стандарты C++ постоянно обновляются и в него внедряется все больше улучшений, у языка огромное сообщество программистов. Учитывая сложность языка — не лентяев и опытных. Вы не останетесь один на один с проблемой: помимо литературы — от фундаментальных трудов до новых справочников, — у вас будет код, наработанный десятилетиями.

Никита Лестенко
ментор курса «Программирование на C++»
Минус
Высокий порог входа. Решения об изменениях в C++ принимают на заседаниях комитета, участие в которых формально может принять любой разработчик. Но отправляться на такие собрания в другую страну за свой счет трудно, поэтому большинство участников — представители крупных IT-корпораций, таких как Google, Яндекс. А вот представителей интересов студентов или стартапов немного. Поэтому эксперты могут принять концепции, которые им кажутся очевидными, а для остальной аудитории они будут сложными.
C++ сложно выучить?
В отличие от Python, учить C++ cложно, но реально. C++ — это достаточно серьезный язык, к нему требуется осознанный подход. Чтобы начать изучать язык, желательно иметь общие представления о том, что такое программирование на C, как устроено «железо» и как работает операционная система.
Программируя на C++, нужно держать в голове сразу много нюансов: отслеживать типы данных, контролировать выделение и освобождение памяти. Сейчас появляется все больше средств, которые перекладывают эти обязанности на сам язык. Уже на этапе написания кода современные IDE (среды разработки) помогают следить за соблюдением стандартов, отлавливают большое количество ошибок, не всегда очевидных человеку без глубокого знания языка, автоматизируют процесс написания большого объема кода с помощью типовых конструкций.
Самые забавные казусы в C++ связаны с низкоуровневыми возможностями работы с памятью. Слышал такую историю: из-за невнимательности разработчика в процессе выполнения программы создавался бесконечный цикл — повторяющийся набор инструкций, который не имеет условия завершения. В итоге программа быстро занимала всю свободную память компьютера, поэтому он намертво зависал и переставал работать. Сейчас случайное возникновение такого кода маловероятно, но все еще возможно.

Никита Лестенко
ментор курса «Программирование на C++»
C++ очень полезен в качестве фундамента для обучения. Начиная свой путь с изучения С, а затем C++, вы получаете качественные знания основ программирования, ООП, структур данных и алгоритмов — всего того, что должен знать любой программист независимо от языка, на котором он специализируется.
Полезные ссылки
Книги:
- Герберт Шилдт «C++: полное руководство»
- Бьерн Страуструп «Язык программирования C++»
- Бьерн Страуструп «Программирование. Принципы и практика использования C++»
Другое:
- Бесплатный курс на Coursera
- YouTube-канал о C++ и С#
- Справочная информация о языке
- Русскоязычное сообщество разработчиков
Бонус: C++ как оружие
Чем больше возможностей у системы, тем больше шансов, что они будут неправильно реализованы. Сам Бьёрн Страуструп говорил, что на C++ писать безопасный код легче, чем на его предшественнике С, но если все же допустить оплошность — выстрелом оторвет ногу целиком. Если сравнить с оружием, то в C++ это будет гибрид ружья с ножом: из него можно стрелять, но и самому пораниться легко.

Основные отличия между C++ и C#
| Особенности | C++ | C# |
|---|---|---|
| Тип языка | Процедурный и объектно-ориентированный. | Строго объектно-ориентированный. |
| Тип памяти | Управление памятью вручную (неявное и явное). | Управление памятью автоматическое (сборка мусора). |
| Платформозависимость | Более низкая платформозависимость, можно скомпилировать код для различных архитектур. | Работает в среде .NET Framework или .NET Core, что обеспечивает высокую переносимость между платформами. |
| Синтаксис | Синтаксис C++ более гибкий и позволяет более «оптимизированный» код. | C# предлагает более простой и читаемый синтаксис. |
| Библиотеки | Меньше стандартных библиотек, но множество сторонних библиотек и фреймворков. | Большая стандартная библиотека классов .NET, включая поддержку работы с различными облачными сервисами и протоколами. |
| Безопасность | Требуется больше внимания к безопасности при работе с памятью и указателями. | C# обеспечивает более высокий уровень безопасности за счет управления памятью сборщиком мусора. |
| Производительность | Исполнение кода на C++ может быть быстрее из-за отсутствия накладных расходов сборки мусора и других оптимизаций. | C# может быть менее производительным из-за сборки мусора и других абстракций .NET Framework. Однако в большинстве случаев производительность обеспечивает достаточный уровень для множества приложений. |
| Платформенные возможности | Более низкоуровневый доступ к аппаратным ресурсам и операционной системе. | C# предоставляет богатые возможности для взаимодействия с платформой .NET, включая готовые API для работы с файлами, сетью, GUI и т. д. |
| Области применения | Часто используется в системном программировании, играх и других задачах, где важна производительность и контроль над аппаратурой. | Часто используется для разработки приложений под Windows, веб-приложений, приложений для мобильных устройств и других проектов, где удобство разработки и высокая стабильность более важны. |
Учтите, что каждый язык имеет свои преимущества и недостатки, и оптимальный выбор зависит от требований проекта, уровня знаний программистов и существующих инфраструктурных ограничений.
Для чего нужен язык C#
Как в Микрософте сделали свой язык программирования. И зачем.
Вы наверняка слышали о языках программирования, которые начинаются на «Си»: просто «Си», «Си плюс плюс» и «Си шарп». Сейчас хорошее время, чтобы разобраться, что к чему.
Главное
- C# — язык программирования, который компания Микрософт изначально делала для своих проектов.
- Название читается как «си-шарп».
- Многие думают, что это отдельная версия языка С, но на самом деле нет. В C# действительно есть много конструкций, похожих на С и С++, но точно так же в нём можно найти элементы Паскаля и Java. Это не развитие линейки С, а новый язык, созданный с нуля.
- C# — объектно-ориентированный язык, а значит, вся теория про классы, объекты и наследования работает и в нём, но с некоторыми оговорками.
- Спрос на программистов C# не шквальный, этот язык сложно назвать модным в 2020 году. Но на нём можно делать всё, что нужно в 2020-м: от игр и приложений до веб-сервисов.
- Особенно хорошо он сочетается с экосистемой Microsoft.
Игры на DirectX
DirectX — набор компонентов, которые используются для программирования трёхмерной графики и работы со звуком и видео. С помощью C# можно легко подключиться к DirectX и написать свой трёхмерный шутер или любую другую игру. Технически это выглядит так: C# отвечает за логику и поведение игры, а DirectX — за графику и звуковое сопровождение.

Игры на Unity
Unity — это движок для создания двумерных и трёхмерных игр. Он берёт на себя физику, графику и многие служебные штуки, чтобы вы могли сосредоточиться на контенте и сценарии игры. Всё бы хорошо, но без программирования в Unity всё равно не получится, и бывалые разработчики рекомендуют для Unity выбирать именно C#. Есть и другие варианты, например, собственный язык UnityScript или JavaScript.

Машинное обучение
Так как C# — это проект Микрософта, то у него всё в порядке с поддержкой и с библиотеками. В мире C# библиотеки есть практически для всего, в том числе и для работы с нейросетями и машинным обучением — ML.NET.
Это значит, что вы можете использовать все возможности нейронок в приложениях и объединять их с помощью одного и того же языка программирования. А так как C# — мультиплатформенный язык, то машинное обучение можно встроить практически во что угодно, от мобильных приложений до носимой электроники.

Игры и программы для разных мобильных платформ
Чтобы один и тот же C#-код работал на разных платформах, используют Mono и Xamarin — продукты для кросс-платформенной разработки под разные операционные платформы.
- Вы пишете программу для одной платформы, например Windows.
- Берёте Mono, загружаете туда свой код и выбираете новую платформу — например iOS.
- Mono смотрит и говорит — вот тут нужно подключить другую библиотеку, вот здесь немного переписать код, а это место вообще можно удалить и написать заново, чтобы всё работало.
- В итоге программист не пишет софт с нуля для каждой операционной системы, а правит его так, чтобы он соответствовал её требованиям.
- Это сокращает время разработки в несколько раз, потому что основа кода одна и та же, а разница только в деталях.
Программы и сервисы для веба
C# можно использовать для создания веб-приложений. Работает так:
- У вас есть компьютер-сервер, на котором работает серверный софт Microsoft.
- Серверный софт умеет исполнять код на нескольких языках, среди них — C#.
- Где-то из интернета в этот сервер прилетает запрос, например «выдай мне главную страницу».
- Серверный софт компонует веб-страницу и пуляет обратно пользователю. Как и из чего компонуется эта страница — это и есть то, что нужно разработать в веб-приложении.
Теоретически вы можете написать приложение для п. 2 на любом языке, который поддерживает серверные решения Microsoft, в некоторых случаях это может быть и PHP. Но эксперты говорят, что для софта Microsoft есть смысл писать на их языке C#.
Сразу скажем: в большинстве бытовых и любительских проектов вам будет достаточно даже не приложения на C# (или Python, Ruby или PHP), а уже готового решения. Например, если нужен блог, лучше запустить его на хостинге WordPress и просто начать им пользоваться. Это не самый быстрый софт и не самый гибкий, но его запуск займёт у вас 15 минут, а не 15 недель.
А вот на сложных высоконагруженных сайтах WordPress уже не потянет — нужны другие технологии. И тут уже требуются глубокие знания: на одном железе и с одним стеком технологий лучше всего будет работать C#, на другом — PHP, на третьем — Ruby и т. д.
Важен не язык, а умение пользоваться
Не тратьте время на выбор идеального языка — совершенствуйтесь в тех, которые знаете. Если не знаете ни одного — приходите к нам, мы научим.

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
