Re: send_to_charf, etc

From: Erwin S. Andreasen (erwin@PIP.DKNET.DK)
Date: 12/09/97


On Mon, 8 Dec 1997, Akuma/Chris Baggett/DOOMer wrote:


> ok, in my process of moving to C++,
> i created a printf() member function in class/struct char_data
> char_data::printf()
> which is just like printf.
> so I can do
> ch->printf("string %s %d", anotherstring, aninteger);
> well, what i've done
> with the
> ch->print() was use
> send_to_char() as a macro like so
>
> #define send_to_char(messg, ch) (ch)->print(messg)
>
> I was wondering if it was possible to do that with send_to_charf
> ie
> #define send_to_charf(ch, messg) (ch)->printf(messg)
> and possibly it would accept messg as all the excess pointers and stuff
>
> send_to_charf(ch, "messg %s %d %d", string, number, number);
> would be changed in the preprocessor to
> ch->printf("messg %s %d %d", string, number, number);
>
> is this possible? this is just to save
> my future coders trouble in trying to understand what i've
> done to CircleMUD.

If you are going to use C++, use C++ ! Hiding what you've done using
macros is a terrible idea. Get out perl, and subtitute all ocurrance of
send_to_char with ch->print. This is not too hard with some regular
expression :)

Anyway, there are two ways if you absolutely want to do this.

1 - somewhat harder. #define the macro as:

#define send_to_charf(ch,args) (ch)->printf args

You will have to call this as:

send_to_charf(ch, ("Hello, I must be %s", s));

Note the extra parens around the extra args!


2 - gcc extension of variable arguments in a macro:

#define send_to_charf(ch, format, args...) (ch)->printf(format, ##args)

This is described in "info gcc".


 =============================================================================
Erwin Andreasen   Herlev, Denmark <erwin@pip.dknet.dk>  UNIX System Programmer
<URL:http://www.abandoned.org/drylock/>     <*>         (not speaking for) DDE
 =============================================================================


     +------------------------------------------------------------+
     | 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/08/00 PST