J'ai hérité de vieilles routines C dans lesquelles je maintiens à travers une petite connaissance. J'essaie d'ajouter quelques journalisation dans l'une des routines que j'ai faites, mais je veux pouvoir activer et désactiver la journalisation avec un paramètre dans un fichier INI. Je l'ai également fait, mais j'ai besoin d'arrêter la création de logfile lorsque la journalisation est désactivée. J'aimerais ne pas créer le fichier en premier lieu si la journalisation est éteinte.
Si j'accepte la journalisation, tout fonctionne parfaitement. Mais si je désactive la journalisation, cela crée le fichier, mais n'écrit rien. P>
int LOG_ENABLED=FALSE;
... some code here to set LOG_ENABLED to either TRUE or FALSE...
char filename[50];
struct tm * timenow;
time_t now = time(NULL);
timenow = gmtime(&now);
strftime(filename, sizeof(filename), "/logfiles/program1/log/%y%m%d_%H%M%S.log", timenow);
if (LOG_ENABLED == TRUE)
{
FILE *output_file = fopen(filename, "a");
}
3 Réponses :
La variable définir sortie_file code> est locale sur le bloc si code> est défini et sort hors de portée lorsque vous quittez le bloc. Donc n'importe quel endroit après que vous utilisez sortie_file_file code> se plaindre que la variable n'est pas définie. sortie_file code> en dehors du bloc code> si code> bloque. P> FILE *output_file = NULL;
if (LOG_ENABLED == TRUE)
{
output_file = fopen(filename, "a");
}
Ceci est une bonne leçon sur les champs variables. Lorsque vous déclarez une variable à l'intérieur des accolades comme ci-dessous, il n'existe que dans ce bloc.
if(output_file)
{
fprintf(output_file,"hello world\n");
}
Vous devez déplacer la définition en dehors de ce bloc:
Il produit de nombreuses erreurs code> quelles sont ces erreurs?