由非法声明引起的C2061语法错误标识符'wait'?

时间:2012-10-04 18:24:45

标签: c

假设:
将库从unix(COMPAQ Tru 64)DEC ALPHA移植到w32 XP sp3 OS。 language:使用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行的变量也在第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程序员,但我觉得如果我创建一个temp var,那么我只会做一个声明。如何在不影响代码完整性的情况下执行此操作?

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

1 个答案:

答案 0 :(得分:1)

第79行未声明变量,它声明了一个函数。

编译器抱怨的实际问题(尽管消息很不清楚)是它不知道pid_t是什么。

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