Compatibilidade

A UCRT (Biblioteca de Runtime C Universal) dá suporte à maioria da biblioteca padrão C necessária para conformidade com C++. Ele implementa a biblioteca C99 (ISO/IEC 9899:1999), com determinadas exceções:

  • Compatibilidade de tipo estrito em <complex.h>.
  • aligned_alloc, que provavelmente não será implementado porque o Windows operacional não dá suporte a alocações alinhadas. Em vez disso _aligned_malloc, use o não padrão .
  • strerrorlen_s
  • suporte atômico <em stdatomic.h>
  • suporte a threading em <threads.h>

O UCRT também implementa um grande subconjunto da biblioteca C POSIX.1 (ISO/IEC 9945-1:1996, a interface do programa de aplicativo do sistema POSIX). No entanto, ele não está totalmente em conformidade com nenhum padrão POSIX específico. O UCRT também implementa várias funções e macros específicas da Microsoft que não fazem parte de um padrão.

Funções específicas para a implementação pela Microsoft do Visual C++ são encontradas na biblioteca vcruntime. Muitas dessas funções são para uso interno e não podem ser chamadas pelo código do usuário. Algumas estão documentadas para uso em compatibilidade de implementação e depuração.

O padrão C++ reserva nomes que começam com um sublinhado no namespace global para a implementação. As funções POSIX e as funções de biblioteca de runtime específicas da Microsoft estão no namespace global, mas não fazem parte da biblioteca de runtime C padrão. É por isso que as implementações preferidas da Microsoft dessas funções têm um sublinhado à frente. Para fins de portabilidade, o UCRT também dá suporte a nomes padrão, mas o compilador do Microsoft C++ emite um aviso de substituição quando o código que os usa é compilado. Somente os nomes padrão são preterido, não as funções em si. Para suprimir o aviso, defina _CRT_NONSTDC_NO_WARNINGS antes de incluir cabeçalhos no código que usa os nomes originais POSIX. Como o padrão C não permite nomes não padrão em arquivos de header, /std:c11/std:c17 por padrão e não expõe os nomes padrão para funções POSIX, tipos e macros. Se esses nomes são necessários, defina para _CRT_DECLARE_NONSTDC_NAMES expô-los.

Determinadas funções na biblioteca C padrão têm um histórico de uso não seguro, devido a parâmetros mal empregados e buffers não verificados. Essas funções geralmente são a origem dos problemas de segurança no código. A Microsoft criou um conjunto de versões mais seguras dessas funções que verificam o uso do parâmetro. Eles invocam o manipulador de parâmetro inválido quando um problema é detectado em runtime. Por padrão, o compilador do Microsoft C++ emite um aviso de substituição quando uma função é usada com uma variante mais segura disponível. Ao compilar seu código como C++, você pode definir _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES como 1 para eliminar a maioria dos avisos. Essa macro permite que sobrecargas de modelo chame as variantes mais seguras, mantendo o código-fonte portátil. Para suprimir o aviso, defina _CRT_SECURE_NO_WARNINGS antes de incluir cabeçalhos no código que usa essas funções. Para obter mais informações, consulte Recursos de segurança no CRT.

Exceto conforme indicado na documentação para funções específicas, o UCRT é compatível com a API do Windows. Não há suporte para determinadas funções em aplicativos Windows Store Plataforma Universal do Windows (UWP). Essas funções são listadas em funções CRT sem suporte em Plataforma Universal do Windows aplicativos.

Título Descrição
Aplicativos UWP, o Windows Runtime e o runtime C Descreve quando as rotinas UCRT não são compatíveis com aplicativos Windows Universal ou Microsoft Store aplicativos.
Conformidade com ANSI C Descreve nomes em conformidade com o padrão no UCRT.
UNIX Fornece diretrizes para portabilidade de programas em UNIX.
Windows Plataformas de Windows (CRT) Lista os sistemas operacionais aos quais o CRT dá suporte.
Compatibilidade com versões anteriores Descreve como mapear nomes de CRT antigos para os novos.
Arquivos CRT (Runtime C) e STL (Biblioteca Padrão) .lib do C++ Fornece uma visão geral dos arquivos de biblioteca (.lib) do CRT e as opções do compilador associado.