Acceso a una variable estática de una unidad de compilación de otros directamente, en C

StackOverflow https://stackoverflow.com/questions/4682436

  •  10-10-2019
  •  | 
  •  

Pregunta

Así que estoy trabajando en un generador de perfiles "rápida y sucia" porque yo firmware- sólo tiene que saber cuánto tiempo toman algunas funciones. La simple impresión el tiempo que tarda cada vez que va a sesgar los resultados, ya que la tala se caro- así que estoy ahorrando un montón de resultados en una matriz y el dumping que después de algún tiempo.

Cuando se trabaja en una unidad de compilación (un archivo de origen), que acaba de tener un montón de arreglos estáticos que almacenan los resultados. Ahora tengo que hacer esto en varios archivos. Podría "copiar y pegar" el código, pero eso sería simplemente fea (oso conmigo). Si pongo código de tiempo en una unidad de compilación independiente, haga variables estáticas, y proporcionan funciones de descriptor de acceso en el archivo de cabecera, voy a incurrir en los gastos generales de la función llama cada vez que quiera acceder a esas variables estáticas.

¿Es posible a las variables estáticas de acceso a una unidad de compilación directamente?

Siempre he tratado de encapsular los datos, y no usar variables globales, pero esta situación lo requiere, simplemente debido a preocupaciones de velocidad.

Espero este sentido marcas! Gracias!

EDIT:? Muy bien, por lo que parece lo que te pido es imposible: ¿Alguno de ustedes ver alternativas que básicamente me permiten acceder a los datos directamente de otra unidad de compilación

Edit2: Gracias por las respuestas Pablo y Jonathan. Terminé aceptando de Pablo, porque yo no tenía lugar claro para obtener el puntero a los datos estáticos (como por Jonathan) en mi situación . Gracias de nuevo!

¿Fue útil?

Solución

No, no es posible el acceso a las variables static de una unidad de compilación de otro. de palabras clave static precisamente evita que esto suceda.

Si necesita globales de acceso de una unidad de compilación de otro, puede hacerlo:

Archivo1.c:

int var_from_file1 = 10;

Archivo2.c:

extern int var_from_file1;
// you can access var_from_file1 here

Si usted puede quitar la palabra clave static de sus declaraciones, que debe estar bien. Yo entiendo que el cambio de código fuente existente no siempre es una opción (POR EJEMPLO tratar con código compilado heredado existente).

Otros consejos

Para llegar a las variables estáticas en una unidad de compilación C1 de otra unidad C2, alguna función en C1 debe hacer punteros a las variables disponibles a C2, o de alguna variable no estática debe contener un puntero a las variables estáticas.

Por lo tanto, se podría empaquetar las 'variables estáticas' en una sola estructura, y luego escribir una función que devuelve un puntero a la estructura; usted puede llamar a esa función para obtener acceso a las variables estáticas.

Se aplican las reglas similares a las funciones estáticas; Si alguna función (o variable no estática) en el archivo hace que los punteros a las funciones disponibles, entonces las funciones estáticas se pueden llamar indirectamente desde fuera del archivo.

Si el acceso a través de punteros no cuenta como directamente, entonces se snookered; cueros static y no podrá mostrar excepto por la eliminación de la static palabra clave de las variables cuando se compila el módulo - tal vez a través del preprocesador C. Cuidado con las colisiones de nombres.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top