Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

138
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!