0
votes

Fichier d'ouverture dans le cas de la déclaration

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");
}

c

1 commentaires

Il produit de nombreuses erreurs quelles sont ces erreurs?


3 Réponses :


1
votes

La variable 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.

définir 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");
}


0 commentaires

1
votes

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");
}


0 commentaires

0
votes

Vous devez déplacer la définition en dehors de ce bloc: xxx


0 commentaires