Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

259
Vistas
¿Por qué se permite inicializar una variable estática con non const aquí?

estaba leyendo esto La primera respuesta de @Andrei T dice que

Un objeto "grande" nunca es una expresión constante en C, incluso si el objeto se declara como const. Los objetos calificados como const (de cualquier tipo) no son constantes en la terminología del lenguaje C. No se pueden utilizar en inicializadores de objetos con duración de almacenamiento estático, independientemente de su tipo.

Por ejemplo, esto NO es una constante

 const int N = 5; /* `N` is not a constant in C */

La N anterior sería una constante en C++, pero no es una constante en C. Entonces, si intentas hacer

 static int j = N; /* ERROR */

obtendrá el mismo error: un intento de inicializar un objeto estático con una no constante

Estoy de acuerdo con su respuesta. También probé un ejemplo simple como el siguiente en gcc 4.8.2 y 4.9.2 y da errores de compilación como esperaba:

 #include <stdio.h> int main(void) { const int a=5; static int b=a; printf("%d",b); }

Pero cuando lo probé en ideone.com , compila y funciona bien y da el resultado esperado. Vea la demostración en vivo aquí . Además, en codeblocks 13.12 IDE (gcc 4.7.1) este programa funciona bien. Entonces, ¿es un error del compilador o una extensión gcc? ¿Qué combinación de opciones de compilador usa ideone bajo el capó? Entonces, ¿cómo y por qué se compila en ideone ? ¿Cuál es la razón?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Esto parece ser una especialidad de gcc. Compilar con -std=c89 o -pedantic informa el error.

Dado que en todos los estándares de C esto es una violación de restricción, no dar un diagnóstico para ese caso hace que gcc no tenga uno de los -std=c?? opciones un compilador no conforme.

over 4 years ago · Santiago Trujillo Denunciar

0

Es porque el ideone probablemente invoca gcc con la opción -O (nivel de optimización 1). Este es el caso incluso para versiones anteriores de gcc (la mía es 4.4.7):

 $ gcc -ansi main.c main.c: In function 'main': main.c:6: error: initializer element is not constant $ gcc -ansi -O main.c $ echo $? 0

Lo que es interesante aquí es que con -pedantic está funcionando correctamente nuevamente y el mensaje de diagnóstico requerido está presente (probado solo con 4.4.7, vea el comentario de Keith ):

 gcc -ansi -pedantic -O main.c main.c: In function 'main': main.c:6: error: initializer element is not constant $ echo $? 1
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda