我有一个#define映射标识符(函数名称)到这样的新名称:
#define A doStuff
这部分我无能为力,我必须访问“ A”,因为实际的标识符(此处为doStuff)可能会更改(并且这不在我的控制之下)。现在,所引用的符号(doStuff)可能存在或不存在,我想在前一种情况下调用该函数。对于简单的函数名,我可以轻松地对其进行测试:
#ifdef doStuff
doStuff();
#endif
但是,受限于宏名称,天真地做同样的事情是:
#ifdef A
A();
#endif
由于定义了名称“ A”,而未定义“ doStuff”,因此会出现错误。我想检查宏解析成的名称的存在,本质上是:
#if defined(the-content-of-A)
但我无法使其工作。
所以我的问题是:有没有办法检查是否定义了由宏表示的标识符?如果是,该怎么办?如果不是,是否有一种通用的解决方法?
尽管我认为这不是C或C ++特定的,但我想指出的是,我需要一些可用于C ++中定义的“ extern C”标识符的东西。该解决方案必须独立于平台。
对不起,如果以前问过这个问题,无论是在google还是在SO上,我都找不到。
定义标识符(函数,对象)是在预处理之后发生的事情,因此您无法在预处理期间确定是否稍后定义函数。
解决方法是,您始终在函数旁边定义一个宏:
void A();
#define A_SUPPLIED
然后对此进行测试:
#ifdef A_SUPPLIED
...
#endif
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句