3

セマフォを使用する学校向けのプロジェクトを完成させようとしています。適切なヘッダー ファイル (および pthread 用の 1 つ) を含めました。コンパイラに適切なライブラリも指定しました。これは C で書かれています。はい、これは割り当てですが、私は実装の助けを求めているのではなく、この忌まわしいコンパイル エラーを理解できないようです。

私のコードの 47 行目から 50 行目は、セマフォの「単純な」宣言と初期化です。

sem_t empty;
sem_init(&empty, 0, 5); 
sem_t full;
sem_init(&full, 0, 0); 

48 行目でコンパイルしようとしたときに表示されるメッセージは次のとおりです。50 行目でも同じセットが得られますが、簡潔にするために投稿しませんでした。

|48|error: expected declaration specifiers or ‘...’ before ‘&’ token|
|48|error: expected declaration specifiers or ‘...’ before numeric constant|
|48|error: expected declaration specifiers or ‘...’ before numeric constant|
|48|warning: data definition has no type or storage class|
|48|warning: type defaults to ‘int’ in declaration of ‘sem_init’|

これらはすべて main() 関数の外で宣言しました。これらのエラーを解決するにはどうすればよいですか? sem_t のデータ型がないことを示しているように見えるので困惑していますが、semaphore.h で定義されており、これを含めました。gccを使用しているUbuntuでCode::Blocksを使用してこれをコンパイルしています。このエラーは、コマンド ラインからコンパイルしても発生します。

助けてくれてありがとう。

4

1 に答える 1

17

あなたの問題はscopingに関連している可能性があると思います。

「これらはすべて main() 関数の外で宣言しました」

宣言の直後に関数を呼び出しているのを見ることができるので、怪しいと思います。

通話をsem_init内部に移動してみてくださいmain

ファイル スコープで何かを宣言することはできますが (つまり、main の外で効果的にグローバル変数を作成します)、ファイル スコープで関数 ( など) を呼び出すことはできませんsem_init。これらは関数スコープで呼び出す必要があります (例: の内部main()) 。

于 2009-03-14T22:19:30.353 に答える