18

アプリケーションを 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示しています. 私は何を逃したのですか?timespectime.h

4

5 に答える 5

23

timespec はstructです。これをコンパイラに明示的に伝える必要があります。マニュアルページを注意深く読むと、そのように記載されていることがわかります。

これはうまくいくはずです:

#include <time.h>

int main(void) {
    struct timespec TS;
    TS.tv_nsec = 1;

    return 0;
}

追記: として定義されていた場合、パーツを手動でtypedef struct追加する必要はありませんでした。structただし、ほとんど/すべての純粋な C 構造体は、として定義されていないと想定する必要があります。typedef

于 2012-06-22T09:16:51.933 に答える
3

timespec は構造体であるため、単なる timespec であってはなりません。である必要がありますstruct timespec。それに応じてコードを変更してください。

于 2012-06-22T09:16:10.247 に答える
2

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 のどこかでこの回答を見つけたので、ここに投稿します。

于 2015-11-08T10:37:38.547 に答える