Не можете создать пример sigqueue с помощью gcc, но g ++ в порядке? - PullRequest
1 голос
/ 28 сентября 2010

У меня странная проблема со сборкой.

У меня есть простая тестовая программа, которая отправляет sigqueue другому процессу.

Этот небольшой пример кода собирается и запускается, когда я собираю его как программу на c ++ (скомпилированную с g ++) но когда я компилирую его как программу на c (с gcc), я получаю ошибку, что он не может найти структуру sigval.

Краткий пример:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>

int main(int argc, char *argv[])
{
        sigval value;
        value.sival_int = 123;
        sigqueue(0,SIGUSR1, value);
}

Обратите внимание, что я заменил pid на 0, чтобы упростить этот вопрос.

И если я скомпилирую с помощью gcc, я получу это:

$> gcc sigusr1_mini.c 
sigusr1_mini.c: In function ‘main’:
sigusr1_mini.c:9: error: ‘sigval’ undeclared (first use in this function)
sigusr1_mini.c:9: error: (Each undeclared identifier is reported only once
sigusr1_mini.c:9: error: for each function it appears in.)
sigusr1_mini.c:9: error: expected ‘;’ before ‘value’
sigusr1_mini.c:10: error: ‘value’ undeclared (first use in this function)

Что мне здесь не хватает, почему он не может найти структуру sigval? И почему g ++ может найти его?

Спасибо Johan

Ответы [ 2 ]

5 голосов
/ 28 сентября 2010

В C теги struct и union не содержат имен, которые можно использовать самостоятельно, как в C ++.Вы должны изложить это:

union sigval value;
1 голос
/ 28 сентября 2010

Как определяется sigval в h-файле?Компилятору C может потребоваться полное определение, например:

значение sigval объединения;

...