Declarando una variable global `extern const int` en el encabezado pero solo` int` en el archivo fuente
Estaba experimentando con GCC y descubrí que puedes declarar variables externasconst
en archivos de encabezado pero manténgalos mutables en los archivos de implementación.
EDITAR: Esto en realidad no funciona. La única razón por la que obtuve mi código de prueba para compilar fue porque no incluí "header.h" en "header.c".
header.h:
#ifndef HEADER_H_
#define HEADER_H_
extern const int global_variable;
#endif
header.c:
int global_variable = 17;
Esto parece una muy buena característica para usar para mantenerglobal_variable
solo lectura para los usuarios deheader.h
pero manteniéndolos modificables por la implementación (header.c
)
NOTA: El siguiente código es solo un ejemplo de cómo esta forma de declarar impedirá la asignación aglobal_variable
.
#include "header.h"
int main(void)
{
global_variable = 34; /* This is an error as `global_variable` is declared const */
return 0;
}
Porque nunca antes había visto una técnica en la práctica. Empiezo a preguntarme si es válido.
¿Es este comportamiento bien definido o es un error del que GCC no me advierte?