2012-03-21 15 views
8

Encontré un fragmento de código escrito por otra persona. Hay varias funciones globales declaradas como estáticas en los archivos de encabezado. Las funciones mismas se definen en archivos de implementación separados. AFAIK, la definición de función estática no es visible fuera de la unidad de traducción donde se define la función. Si es así, ¿cuál es el sentido de declarar funciones estáticas en los archivos de encabezado?declarando funciones globales estáticas en archivos de encabezado

// in some header file 
static void foo(); 


// in some implementation file 
static void foo() 
{ 
.... 
.... 
} 
+0

esto vale la pena investigar en: http://stackoverflow.com/questions/92546/variable-declarations-in-header-files-static-or-not –

Respuesta

6

Bueno, funciones declaradas static son pueden ser vistos en el archivo de origen que se definen en. A pesar de declarar en una cabecera separada no es una buena idea. Yo también he visto algunos casos en que los desarrolladores han hecho esto. Lo hacen para ordenarlos en un orden para que puedan llamar a una función de otra. Esto es lo que quiero decir:

/* In header */ 
static void plus(int); 
static void minus(int); 
static void multiply(int); 

/* In source file */ 
static void minus(int v) 
{ 
    /* So plus can be called in minus without having to define it 
    * before minus */ 
    plus(); 
} 

static void plus(int v) { /* code */ } 

Pero en mi humilde opinión, esta es una forma bastante desastrosa de hacerlo. Una mejor solución es simplemente prototipar las funciones static en el archivo fuente antes de implementarlas.

+1

De acuerdo, es una forma horrible de prototipo de funciones. Es una buena cosa que el chico que escribió ese código ya no nos funcione. – pic11

Cuestiones relacionadas