Compiler Warning C4706: assignment within conditional expression
This is the code fragment
---------------------------------------------------------------
std::string output;
DWORD bytes_avail = 0;
if (::PeekNamedPipe(h_read, 0, 0, 0, &bytes_avail, 0))
if (bytes_avail > 0) {
const DWORD len = 4096;
char buf[len];
DWORD bytes_read;
BOOL rfr;
while ((rfr = ::ReadFile(h_read, buf, len, &bytes_read, 0) &&
bytes_read))
output.append(buf, buf + bytes_read);
if (!rfr)
switch (const DWORD e = ::GetLastError()) {
case ERROR_BROKEN_PIPE: // 109: The pipe has been ended
break;
default:
Log(ERR, "ReadFile failed: " + get_last_error(e));
}
}
---------------------------------------------------------------
in which
rfr = ::ReadFile(h_read, buf, len, &bytes_read, 0)
in while() causes Compiler Warning C4706 (assignment within conditional
expression). My interest here is obviously purely academic but is there a way
to write the condition in the while() in a way that would tell the compiler
the warning has been heeded and it is all right? (The reason I use this
assignment is to take the return code out of the condition and test it when
the loop terminates in case ReadFile has failed.)
I am familiar with this
http://msdn2.microsoft.com/en-us/library/7hw7c1he(VS.80).aspx
but writing
(rfr = ::ReadFile(h_read, buf, len, &bytes_read, 0)) != 0
does not help either in VS2003 or VS2005 and I had rather not use
#pragma warning (disable:...)
....
#pragma warning (default:...)
Thank you.
Paul