## C++ conditional testing fails, why?

I have a long C++ program that has a few simple statements in it. At the beginning I have ;
#define NUM_DP 10

Further on in the program I have this conditional statement;

short int ct, j;
.
.
.
ct = op2.test(op2.num);

if (ct < (NUM_DP - 1))
for (j = 1; j < 20; j++){

code block
}

The test function returns a value of ct = 9, why then does the for loop execute . Can't you use constants inside conditional statements? Please help. Thanks.

 PhysOrg.com science news on PhysOrg.com >> Hong Kong launches first electric taxis>> Morocco to harness the wind in energy hunt>> Galaxy's Ring of Fire

 Quote by John O' Meara I have a long C++ program that has a few simple statements in it. At the beginning I have ; #define NUM_DP 10 Further on in the program I have this conditional statement; short int ct, j; . . . ct = op2.test(op2.num); if (ct < (NUM_DP - 1)) for (j = 1; j < 20; j++){ code block } The test function returns a value of ct = 9, why then does the for loop execute . Can't you use constants inside conditional statements? Please help. Thanks.
Constants are fine in expressions. There are pitfalls for certain defines (side effects and such), but that's not relevant here.

I don't see why it's running the for loop. Mind you, I would use curly braces for the if statement (around the for loop), but that should work. Can't say without perhaps seeing the entire bit of code.

I would suggest you either use a debugger and check the variables right before the if, or add a print in there to see the values right before the if. Something like:
Code:
std::cout << "ct = " << ct << "; NUM_DP - 1 = " << (NUM_DP-1) << "; (ct < (NUM_DP-1)) = " << (ct < (NUM_DP-1)) << std::endl;
You should be able to see right away if the values are other than you think. Note that I just whipped out that line. I think it should be right, but I never assume that until it's compiled and tested. Make sure to #include <iostream> of course.

 It is g++ 4.1.2, that I am using, I am just woundering if it is a bug in the version I have for my RISC OS operating system, there is no gdb debugger for my system only a gdbserver which I think requires a remote gdb to work. I will try butting braces around for loop as you suggested. Thanks.

Mentor

## C++ conditional testing fails, why?

Since you don't have a debugger, add some output statements as grep suggests, to see the value of ct and (NUM_DP - 1).

 You might want to check that you haven't accidentally put a semicolon after the if, like so: if (ct < (NUM_DP - 1)); as that'll indicate an if with no body. Braces shouldn't make a difference, so unless you're using a hacked-up compiler with a modified parser or funny extensions there's no reason to think that they're the cause of the problem, though stylistically they're a good idea. Also, though unrelated to the problem, you should really avoid macros unless you have some compelling reason to use them. C++ allows you to define well-typed constants. Macros are just direct text substitutions. static short int const numDP = 10;