Пара предложений из моего практического опыта:
1) Убедитесь в регулярной компиляции исходных кодов на ваших целевых платформах. Не ждите до конца. Это помогло бы указать на ошибки на ранней стадии. Используйте систему непрерывной сборки - это значительно облегчает жизнь.
2) Никогда не используйте заголовки для конкретной платформы. Даже для написания собственного кода - для всего, что вы знаете, некоторые вещи в заголовке Windows могут ожидать строку, которая была ABC в XP, но была заменена на ABC.12 в Win7.
3) Используйте идеи из STL и BOOST, а затем опирайтесь на них. Никогда не считайте, что это панацея от проблем - STL легко доставить с вашим кодом, а BOOST - нет.
4) Не используйте специфичные для компилятора конструкции, такие как __STDCALL. Это требует ада.
5) Один и тот же код при компиляции с аналогичными параметрами компилятора в g ++ и cl может привести к другому поведению. Пожалуйста, имейте под рукой копию вашего руководства по компилятору.