2016-12-16 3 views
0

Итак, у меня есть 3 файла; main.c, file.c file.hC переменные extern clock_t не работают как ожидалось в файле;

в file.h я объявил 3 переменные

extern clock_t start_t, end_t, total_t; 

в file.c я написал функцию, чтобы сохранить отрезок времени основной запущенной программы; и в file.h Я упоминаю его как «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); 
} 
} 

в main.c в начале main Я написал start_t = clock(); и в конце написал atexit(savelog) я включил все библиотеки (time.h, stdlib.h, stdio.h во всех файлах)

При компиляции я получаю ошибку ошибка яблочного линкер 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) 

По как я думаю, начать отсчет часов и начало основного и просто выполнить математику в функции. Мой вопрос: почему он не работает? Как еще я должен использовать переменные clock_t? Я попробовал некоторое тестирование с помощью int, и, похоже, это было просто отлично.

+0

Нелегко понять, что не так, без [полного автономного примера] (http://stackoverflow.com/help/mcve). Кроме того, необычно использовать режим '' b ''и' fwrite() 'с текстовым файлом. –

+1

У вас есть объявление переменных, но нет определения. – Barmar

+0

Спасибо, Бармар, как я мог его не увидеть! –

ответ

0

Я узнал, что мне не хватает; Я забыл определить переменные в файле, который содержит main() (хотя любой другой исходный файл мог бы определить их вместо этого, если только один файл определяет их, а объектный код для этого файла связан, когда программа связана).

Смежные вопросы