Итак, у меня есть 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, и, похоже, это было просто отлично.
Нелегко понять, что не так, без [полного автономного примера] (http://stackoverflow.com/help/mcve). Кроме того, необычно использовать режим '' b ''и' fwrite() 'с текстовым файлом. –
У вас есть объявление переменных, но нет определения. – Barmar
Спасибо, Бармар, как я мог его не увидеть! –