Compatibilidade

A UCRT (Biblioteca de Runtime C Universal) dá suporte à maioria das bibliotecas padrão do C necessárias para conformidade com o C++. Ela implementa a biblioteca C99 (ISO/IEC 9899:1999), com algumas exceções:

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

A UCRT também implementa um grande subconjunto da biblioteca C POSIX.1 (ISO/IEC 9945-1:1996, a Interface de Programa Aplicativo do Sistema POSIX). No entanto, ela não está totalmente em conformidade com qualquer padrão POSIX específico. A 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 da POSIX e as funções da biblioteca de runtime específicas da Microsoft estão no namespace global, mas não fazem parte da biblioteca de runtime do C padrão. É por isso que as implementações preferenciais da Microsoft dessas funções têm um sublinhado à esquerda. 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 estão preteridos e não as funções. 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 fora do padrão em arquivos de cabeçalho, /std:c11 e /std:c17 não expõe os nomes padrão de funções, tipos e macros POSIX. Se esses nomes forem necessários, defina _CRT_DECLARE_NONSTDC_NAMES para 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 de parâmetros. Elas invocam o manipulador de parâmetro inválido quando um problema é detectado no 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. Quando você compila o código como C++, é possível definir _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES como 1 para eliminar a maioria dos avisos. Essa macro permite sobrecargas do modelo para chamar 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 os 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. Algumas funções não têm suporte nos aplicativos da Windows Store nem nos aplicativos da UWP (Plataforma Universal do Windows). Essas funções estão listadas em funções do CRT sem suporte em aplicativos da Plataforma Universal do Windows.

Title Descrição
Aplicativos UWP, o Windows Runtime e o runtime C Descreve quando as rotinas da UCRT não são compatíveis com aplicativos universais do Windows ou com aplicativos da Microsoft Store.
Conformidade com ANSI C Descreve nomes de conformidade padrão no UCRT.
UNIX Fornece diretrizes para portabilidade de programas em UNIX.
CRT (plataformas Windows) 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 .lib de runtime do C (CRT) e Biblioteca Padrão (STL) do C++ Fornece uma visão geral dos arquivos de biblioteca (.lib) do CRT e as opções do compilador associado.