2011-06-27 35 views
10

<signal.h>を含めると、struct sigactionが不完全な型であるとエラーが表示されます。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のドキュメントの付録B](http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xsh_chap02.html#tag_22_02_02)はそれについて少し話します – pmg

+0

これはうまくいかなかった!私は実験的なgradleプラグイン0.7.2でAndroidスタジオ2.1を使用しています。どんな考え? – kristoffz

1

私はgccで使用していたC標準を変更することでこれを解決しました。

は私が変更されました:これまで gcc -std=c99 ...

gcc -std=gnu99 ...

関連する問題