2010-09-28 71 views
1

我有一個奇怪的構建問題。無法使用gcc構建sigqueue示例,但g ++可以嗎?

我有一個簡單的測試程序,將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 ++可以找到它?

感謝 約翰

+0

隨意添加評論有關爲什麼這個問題被downvoted ... – Johan 2010-09-28 14:31:43

+0

我覺得這有幫助。看起來像是值得我高興的。 – Jake88 2012-09-25 14:15:46

回答

5

在C,structunion標籤不介紹,可以在自己喜歡的,他們用C做使用++名稱。你必須把它拼出來:

union sigval value; 
+0

在C++中,它們也不是標識符,但如果沒有歧義,就可以直接使用。 – 2010-09-28 11:43:07

+0

@Jens Gustedt:這個更新是否準確? – caf 2010-09-28 12:01:52

+1

嗯,很難。我會去做類似'...標籤不能代替普通標識符的地方,就像它們可能在C++中那樣。 – 2010-09-28 12:50:20

1

如何在h文件中定義sigval? C編譯器可能需要全定義,例如:

union sigval value;