Saturday, August 11, 2012

Conditional Inclusion in ANSI C

Let us assume that you have a program that will run on multiple platforms. For each platform you have an API which defines the functions that you will call in your program.

Example Scenario:
Your platforms are Windows, Unix, BSD and Mac. The headers for the platform specific operations are:
-Windows: windows_api.h
-Unix: unix_api.h
-BSD: bsd_api.h
-Mac: mac_api.h

Here's an example on how to implement conditional inclusion for this case:
#define PLATFORM_WINDOWS 0
#define PLATFORM_UNIX    1
#define PLATFROM_BSD     2
#define PLATFORM_MAC     3

/*Defines the system as UNIX*/
#define SYSTEM PLATFORM_UNIX

#if SYSTEM == PLATFORM_WINDOWS
    /*Uses the Windows platform API*/
    #include"windows_api.h"
    #define Shutdown()         WinQuit();
    #define ShowMessage(s)     WinShowMsg(s)
#elif SYSTEM == PLATFORM_UNIX
    /*Uses the Unix platform API*/
    #include"unix_api.h"
    #define Shutdown()         XQuit();
    #define ShowMessage(s)     XShowMsg();
#elif SYSTEM == PLATFORM_BSD
    /*Uses the BSD platform API*/
    #include"bsd_api.h"
    #define Shutdown()         BsdQuit();
    #define ShowMessage(s)     BsdShowMsg();
#elif SYSTEM == PLATFROM_MAC
    /*Uses the MAC platform API*/
    #include"mac_api.h"
    #define Shutdown()         MacQuit();
    #define ShowMessage(s)     MacShowMsg();
#else
    /*Triggers a compilation error*/
    #error Unknown platform
#endif

int main(void)
{
    /*The functions will use the UNIX API*/
    ShowMessage("Hello world!");
    ShutDown();
    return 0;
}

No comments:

Post a Comment

Got a question regarding something in the article? Leave me a comment and I will get back at you as soon as I can!

Related Posts Plugin for WordPress, Blogger...
Recommended Post Slide Out For Blogger