Jump to content

  • Log In with Google      Sign In   
  • Create Account

Store Preprocessor Constants Value then 'overwrite' through undef/define


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 gretty   Members   -  Reputation: 212

Like
0Likes
Like

Posted 19 November 2012 - 11:42 PM

Hello

I am trying to store a Preprocessor Constant's value then 'overwrite' it.

My Problem: The code below attempts to store a preprocessor constant's value in variable 'A' then the code undefines that variable then redefines it so it has a new value. The problem is that variable 'A' has the newly defined value and not the old one, if that makes sense. Can I store a Preprocessor Constants value and not its reference(Which is what seems like is happening)?

	 #ifdef CUSTOM_EVENT_CALLBACK_DEFINED
	  #define SUB_CUSTOM_EVENT_CALLBACK_DEFINED CUSTOM_EVENT_CALLBACK_DEFINED
	  #undef CUSTOM_EVENT_CALLBACK_DEFINED
	#endif
	#define CUSTOM_EVENT_CALLBACK_DEFINED "def"
  
	int main()
	{
		printf(CUSTOM_EVENT_CALLBACK_DEFINED);	 // prints out "def".
		printf("\n");
		printf(SUB_CUSTOM_EVENT_CALLBACK_DEFINED); // prints out "def". I was hoping this would be "abc"
		printf("\n");
	  
		system("PAUSE");
		return 0;
	}
	// Usage: where the function def is a callback function for a window in a civil engineering program that runs ontop of windows
	int def(int id, int cmd, int type)
	{
		#ifdef SUB_CUSTOM_EVENT_CALLBACK_DEFINED
		  SUB_CUSTOM_EVENT_CALLBACK_DEFINED(id, cmd, type);
		#endif
	  
		// perform my custom code here
	}

Edited by gretty, 19 November 2012 - 11:43 PM.


Sponsor:

#2 cardinal   Members   -  Reputation: 888

Like
0Likes
Like

Posted 20 November 2012 - 12:20 AM

Ewwww, scary.

Not sure why you're trying to do this, but:

Nested macros themselves are replaced, and since CUSTOM_EVENT_CALLBACK_DEFINED is redefined before main is compiled, SUB_CUSTOM_EVENT_CALLBACK_DEFINED is swapped with CUSTOM_EVENT_CALLBACK_DEFINED, which is redefined as "def".

The following would work, but again, not sure why you'd ever do this.
[source lang="cpp"]int main(){ printf(CUSTOM_EVENT_CALLBACK_DEFINED); // prints out "def". printf("\n"); #undef CUSTOM_EVENT_CALLBACK_DEFINED#define CUSTOM_EVENT_CALLBACK_DEFINED "abc" printf(SUB_CUSTOM_EVENT_CALLBACK_DEFINED); // prints out "def". I was h...}[/source]

#3 gretty   Members   -  Reputation: 212

Like
0Likes
Like

Posted 20 November 2012 - 12:28 AM

Its usage is to achieve a form of virtual/polymorphic functions. I am coding in 4dm which is very similar to C except I have no structs and CANNOT have code that is outside main or other functions and obviously has no classes aswell.

The idea is to allow users to continually redefine a custom function but still call the base custom function, ie, add some custom functionality to a function then call the base version of the function - I think thats polymorphism.

#4 frob   Moderators   -  Reputation: 21475

Like
0Likes
Like

Posted 20 November 2012 - 12:53 AM

Its usage is to achieve a form of virtual/polymorphic functions. I am coding in 4dm which is very similar to C except I have no structs and CANNOT have code that is outside main or other functions and obviously has no classes aswell.

I hope they're paying you well. Sounds like a nightmare. :-/

With no functions other than main, you're probably going to need to use a bunch of goto statements and other conditional/unconditional jumps to create your own version of functions, followed by jump tables to handle your custom functions and base functions.
Check out my personal indie blog at bryanwagstaff.com.

#5 gretty   Members   -  Reputation: 212

Like
0Likes
Like

Posted 20 November 2012 - 03:51 PM

Oh, we have functions, sorry I might have not explained it properly.

We have functions and main. But you cant have global variables or any code outside of a function. Its C lite I guess, no structs, no pointers, 3 primatives(Text: a C++ string so no dealing with char arrays which is good, Integer and Real), then higher level variables like Super, Polygon, Segments, etc.

But not having structs is a pain in the butt. But its alot of fun to code for 12d Model aswell. Its very geometric; working with arcs, spirals, polygons etc. to assist in producing civil projects (roads, dams, etc.).

At the end of the day I'm trying to find an elegant method where I can redefine a custom library function but still call that previous function within the newly defined function(if that makes sense) so I guess I am trying to push the language to have virtualisation when it never was designed that way, but I'm impatient and persistant so I keep trying :P




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS