簡體   English   中英

在 time.h 中找不到 timespec

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM