структура sigaction неполная ошибка - PullRequest
12 голосов
/ 27 июня 2011

Несмотря на то, что <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’

Ответы [ 2 ]

12 голосов
/ 27 июня 2011

Just

#define _XOPEN_SOURCE

перед любой другой строкой в ​​вашем коде или скомпилируйте с опцией -D, чтобы определить символ препроцессора

gcc ... -D_XOPEN_SOURCE ...
3 голосов
/ 03 марта 2017

Я решил эту проблему, изменив стандарт C, который использовал с gcc.

Я изменил: gcc -std=c99 ...

на это: gcc -std=gnu99 ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...