On Tue, 21 Apr 1998, James Turner wrote: >George <greerga@CIRCLEMUD.ORG> writes: > >> But without going to C++, 'getName(ch) = NULL;' would not work as it does >> now. You'd either have to keep the macro, make a setName(), or use the >> full structure. > >That kind of assignment _shouldn't_ work. Lvalues are a nice effect >of macros, but in general, using as such isn't the safest. I believe you have worked in C++ too long. You validate what you're writing, before you write it. >of? Can it be used on objects, rooms? Also, other macros, such as >GET_ALIASES(), work only on players and will segfault on mobs -- yet It won't segfault on mobs. That's what 'dummy_mob' is for. >no checks are made. Yes, it would be best to be careful when you use Actually, the new CircleMUD macro will check for invalid player_special use, not because it crashes (it doesn't), but because you can get strange results from doing it. #define CHECK_PLAYER_SPECIAL(ch, var) \ (((ch)->player_specials == &dummy_mob) ? \ (log("SYSERR: Mob using '"#var"' at %s:%d.", \ __FILE__, __LINE__), (var)) : (var)) Then a small change to the player specials: -#define PRF_FLAGS(ch) ((ch)->player_specials->saved.pref) +#define PRF_FLAGS(ch) CHECK_PLAYER_SPECIAL((ch), \ ((ch)->player_specials->saved.pref)) Simple change, instant checking. The CHECK_PLAYER_SPECIAL couldn't be done with a function without ugly workarounds. >Generally speaking, the more involved a piece of code is, the harder >it is to turn into a macro. More than that, the more involved it is, >the less correct it is to use a macro. CAN_SEE is a great example. >Further, if you later chose to add checks to the code, or increase >functionality, you wouldn't have any trouble doing so. I didn't have any problem changing the checks in bpl13 to close a couple loopholes in the code. >assert() is a great way to catch errors in debug builds and not lose >efficiency in production builds. CircleMUD already uses it, but there aren't 'debug' and 'production'. -- George Greer - Me@Null.net | Genius may have its limitations, but stupidity http://www.van.ml.org/~greerga | is not thus handicapped. -- Elbert Hubbard +------------------------------------------------------------+ | 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