Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

353
Visualizações
¿Por qué la variable const no necesita inicializarse en C?

Las variables const en C ++ deben inicializarse, lo que significa que uninitialized const variable inicializada no es posible y es un error del compilador. Pero, ¿por qué no es lo mismo en lenguaje C también? Considere el siguiente programa que compila bien C:

 #include <stdio.h> int main() { const int a; }

¿Cuál es la razón para permitir uninitialized const ? ¿No sería bueno que C también siguiera la misma regla que C++? ¿Se debe a problemas de rendimiento que la variable const local debe inicializarse cada vez que se llama a una función y la inicialización lleva tiempo?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

La diferencia probablemente se deba, entre otras cosas, a un enfoque significativamente más relajado de la inicialización en el lenguaje C en general , no solo con respecto a los objetos const . Por ejemplo, este código es ilegal en C++

 goto over; int a = 5; over:;

porque salta al alcance de a bypass de su inicialización. Mientras tanto, en C, este código es perfectamente legal, con una variable que tiene a valor indeterminado en over: .

La misma lógica se aplica a su const int a declaración. El lenguaje C simplemente cree que un objeto no inicializado no es gran cosa, incluso en situaciones en las que ya no es posible establecerlo en un valor determinado más adelante.

La razón principal de los requisitos de inicialización más estrictos en C++ es la introducción de una inicialización no trivial (constructores) en el lenguaje, es decir, una inicialización que no se puede omitir significativamente. Los objetos escalares y su inicialización en C++ simplemente se etiquetan como una pequeña parte de un concepto mucho más amplio.

¿No sería bueno que C también siguiera la misma regla que C++?

no lo veo C y C++ son lenguajes sustancialmente diferentes. Y también tratan a const de manera bastante diferente.

over 4 years ago · Santiago Trujillo Relatório

0

Historia.

const se especificó en C++ desde el principio y el uso cumplió con los objetivos de ese lenguaje. const se especificó más tarde en C pero con un significado relacionado pero diferente para minimizar los problemas de compatibilidad del código C existente.

Dado que C comenzó sin const , su inclusión posterior se parece más a un modificador de read-only que a uno constant . Esto permitió a los compiladores existentes tratar esencialmente a const como nada por escribir en un const es un comportamiento indefinido. Los compiladores/códigos más nuevos podrían aprovechar lo que proporciona const .

 const int a; a = 5; // problem in C as code attempts to write `a` // Really should be `const char *fred`, but allowed for backwards compatibility. char *fred = "sally";

C++ tomó un enfoque más fuerte y exige la inicialización.

Ver también const en C vs const en C++

over 4 years ago · Santiago Trujillo Relatório

0

Porque C tiene absoluta confianza en el programador y le permite hacer muchas cosas, incluidas las estúpidas: int *x = NULL; x[4] = 12; será compilado sin errores e incluso sin advertencias por parte de muchos compiladores.

Más precisamente, const es solo una promesa que hace el programador de que la variable no debe modificarse, y que el compilador podría considerarla como constante si puede ayudar a las optimizaciones. Pero el compilador nunca aplicará ninguna regla de tiempo de ejecución para prohibir cambiar un valor constante:

 const a = 1; int *ix = (int *) &a; *ix = 2; printf("a=%d\n", a); /* UB : could print 1 or 2 */

será compilado sin una advertencia. Pero invocará un comportamiento indefinido porque modificó un objeto declarado como const.

¡Creo que no se permite inicializar variables const simplemente porque la especificación C actual no lo prohíbe! En versiones anteriores, la inicialización siempre ha sido opcional. Tal vez futuras versiones podrían forzar la inicialización de variables automáticas

De todos modos, una variable const global o estática, de hecho, se inicializa automáticamente (según la especificación del lenguaje C 6.7.9 10): si un objeto que tiene una duración de almacenamiento estático o de subprocesos no se inicializa explícitamente, entonces: ... si tiene tipo aritmético, se inicializa a cero (positivo o sin signo); ...

Así static const a; es perfectamente válido como const a si a es global y en ese caso a=0 .

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda