C хорош для любых проектов, кроме командной строки и обучения? - PullRequest
13 голосов
/ 11 ноября 2009

Это не значит, что это подстрекательское или что-то в этом роде, но я нахожусь в процессе изучения C, и (думаю) я хорошо разбираюсь в большинстве основ. Я выполнил все различные книжные упражнения: генераторы простых чисел, генераторы Фибоначчи, манипуляции со строками, йадда йадда, но ничего из этого круто .

Что такое "мост" между программами командной строки и чем-то -cool-? Я слышал о различных играх, написанных на C, но как?

Простите за раздражение, но мне кажется, что я многому научился, но все еще могу делать относительно мало. Спасибо за понимание того, что делать с C.

Соответствующая информация: OS X Leopard, PHP и опыт веб-разработки (что так здорово, потому что проекты сразу попадают в контекст, где вы понимаете, насколько они могут быть мощными)

Ответы [ 13 ]

42 голосов
/ 11 ноября 2009

C - это бетон и сталь современных технологий

Было время, когда почти все было написано на С или во что-то гораздо худшее.

В наши дни многие из продвинутых языков и систем фактически реализованы на C или C ++, а затем эти вещи реализуют больше систем. Как говорится, стоит на плечах гигантов . Почти каждое ядро ​​ОС, браузер и веб-сервер для тяжелых условий работы написаны на C / C ++.

Конечно, вы не видите сталь в высотном здании, вы видите красивую внутреннюю обстановку и гладкие стеклянные окна. Вам не нужен стальной или бетонный стол, и если бы вы это сделали, его было бы слишком дорого строить для вас.

Возвращаясь к вопросу о графическом интерфейсе: ваша первая графическая программа на C, вероятно, должна напрямую использовать исходную X Window System . Не тратьте там слишком много времени, а затем переходите к одному из более продвинутых наборов инструментов Widget , таких как GTK + или (C ++) Qt . Обязательно исследуйте свою систему OS X, поскольку она имеет одну из самых продвинутых из них.

Я пытаюсь любить писать вещи на Ruby в наши дни, но я случайно знаю, что существует более 1021 * 100 000 200 000 строк кода C, реализующих эту классную систему языка Ruby. : -)

12 голосов
/ 11 ноября 2009

Резюме

Хорошо, этот пост стал действительно большим, поэтому перед тем, как его прочесть, приведем краткую сводку: для программирования GUI существует ряд хороших библиотек C / C ++ (например, QT). Большинство людей, по крайней мере, в системах Windows, используют язык .NET (например, C #), когда им нужен графический интерфейс, и C / C ++, когда им нужно больше контроля / скорости. Также очень распространено использование как в комбинации, то есть сделать графический интерфейс в C #, так и критичные по скорости детали в C.

Я все же призываю вас прочитать более длинный ответ, он содержит гораздо больше информации о ваших возможностях.

Более длинный ответ

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

Хорошо, некоторые ответы:

Полезно ли C?

C и его очень близкий родственник C ++ отвечают за огромную часть мирового кода. Я не знаю, написано ли больше кода на C, чем на любом другом языке, но я предполагаю, что он не за горами.

Большинство действительно важных программ, которые вы используете, написаны на C / C ++. Только для одного примера, Windows.

Где сегодня используется C?

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

Но не думайте, что это все низкий уровень для программистов на Си. Даже сегодня, когда доступно много других языков (которые, возможно, намного лучше, и, конечно, гораздо проще программировать), C все еще используется для создания практически всего. Приложения с графическим интерфейсом, о которых вы специально спрашивали, очень часто создаются на C, хотя в настоящее время многие люди переходят на другие языки. Заметьте, я говорю переключение: C раньше был стандартным языком для написания, ну, вообще, всего.

Как мне разработать GUI с C

Хорошо, вы специально хотели узнать, как создать графический интерфейс для C (надеюсь, C ++ тоже подойдет).

Прежде всего, это зависит от ряда факторов:

  1. Для какой операционной системы вы пишете? (Windows, Mac и Linux являются наиболее распространенными).
  2. Вы хотите, чтобы графический интерфейс работал и на других системах?

Наиболее распространенным случаем является написание программного обеспечения для работы в Windows. В этом случае «естественным» решением является написание вещей, которые работают с Win32 API. Это в основном библиотека, которая поставляется с Windows, позволяя вам выполнять любую работу с графическим интерфейсом, которую вы хотите.

Большая проблема в том, что это довольно сложно. Как и все, очень сложно. По этой причине большинство людей больше не выполняют такую ​​работу.

Так, каковы ваши другие варианты?

Наиболее естественным является то, что называется языком .NET. Это набор языков, вместе с библиотеками, которые создала Microsoft. Это, вероятно, самый простой способ получить графический интерфейс в Windows. Проблема в том, что вы не можете использовать их из C (поскольку это не язык .NET).

Предполагая, что вы хотите остаться на земле C / C ++, вы можете использовать какую-то библиотеку, которая облегчает работу с Windows API (поскольку скрывает все неприятные детали):

  1. Одним из наиболее распространенных является то, что называется MFC (Microsoft Foundation Classes), которые представляют собой набор классов C ++, которые облегчают создание материалов для Windows. К сожалению, эта библиотека очень старая и ее не так просто использовать.
  2. Другой способ пойти дальше, если вы хотите программировать на C ++, это использовать какую-то стороннюю библиотеку. Это библиотека, созданная кем-то кроме Microsoft, которая упрощает создание графического интерфейса.
  3. Другой вариант - создать только часть вашего программного обеспечения с графическим интерфейсом на языке .NET и использовать C / C ++ для других частей (или использовать язык .NET для выполнения почти всего, и C / C ++ только тогда, когда вам это действительно нужно, например, когда вам нужно, чтобы дела шли очень быстро). Это очень популярный вариант.

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

Я думаю, что наиболее известной из этих библиотек является QT, а также WxWidgets, но есть и множество других. Я бы лично выбрал QT, так как он, кажется, получил наибольшую известность, но я не работал ни с одним из них.

7 голосов
/ 11 ноября 2009

Каждая основная операционная система имеет все свои низкоуровневые библиотеки, реализованные на C. Mac OS X - это Unix-подобная система под капотом, которая является прекрасным миром, если вы программист на C.

Проверьте Искусство программирования Unix для некоторых замечательных идей.

Что касается графического интерфейса, вы, вероятно, захотите использовать X11. Существует множество хороших документов - большинство программ для Unix и самые глубокие материалы на системном уровне, просто предполагает , что вы работаете в C, поскольку это то, что все используют для этого.

5 голосов
/ 11 ноября 2009

Ну, это зависит. Если вы хотите создавать настольные приложения, используйте многоплатформенную библиотеку графического интерфейса, основным языком которой является C - GTK +:

http://www.gtk.org/

Для игр, проверьте SDL:

http://www.libsdl.org/

, который предоставляет вам мысли, такие как прямой ввод с клавиатуры, 2D-графику, некоторые аудио и даже потоки и тому подобное. Он также может открыть контекст OpenGL, если вы хотите попасть в трехмерный мир (однако это трудно сделать в необработанном OpenGl). Я упоминал, что SDL является мультиплатформенным?

Однако реальная сила C в системном программировании. Для настольных приложений / игр, возможно, вам лучше всего подходит C ++. Теперь, когда у вас есть команда C, изучение базового C ++ должно быть простым;).

4 голосов
/ 11 ноября 2009

Круто делать с C?
Операционные системы, драйверы устройств и модули Python для начинающих.

Игры, как правило, используют C ++, если они основаны на C, по моему опыту / тому, что я видел.

3 голосов
/ 11 ноября 2009

В Unix есть много библиотек для C, таких как X lib, которая обращается к X11.

Если вы хотите заняться робототехникой, вы можете найти C очень полезным, поскольку вам придется писать низкоуровневый код с очень маленькими следами памяти, поэтому даже C ++ может оказаться не лучшим выбором.

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

2 голосов
/ 11 ноября 2009

Конечно, есть несколько впечатляющих программ, созданных на C!

GNOME, например, возможно наиболее используемая среда рабочего стола, используемая в современных системах Unix, написана на C (по крайней мере, в основных частях) и в основном основана на наборе инструментов GTK + , Сам сделано в кл.

Для игры OpenGL является C api и является стандартом для трехмерного графического программирования в мультиплатформенной разработке (не только для платформы Microsoft), а также Quake 3, движок которого Id Tech 3 доступен в GPL. написано на C. Существует также много 2D-игр, написанных с использованием библиотеки SDL .

1 голос
/ 22 ноября 2009

Для "крутого" приложения, которое выходит за рамки простого графического интерфейса, посмотрите библиотеку компьютерного зрения OpenCV . Это обеспечивает быструю обработку изображений в реальном времени и распознавание лиц.

Теперь вы можете получить доступ к веб-камере и начать писать компьютерные игры в реальном времени. Для таких приложений, которые интенсивно используют процессор, C является идеальным выбором.

1 голос
/ 11 ноября 2009

GTK-сервер ДЕЙСТВИТЕЛЬНО легко начать работу с C или любым другим языком. Просто нажмите на эту ссылку.

1 голос
/ 11 ноября 2009

Если ваша идея крутости - это приложения с графическим интерфейсом, и вы хотите писать собственные приложения с графическим интерфейсом на Mac, вам нужно Carbon . Это официальный C API для Mac GUI и ОС. Они продолжают угрожать убить его, но он выживает.

Лично я считаю, что приложения с графическим интерфейсом - это очень узкое определение круто. Что мне нравится, так это реализовать параллельные математические алгоритмы с использованием opencl .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...