2011-06-27 58 views
10

Mặc dù bao gồm <signal.h> Tôi gặp lỗi khi nói rằng struct sigaction là loại không đầy đủ.lỗi cấu trúc sigaction chưa hoàn thành

Tôi không có ý tưởng phải làm gì với nó.

Xin giúp

#include <signal.h> 
struct sigaction act; 

int main(int argc, char** argv) 
{ 
    int depth; 

    /* validate arguments number*/ 
    if(argc < 2) 
    { 
     printf("fatal error: please use arguments <MaxChild> <MaxDepth>\n"); 
     exit(1); 
    } 

    /* register the realtime signal handler for sigchld*/ 

/*173*/ 
    memset(&act,0,sizeof(act)); 
    act.sa_handler = sigproc; 
    sigaction(SIGCHLD, /* signal number whose action will be changed */ 
      &act,  /* new action to do when SIGCHLD arrives*/ 
      NULL);  /* old action - not stored */ 


    srand(time(NULL)); 
    depth = rand() % atoi(argv[2]); /* [0 maxDepth]*/ 

    RecursiveFunc(atoi(argv[1]), depth); 

    return 0; 
} 

Các thông báo lỗi:

proc.c: In function ‘main’: 
proc.c:173:22: error: invalid application of ‘sizeof’ to incomplete type ‘struct sigaction’ 
proc.c:174:2: error: invalid use of undefined type ‘struct sigaction’ 
cc1: warnings being treated as errors 
proc.c:175:2: error: implicit declaration of function ‘sigaction’ 
+0

Mã này biên dịch trên máy tính của tôi. Trình biên dịch của bạn là gì? libc? tùy chọn biên dịch? – mripard

Trả lời

12

Chỉ

#define _XOPEN_SOURCE 

trước khi bất kỳ dòng khác trong mã của bạn, hoặc biên dịch với -D tùy chọn để xác định tiền xử lý biểu tượng

gcc ... -D_XOPEN_SOURCE ... 
+0

tính năng này đang hoạt động, nhưng bạn có thể giải thích tại sao điều này là cần thiết không? – lkanab

+1

@lkanab: theo 'man 7 feature_test_macros' macro này (hoặc một vài loại khác) có thể được sử dụng để" ngăn chặn các định nghĩa không chuẩn bị hiển thị "hoặc" phơi bày các định nghĩa không chuẩn không được hiển thị theo mặc định ". [Phụ lục B của tài liệu POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xsh_chap02.html#tag_22_02_02) nói một chút về nó – pmg

+0

Điều này không hiệu quả! Tôi đang sử dụng Android Studio 2.1 với plugin thử nghiệm gradle 0.7.2. Bất kỳ ý tưởng tại sao? – kristoffz

1

Tôi đã giải quyết vấn đề này bằng cách thay đổi tiêu chuẩn C mà tôi đang sử dụng với gcc.

tôi đã thay đổi: gcc -std=c99 ...

này: gcc -std=gnu99 ...

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