¿Cómo se puede inicializar una constante de número y una constante de cadena?

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:

  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!”; o char const S[] = "Hello, world!" o const 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 calificadores const : 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 a S
  • 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;