[英]timespec not found in time.h
我不得不將應用程序從 C++ 重寫為 C。我在 Ubuntu 12.04 上使用 gcc 和 Eclipse。 在這樣做時,我遇到了這個錯誤
../src/TTNoddy.c: In function ‘main’:
../src/TTNoddy.c:16:2: error: unknown type name ‘timespec’
這是我重現問題的代碼片段
#include <time.h>
int main(void) {
timespec TS;
TS.tv_nsec = 1;
return 0;
}
我在這里很困惑 - 我是一名 C++ 編碼員,在我的生活中從未編寫過純 C 應用程序,但是clock_gettime
的手冊頁清楚地表明timespec
可以在我包含在此處的time.h
頭文件中找到。 我錯過了什么?
timespec 是一個struct
,您需要明確地告訴編譯器這一點。 如果你仔細閱讀手冊頁,你會看到它是這樣說明的。
這應該有效:
#include <time.h>
int main(void) {
struct timespec TS;
TS.tv_nsec = 1;
return 0;
}
附加說明:如果已將其定義為typedef struct
,則無需手動添加struct
部分。 但是,您應該假設大多數/所有純 C 結構都沒有定義為typedef
它不應該只是 timespec,因為 timespec 是一個結構體。 它應該是struct timespec
。 請相應地修改您的代碼。
嘗試在Visual Studio 2015下編譯工作項目時遇到此錯誤。
解決方案是將HAVE_STRUCT_TIMESPEC
添加到預處理器定義中。
通過 GUI:項目屬性(平移)> 屬性頁(圖標)> 配置屬性 > C/C++ > 預處理器 > 預處理器定義 > 編輯 > 添加HAVE_STRUCT_TIMESPEC
或者手動:編輯每個項目文件並將<PreprocessorDefinitions>
每個實例(每個文件可以有多個)替換為以下內容:
<PreprocessorDefinitions>HAVE_STRUCT_TIMESPEC;WIN32;__GNU_LIBRARY__;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
注意:我在 Github issue 的某個地方找到了這個答案,所以我把它貼在這里。
這個問題給我帶來了一段時間的問題,我最終做的是在我的代碼中定義struct timespec 。 (剛剛復制過來,直接來自 man nanosleep )
#include <time.h>
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
int main(void) {
struct timespec TS;
TS.tv_nsec = 1;
return 0;
}
我知道這是一個老問題,但從 gcc 6.3 升級到 7.1 后我遇到了同樣的問題。 查看更改后,您必須定義 _GNU_SOURCE 以包含 struct_timespec.h。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.