Leeman Strout writes:
> I forget who it was.. but on their report of a typo/bug/whatever I went
> through my db.c and found that indeed there was a SET_SKILL() without a
> semicolon.. placing that semicolon there however made some very strange
> errors pop up in gcc (-Wall) This hasn't happened anywhere else, so I
> was hoping that someone here could provide some enlightenment.
>
> 2350: for (i = 1; i <= MAX_SKILLS; i++) {
> 2351: if (GET_LEVEL(ch) < LVL_IMPL)
> 2352: SET_SKILL(ch, i, 0); <--- removing that semicolon fixes it
> 2353: else
> 2354: SET_SKILL(ch, i, 100);
> 2355: }
That's because the SET_SKILL() has it's own {} pair when expanded,
so the semicolon is interpreted as a new statement, which ends the
if/else statement prematurely. If you do this:
for (i = 1; i <= MAX_SKILLS; i++) {
if (GET_LEVEL(ch) < LVL_IMPL)
{
SET_SKILL(ch, i, 0);
}
else
SET_SKILL(ch, i, 100);
}
it will be fine. (I recommend using {} pairs any time you have a
control block (for/if/while/do). It often seems unnecessary, but
can save you lots of grief in debugging.)
\_\_\_ _/ \_\_\_ axis data: specializing in online system setup & design
\_ \_ _/ \_ \_ Edward Almasy almasy@axis.com
\_\_\_ _/ \_\_\_ President: Axis Data Proprietor: NineJackNine BBS
\_ _/ _/ \_ 608-256-5732 (voice) 608-256-5697 (data)
\_\_\_ _/_/_/ \_\_\_ 9jack9: on the bleeding edges of culture and technology
This archive was generated by hypermail 2b30 : 12/07/00 PST