Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

144
Vistas
¿Hay alguna forma de limitar el uso de una función a su biblioteca en C?

Así que estoy trabajando en una biblioteca C estática (como un archivo library.a ) para un proyecto escolar. Hay múltiples funciones, algunas de las cuales se colocan en diferentes archivos, por lo que no puedo usar la palabra clave static . ¿Hay alguna forma de que esas funciones puedan limitarse a la propia biblioteca, un equivalente a static para las bibliotecas?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Así que estoy trabajando en una biblioteca C estática (como un archivo library.a ) para un proyecto escolar. Hay múltiples funciones, algunas de las cuales se colocan en diferentes archivos, por lo que no puedo usar la palabra clave static . ¿Hay alguna forma de que esas funciones puedan limitarse a la propia biblioteca, un equivalente a static para las bibliotecas?

El lenguaje C no tiene ningún sentido formal de una unidad de organización del programa más grande que una sola unidad de traducción pero más pequeña que un programa completo. Las bibliotecas son un concepto extraño a la especificación del lenguaje, proporcionadas por prácticamente todas las cadenas de herramientas, pero no forman parte del lenguaje en sí. Por lo tanto, no, el lenguaje C no define un mecanismo que no sea static para declarar que un identificador de función puede ser referenciado solo por un subconjunto adecuado de todas las unidades de traducción que contribuyen a un programa.

Tales limitaciones son compatibles con algunos formatos de bibliotecas compartidas, como ELF, y es común que las implementaciones de C que se dirigen a dichas bibliotecas compartidas proporcionen extensiones que permitan la participación de esas instalaciones, pero generalmente no ocurre lo mismo con las bibliotecas estáticas.

Tenga en cuenta también que en todos estos casos, estamos hablando de la vinculación de los identificadores de funciones, no de controlar realmente el acceso a las funciones. En principio, se puede llamar a cualquier función del programa desde cualquier parte del programa a través de un puntero de función que apunte a ella.


Desafío del marco : ¿por qué te importa?

La adaptación habitual para tener funciones con enlace externo que no desea que los clientes de la biblioteca llamen directamente sería omitir esas funciones de los archivos de encabezado públicos de la biblioteca. ¿Qué importa si algún intrépido puede analizar la biblioteca para descubrir y posiblemente llamar a esas funciones? Sus encabezados y documentación públicos le dicen a la gente cómo se debe usar la biblioteca. Si la gente lo usa de otras maneras, entonces eso depende de ellos.

over 4 years ago · Santiago Trujillo Denunciar

0

Puede que no sea posible "ocultar" por completo la existencia de un conjunto de funciones restringidas de otros archivos de origen si se definen con un enlace externo, ya que sus identificadores serán visibles al vincular (como se indica en la otra respuesta).

Sin embargo, si solo busca evitar que alguien llame a funciones restringidas sin darse cuenta, uno de estos enfoques puede ser útil:

  1. En algunos de mis proyectos, he usado declaraciones #define y #ifdef para bloquear el uso de funciones restringidas en todo el programa. Por ejemplo, en mis archivos de origen de la biblioteca C de la capa de abstracción de hardware (HAL), normalmente #define HAL__ antes de cualquier instrucción #include . Luego coloco un #ifdef HAL__ ... #endif alrededor de cualquier definición de función restringida en mis archivos de encabezado. Alguien con la intención podría evitar esto fácilmente agregando #define HAL__ a su código fuente o modificando el archivo de encabezado, pero brinda cierta protección contra el uso no intencional de funciones restringidas y otras definiciones.
  2. Coloque las definiciones de funciones restringidas en un archivo de encabezado separado utilizado para crear la biblioteca (por ejemplo, library.a ) y proporcione solo archivos de encabezado que contengan declaraciones de funciones no restringidas con la biblioteca. Los identificadores de cualquier función definida seguirán siendo visibles para el enlazador, pero sin los prototipos, será difícil que alguien los llame.

Nuevamente, si tener los identificadores para cualquier función restringida visible en todo el programa fuera un problema (por ejemplo, duplicar otros identificadores), entonces estas opciones no funcionarán. Además, si el objetivo es evitar que los desarrolladores llamen intencionalmente a funciones restringidas, estas opciones no funcionarán, aunque la opción 2 lo haría más difícil. Si la intención es solo evitar llamadas no intencionales a las funciones restringidas y no hay preocupación por tener identificadores duplicados en el programa, entonces estas opciones pueden ayudar.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda