Aviso do compilador (nível 1) C5033
'storage-class-keyword' não é mais uma classe de armazenamento com suporte
As palavras-chave das classes de armazenamento auto
e register
foram preteridas ou removidas da linguagem C++.
Comentários
Visual Studio 2010 e posterior: No C++11, a palavra-chave auto
não é mais um especificador de classe de armazenamento do C++, e a palavra-chave register
está preterida.
Visual Studio 2017 versão 15.7 e posterior: (disponível no modo /std:c++17
e posterior): a palavra-chave register
foi removida da linguagem C++ no C++17 e padrões posteriores.
O padrão C++ define um significado original e um significado revisado para a palavra-chave auto
. Antes do C++11 , a palavra-chave auto
declara uma variável na classe de armazenamento automática; ou seja, uma variável que tem tempo de vida local. A partir do C++11, a palavra-chaveauto
declara uma variável cujo tipo é deduzido da expressão de inicialização na própria declaração. Para compatibilidade com versões anteriores, você pode usar a opção do compilador /Zc:auto
para controlar o significado da auto
palavra-chave .
A palavra-chave register
foi originalmente pensada como uma sugestão para o compilador colocar uma variável em um registro. Essa palavra-chave vivia sendo ignorada pelos compiladores. Em vez disso, os compiladores controlam se as variáveis são colocadas em registros para satisfazer as convenções de chamada e os níveis de otimização. A palavra-chave register
está reservada no padrão para uso futuro.
Exemplo
// c5033.cpp
// compile by using: cl /c /std:c++17 c5033.cpp
register int value; // warning C5033: 'register' is no longer a supported storage class
Para corrigir esse problema, remova a palavra-chave register
do especificador da classe de armazenamento.