Убедитесь, что у вас есть автоматизированные процессы сборки на всех платформах, и напишите модульные и автоматизированные функциональные тесты. По возможности запускайте автоматические ночные сборки и тесты. Это гораздо важнее, когда вы пишете кроссплатформенные библиотеки.
Я бы сделал противоположный ответ на один из других (не то, чтобы я думал, что это неправильно, просто другой подход), и если вы можете выбирать свои платформы, сделайте их как можно более разными. Например, сделайте один 32-битный MCVC и другой 64-битный GCC на Unix. Если у вас могут быть автоматизированные тесты и сборки, это быстро покажет проблемы переносимости.
Если возможно, пусть некоторые разработчики работают над одной платформой, а некоторые - над другой, а не завершают код на одной платформе, а затем "переносят" его на другую. Таким образом, они очень быстро научатся тому, что не следует делать, когда их коллеги придут, чтобы жаловаться, что что-то сломали.
Технически вещи, на которые стоит обратить внимание:
- Не думайте, что целые 32-битные
- Не думайте, что символы подписаны или не подписаны
- Не думайте, что символы в ASCII
- Не предполагайте ничего о порядке байтов данных или выравнивании
- Минимизировать арифметику указателя. Вы ошибетесь только тогда, когда сделаете предположения, которые не удаются.
- Помните, что имена файлов и каталогов работают на разных платформах по-разному. Если вам нужно только портировать на windows и unix, вам может это сойти с рук, но как только вы перенесетесь на две платформы, тогда следующий порт может быть для z-series или VMS, где эти вещи работают совсем по-другому.