• Advertisement
Sign in to follow this  

Need help understanding odd C++ semantic

This topic is 1797 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, I have a basic understanding of C++, but when I examine real-world code I still encounter lots of confusing bits and pieces.  For example, this class declaration from the Ogre 3D source:

 

class _OgreExport Root : public Singleton<Root>

{

...

 

What is _OgreExport?

 

Thanks!

Share this post


Link to post
Share on other sites
Advertisement

_OgreExport is probably some weird #define the Ogre team made.

 

 

Yep, it is.  You can see it in action here.  That is where they defined it.

 

 

Basically in C++ there is something called the preprocessor, it's what deals with all the lines that start with # like #include or #define.  At the simplest level, it replaces the Macro with the defined value.

 

In this case, it's to handle the various platforms.  For example, for Android:

 

204 #if OGRE_PLATFORM == OGRE_PLATFORM_ANDROID
205 # define _OgreExport
 
It has no value.  Meaning that when compiled for Android, the value _OgreExport will be replaced with an empty value.
 
While later on down, you can see if Ogre is being compiled as a DLL, it gets a different value:
156 # else
157 # if defined( OGRE_NONCLIENT_BUILD )
158 # define _OgreExport __declspec( dllexport )
159 # else
 
In this case, your code to the compiler will appear as:
 
class __declspec( dllexport) Root: public Sin.....
 
 
Make sense?

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement