2012-06-22 34 views
14

Tôi phải viết lại một ứng dụng từ C++ thành C. Tôi đang sử dụng gcc và Eclipse trên Ubuntu 12.04. Bằng cách đó tôi đã đi qua lỗi nàytimespec không tìm thấy trong thời gian.h

../src/TTNoddy.c: In function ‘main’: 
    ../src/TTNoddy.c:16:2: error: unknown type name ‘timespec’ 

Dưới đây là đoạn mã của tôi rằng tái tạo vấn đề

#include <time.h> 

    int main(void) { 

     timespec TS; 
     TS.tv_nsec = 1; 

     return 0; 
    } 

Tôi nhầm lẫn ở đây - Tôi là một C++ coder và không bao giờ viết một C đơn thuần trong cuộc sống của tôi, nhưng trang người đàn ông cho clock_gettime chỉ rõ rằng timespec được tìm thấy trong tệp tiêu đề time.h mà tôi đang đưa vào đây. Tôi đã bỏ lỡ những gì?

Trả lời

17

timespec là struct, bạn cần phải trình bày rõ ràng trình biên dịch này. Nếu bạn cẩn thận đọc trang người đàn ông bạn có thể thấy nó được tuyên bố như vậy.

này nên làm việc:

#include <time.h> 

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

    return 0; 
} 

Lưu ý bổ sung: Nếu nó đã được định nghĩa là một typedef struct, bạn sẽ không cần thêm phần struct bằng tay. Tuy nhiên, bạn nên giả định rằng hầu hết/tất cả cấu trúc C tinh khiết không được định nghĩa là typedef

+0

Cảm ơn. Tôi biết nó là một cấu trúc, nó chỉ là đến từ C + +, nơi mã của tôi hoạt động tôi không bao giờ biết bạn đã phải khai báo một cách rõ ràng mỗi timespec với struct đầu tiên. Tôi đoán sẽ có nhiều sự khác biệt mà tôi sẽ tìm thấy như thế này. – mathematician1975

+1

Cũng lưu ý rằng timespec không phải là một phần của C89/C99 nhưng POSIX. http://stackoverflow.com/questions/3875197/std-c99-wtf-on-linux – Morpfh

3

Nó không nên chỉ là timespec như timespec là một cấu trúc. Nó phải là struct timespec. Vui lòng sửa đổi mã của bạn cho phù hợp.

2

Tôi gặp lỗi này khi cố gắng biên dịch một dự án đang hoạt động theo Visual Studio 2015.

Giải pháp là thêm HAVE_STRUCT_TIMESPEC vào các định nghĩa tiền xử lý.

Qua GUI: Project Properties (pan)> Sở hữu Trang (biểu tượng)> Configuration Properties> C/C++> Preprocessor> Preprocessor định nghĩa> Edit> Add HAVE_STRUCT_TIMESPEC

Hoặc bằng tay: Chỉnh sửa từng dự án nộp và thay thế mỗi trường hợp của <PreprocessorDefinitions> (có thể có một số cho mỗi tập tin) với một cái gì đó như:

<PreprocessorDefinitions>HAVE_STRUCT_TIMESPEC;WIN32;__GNU_LIBRARY__;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> 

NB: tôi tìm thấy câu trả lời này somewhere on a Github issue, vì vậy tôi đăng nó ở đây.

+1

Ngoài ra, hãy xem [Lỗi xác định lại thời gian biểu] (http://stackoverflow.com/q/33557506) và [Timespec: kiểu cấu trúc Lỗi c2011 ] (http://stackoverflow.com/q/33114535). – jww

Các vấn đề liên quan