1

奇妙なビルドの問題があります。

別のプロセスに sigqueue を送信する簡単なテスト プログラムがあります。

この小さなコード例は、c++ プログラム (g++ でコンパイル) としてビルドして実行しますが、ac プログラム (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 ++はそれを見つけることができるのですか?

ありがとうヨハン

4

2 に答える 2

5

C ではstructunionタグは、C++ のように単独で使用できる名前を導入しません。あなたはそれを綴る必要があります:

union sigval value;
于 2010-09-28T10:01:58.477 に答える
1

h-ファイルでsigvalはどのように定義されていますか? C コンパイラでは、完全な定義が必要な場合があります。たとえば、次のようになります。

ユニオン信号値;

于 2010-09-28T10:02:53.043 に答える