Запись межплатформенных приложений в C

Эта отличная библиотека: https://github.com/allmarkedup/purl

, которая позволяет вам просто

url = 'http://example.com?sent=yes';
sent = $.url(url).param('sent');
if (typeof sent != 'undefined') { // sent exists
   if (sent == 'yes') { // sent is equal to yes
     // ...
   }
}

Например, предполагается, что вы используете jQuery. Вы также можете использовать его как простой javascript, тогда синтаксис будет немного отличаться.

11
задан chills42 3 November 2008 в 13:32
поделиться

7 ответов

Я поддержал в течение многих лет ANSI C сетевая библиотека, которая была портирована к близко к 30 другим ОС и компиляторы. Библиотека не имела никаких компонентов графического интерфейса пользователя, которые помогли. Мы закончили тем, что абстрагировали в специализированные исходные файлы любую стандартную программу, которая не была последовательна через платформы и использовала #defines в соответствующих случаях в тех исходных файлах. Это сохранило код, который был скорректирован на платформу, изолированную далеко от основной бизнес-логики библиотеки. Мы также сделали широкое применение из определений типов и наших собственных специализированных типов так, чтобы мы могли легко изменить их на платформу в случае необходимости. Это сделало порт на 64-разрядные платформы довольно легким.

Если бы Вы надеетесь иметь компоненты графического интерфейса пользователя, я предложил бы смотреть на инструментарии GUI, такие как WxWindows или QT (которые являются оба библиотеками C++).

9
ответ дан 3 December 2019 в 05:59
поделиться

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

7
ответ дан 3 December 2019 в 05:59
поделиться

В дополнение к ответу Kyle я настоятельно рекомендовал бы против попытки использовать подсистему Posix в Windows. Это реализовано к абсолютному уровню абсолютного минимума, таким образом, что Microsoft может требовать "Поддержки Posix" на поле галочки листа функции. Возможно, кто-то там на самом деле использует его, но я никогда не встречался с ним в реальной жизни.

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

Хороший подход должен изолировать системно-зависимый материал в один или несколько модулей самое большее. Обеспечьте системно-независимый интерфейс от того модуля. Затем создайте все остальное к тому же модуль, таким образом, он не зависит от системы, Вы компилируете для.

4
ответ дан 3 December 2019 в 05:59
поделиться

Попытайтесь записать так, как Вы можете с POSIX. Mac и Linux поддерживают POSIX исходно, и Windows имеет систему, которая может выполнить его (насколько я знаю - я на самом деле никогда не использовал его). Если Ваше приложение является графическим, и Mac и библиотеки X11 поддержки Linux (Linux исходно, Mac через X11.app) и существуют многочисленные способы заставить приложения X11 работать на Windows.

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

Править: Я просто загрузил приложение и посмотрел на файлы. Это, действительно кажется, имеет двоичные файлы для всех 3 платформ в одном каталоге. Если Ваше беспокойство находится в том, как записать приложения, которые могут быть перемещены с машины на машину, не теряя настройки, необходимо, вероятно, записать всю конфигурацию в файл в том же каталоге как исполняемый файл и не коснуться реестра Windows или создать любые точечные каталоги в домашней папке пользователя, это запускает программу на Linux или Mac. И до создания перекрестного распределения Linux двоичный, 32-разрядный POSIX/X11, вероятно, был бы самой безопасной ставкой. Я не уверен, что использует JungleDisk, как я в настоящее время нахожусь на Mac.

0
ответ дан 3 December 2019 в 05:59
поделиться

Там существуйте совсем немного портативных библиотек просто примеры, я работал в прошлом

1) бойкий и gtk +

2) libcurl

3) libapr

Они покрывают почти каждую платформу и таким образом, они - чрезвычайно полезный инструмент.

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

0
ответ дан 3 December 2019 в 05:59
поделиться

XVT имеют кросс-платформенный GUI C API, который является сформировавшийся 15 + годы и находится сверху собственных инструментариев работы с окнами. См. WWW.XVT.COM.

Они поддерживают, по крайней мере, LINUX, Windows и MAC.

0
ответ дан 3 December 2019 в 05:59
поделиться

Я также второй рекомендация разделить код для различных платформ в различные модули/деревья вместо ifdefs.

Также я рекомендую проверить заранее, что является различиями в Вас платформы и как Вы могли абстрагировать их. Например, это - некоторый связанный с ОС материал (например, раздражающий CR, CRLF, LF в текстовых файлах), или аппаратный материал. Например, предыдущее упомянуло, что posix compability не останавливает Вас от

int c;
fread(&c, sizeof(int), 1, file);

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

0
ответ дан 3 December 2019 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: