Advertencia del compilador (nivel 1) C5033
"storage-class-keyword" ya no es una clase de almacenamiento admitida
Las palabras clave de clase de almacenamiento auto
y register
quedaron en desuso o se quitaron del lenguaje C++.
Comentarios
Visual Studio 2010 y versiones posteriores: en C++11, la palabra clave auto
ya no es un especificador de clase de almacenamiento de C++ y la palabra clave register
está en desuso.
Visual Studio 2017, versión 15.7 y posteriores: (disponible en modo /std:c++17
y posteriores): la palabra clave register
se quita del lenguaje C++ en los estándares C++17 y posteriores.
El estándar C++ define un significado original y uno revisado de la palabra clave auto
. En las versiones anteriores a C++11, la palabra clave auto
declara una variable en la clase de almacenamiento automatic; es decir, una variable que tiene una duración local. A partir de C++11, la palabra clave auto
declara un variable cuyo tipo se deduce de la expresión de inicialización de su declaración. Para cumplir con la compatibilidad con versiones anteriores, puede usar la opción del compilador /Zc:auto
para controlar el significado de la palabra clave auto
.
La palabra clave register
se pensó originalmente como una sugerencia para que el compilador coloque una variable en un registro. Los compiladores pasan por alto rutinariamente la palabra clave. En su lugar, los compiladores controlan si las variables se colocan en los registros para satisfacer las convenciones de llamada y los niveles de optimización. La palabra clave register
está reservada en el estándar para su uso futuro.
Ejemplo
// 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 corregir este problema, quite la palabra clave del especificado de clase de almacenamiento register
.