Saltar al contenido

¿Qué es un “static” función en C?

Nuestros mejores desarrolladores agotaron sus reservas de café, investigando todo el tiempo por la resolución, hasta que Lilian encontró la respuesta en GitLab así que en este momento la compartimos aquí.

Solución:

static funciones son funciones que solo son visibles para otras funciones en el mismo archivo (más precisamente la misma unidad de traducción).

EDITAR: Para aquellos que pensaron que el autor de las preguntas se refería a un ‘método de clase’: como está etiquetada la pregunta C se refiere a una simple función de C. Para métodos de clase (C++/Java/…), static significa que este método se puede llamar en la clase misma, no es necesaria una instancia de esa clase.

Hay una gran diferencia entre static funciones en C y static Funciones miembro en C++. En C, un static La función no es visible fuera de su unidad de traducción, que es el archivo de objeto en el que se compila. En otras palabras, hacer una función static limita su alcance. Puedes pensar en un static funcionar como “privado” para su archivo *.c (aunque eso no es estrictamente correcto).

En C++, “static” también se puede aplicar a funciones miembro y miembros de datos de clases. A static miembro de datos también se denomina “variable de clase”, mientras que un miembro nostatic miembro de datos es una “variable de instancia”. Esta es la terminología de Smalltalk. Esto significa que sólo hay una copia de un static miembro de datos compartido por todos los objetos de una clase, mientras que cada objeto tiene su propia copia de un no-static miembro de datos entonces un static miembro de datos es esencialmente una variable global, es decir, un miembro de una clase.

No-static Las funciones miembro pueden acceder a todos los miembros de datos de la clase: static y no-static. Las funciones miembro estáticas solo pueden operar en el static miembros de datos.

Una forma de pensar en esto es que en C++ static miembros de datos y static Las funciones miembro no pertenecen a ningún objeto, sino a toda la clase.

Hay dos usos para la palabra clave static cuando se trata de funciones en C++.

El primero es marcar la función como si tuviera un vínculo interno para que no se pueda hacer referencia a ella en otras unidades de traducción. Este uso está en desuso en C++. Se prefieren los espacios de nombres sin nombre para este uso.

// inside some .cpp file:

static void foo();    // old "C" way of having internal linkage

// C++ way:
namespace

   void this_function_has_internal_linkage()
   
      // ...
   

El segundo uso es en el contexto de una clase. Si una clase tiene un static función miembro, eso significa que la función es miembro de la clase (y tiene el acceso habitual a otros miembros), pero no necesita ser invocada a través de un objeto en particular. En otras palabras, dentro de esa función, no hay un puntero “esto”.

Si te gusta el asunto, tienes el poder dejar un artículo acerca de qué le añadirías a esta sección.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *