Search code examples
cpredefined-macro

How to backup #define macro value in C?


I want to backup macro value like below.

g++ ... -D_XOPEN_SOURCE=600 current _XOPEN_SOURCE value is 600

// xxx.h
#define _XOPEN_SOURCE 700 // redefine
#ifdef _XOPEN_SOURCE // 600
#define _XOPEN_SOURCE_BACK _XOPEN_SOURCE 
#undef _XOPEN_SOURCE // removed
#endif

#include "xxx.h" // changed to 700
// _XOPEN_SOURCE_BAKC will be changed to 700
#ifdef _XOPEN_SOURCE_BACK
#undef _XOPEN_SOURCE // removed
#define _XOPEN_SOURCE _XOPEN_SOURCE_BACK 
#endif

But as you know the _XOPEN_SOURCE_BACK value will be removed when #undef _XOPEN_SOURCE Is there any solution to store _XOPEN_SOURCE value using macro?

How to backup #define macro value in C?


Solution

  • Maybe you can use an enum (a real constant known at compile time):

    #include <stdio.h>
    
    #define _XOPEN_SOURCE 600
    
    enum { _XOPEN_SOURCE_BACK =
    #ifdef _XOPEN_SOURCE // 600
        _XOPEN_SOURCE
    #undef _XOPEN_SOURCE // removed
    #else
        0
    #endif
    };
    
    #define _XOPEN_SOURCE _XOPEN_SOURCE_BACK // redefine
    
    int main(void)
    {
        printf("%d\n", _XOPEN_SOURCE);
        return 0;
    }
    

    Output:

    600