Je dois fournir une bibliothèque C statique au client et avoir besoin de rendre une définition de structure indisponible. En plus de cela, je dois être capable d'exécuter du code avant l'initialisation de la bibliothèque principale en utilisant une variable globale.Masquer la définition de structure dans la bibliothèque statique
Voici mon code:
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;
}
Il est évident que ce code ne fonctionne pas ... mais montrer ce que je dois faire ... Tout le monde sait comment faire ce travail? Je google pas un peu mais je ne trouve pas de réponse, toute aide serait grandement appréciée.
TIA!
L'utilisation d'un type incomplet pour la poignée permet au compilateur de détecter les erreurs de type, et évite la coulée dans les fonctions de mise en œuvre. –
Le compilateur peut _still_ attraper les erreurs de type puisque votre code de bibliothèque fonctionne avec la variable correctement typée. Ou, si vous vouliez dire que le mauvais type est donné à vos fonctions, c'est une erreur de l'utilisateur et ils méritent toutes les difficultés qu'il apportera :-) Comme je l'ai dit, c'est une façon de le faire, pas la seule. – paxdiablo
Pourquoi diable utilise use void * et perd tout contrôle de type? typedef struct MyHiddenStruct MyHandle; MyHandle * allocHandle(); –