J'ai donc, 3 fichiers; main.c, file.c fichier.hC extern clock_t Les variables ne fonctionnent pas comme prévu dans le fichier;
dans fichier.h Je déclarai 3 variables
extern clock_t start_t, end_t, total_t;
dans file.c j'ai écrit une fonction pour enregistrer la durée du programme principal de fonctionnement; et dans le fichier file.h je l'appelle "void saveLog (void);"
void saveLog(void)
{
end_t = clock();
total_t = (end_t - start_t);
double time_spent = (double) total_t/CLOCKS_PER_SEC;
double *arr = malloc(sizeof(double));
*arr = time_spent;
FILE* fp = fopen("log.txt","wb");
if (fp)
{
printf("Elapsed: %f seconds\n", (double) time_spent);
fwrite(arr, 1, sizeof(double), fp);
fclose(fp);
}
}
dans main.c au début de la main j'ai écrit start_t = clock(); et à la fin atexit(savelog)
écrit J'inclus toutes les bibliothèques (time.h, stdlib.h, stdio.h dans tous les fichiers)
Lors de la compilation je reçois l'erreur linker pomme erreur id
Undefined symbols for architecture x86_64:
"_end_t", referenced from:
_saveLog in file.o
"_start_t", referenced from:
_check_answer in main.o
_saveLog in file.o
"_total_t", referenced from:
_saveLog in file.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Par la façon dont je pense, de commencer à compter l'horloge et le début de la main et simplement faire le calcul dans la fonction. Ma question est: pourquoi cela ne fonctionne-t-il pas? Sinon comment devrais-je utiliser les variables clock_t
? J'ai essayé quelques tests avec int et le semblait juste très bien référencé.
Il n'est pas facile de voir ce qui ne va pas sans [un exemple complet] (http://stackoverflow.com/help/mcve). À côté: il est inhabituel d'utiliser le mode "" b "' et "fwrite()" avec un fichier texte. –
Vous avez une déclaration des variables, mais pas de définition. – Barmar
Merci Barmar, comment pourrais-je ne pas le voir! –