2016-12-16 72 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); 
} 
} 

在主我寫start_t =時鐘開始main.c中(); 並在最後寫道: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()的文件中定義變量(儘管任何其他源文件都可以定義它們,只要只有一個文件定義它們,並且鏈接程序時該文件的目標代碼是鏈接的)。