I don&#x27;t know much about Android NDK, but in general, people use clang because:<p>- Clear and readable diagnostics -- especially useful when debugging nasty C++ template stuff where the type signature is a page long. (GCC is catching up in this area)<p>- Modular design -- if an IDE wants to have syntax highlighting or an Xcode&#x2F;Eclipse&#x2F;IntelliJ like &quot;fix it&quot; feature, they can use the clang frontend to parse the code. Also, GCC&#x27;s &quot;big ball of mud&quot; design (iirc they do some optimizations like constant folding in the parser) makes it harder to hack on unless you&#x27;re already pretty familiar with the codebase.<p>- Less hostile community -- people have tried to clean up GCC but their patches were rejected (see the RMS email link below)<p>- Helps you with standards compliance -- clang will still compile code with compiler-specific extensions but it has an option to output a warning. There are some codebases that have come to rely on these behaviors so clang&#x27;s warnings can help make sure you don&#x27;t end up tied to one specific compiler.<p>- Personally, I like AddressSanitizer (ASan). It does similar checks as Valgrind, but using compile-time instrumentation -- just pass in an additional flag. Gets rid of a dependency.