__STDC_LIB_EXT1__ 在 gcc 和 clang 中的可用性

2023-12-24

由于快速谷歌搜索没有找到任何东西,我会尝试在这里询问(因为很多参与 gcc/clang 的人都在这里闲逛) - 的状态是什么__STDC_LIB_EXT1__在海湾合作委员会/铿锵?我们正在开发一个跨平台应用程序,我想使用一些安全边界检查功能<stdio.h>(奇迹般地可以在 Visual Studio 2017 上使用),但无法使用 Xcode 9.2 编译代码。我认为 Xcode 使用的 clang 版本可能已经过时,但 Ubuntu 上的 gcc 6.3.0 的行为是相同的。我正在尝试使用tmpnam_s http://en.cppreference.com/w/c/io/tmpnam具有以下示例:

#if defined(__STDC_LIB_EXT1__)
#define  __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#else
#error "__STDC_LIB_EXT1__ not defined"
#endif

int main(int argc, char** argv)
{
    char t[L_tmpnam_s]; 
    tmpnam_s(t, L_tmpnam_s);
    return 0;
}

但编译失败,宏未定义:

gcc -std=c11 test.c
test.c:5:2: error: #error "__STDC_LIB_EXT1__ not defined"
#error "__STDC_LIB_EXT1__ not defined"
^~~~~

是我做错了什么还是这个功能集支持很差?


整套“安全”功能_s后缀支持很差。微软编写了一组函数_s后缀并将其提交给 C 标准委员会进行标准化。该委员会进行了一些更改(可以说是出于必要),并创建了一份技术报告 TR 24731-1。 TR 的轻微修改版本作为可选附录 K(规范性)包含在 C11 标准 ISO/IEC 9899:2011 中。

你可以在答案中找到许多肮脏的细节您使用TR-24731“更安全”的功能吗? https://stackoverflow.com/q/372980/15168,尤其是在我的笔记中answer https://stackoverflow.com/a/373911/15168对于这个问题,尤其是标准 C 委员会文件的链接N1967 附件 K 的现场经验 — 边界检查接口 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm.

我不知道 N1967 提案的现状如何,但它的建议很能说明问题。 N1967 还包含支持附件 K / TR-24731-1 的库的链接 - 列表有限。

请注意,Microsoft 并未实现 C11 标准指定的库。它实现了与标准的近似值,但存在重大差异。如果任何其他系统已经实现了该标准,那么这一点就更重要了——但这些功能尚未以任何广泛接受的形式实现(因此,例如,GNU C 库不支持也不会支持它们)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

__STDC_LIB_EXT1__ 在 gcc 和 clang 中的可用性 的相关文章

随机推荐

  • onCreate 方法内的屏幕截图在 android 中不起作用

    我正在一个 Android 应用程序中工作 我想在重写的方法 onCreate 中捕获当前活动的屏幕 当我在重写的方法 onCreate 中编写用于捕获屏幕的代码时 位图返回 null 但是 当我在同一活动中单击按钮中调用相同的代码时 位图
  • 在Container中挂载目录并与Host共享

    我以为我理解了文档 但也许我没有 我的印象是 v HOST PATH CONTAINER PATH标志是双向的 如果容器中有文件或目录 它们将被镜像到主机上 这使我们即使在删除 docker 容器后也能保留目录和文件 在官方 MySQL d
  • statsmodels wls_prediction_std 的数学背景

    wls prediction std 返回拟合模型数据的标准差和置信区间 我需要知道如何从协方差矩阵计算置信区间 我已经尝试通过查看源代码来解决这个问题 但没能做到 我希望你们中的一些人可以通过写出 wls prediction std 背
  • Android 在 addTextChangedListener (edittext) 中的某些条件下禁用肯定按钮

    这是我的对话框代码 如果编辑文本中的文本大小大于 5 我想禁用肯定按钮 如果大小 private void myDialog String title AlertDialog Builder builder new AlertDialog
  • 归档日志文件时内存不足错误

    我在运行控制台作业时遇到问题 该作业运行并创建我在午夜存档的每日日志文件 这将创建一个第二天的空白日志文件和一个存档文件 其中名称中包含昨天的日期以及旧文件的内容 用于调试我可能遇到但直到第二天才知道的问题 然而 自从我启动 BOT 的工作
  • 更改默认的 Ruby 参数

    我想更改传递给 Ruby 函数的默认参数 例如 而不是每次都写 1 2 3 do stuff option gt my option 我想修改默认值以便我可以编写 1 2 3 do stuff 更改默认参数的最简单 最干净 最像 Ruby
  • 通过 ssh 密钥访问 GitHub 组织

    也许我是瞎子 但我找不到一种方法来访问通过 SSH 密钥授予我访问权限的组织 我知道直接连接到您自己的帐户很容易 但是我该如何通过组织来做到这一点呢 您帐户的个人 SSH 密钥可识别您的 GitHub 用户 如果组织授予您访问权限 则这是通
  • 行进立方体问题

    我目前正在编写一个程序来使用 C 和 Opengl 实现 Marching Cube 然而 我最好的参考仅来自http local wasp uwa edu au pbourke geometry polygonise http local
  • 在 Rcpp 中的另一个 cpp 文件中定义的函数中使用一个 cpp 文件中定义的函数

    我有一个名为的 C 函数add文件中定义add cpp 内容add cpp below include
  • Mysql暂时抑制唯一索引

    我有一个在两列上有唯一索引的表 准确地说是 id parent 和 sort order id id parent sort order some data other data more data 1 1 1 lorem ipsum lo
  • 如何在 VS Code for Markdown 中禁用 IntelliSense?

    我不想在 Visual Studio Code 中为 Markdown 文件提供单词补全功能 如何禁用它 理想情况下 仅适用于 Markdown 但在最坏的情况下 即使是全局切换也是好的 可以配置 VS Code 中的 IntelliSen
  • SQL Server 2008 R2 的百分位数聚合

    我正在使用 SQL Server 2008 R2 我需要计算每个组的百分位数 例如 SELECT id PCTL 0 9 x for the 90th percentile FROM my table GROUP BY id ORDER B
  • PhpStorm 显示/隐藏主菜单

    我错误地使用 视图 gt 外观 隐藏了 PhpStorm 的主菜单 未选中菜单 我尝试了很多关于如何再次显示主菜单的搜索 不久之后我找到了一个非常简单的方法 Press Double Shift用于到处搜索 现在搜索任何设置或您想要更改的任
  • AudioKit AKPlayer 无法回环到 setPosition 开头

    在 v4 中 如果您使用AKPlayer循环并使用setPositionAPI 玩家在设置的位置之间循环setPosition以及玩家的总持续时间 我需要的是从设置的位置开始setPositionAPI 并在循环发生时循环到开头 我不确定这
  • Mongoose 填充子文档数组

    抱歉 如果已经有人问过这个问题 我的搜索没有出现同样的情况 我有两个架构 如下所示 var experimentSchema new mongoose Schema name string elements type mongoose Sc
  • 使用 Firebase 通过聊天应用进行语音通话

    我正在尝试构建一个简单的聊天应用程序 但它需要与其他用户进行语音通话的功能 我将使用 Firebase 进行消息传递 Firebase 是否支持语音通话 我可以配置外部 SIP 如果你想创建语音通话或视频通话应用程序 也许你可以使用WebR
  • 有没有一种方法可以将复杂度为 O(n) 的矩阵相乘?

    I want to multiply two matrices but the triple loop has O n3 complexity Is there any algorithm in dynamic programming to
  • 为什么使用函数调用而不是变量地址来检测堆栈增长方向?

    我读到了对检测堆栈增长检测问题的不同回答 我了解到 在现代架构中 堆栈可能会随机增长 可能会在堆外创建 等等 然而 在这个经典的面试问题中 我想明白why人们使用函数调用而不是比较同一函数中的两个局部变量 我认为这样做一定有一些特殊的原因
  • 如何在c中一次从一串没有空格的字符中取出一个字符作为输入?

    假设 5181 2710 9900 0012 是一串数字 我需要一次从没有空格的数字串中取出一个数字作为输入来进行算术运算 所以 我写的是 int a 20 for int i 0 i lt 16 i scanf d a i 但它没有给我预
  • __STDC_LIB_EXT1__ 在 gcc 和 clang 中的可用性

    由于快速谷歌搜索没有找到任何东西 我会尝试在这里询问 因为很多参与 gcc clang 的人都在这里闲逛 的状态是什么 STDC LIB EXT1 在海湾合作委员会 铿锵 我们正在开发一个跨平台应用程序 我想使用一些安全边界检查功能