如何检查该函数在编译器上是不是可用?

Posted

技术标签:

【中文标题】如何检查该函数在编译器上是不是可用?【英文标题】:How to check if the function is available on compiler?如何检查该函数在编译器上是否可用? 【发布时间】:2012-07-01 03:43:15 【问题描述】:

如果编译器内置函数,有没有办法在编译时检测? 例如,像这样:

#ifndef ITOA_FUNCTION
#define itoa myitoaimplementation
#endif

提前致谢。

【问题讨论】:

我很确定预处理器在函数存在之前运行。 【参考方案1】:

不,没有任何直接的东西。您能做的最好的事情就是从平台、编译器版本等方面进行猜测。

在大多数情况下,我更喜欢另外两条路线之一。一种是只给你自己的实现一个不同于编译器使用的名称,并且无论编译器是否提供类似的东西,都始终使用它。

第二个是将你这样的函数实现放到一个单独的文件中,并处理makefile中的存在/不存在,只是决定是否将该文件包含在项目中。

【讨论】:

我已经评论了你的回答here。我想知道你的意见。 @Nawaz:是的——我真的需要完全重写那个答案。其中一些我没有仔细阅读代码,并且在一些地方我引入了不准确性,试图防止它变得过于复杂。我想得越多,我就越认为分析现有代码可能是错误的方法——我可能应该专门编写一些代码来说明我想要表达的观点。 感谢您的回复。 :-) 当你重写你的答案时请告诉我。我会看到和学习​​的东西。毕竟,SFINAE 是一个不太容易的话题。

以上是关于如何检查该函数在编译器上是不是可用?的主要内容,如果未能解决你的问题,请参考以下文章

java中如何检测本机指定的UDP服务端口是不是被占用?并且自动分配一个可用udp端口;

如何检查 Matlab 编译器运行时 (MCR) 在我的电脑上是不是正常工作?

如何检查程序是不是使用调试符号编译? [复制]

如何检查所有代码路径是不是返回值

如何在运行应用程序的系统上检查所需的 Windows API 功能是不是可用?

检查应用程序是不是在 Android Market 上可用