gpt4 book ai didi

c++ - c++标准库中的所有函数都需要有外部链接吗?

转载 作者:可可西里 更新时间:2023-11-01 15:39:54 27 4
gpt4 key购买 nike

所以我有一个应用程序可以在 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 继承的部分)没有外部链接?

编辑:

我收到了 apple 的回复。显然他们有一个宏来控制这种行为。定义 _DONT_USE_CTYPE_INLINE_ 可防止 ctype 函数成为静态内联。

最佳答案

C++03 §17.4.2.2/1 说:

Entities in the C++ Standard Library have external linkage.

在 C 中也是如此:C99 §7.1.2/6 说:

Any declaration of a library function shall have external linkage.

关于c++ - c++标准库中的所有函数都需要有外部链接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3571771/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com