2011-06-27 16 views
10

हालांकि <signal.h> सहित मुझे एक त्रुटि मिल रही है कि struct sigaction एक अधूरा प्रकार है।संरचना सिग्नेक्शन अपूर्ण त्रुटि

मुझे कोई विचार नहीं है कि इसके साथ क्या किया जाए।

कृपया

#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; 
} 

त्रुटि संदेश में मदद:

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

इस कोड को मेरी मशीन पर संकलित करता है। आपका कंपाइलर क्या है? libc? संकलन विकल्प? – mripard

उत्तर

12

बस

#define _XOPEN_SOURCE 
अपने कोड में किसी अन्य लाइन से पहले

, या पूर्वप्रक्रमक परिभाषित करने के लिए -D विकल्प के साथ संकलन प्रतीक

gcc ... -D_XOPEN_SOURCE ... 
+0

यह काम कर रहा है, लेकिन क्या आप कृपया समझा सकते हैं कि यह क्यों आवश्यक है? – lkanab

+1

@lkanab: 'man 7 feature_test_macros' के अनुसार इस मैक्रो (या कुछ अन्य) का उपयोग "गैर-मानक परिभाषाओं को उजागर होने से रोकने" या "डिफ़ॉल्ट रूप से प्रकट नहीं होने वाली गैर-मानक परिभाषाओं को बेनकाब करने" के लिए किया जा सकता है। [POSIX दस्तावेज़ का परिशिष्ट बी] (http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xsh_chap02.html#tag_22_02_02) इसके बारे में थोड़ा सा बोलता है – pmg

+0

यह काम नहीं किया! मैं प्रायोगिक ग्रेडल प्लगइन 0.7.2 के साथ एंड्रॉइड स्टूडियो 2.1 का उपयोग कर रहा हूं। कोई विचार क्यों? – kristoffz

1

मैंने सी मानक को बदलकर इसे हल किया जिसे मैं जीसीसी के साथ उपयोग कर रहा था।

मैं बदल दिया है: gcc -std=c99 ...

इस के लिए

: gcc -std=gnu99 ...

संबंधित मुद्दे