Angus Mezick <angus@EDGIL.CCMAIL.COMPUSERVE.COM> writes:
> At the very end of this function, is there any reason not to do a ch=NULL; right
> have the free(ch); call? I think this might be a nice way to ensure
> consistancy. But for that DT and fast aggr problem, you need to check to see
> if(ch && ch->in_room)
>
> if !ch, then ch->in_room won't be checked.
void
f(int x)
{
x = 2;
}
int main()
{
int y = 4;
f(y);
printf("%d\n", y);
return 0;
}
Output is 4. The problem is assigning to a passed variable only
assigns to a function's local copy. Since C always passes by value
insteas of by reference, you can't change a parameter variable and
have it change the actual variable it was called with. What you can
do is:
void
f(int *x)
{
*x = 2;
}
int main()
{
int y = 4;
f(&y);
printf("%d\n", y);
return 0;
}
Which works fine, since you're not changing x, but the value x points
to. In C++ you can pass by reference by declaring the function as
void f(int &x), where the effect you describe would work fine. But,
since Circle is C, and making it C++ is a semi-tedious[1] exercise
left for the reader, I answer only in the context of C :)
[1] - it's not terribly bad, but it requires a lot of changes. An
hour or so with a good editor like Emacs (hah! as if there are any
other editors like Emacs!) should do it. There aren't any real code
changes, mostly cleanups (the bool type for one; some functions use
variables called virtual and new and delete I believe).
Chip
--
James Turner turnerjh@pattern.net UIN: 1102038
http://www.vuse.vanderbilt.edu/~turnerjh/
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST