0

给定:
将库从 unix (COMPAQ Tru 64)DEC ALPHA 移植到 w32 XP sp3 OS。语言:使用 c89 编译器构建的 unix 平台上的 C 代码,带有选项:c89 -c -O -DLOWER_U -DSOLARIS sychld.c

仅使用带有 /c(仅编译)选项的 MS Visual Studio 2010 C 编译器

问题:
出现错误 wait.h(79):C2061 语法错误标识符“等待”代码:

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 程序员,但我觉得如果我创建一个临时变量,那么我只会做一个声明。如何在不影响代码完整性的情况下做到这一点?

这是我收到错误的原因吗??????

4

1 回答 1

1

第 79 行不是声明变量,而是声明函数。

编译器抱怨的实际问题(即使消息还不清楚)是它不知道是什么pid_t

您更大的问题(如果您的代码正在使用wait())是Windows不支持生成进程的Unix fork模型-至少不使用POSIX子系统之类的东西(我什至不确定Windows是否支持)或使用Cygwin库。我怀疑 Cygwin 可能是您轻松移植应用程序的最佳选择,但是如果没有有关该应用程序的更多信息以及 Cygwin 许可是否可以接受,这很难知道。

于 2012-10-04T18:40:36.763 回答