остерегайтесь JavaScript определенного определения пустого указателя. существует два определения для "никакого значения" в JavaScript. 1. Пустой указатель: когда переменная является пустой, это означает, что это не содержит данных в нем, но переменная уже определяется в коде. как это:
var myEmptyValue = 1;
myEmptyValue = null;
if ( myEmptyValue === null ) { window.alert('it is null'); }
// alerts
в таком случае, типом Вашей переменной является на самом деле Объект. протестируйте его.
window.alert(typeof myEmptyValue); // prints Object
Неопределенный: когда переменная не была определена, прежде в коде, и как ожидалось, она не содержит значения. как это:
if ( myUndefinedValue === undefined ) { window.alert('it is undefined'); }
// alerts
, если такой случай, тип Вашей переменной 'не определен'.
уведомление, что при использовании преобразовывающего тип оператора сравнения (==) JavaScript будет действовать одинаково обоих из этих пустых значений. для различения их всегда используйте строгий типом оператор сравнения (===).
Используйте CMake для управления файлами сборки.
Это позволит вам настроить единый репозиторий с одним набором текстовых файлов в нем. Затем каждый разработчик может запустить соответствующие сценарии cmake для создания правильной среды сборки для своей системы (сценарии сборки Visual Studio 2008/2005 / GNU C ++ и т. Д.).
Здесь есть много преимуществ:
Я сделал это и видел, как это делается без особых проблем.
Вы захотите попробовать изолировать код, который отличается для разных платформ. Также вам стоит подумать о структуре каталогов . Что-то вроде
По сути, вы просто хотите четко понимать, что является специфическим для каждой системы, а что является общим.
Кроме того,
Как упоминалось в предыдущих сообщениях, Qt - это очень простой метод для реальной одновременной многоплатформенной разработки - независимо от вашей IDE и с множеством разных компиляторов (даже для Symbian, ARM, Windows CE / Mobile ...).
В моей предыдущей и нынешней компании я работаю в смешанных командах разработчиков Linux и Windows, которые работают вместе, используя Subversion и Qt (у которого есть очень простая и мощная система сборки QMake, которая скрывает все различные среды сборки для конкретной платформы / компилятора - вам просто нужно написать один файл сборки для всех платформ - так просто!)
И: Qt содержит почти все, что вы необходимо:
Итак, Qt - это полнофункциональная и очень надежная среда - я использую ее в течение 10 лет.
И: Qt легко интегрируется в IDE, такие как VC ++, Eclipse, или предоставляет свою собственную IDE "QtCreator".
см .: http://www.trolltech.com + http://doc.trolltech.com
С уважением,)
Итак, Qt - это полнофункциональная и очень надежная среда - я использую ее в течение 10 лет.
И: Qt легко интегрируется в IDE, такие как VC ++, Eclipse, или предоставляет свою собственную IDE "QtCreator".
см .: http://www.trolltech.com + http://doc.trolltech.com
С уважением,)
Итак, Qt - это полнофункциональная и очень надежная среда - я использую ее в течение 10 лет.
И: Qt легко интегрируется в IDE, такие как VC ++, Eclipse, или предоставляет свою собственную IDE "QtCreator".
см .: http://www.trolltech.com + http://doc.trolltech.com
С уважением, Крис
У меня был такой опыт работы в Acronis. У нас была та же кодовая база, которая использовалась для создания двоичных файлов (фактически, полностью упакованных установщиков), нацеленных на Win32 / 64, Linux и OS X (и множество других более экзотических платформ, таких как EFI), при этом каждый работал в своей IDE по своему выбору. Уловка здесь состоит в том, чтобы избежать решений, специфичных для компилятора и IDE, и сделать ваш проект полностью собираемым из чистых кроссплатформенных файлов make. Обратите внимание, что вы можете прекрасно использовать любую систему make вместе с VC ++, так что это не проблема (мы использовали программу make от Watcom по историческим причинам, но я бы не рекомендовал ее).
Еще один трюк, который вы можете сделать, это добавить сценарий make, который автоматически создает файлы проекта из входных списков в ваших make-файлах для всех используемых вами IDE (например, VS и Eclipse CDT). Таким образом, каждый разработчик сам создает эти вещи, а затем открывает эти проекты в среде IDE для редактирования / сборки / отладки, но в исходном репозитории есть только make-файлы.
Обеспечение компилируемости кода для всех может быть проблемой, в основном потому, что VC ++ обычно более небрежно применяет правила чем g ++ (например, он позволит вам привязать rvalue к неконстантной ссылке, хотя и с предупреждением). Если вы компилируете с обработкой предупреждений как с ошибками и с наивысшими уровнями предупреждений (возможно, с отключенными несколькими выбранными вручную предупреждениями), вы в большинстве случаев этого избежите. Настройка непрерывной прокручивающейся сборки - еще один способ поймать их на ранней стадии. Еще один подход, который мы использовали в Acronis, - это наличие в среде сборки Windows инструментов кросс-компиляции на основе Cygwin, чтобы любой разработчик Windows мог выполнить сборку, ориентированную на Linux (с той же версией g ++ и всеми остальными), прямо из своего компьютера. и посмотрим, не сработает ли это,
Я лично использую cmake / mingw32 / Qt4 для всех моих потребностей в C ++. QtCreator - это кроссплатформенная среда IDE, которая несколько оптимизирована для программирования на qt4.
Мы также работаем над кроссплатформенным проектом. Мы используем Emacs для кодирования, SCons для сборки и Visual Studio 2008 для отладки. Я впервые использую Emacs + SCons, и я должен сказать, что это очень здорово, если вы поймете, как работают SConstruct и SConscripts.
Проблема не в редактировании исходных файлов C ++, а в самом процессе сборки. VS не использует ту же архитектуру Makefile, что обычно используется при разработке Linux. Радикальное предложение, но обе группы могут фактически использовать одну и ту же C ++ IDE и процесс сборки - см. Code :: Blocks для получения дополнительной информации.
Это возможно (я делаю это, чтобы зарабатывать ежедневные деньги :-)).
Но вы должны помнить о различиях в библиотеках, поставляемых ОС, которые могут очень раздражать. Два хороших варианта - это BOOST и QT.
Оба предоставляют вам платформенно-независимые функции полезного материала, которые не обрабатываются C lib и STL.
] Я опаздываю на этот вопрос, и здесь есть много хороших ответов, но я не Я не видел, чтобы кто-нибудь перечислял все проблемы, с которыми я столкнулся (большая часть моей работы на C ++ является кроссплатформенной), так что:
Несмотря на все вышесказанное: в целом кроссплатформенность вполне выполнима, и нет реальной причины избегать этого. Мой опыт показывает, что проблемы, как правило, возникают спорадически, но когда они возникают, они отнимают больше времени, чем есть. Если вы уже какое-то время занимаетесь программированием, вы не найдете в этом ничего необычного.
В качестве примера Mercurial, одним из аргументов в пользу которого является переносимость, имеет ряд исправлений, охватывающих три или четыре выпуска, касающихся имен файлов Windows в необычных ситуациях. Убедитесь, что вы можете заранее проверить, что другие проверяют.Несмотря на все вышесказанное: в целом кроссплатформенность вполне выполнима, и нет реальной причины избегать этого. Мой опыт показывает, что проблемы, как правило, возникают спорадически, но когда они возникают, они отнимают больше времени, чем есть. Если вы уже какое-то время занимаетесь программированием, вы не найдете в этом ничего необычного.
В качестве примера Mercurial, одним из аргументов в пользу которого является переносимость, имеет ряд исправлений, охватывающих три или четыре выпуска, касающихся имен файлов Windows в необычных ситуациях. Убедитесь, что вы можете заранее проверить, что другие проверяют.Несмотря на все вышесказанное: в целом кроссплатформенность вполне выполнима, и нет реальной причины избегать этого. Мой опыт показывает, что проблемы, как правило, возникают спорадически, но когда они возникают, они отнимают больше времени, чем есть. Если вы уже какое-то время занимаетесь программированием, вы не найдете в этом ничего необычного.
содержит ряд исправлений, охватывающих три или четыре выпуска, касающихся имен файлов Windows в нестандартных ситуациях. Убедитесь, что вы можете проверить, что другие проверяют на раннем этапе.Несмотря на все вышесказанное: в целом кроссплатформенность вполне выполнима, и нет реальной причины избегать этого. Мой опыт показывает, что проблемы, как правило, возникают спорадически, но когда они возникают, они отнимают больше времени, чем есть. Если вы уже какое-то время занимаетесь программированием, вы не найдете в этом ничего необычного.
содержит ряд исправлений, охватывающих три или четыре выпуска, касающихся имен файлов Windows в необычных ситуациях. Убедитесь, что вы можете заранее проверить, что другие проверяют.Несмотря на все вышесказанное: в целом кроссплатформенность вполне выполнима, и нет реальной причины избегать этого. Мой опыт показывает, что проблемы, как правило, возникают спорадически, но когда они возникают, они отнимают больше времени, чем есть. Если вы уже какое-то время занимаетесь программированием, вы не найдете в этом ничего необычного.
Используйте Perl / Python / Ruby (или что-то подобное) для своих сценариев. Пытаться поддерживать синхронизацию оболочки Linux и пакетных сценариев Windows до боли утомительно.Несмотря на все вышесказанное: в целом кроссплатформенность вполне выполнима, и нет реальной причины избегать этого. Мой опыт показывает, что проблемы, как правило, возникают спорадически, но когда они возникают, они отнимают больше времени, чем есть. Если вы уже какое-то время занимаетесь программированием, вы не найдете в этом ничего необычного.
Используйте Perl / Python / Ruby (или что-то подобное) для своих сценариев. Пытаться поддерживать синхронизацию оболочки Linux и пакетных сценариев Windows до боли утомительно.Несмотря на все вышесказанное: в целом кроссплатформенность вполне выполнима, и нет реальной причины избегать этого. Мой опыт показывает, что проблемы, как правило, возникают спорадически, но когда они возникают, они отнимают больше времени, чем есть. Если вы уже какое-то время занимаетесь программированием, вы не найдете в этом ничего необычного.
Еще одно голосование за cmake.
Следует обратить внимание на то, что имена файлов в Windows имеют регистр, но не чувствительны к регистру. Они чувствительны к регистру в большинстве файловых систем unix.
Обычно это проблема #include
, например. учитывая файл FooBar.h
#include "foobar.h" // works on Windows, fails on Linux.
Я сделал это двумя способами:
Не могу сказать, что мне действительно понравился CMake, но кроссплатформенный инструмент определенно имеет свои преимущества.
Как правило, использование разных компиляторов для компиляции кода с самых первых нескольких строк всегда является хорошей идеей, так как это помогает улучшить качество кода.
Я согласен со всеми здесь, кто предложил cmake для кроссплатформенной разработки на C ++. Это отличный инструмент.
Еще я бы посоветовал использовать eclipse CDT в качестве среды разработки. Он работает в любом месте, где вы можете запускать Java и gcc, и это объединяет вашу среду разработки.
Я думаю, что именно Алан Джексон сделал упор на модульное тестирование. Для этого вам понадобятся библиотеки кросс-платформенных модульных тестов. Я прочитал это сообщение время назад о средах модульного тестирования C ++. Это немного устарело, но продуманно. Отсутствует тот, который также работает на обеих платформах, - это googletest .
Наконец, если вы хотите запускать этот тест автоматически на обеих платформах, у cmake есть еще один инструмент под названием ctest, который очень хорош для этого.