Devo fornire una libreria statica C al client e devo essere in grado di rendere non disponibile una definizione di struct. Oltre a questo ho bisogno di essere in grado di eseguire il codice prima dell'inizializzazione della libreria principale utilizzando una variabile globale.Nascondere la definizione di struct nella libreria statica
Ecco il mio codice:
private.h
#ifndef PRIVATE_H
#define PRIVATE_H
typedef struct TEST test;
#endif
private.c (this should end up in a static library)
#include "private.h"
#include <stdio.h>
struct TEST
{
TEST()
{
printf("Execute before main and have to be unavailable to the user.\n");
}
int a; // Can be modified by the user
int b; // Can be modified by the user
int c; // Can be modified by the user
} TEST;
main.c
test t;
int main(void)
{
t.a = 0;
t.b = 0;
t.c = 0;
return 0;
}
Ovviamente questo codice non funziona ... ma mostrare ciò che ho bisogno di fare ... Qualcuno sa come fare questo lavoro? Io google un po 'ma non riesco a trovare una risposta, qualsiasi aiuto sarebbe molto apprezzato.
TIA!
Utilizzando un tipo incompleto per la maniglia consente al compilatore di rilevare gli errori di tipo, ed evita colata nelle funzioni di attuazione. –
Il compilatore può _still_ rilevare errori di tipo poiché il codice della libreria funziona con la variabile correttamente digitata. Oppure, se in realtà volevi dire che il tipo sbagliato è stato assegnato alle tue funzioni, questo è un errore dell'utente e meritano tutte le difficoltà che porterà :-) Come ho detto, è un modo _one_ di farlo, non l'unico modo. – paxdiablo
Perché mai usare l'uso void * e perdere tutti i controlli di tipo? typedef struct MyHiddenStruct MyHandle; MyHandle * allocHandle(); –