如何查明这个预处理器宏是否存在?
我想知道如何确定预处理器宏 __PRETTY_FUNCTION__
是否可以与给定的编译器一起使用(因为它应该是非标准的)。如何在头文件中检查这一点?我想做的是这样的:
#ifndef __PRETTY_FUNCTION__
#define __PRETTY_FUNCTION__ __func__
#endif
但是,我猜发生的情况是预处理器为每个函数定义了宏,所以我想知道 __PRETTY_FUNCTION__
是否有任何意义(与 __FILE__ 不同)
或 __LINE__
) 在函数外部。这是真的还是我可以使用上面的代码?如果没有,我该如何检查?
编辑:我试过了。 __PRETTY_FUNCTION__
在函数外部未定义(我没有在类内部检查)。所以必须有另一种方式。
EDIT2:实际上一个简单的黑客就是这样做:):
void Dummy()
{
#ifndef __PRETTY_FUNCTION__
#define __PRETTY_FUNCTION__ __func__
#endif
}
另一种方法是按照其他人的建议检查编译器。
I want to know how to find out if the preprocessor macro __PRETTY_FUNCTION__
can be used with a given compiler (As it is supposed to be non-standard). How do I check this in a header file? What I want to do is something like:
#ifndef __PRETTY_FUNCTION__
#define __PRETTY_FUNCTION__ __func__
#endif
But, I'm guessing what happens is the preprocessor defines the macro in place for each function so I wonder whether there's any meaning to __PRETTY_FUNCTION__
(Unlike __FILE__
or __LINE__
) outside a function. Is this true or can I just use the code above? If not, how do I check for it?
EDIT: I tried it. __PRETTY_FUNCTION__
is undefined outside a function (I didn't check inside a class). So there has to be another way.
EDIT2: Actually a simple hack would be to do this :):
void Dummy()
{
#ifndef __PRETTY_FUNCTION__
#define __PRETTY_FUNCTION__ __func__
#endif
}
The other method is to check for compiler as was suggested by others.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可能必须知道您正在使用哪个编译器。对于 GCC(GNU 编译器集合),您可能会测试:
如果您知道哪个编译器引入了该功能,并且您的代码面临使用旧版本编译的危险,则可以检查编译器版本。
GCC(4.4.1)手册说:
You probably have to know which compiler you're using. For GCC (the GNU Compiler Collection), you'd probably test:
You might check the compiler version if you know which one introduced the feature and you are in any danger of having your code compiled with an older version.
The GCC (4.4.1) manual says: