For code,
while(1)
{
   /* ..... */
}
MSVC generates the following warning.
warning C4127: conditional expression is constant
MSDN page for the warning suggests to use for(;;) instead of while(1). I am wondering what advantage for(;;) is giving and why it warns for the constant usage in while? 
What flag to use on GCC to get the same warning?