2011-02-17 17 views
12

¿Cuál es el posible efecto de devolver un tipo de datos estáticos? ¿Y cuándo deberíamos usarlo?Efecto del tipo de retorno siendo estático

static ssize_t 
my_read(int fd, char *ptr) 
{ 
    //code from Stevens Unix Network programming. 
     if (something) 
     return (-1) 
     if (something else) 
      return (0) 


     return (1) 
} 

por qué estático aquí?

Gracias.

Respuesta

28

La función es estática, no el tipo de devolución. Esto significa que solo se puede llamar desde dentro de la unidad de compilación actual.

+0

Gracias Marcelo. – freedesk

+0

hay otro aspecto al devolver un tipo de datos que es estático. – Algorithmist

+6

Significa que el identificador tiene un alcance en la unidad de traducción actual, pero la función todavía se puede llamar desde otro lugar a través de un puntero de función. – caf

2

Utilizamos tipo de datos estática cuando se devuelva un puntero a una variable creada en la llamada function.For por ejemplo

float * calculate_area(float r) 
{ 
    float *p; 
    static float area; 
    p=&area; 
    area=3.14*r*r; 
    return p; 
} 

Si usted haría zona, cuando vuelve la variable de control automático es decir, sin ningún tipo de clasificación sería destruida de la función llamada. Cuando se declara como estática, también se puede recuperar correctamente el valor del área de la principal. Por lo tanto, para que persista su valor, lo hacemos como estático.

+0

@freedesk ¿está hablando de devolver datos estáticos o estáticos? Pensé que estaba hablando de devolver datos estáticos de una función. – Algorithmist

+2

Esta es una práctica deficiente, rompe la encapsulación privada. Devolver punteros a la estática también es peligroso debido a problemas de seguridad de subprocesos y al orden de los problemas de evaluación. Debido al orden de evaluación indefinido, no sabe qué sucederá si llama a esta función, por ejemplo, printf ("% f% f", * calculate_area (1.0f), * calculate_area (2.0f)); – Lundin

Cuestiones relacionadas