Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

Void

Macro help - Pasting a #

This topic is 6440 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi, Can anyone get a macro to be able to output a # character like so #define MacroName(exp) { #if .. } // { #if .. to be pasted

Share this post


Link to post
Share on other sites
Advertisement
quote:
Original post by Void
like so

#define MacroName(exp) { #if .. } // { #if .. to be pasted


It doesn''t make any sense.
Each preprocessor directive must be on the new line - and #define produce just one line.

By the way...

from MSDN:
"Preprocessor lines are recognized and carried out before macro expansion. Therefore, if a macro expands into something that looks like a preprocessor command, that command is not recognized by the preprocessor."

Share this post


Link to post
Share on other sites
Preprocessor macros can be expanded to multiple lines, ex.

#define LIMIT(x, y) if(x > y) \
x = y; \
else if(x < -y) \
x = -y

But of course this is only for readabiliy by the user, the line could as well go

#define LIMIT(x, y) if(x > y) x = y; else if(x < -y) x = -y

Anyway, it would be great it something like this would be possible:

#define ENTER(x) #ifdef CURRENTFUNCTION \
#undef CURRENTFUNCTION \
#endif \
#define CURRENTFUNCTION "x"

#define LEAVE #ifdef CURRENTFUNCTION \
#undef CURRENTFUNCTION

#define ERROR(x) printf("%s(%i): %s - Error: %s", __FILE__, __LINE_, CURRENTFUNCTION, x)

Would be a shame if using preprocessor commands in macros wouldn''t be possible. I know it''s a lot of work to archive this by either implementing a very good preprocessor or creating a multi-pass one. Anyway, this should either be stated in the language commission papers.

-Markus-

Share this post


Link to post
Share on other sites
quote:
Original post by Cygon

Preprocessor macros can be expanded to multiple lines, ex.

#define LIMIT(x, y) if(x > y) \
x = y; \
else if(x < -y) \
x = -y



Wrong.
Preprocessor macros always expand to a single line.
Lines containing preprocessor directives can be continued by immediately preceding the end-of-line marker with a backslash (\).
But of course this is only for readabiliy by the user...
(because actually it''s still just one line).

quote:
Original post by Cygon

Would be a shame if using preprocessor commands in macros wouldn''t be possible. I know it''s a lot of work to archive this by either implementing a very good preprocessor or creating a multi-pass one.


And how it will know when to stop???

P.S.
Once I have compiled one file from the third-party code with macro expansion.
And I got a single-line functions (created by macros) with >30000 characters in the line.

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!