假设:
将库从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,那么我只会做一个声明。如何在不影响代码完整性的情况下执行此操作?
这是我收到错误的原因???????
答案 0 :(得分:1)
第79行未声明变量,它声明了一个函数。
编译器抱怨的实际问题(尽管消息很不清楚)是它不知道pid_t
是什么。
你的更大问题(如果你的代码使用wait()
)是Windows不支持产生进程的Unix fork模型 - 至少不使用像POSIX子系统这样的东西(我甚至不使用它)确定Windows是否支持)或使用Cygwin库。我怀疑Cygwin可能是您轻松移植应用程序的最佳选择,但如果没有关于应用程序的更多信息以及Cygwin许可是否可以接受,那么很难知道。