Use ether gcc & g++ or clang & clang++. Clang isn't as well known as FCC but its what apple uses by default on OS X and it runs on all platforms except windows I believe. It has a *ton* better error support than gcc and has nice features like code analysis and warnings for optimizations gcc doesn't have. Code analysis will help you figure out those pesky bugs you don't understand why they're happening, it is also a feature gcc doesn't have. I would avoid ms c and msvc++ because they're way behind on C++11 and also don't support posix typically that well. They also are on windows and no offense to windows, but it's a mess to learn programming on because of #include <windows.h>. I would also stick to the main stream compilers because they're better supported and have better standards support typically. Those compilers are GNU GCC, Clang (LLVM), and MSVC(++).