检测编译时是否存在长长
detect if long long is present at compile time
boost.config 在包含<limits.h>
后检查内容 - 如果定义了ULLONG_MAX
或ULONG_LONG_MAX
或ULONGLONG_MAX
(它也执行每个编译器检查,如 if _MSC_VER >= 1400
)。
但是如果我-std=c++98 -pedantic-errors
传递给 gcc,即使定义了这些东西,我也无法真正使用long long
。我可以检查__cplusplus
它是否等于或大于201103
但这与编译器标志无关 - 我可以让它等于 1997 并且仍然可以使用 long long
- 取决于我给出的标志。
那么有没有办法真正检测我是否可以使用long long
?
我会按照
检查__cplusplus > 201103
的思路进行操作,只是告诉人们他们需要使用std=c++11
,或者如果他们想将您的库与long long
一起使用,这是等效的。这是直接而简单的方法。
在预处理器检查 boost 后,我最终抑制了警告,因此-pedantic-errors
没有抱怨:
#include <climits>
#if defined(_MSC_EXTENSIONS) || (defined(_MSC_VER) && (_MSC_VER >= 1400))
#define MY_LIBRARY_HAS_DETECTED_LONG_LONG
#elif (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))
#define MY_LIBRARY_HAS_DETECTED_LONG_LONG
#endif
#ifdef MY_LIBRARY_HAS_DETECTED_LONG_LONG
#if defined(__GNUC__) && !defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wlong-long"
#endif
// my overloads using long long
#if defined(__GNUC__) && !defined(__clang__)
#pragma GCC diagnostic pop
#endif
#endif // MY_LIBRARY_HAS_DETECTED_LONG_LONG
相关文章:
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 有了gcc,是否可以链接库,但前提是它存在
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 如何检查QList中是否存在值
- 根据某个函数是否存在启用模板
- 地图计数确实很重要,或者只是检查是否存在
- C++中是否存在 std::conditional 的懒惰等价物?
- 无论如何,我可以确定构造函数是否存在吗?
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 堆分配的对象是否存在永不为空的唯一所有者?
- 扩展类中的可选 vir 函数,测试它在运行时是否存在
- 模板化检查是否存在带有参数列表的类成员函数?
- 是否存在包含负号的isdigit函数(过载)
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 检查编译时是否存在静态函数
- 向量是否存在行主要形式?
- 检查 TinyXML 中的元素是否存在
- 检测是否存在具有 C++17 的类成员
- 虚拟继承中是否存在多重继承?
- 我遇到了这个代码片段,不明白. 它递归检查 C++ 字符串中是否存在大写字符