所以我有一个可以在Windows,Linux和Unix的一些变体上很好编译的应用程序。我最近遇到麻烦时决定将其移植到OSX。
我有一个看起来像这样的模板:
template<int (&F)(int)>
int safe_ctype(unsigned char c) { return F(c); }
这个想法是防止给定
0x7f
以上的输入值时,符号扩展不会使某些实现崩溃。通常这样使用:safe_ctype<std::isspace>(ch);
不幸的是,这在OSX上不起作用(使用gcc 4.2)。该错误与
std::isspace
没有外部链接有关,因此不适用于模板。事实证明,在OSX上,ctype.h
header 具有所有功能(通过宏)标记为static inline
。这是我的问题:
C++(在这种情况下,是从C继承的部分)标准库中的函数的任何相关标准是否允许其没有外部链接?
编辑:
我已经收到苹果的回音。显然,他们有一个宏来控制此行为。定义
_DONT_USE_CTYPE_INLINE_
可以防止ctype函数是静态内联的。 最佳答案
C++ 03§17.4.2.2/1说:
在C中也是如此:C99§7.1.2/6说:
关于c++ - 是否要求c++标准库中的所有功能都具有外部链接?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3571771/