可能重复:
我可以重新定义C++宏然后再定义它吗?
假设我有一些使用BLAH变量名称的代码.假设BLAH在许多标准头文件(定义为10)中是一个常见的预处理器定义,所以如果我的文件包含在其中任何一个之后,代码就会因为BLAH转换为10而中断; 因此,我必须#undef BLAH.但是其他标头也可能依赖于BLAH,所以我必须BLAH在标头完成后恢复到它的原始值.有可能做这样的事情:
#ifdef BLAH
#define BLAH_OLD BLAH
#undef BLAH
#endif
... code ...
// restore BLAH to 10
#ifdef BLAH_OLD
#define BLAH BLAH_OLD
#end
Run Code Online (Sandbox Code Playgroud)
?这当然不起作用,因为BLAH没有扩展到10.我尝试过做类似的事情
#define EXPAND_AGAIN(x) x
#define EXPAND(x) EXPAND_AGAIN(x)
#define BLAH_OLD EXPAND(BLAH)
Run Code Online (Sandbox Code Playgroud)
但这也不起作用,因为EXPAND是字面意义而不是扩展.我正在使用MSVC 2008/2010,但如果该解决方案也适用于大多数其他编译器,那将是可爱的.
我想写一个要使用的库,你只需要包含一个头文件.但是,如果您有多个源文件并在两者中都包含标头,则会出现多个定义错误,因为该标头都是在标头中声明和定义的.我认为在Boost中我看过只有头文件的库.他们是怎么做到的?
最近我尝试在自己的线程中放置一个窗口的消息循环,我想知道为什么它从未收到任何消息,但我已经知道Windows将消息发布到创建窗口的线程.如何在一个线程中创建一个窗口并导致另一个线程接收该窗口的消息?我已经看过PostThreadMessage函数,但我相信它还需要创建窗口的线程来监听消息,这正是我试图避免的,所以这个函数不是我需要的.
这似乎是一个常见的问题,我花了很多时间谷歌搜索答案,但我找不到一个.
在Visual C++中,可以通过执行操作链接到代码本身中的库#pragma comment (lib, "libname.lib").在g ++中有类似的东西吗?