En el lenguaje de programación C, la respuesta corta es que depende de los requisitos de visibilidad (alcance) y / o longevidad (vida útil) de la constante.
Si la constante debe ser visible y vivir mientras su función principal (en su marco), entonces:
const int I = 123;
lo hará para una inicialización entera constante (en forma decimal; de manera equivalente, se puede lograr lo mismo en el hexadecimal:
const int I = 0x7b;
o en forma octal:
- Definimos la raíz cuadrada de menos -1 como I y esto abrió todo un campo de análisis. ¿Por qué no podemos definir ln -1 como una constante como j y aumentar de manera similar el alcance de las matemáticas?
- ¿Cuál es el algoritmo de factorización de números final (en números primos)?
- ¿Cómo puede existir un decimal infinito que se repite (1/3) en realidad? Nunca podríamos cortar una pizza exactamente en 1/3.
- ¿Existe una representación de número real “continua”, en la que dos números cercanos tienen siempre una representación similar?
- ¿Cuántos enteros positivos mayores que 40 y menores que 5,000 contienen solo los dígitos 1,2,3,4 y 5, si a.) Se permite la repetición de dígitos y b.) No se permite la repetición de dígitos?
const int I = 0173;
elige tu favorito Varias extensiones, presumiblemente no portátiles, están disponibles de diferentes proveedores de compiladores, como 0b
para binario de gcc).
Una constante de cadena en C se puede inicializar de varias maneras:
- mediante una notación de matriz:
const char S[] = “Hello, world!”;
ochar const S[] = "Hello, world!"
oconst char const S[] = "Hello, world!";
(gcc 4.4.7 20120313 en CentOS 6.8 maneja las tres versiones) - mediante una notación de puntero:
const char* const S = “Hello, world!”;
lo cual es más complicado ya que requiere dos calificadoresconst
: el primero, para decir que cualquier cosa que [math] S [/ math] señale no se puede modificar y el segundo, para decir que no se puede asignar una dirección diferente aS
- si lo siguiente puede calificarse como una constante de cadena es para que los nitpickers decidan, pero también puede hacer (varias versiones de):
const char[] S = {'H', 'e', 'l', 'l', 'o', ',' 'w', 'o', 'r', 'l', 'd', '!', '\0' };
si te gusta torturarte
Después de eso, se aplican las reglas habituales de almacenamiento y vinculación en C: si desea que su marco constante (definido en una función) sobreviva a la muerte y resurrección de la función, utilizará la clase de almacenamiento estático como en static const char S[]
para que el contenido de S
se conservan entre las llamadas a la función de alojamiento.
Si define (e inicializa) una constante fuera de cualquier función, entonces será visible en esta unidad de traducción desde el punto de origen en adelante, vivirá mientras la imagen del programa se cargue en la memoria (en términos simples, siempre que el programa en ejecución ): esa es la parte de almacenamiento y no se puede cambiar (en el momento en que una variable / pasos constantes fuera de una función). De forma predeterminada, su constante tendrá el enlace externo : será visible a través de las unidades de traducción que componen su programa (completo). Para limitar la visibilidad de su constante, ahora global , solo a esta unidad de traducción, use el calificador estático como en static const int I = 123;