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?
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