c++ - Logical AND operator in diab 5.7 compiler returns non-bool type -
when following bit of code compiled diab c++ compiler (dplusplus), generates conversion warning on third line. can resolved casting result of (&&) operator other bool.
code:
bool first = 1; bool second = 1; bool ret = (first && second); //generates compile warning
error:
warning: (etoa:1643): narrowing or signed-to-unsigned type conversion found: int unsigned char
i verified nothing defining bool type. compiler issue, or there else might missing cause this?
wind river's web site indicates diab compiler can compile either c or c++.
in c, &&
operator yields result of type int
, value 0
or 1
. that's consistent warning you're seeing.
as of 1990 iso standard, c did not have built-in bool
type. common define bool
typedef. appears message bool
typedef unsigned char
, in header. 1999 iso c standard adds new predefined boolean type called _bool
; identifier bool
defined in <stdbool.h>
macro expands _bool
. if <stdbool.h>
isn't included, bool
can defined in other way.
in c++, &&
yields result of type bool
value false
or true
, , bool
distinct fundamental type. has been case @ least since 1998 iso c++ standard.
i suspect you're getting warning because you're compiling code c rather c++. less possibility diab compiler doesn't conform c++ standard; might have way tell conform more closely.
i haven't used diab compiler. typically can control language being compiled using particular file extension (typically .c
c , .cpp
c++), or using different command, or both.
consult compiler's documentation find out how invoke conforming c++ compiler.
as experiment, before changing way invoke compiler, might try adding declaration:
int class;
to source file. legal in c, syntax error in c++ (since class
c++ keyword).
update:
the op says he's compiling c++, not c. warning message implies &&
yields int
, , bool
same type unsigned char
.
a warning doesn't directly indicate compiler not conforming; compilers can warn like. content of warning suggest compiler bug, or @ least compiler doesn't conform c+
any conforming c++ compiler must produce diagnostics program. compiler do? (please don't add #include
directives.)
int main() { class dummy { }; // make sure it's c++ bool b; unsigned char c; bool* pb = &c; // invalid conversion unsigned char* pc = &b; // invalid conversion }
and output when compile , execute program?
#include <iostream> int main() { std::cout << "__cplusplus = " << __cplusplus << "\n"; }
Comments
Post a Comment