2016-12-16 1 views
0

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é.

+0

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. –

+1

Vous avez une déclaration des variables, mais pas de définition. – Barmar

+0

Merci Barmar, comment pourrais-je ne pas le voir! –

Répondre

0

J'ai découvert ce qui me manquait; J'ai oublié de définir les variables dans le fichier contenant main() (bien que tout autre fichier source puisse les définir à la place, à condition qu'un seul fichier les définisse et que le code objet de ce fichier soit lié lorsque le programme est lié).