Эта отличная библиотека: 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, тогда синтаксис будет немного отличаться.
Я поддержал в течение многих лет ANSI C сетевая библиотека, которая была портирована к близко к 30 другим ОС и компиляторы. Библиотека не имела никаких компонентов графического интерфейса пользователя, которые помогли. Мы закончили тем, что абстрагировали в специализированные исходные файлы любую стандартную программу, которая не была последовательна через платформы и использовала #defines в соответствующих случаях в тех исходных файлах. Это сохранило код, который был скорректирован на платформу, изолированную далеко от основной бизнес-логики библиотеки. Мы также сделали широкое применение из определений типов и наших собственных специализированных типов так, чтобы мы могли легко изменить их на платформу в случае необходимости. Это сделало порт на 64-разрядные платформы довольно легким.
Если бы Вы надеетесь иметь компоненты графического интерфейса пользователя, я предложил бы смотреть на инструментарии GUI, такие как WxWindows или QT (которые являются оба библиотеками C++).
Старайтесь избегать зависимого платформы #ifdefs, поскольку они имеют тенденцию расти экспоненциально, когда Вы добавляете новые платформы. Вместо этого попытайтесь организовать свои исходные файлы как дерево с платформенно независимым кодом в корне и зависимым от платформы кодом "листов". Существует хорошая книга по подчиненному, Многоплатформенному Управлению кодом. Пример кода в нем может выглядеть устаревшим, но идеи, описанные в книге, все еще блестяще жизненно важны.
В дополнение к ответу Kyle я настоятельно рекомендовал бы против попытки использовать подсистему Posix в Windows. Это реализовано к абсолютному уровню абсолютного минимума, таким образом, что Microsoft может требовать "Поддержки Posix" на поле галочки листа функции. Возможно, кто-то там на самом деле использует его, но я никогда не встречался с ним в реальной жизни.
Можно, конечно, написать межплатформенный код C, просто необходимо знать о различиях между платформами, и тесте, тесте, тесте. Модульные тесты и CI (непрерывная интеграция) решение будут иметь большое значение для проверки Ваших работ программы через все Ваши целевые платформы.
Хороший подход должен изолировать системно-зависимый материал в один или несколько модулей самое большее. Обеспечьте системно-независимый интерфейс от того модуля. Затем создайте все остальное к тому же модуль, таким образом, он не зависит от системы, Вы компилируете для.
Попытайтесь записать так, как Вы можете с 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.
Там существуйте совсем немного портативных библиотек просто примеры, я работал в прошлом
1) бойкий и gtk +
2) libcurl
3) libapr
Они покрывают почти каждую платформу и таким образом, они - чрезвычайно полезный инструмент.
Posix прекрасен на Нельдах, но хорошо я сомневаюсь, что это является настолько большим на окнах, кроме того, у нас нет материала для портативных графический интерфейсов пользователя там.
XVT имеют кросс-платформенный GUI C API, который является сформировавшийся 15 + годы и находится сверху собственных инструментариев работы с окнами. См. WWW.XVT.COM.
Они поддерживают, по крайней мере, LINUX, Windows и MAC.
Я также второй рекомендация разделить код для различных платформ в различные модули/деревья вместо ifdefs.
Также я рекомендую проверить заранее, что является различиями в Вас платформы и как Вы могли абстрагировать их. Например, это - некоторый связанный с ОС материал (например, раздражающий CR, CRLF, LF в текстовых файлах), или аппаратный материал. Например, предыдущее упомянуло, что posix compability не останавливает Вас от
int c;
fread(&c, sizeof(int), 1, file);
Но на различных аппаратных платформах расположение внутренней памяти может быть завершено отличающийся (порядок байтов), вынудив Вас использовать функции преобразования на некоторых целевых платформах.