2014-11-05 90 views
4

我試圖測量使用clock_gettime()功能的運行時間獲得足夠的「未申報」的錯誤。我包括time.h,我加-lrt的Makefile文件,並添加基於Eclipse CDT正確的道路。然而,當我嘗試編譯我不斷收到這兩種錯誤:嘗試使用clock_gettime(),但是從time.h中

experiments.c: In function ‘main’: 
experiments.c:137:2: error: unknown type name ‘timespec’ 
timespec time1, time2; 
^ 
experiments.c:139:2: warning: implicit declaration of function ‘clock_gettime’ [-Wimplicit-function-declaration] 
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1); 
^ 
experiments.c:139:16: error: ‘CLOCK_PROCESS_CPUTIME_ID’ undeclared 
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1); 

這種情況與任何類型的CLOCK_我嘗試使用。我一直在閱讀大量的問題/答案和教程,但一直沒能找到有幫助的東西。

我包括標頭是:

#include <stdlib.h> 
#include <stdio.h> 
#include <math.h> 
#include <time.h> 

我在Ubuntu 13.10 32位和具有以下CFLAGS編制上gcc-g -Wall -pedantic -std=c99

如果我添加了標誌-D_POSIX_C_SOURCE=199309L我得到error: unknown type name ‘timespec’並警告使用timespec

這是代碼的一部分,以防萬一它有助於:

timespec time1, time2; 
int temp; 
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1); 
. 
. 
. 
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1); 
/*code stuff*/ 
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2); 

感謝

+0

你包含哪些頭文件? – Grantly 2014-11-05 23:30:50

+0

關於'_POSIX_C_SOURCE> = 199309L'的手冊頁中有一個註釋,你試圖編譯它的是什麼? – 2014-11-05 23:49:32

+0

@ DavidC.Rankin上的gcc編譯具有以下標誌:-g -Wall -pedantic -std = C99 – Francisca 2014-11-05 23:57:44

回答

3

thisthis答案在一起我就能夠使它發揮作用。我不得不加入這一行之前,我所有的包括添加_POSIX_C_SOURCE宏,以確保預處理正確獲取庫功能,這是我做的:

#define _POSIX_C_SOURCE 199309L 

然後我開始一個unknown type name timespec錯誤,這是怎麼回事因爲你必須明確告訴編譯器timespecstruct。通過編寫:

struct timespec time1, time2; 

而不是隻是timespec time1, time2;

+4

使用1993年有點逆行。你可能成功地使用#define _XOPEN_SOURCE 700來請求POSIX 2008的支持(儘管你可以使用'600'作爲可能更廣泛使用的先前版本2004)。你也可以用'-std = gnu99'(或'-std = gnu11')來定義它們而不用在代碼的頂部寫一個'#define'。至於使用'struct timespec',這是閱讀函數規範的問題;這就是它所說的,所以這就是你需要使用的東西,除非你提供'typedef struct timespec timespec;'(但是請注意,你不能爲'struct stat'做到這一點)。 – 2014-11-06 00:36:58

+0

謝謝你,會更新它 – Francisca 2014-11-06 01:58:10