Mail Archives: djgpp/1998/06/15/10:54:18
On Mon, 15 Jun 1998, sl wrote:
> #include <stdio.h>
>
> enum lineType
> {
> sLine=0x00,
> dLine=0x01,
> overwrite=0x02,
> };
>
> void saychoice(lineType choice)
> {
> if (choice|dLine==dLine)
> printf("double line chosen");
> if (choice|overwrite==overwrite)
> printf("overwrite mode chosen");
> }
>
> int main()
> {
> saychoice(sLine|overwrite);
> }
There are several problems here. First, compiling this as a C program
didn't produce the warning you were complaining about. So I suspect you
compiled this as a C++ program, which you should have mentioned. I'm
quite sure that C++ produces an int from sLine|overwrite, and then
objects to passing an int to a function which expects an enum. But I'm
not knowledgeable about C++ enough to tell for sure. Anybody?
Second, what exactly did you expect from an expression like this:
if (choice|dLine==dLine)
At least in C, the == operator has higher precedence than the | operator,
so this is parsed as "if (choice | (dLine == dLine))", which is hardly
what you wanted to say... Even if C++ changes that, I suggest to use
explicit parentheses.
- Raw text -