Visual C++ 2005 中的 CRT 功能
更新:2007 年 11 月
本主题包含 Visual C++ 2005 中 CRT 的新增功能的列表。
CRT
重大更改
新增功能
添加了若干函数的安全版本。这些函数以更好的方式处理错误,并强制对缓冲区实施更严格的控制,以帮助避免常见的安全缺陷。新的安全版本由 _s 后缀标识。
现有安全性较低的许多函数版本已被否决。若要禁用否决警告,请定义 _CRT_SECURE_NO_WARNINGS。有关更多信息,请参见 Security-Enhanced Versions of CRT Functions。
许多现有函数现在会验证其参数,并在传递了无效参数时调用无效参数处理程序。有关更多信息,请参见各个函数参考和 Parameter Validation 主题。
现在,许多现有函数在过去没有设置 errno 的地方对其进行了设置。有关特定的 errno 信息,请参见各个函数参考。
添加了具有 integer 类型的 typedef errno_t。每当函数返回类型或参数处理来自 errno 的错误代码时,就会使用 errno_t。errno_t 替换 errcode。
与区域设置相关的函数现在有了新的版本,这些版本将区域设置作为参数,而不是使用当前的区域设置。这些新的函数具有 _l 后缀。添加了若干新函数,以使用区域设置对象。新的函数包括 _get_current_locale、_create_locale 和 _free_locale。有关更多信息,请参见各个函数参考。
添加了新函数,以支持对文件句柄的锁定和取消锁定。有关更多信息,请参见 _lock_file 和 _unlock_file。
_spawn 系列函数不会像在早期版本中那样,在成功时将 errno 重置为零。有关更多信息,请参见 _spawn, _wspawn Functions。
提供了可用于指定参数的使用顺序的 printf 系列函数版本。请参见 printf_p Positional Parameters、_cprintf_p, _cprintf_p_l, _cwprintf_p, _cwprintf_p_l、_printf_p, _printf_p_l, _wprintf_p, _wprintf_p_l、_sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l、_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l、_vprintf_p, _vprintf_p_l, _vwprintf_p, _vwprintf_p_l、_vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l 和 _vfprintf_p, _vfprintf_p_l, _vfwprintf_p, _vfwprintf_p_l。
现在支持 Unicode 文本格式。函数 _open 支持 _O_TEXTW、_O_UTF8 和 _O_UTF16 属性。fopen 函数支持指定 Unicode 格式的“ccs=ENCODING”方法。有关更多信息,请参见 _open, _wopen、fopen, _wfopen 和 fopen_s, _wfopen_s。
现在提供了一个用托管代码 (MSIL) 生成的 CRT 库的新版本,可在用 /clr(公共语言运行库编译) 选项进行编译时使用。有关更多信息,请参见 C Run-Time Libraries。
_fileinfo 已被移除。
time_t 的默认大小现在为 64 位,这样就可以将 time_t 和几个时间函数的范围扩展到 3000 年。请参见时间管理和各个时间函数。
CRT 现在支持按每个线程设置区域设置。添加了 _configthreadlocale 函数以支持此功能。
添加了 _statusfp2 和 __control87_2 函数,以允许对 x87 和 SSE2 浮点处理器上的浮点控制字的进行访问和控制。
添加了 _mkgmtime 和 _mkgmtime64 函数,以支持将时间 (struct tm) 转换为格林尼治标准时间 (GMT)。
对 swprintf 和 vswprintf 进行了更改以更好地符合标准。有关更多信息,请参见sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l。
新的头文件 INTRIN.H 提供了某些内部函数的原型。
fopen 函数现在具有一个 N 属性。
_open 函数现在具有一个 _O_NOINHERIT 属性。
溢出时,atoi 函数现在返回 INT_MAX 并将 errno 设置为 ERANGE。早期版本中未定义溢出行为。
printf 系列函数支持根据 ANSI C99 标准,使用格式类型说明符 %a 和 %A 实现的十六进制浮点输出。有关更多信息,请参见 printf 类型字段字符。
printf 系列现在支持“ll”(long long) 大小的前缀。有关更多信息,请参见 Size and Distance Specification。
已将 _controlfp 函数进行了优化,以提供更好的性能。
添加了某些函数的调试版本。有关更多信息,请参见 _strdup_dbg, _wcsdup_dbg、_tempnam_dbg, _wtempnam_dbg、_getcwd_dbg, _wgetcwd_dbg、_getdcwd_dbg, _wgetdcwd_dbg 和 _fullpath_dbg, _wfullpath_dbg。
添加了 _chgsignl 和 _cpysignl(long double 版本)。
将 _locale_t 类型添加到了类型表。
添加了新的宏 _countof Macro 用于计算数组中的元素个数。
在每个函数主题中,添加了一节有关 .NET Framework 等效项的内容。
现在,几个字符串函数可以选择在输出缓冲区太小时截断字符串,而不是失败;请参见 _TRUNCATE。
_set_se_translator 现在需要使用 /EHa 编译器选项。
在 /Za 下(对于 C 代码)以及手动设置 __STDC__ 时(对于 C++ 代码),fpos_t 现在变为 __int64。以前它是一个结构。
_CRT_DISABLE_PERFCRIT_LOCKS 可以提高单线程程序的 I/O 性能。
新的链接选项 .obj 文件可用于 pure 模式。有关详细信息,请参见Link Options。