如何在C中备份#define宏值?

li9yvcax  于 2023-08-03  发布在  其他
关注(0)|答案(2)|浏览(107)

我想备份宏值如下。
g++... -D_XOPEN_SOURCE=600当前_XOPEN_SOURCE值为600

// xxx.h
#define _XOPEN_SOURCE 700 // redefine

个字符
但是正如你所知道的,当#undef _XOPEN_SOURCE时,_XOPEN_SOURCE_BACK值将被删除。
如何在C中备份#define宏值?

cmssoen2

cmssoen21#

在标准C中没有办法这样做,但gcc有一个扩展:

#pragma push_macro("_XOPEN_SOURCE")
 #undef _XOPEN_SOURCE

 ...

 #pragma pop_macro("_XOPEN_SOURCE")

字符串

rekjcdws

rekjcdws2#

也许你可以使用一个enum(一个在编译时已知的真实的常量):

#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;
}

字符串
输出量:

600

相关问题