0

与えられた:
unix (COMPAQ Tru 64)DEC ALPHA から w32 XP sp3 OS へのライブラリの移植。言語: オプション付きの c89 コンパイラで構築された UNIX プラットフォーム上の C コード: c89 -c -O -DLOWER_U -DSOLARIS sychld.c

MS Visual Studio 2010 C コンパイラを /c (コンパイルのみ) オプションでのみ使用する

問題:
エラー wait.h(79) の取得: C2061 構文エラー識別子 'wait' コード:

77:#ifndef _BSD             /* POSIX definition of wait() */
78:#ifdef _NO_PROTO
79:extern pid_t wait();
80:#else
81:_BEGIN_CPLUSPLUS
82:extern pid_t wait(int *);
83:_END_CPLUSPLUS
84:#endif /* _NO_PROTO */
85:#endif /* _BSD */

変数は条件文で宣言されていることに注意してください。79 行目の var は、285 行目でも宣言されています。

284:#ifdef _NO_PROTO
285:extern pid_t wait();
286:extern pid_t wait3();
287:#else
288:
289:_BEGIN_CPLUSPLUS
290:extern pid_t wait(union wait *);
291:#include <sys/resource.h>   /* contains rusage struct for wait3 */
292:extern pid_t wait3(union wait *, int, struct rusage *);
293:_END_CPLUSPLUS
294#endif  /* !_NO_PROTO */

私は経験豊富な C プログラマーではありませんが、一時変数を作成する場合、宣言を 1 つだけ行うと思います。コードの整合性に影響を与えずにこれを行うにはどうすればよいですか?

これがエラーが発生する理由ですか???????

4

1 に答える 1

1

79行目は変数を宣言しているのではなく、関数を宣言しています。

コンパイラが不平を言っている実際の問題は(メッセージがそれについて明確にはほど遠いにもかかわらず)、それが何でpid_tあるかを知らないということです。

あなたのより大きな問題(あなたのコードが使用している場合wait())は、WindowsがスポーンプロセスのUnixフォークモデルをサポートしていないことです-少なくともPOSIXサブシステム(Windowsがもうサポートしているかどうかさえわかりません)のようなものを使用するか、Cygwinライブラリ。Cygwinがアプリケーションを簡単に移植するための最善の策かもしれないと思いますが、アプリとCygwinライセンスが受け入れられるかどうかについての詳細情報がなければ、それを知るのは困難です。

于 2012-10-04T18:40:36.763 に答える