Mezcla extern y const
¿puedo mezclar extern y const, como extern const? En caso afirmativo, ¿el calificador const impone su reinado solo dentro del ámbito en el que se declara o debería coincidir exactamente con la declaración de la unidad traslacional en la que se declara? Es decir, ¿puedo declarar decir extern const int i;
incluso cuando el verdadero i no es una const y viceversa?
4 answers
- Sí, puedes usarlos juntos.
- Y sí, debe coincidir exactamente con la declaración en la unidad de traducción en la que realmente se declara. A menos que, por supuesto, usted está participando en el Concurso de Programación en C Encubierto :-)
El patrón habitual es:
-
archivo.h:
extern const int a_global_var;
-
archivo.c:
#include "file.h"
const int a_global_var = /* some const expression */;
Editar: Comentario de legends2k incorporado. Gracias.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-25 14:25:25
Puedes usarlos juntos. Pero debe ser consistente en su uso de const porque cuando C++ hace la decoración de nombres, const se incluye en la información de tipo que se utiliza para decorar los nombres de los símbolos. así que extern const int i
se referirá a una variable diferente de extern int i
A menos que utilice extern "C" {}. C la decoración del nombre no presta atención a const.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-03 09:39:14
Puedes usarlos juntos y puedes hacer todo tipo de cosas que ignoran la palabra clave const, porque eso es todo lo que es; una palabra clave. Le dice al compilador que no va a cambiar una variable, lo que a su vez le permite al compilador hacer algunas optomizaciones útiles y le impide cambiar cosas que no quería.
Possibility.com tiene un artículo decente con algo más de fondo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-03 09:38:37
Sí, puede usarlos juntos.
Si declara "extern const int i", entonces i es const sobre su alcance completo. Es imposible redefinirlo como no-const. Por supuesto, puede omitir la bandera const desechándola (usando const_cast).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-03 09:38:48