为什么C/C++很多内部函数由下划线开头?关于VS中的CRT_SECURE

2023-05-16

以下摘自compatibility


兼容性
通用 C运行时库 (UCRT) 支持实现 C++ 一致性所需的大多数 C 标准库。 它实现 C99 (ISO/IEC 9899:1999)库,但有一些例外情况:在 <th.>中定义的类型泛型宏,以及 <complex >中严格的类型兼容性。 UCRT 还实现了 POSIX (ISO/IEC 9945-1:1996,POSIX 系统应用程序编程接口) C 库的大型子集。 但是,它并不完全符合任何特定的 POSIX 标准。 UCRT 还实现了几个特定于 Microsoft 的函数和不属于标准的宏。

在 vcruntime`库中找到了特定于 Visual C++ 的 Microsoft 实现的函数。 其中的许多函数都供内部使用,用户代码无法调用这些函数。 记录了一些函数,以供调试和实现兼容性时使用。

C++ 标准将全局命名空间中以下划线开头的名称保留到实现中。 POSIX 函数和 Microsoft 特定的运行时库函数都在全局命名空间中,但不属于标准 C 运行时库。 这就是为什么这些函数的首选 Microsoft 实现具有前导下划线的原因。 为了便于移植,UCRT 还支持默认名称,但使用它们编译代码时,Microsoft C++ 编译器会发出弃用警告。 只会弃用默认名称,而不会弃用函数本身。 若要取消警告,在使用原始 POSIX 名称的代码中包含任何标头之前,请定义 _CRT_NONSTDC_NO_WARNINGS

由于误用参数和未检查缓冲区,标准 C 库中的某些函数具有不安全的使用情况历史记录。 这些函数通常是代码中出现的安全问题的来源。 Microsoft 创建了这些函数的一组更加安全的版本来验证参数用法。 当在运行时检测到问题时,它们将调用无效参数处理程序。 默认情况下,如果使用的函数具有更加安全的变体,Microsoft C++ 编译器会发出弃用警告。 将代码编译为C++时,可以将 _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 定义为1,以消除大多数警告。 此宏允许模板重载调用更安全的变体,同时保持可移植的源代码。 若要取消警告,在使用这些函数的代码中包含任何标头之前,请定义 _CRT_SECURE_NO_WARNINGS。 有关详细信息,请参阅 Security Features in the CRT。

除非文档中对特定函数另有注明,否则 UCRT 与 Windows API 可兼容。 Windows 应用商店或通用 Windows 平台(UWP)应用中不支持某些功能。 通用 Windows 平台应用中不支持的 CRT 函数中列出了这些函数。


答案显而易见,而且还有意外收获,终于知道为什么VS中不让用 scanf 等“旧函数”了 : CRT 中的安全功能

许多旧 CRT 函数具有更新、更安全的版本。 如果存在安全函数,则较旧的、安全性更低的版本将标记为已弃用,并且新版本具有_s(“安全”)后缀。
在此上下文中,“已弃用”仅表示不建议使用某个函数;而不表示计划从 CRT 中删除此函数。

安全函数不阻止或纠正安全性错误,而是在出现错误时捕获错误。 它们对错误条件进行附加检查,如果出现错误,它们将调用错误处理程序(请参阅参数验证)。

例如,strcpy 函数无法指明它所复制的字符串对于目标缓冲区是否太大。 但是,它的安全匹配项 strcpy_s 可将缓冲区大小作为参数,以便确定是否将发生缓冲区溢出。 如果您使用 strcpy_s 将 11 个字符复制到 10 字符缓冲区中,那么就是您做错了;strcpy_s 无法纠正您的错误,但它可检测到您的错误,并通过调用无效参数处理程序来告知您此情况。

消除弃用警告
可通过多种方式消除针对较旧的、安全性更低的函数的弃用警告。 最简单的方法是定义 _CRT_SECURE_NO_WARNINGS或使用警告杂注。 这将禁用弃用警告,但导致出现警告的安全问题仍存在。 更佳的做法是,将弃用警告保持启用状态并利用新的 CRT 安全功能。

在 C++ 中,执行此操作的最简单方法是使用安全模板重载,在许多情况下,它会通过将对已弃用函数的调用替换为对这些函数的新安全版本的调用来消除弃用警告。 例如,考虑此对 strcpy 的已弃用调用:

char szBuf[10];
strcpy(szBuf, "test"); // warning: deprecated

_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 定义为 1 可通过将 strcpy 调用更改为 strcpy_s(这将阻止缓冲区溢出)来消除警告。 有关详细信息,请参阅 Secure Template Overloads。

对于那些不带安全模板重载的已弃用的函数,你应考虑手动更新代码以使用安全版本。

弃用警告的另一个源(与安全性无关)为 POSIX 函数。 将 POSIX 函数名称替换为它们的标准等效项(例如,将 access 更改为_access),或通过定义 _CRT_NONSTDC_NO_WARNINGS 来禁用与 POSIX 相关的弃用警告。 有关详细信息,请参阅 兼容性。

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

为什么C/C++很多内部函数由下划线开头?关于VS中的CRT_SECURE 的相关文章

  • 阿里云Linux系统图形化界面

    https help aliyun com knowledge detail 41227 html
  • source devel/setup.bash bash: devel/setup.bash: No such file or directory解决方法

    看到网上一些解决方法是进入 bashrc把source opt ros kinetic setup bash这句话去掉之类的 xff0c 真是感到欲哭无泪 把这句话去掉只是让这个错误不再显示而已 xff0c 根本不能解决问题 根据报错信息很
  • 基于LQR的倒立摆控制——python代码——dlqr步骤推导

    推荐一个自动控制小车开源项目 xff1a 本文结合老王自动驾驶控制算法第五讲的离散LQR进行学习复盘 Inverted Pendulum Control PythonRobotics documentation dlqr原理 xff08 老
  • 【OpenMV小车——第1.2篇】OpenMV主控板的简介与入门使用

    前言 xff1a 视觉小车最重要的是视觉功能 xff0c 其实现方式主要有 xff1a Opencv 43 外置计算机摄像头 需要计算机作为上位机 Stm32 43 OV7670 较难 xff0c 大师级 OpenMV摄像头 较简单 xff
  • Windows 配置 C/C++ 开发环境

    文章目录 1 安装 MinGW w641 1 下载1 2 解压到合适的目录下1 3 添加到环境变量1 4 测试是否安装成功 2 安装 CMake2 1 下载2 2 解压到合适的目录下2 3 添加到环境变量2 4 测试是否安装成功 3 编译运
  • I.MX6ULL的SPI通信

    简述 SPI是串行外设接口 xff08 Serial Peripheral Interface xff09 的缩写 xff0c 相比于I2C最高400bps的传输速度 xff0c SPI每秒可以传输的数据可以高达几十M甚至上百Mbit 1
  • 信号量与互斥量的区别

    信号量 xff1a 那是多线程同步用的 xff0c 一个线程完成了某一个动作就通过信号告诉别的线程 xff0c 别的线程再进行某些动作 互斥量 xff1a 这是多线程互斥用的 xff0c 比如说 xff0c 一个线程占用了某一个资源 xff
  • C语言常用转义字符表

    C语言常用转义字符表 转义字符 xff1a 转义字符分为一般转义字符 八进制转义字符 十六进制转义字符 一般转义字符 xff1a 背诵 0 n 八进制转义字符 xff1a 141 是合法的 xff0c 前导的0是不能写的 十六进制转义字符
  • 2018年App测试流程及要点梳理

    先说说 xff0c 为什么要给大家梳理App测试流程和要点呢 xff1f 主要是缘于有太多同学咨询相关App测试的问题 xff0c 回答的次数多了 xff0c 就不想打字了 xff0c 还不如这样全部帮你们整理好 xff0c 希望各位看到的
  • 毕业设计--球上自平衡机器人

    目录 前言 一 机器人原理分析 二 控制器设计 三 程序部分 四 硬件清单 五 电路设计 六 结构设计 七 总结与展望 总结 展望 2021 8 18更新 xff1a 看到评论区很多人对这个机器人比较感兴趣 xff0c 把之前挖好的坑填一下
  • ROS入门之CmakeList.txt详讲

    本文为进来学习的总结 xff0c 记录了学习CmakeList txt文档的各个步骤 xff0c 适合从零开始理解CmakeList txt xff0c 可能存在错误之处 xff0c 望批评指正 0 Cmake的起源 为什么有CmakeLi
  • 2 如何给Gazebo中的仿真机械臂添加一个力传感器?

    1 你得有一个仿真机械臂 简单地说你首先的拥有一个能够在Gazebo当中使用的机械臂的URDF文件 xff0c 必须要包含visual collision和inertial三大标签 出于个人习惯 xff0c 这里直接使用UR官方提供的UR5
  • C#学习之事件的本质

    在注册事件时 xff0c 使用EventHandler委托 xff1b 摘要 表示将用于处理不具有事件数据的事件的方法 参数 sender 事件源 e 不包含事件数据的对象 public delegate void EventHandler
  • ..\OBJ\USART.axf: Error: L6218E: Undefined symbol I2C_CheckEvent (referred from oled_i2c.o).

    OBJ USART axf Error L6218E Undefined symbol I2C CheckEvent referred from oled i2c o OBJ USART axf Error L6218E Undefined
  • React 应用中的异步数据请求----fetch,以及fetch的优缺点

    React 应用中的异步数据请求 fetch 与Vue js一样 xff0c React官方也没有提供服务器端接口异步请求方案 xff1b 可以使用第三方的axios模块 xff0c 或者H5新增的原生技术 xff1a fetch 抓取 有
  • hmdb51数据集,视频+标签

    目录 视频下载链接 标签下载 hmdb介绍 其它 用于行为识别还需 帧标注 xff08 rawframe annotation xff09 视频标注 xff08 video annotation xff09 目录 视频下载链接 标签下载 h
  • vscode 连接服务器(Ubuntu系统),安装anaconda上运行深度学习代码

    目录 VSCODE的官网 Visual Studio Code Code Editing Redefined 1 安装 Romote SSH 2 添加服务器 3 进入服务器 4进入服务器文件 5 在Ubuntu上安装anconda xff0
  • nohub 和 & 在linux上不间断后台运行程序

    1 nohub xff08 没安装的要先安装 xff09 用途 xff1a 不挂断地运行命令 语法 xff1a nohup Command Arg amp 无论是否将 nohup 命令的输出重定向到终端 xff0c 输出都将附加到当前目录的
  • 《30天自制操作系统》:值得推荐的一本好书

    自己编写一个操作系统 xff0c 是许多程序员的梦想 也许有人曾经挑战过 xff0c 但因为太难而放弃了 其实你错了 xff0c 你的失败并不是因为编写操作系统太难 xff0c 而是因为没有人告诉你那其实是一件很简单的事 那么 xff0c
  • NTU RGB+D 120 划分训练集和测试集,生成标签文件。

    NTU RGB 43 D 120 总共有120类和114 480个样本 大小约为262G 包括 RGB视频分辨率为1920x1080 xff0c 深度图和IR xff08 红外 xff09 视频的分辨率均为512x424 xff0c 3D骨

随机推荐

  • 7z.001压缩包解压方法。(Window+Linux)

    之前遇到过的问题 xff1a Open ERROR Can not open the file as 7z archive 解决 xff1a 1 分卷文件需合并成一个7z压缩文件 1 1 如下所示是一个7z 结尾的文件 xff0c 对它的解
  • Linux 服务器上传下载文件到阿里网盘

    1 查看Linux系统架构 dpkg print architecture 2 下载安装 xff08 根据系统版本安装 xff09 2 1下载地址 https github com tickstep aliyunpan releases 2
  • CondaEnvException: Pip failed 或 Could not find a version that satisfies the requirement 问题

    1 错误实例 xff08 Could not find a version that satisfies the requirement imageio 61 61 2 27 0 xff09 2 解决方法 2 1 若对imageio的版本要
  • Linux中系统盘空间不足和显存没有释放问题

    1 系统盘空间不足 以下两个是可以直接删除 xff0c 不影响系统运行的目录 xff0c 所以首先直接删除 du sh root miniconda3 pkgs amp amp rm rf root miniconda3 pkgs cond
  • Ubuntu KCF 代码运行

    最近刚接触kcf xff0c 在Ubuntu上运行代码 xff0c 碰到一些问题 xff0c 借鉴了网上其他人的方法 xff0c 简单记录一下过程 KCF代码下载 KCF的代码可以去作者的网站去下载 xff1a http www robot
  • PADS学习笔记之绪论

    学习目的 在学校里的时候使用一直都是AD xff0c 现在即将毕业了 xff0c 来公司实习之后发现基本不用AD xff08 可能是怕收到律师函 xff09 xff0c 公司主要用的是PADS xff0c 某些项目也会用到cadence 虽
  • 软件工程中的框架

    什么是框架 框架 Framework 是构成一类特定软件可复用设计的一组相互协作的类 框架规定了你的应用的体系结构 它定义了整体结构 xff0c 类和对象的分割 xff0c 各部分的主要责任 xff0c 类和对象怎么协作 xff0c 以及控
  • Python argparse模块详解

    argparse是python用于解析命令行参数和选项的标准模块 xff0c 用于代替已经过时的optparse模块 官方文档中讲到的 xff0c 本文基本都提到了 xff0c 但只是简要记录 xff0c 如果需要深入理解 xff0c 可查
  • Linux下实现C语言的http请求实现

    该文件为转载文章 xff0c 作为学习和个人笔记使用 xff08 原文地址 xff09 https blog csdn net songfeihu0810232 article details 54892149 前言 Linux下的http
  • float a=1.0f在内存中的表示

    http zhidao baidu com question 314282772 html 3f800000H 61 0 01111111 00000000000000000000000B xff08 注意我分成了三段 xff09 符点型数
  • 图片返回状态码403

    在public index html 头部加一行代码 在这里插入图片描述 https img blog csdnimg cn 20200323202225328 png x oss process 61 image watermark ty
  • ROS学习笔记_01:工作空间及功能包

    1 ROS安装 xff1a 每个ROS版本对应一个Ubuntu版本 UBUNTUROSEnd of time14 04 LTSindigo IglooApril xff0c 201916 04 LTSKinetic KameApril xf
  • ROS学习笔记_02: Topic 和 msg

    1 ROS通信方式 ROS有四种通信方式 xff1a Topic 主题Service 服务Parameter Service 参数服务器Actionlib 动作库 其中 xff0c topic是最常用的一种 2 Topic Topic xf
  • Ubuntu20 + KVM虚拟机

    1 命令汇总 span class token comment 查看一下linux是32位还是64位 xff1a span span class token function file span bin ls span class toke
  • 基于PX4、树莓派和Mocap(Optitrack)的室内飞行环境搭建

    基于PX4 树莓派和Mocap Optitrack的室内飞行环境搭建 前言系统结构和原理软硬件要求Mocap环境设置主机 gt 工作站设置wifiMotive设置 Mocap gt Pixhawk硬件要求 xff1a 软件要求 xff1a
  • STL map的基本用法

    begin 返回指向map头部的迭代器 clear 删除所有元素 count 返回指定元素出现的次数 empty 如果map为空则返回true end 返回指向map末尾的迭代器 equal range 返回特殊条目的迭代器对 erase
  • 自己动手写操作系统(高清图书+源代码)分享

    很喜欢 自己动手写操作系统 这本书 xff0c 但现在这本书已经绝版了 在这里分享一下这本书的高清电子版和源代码 xff0c 感兴趣的人可以下载一下 链接 xff1a https pan baidu com s 1lPXg Airu2NFj
  • 四旋翼飞行器控制pid学习笔记

    PID控制学习笔记 凡事必躬亲 xff0c 身体而力行 xff0c 化理论为实践 xff0c 方得始终 研究PID xff0c 首先应当把PID拆解开来 xff0c 便是P xff08 比例控制 xff09 I xff08 积分控制 xff
  • Ubuntu使用终端命令安装谷歌Chrome浏览器

    sudo wget http www linuxidc com files repo google chrome list P etc apt sources list d wget q O https dl google com linu
  • 为什么C/C++很多内部函数由下划线开头?关于VS中的CRT_SECURE

    以下摘自compatibility 兼容性 通用 C运行时库 UCRT 支持实现 C 43 43 一致性所需的大多数 C 标准库 它实现 C99 xff08 ISO IEC 9899 1999 xff09 库 xff0c 但有一些例外情况