当前位置:  开发笔记 > 运维 > 正文

编译C程序时出错

如何解决《编译C程序时出错》经验,为你挑选了1个好方法。

我正在尝试完成一个涉及使用信号量的学校项目.我已经包含了正确的头文件(加上一个用于pthreads).我已经将编译器指向了正确的库.这是用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中定义的,我已经包含了它.我正在使用Ubuntu下的Code :: Blocks编译它,它使用的是gcc.即使从命令行进行编译,也会发生此错误.

在此先感谢您的帮助.



1> Daniel LeChe..:

我认为您的问题可能与范围界定有关.

"我已在main()函数之外声明了所有这些"

听起来很可疑,因为我可以看到你在声明后立即调用了一个函数.

尝试将呼叫转移到sem_init内部main

您可以在文件范围内声明事物(即在main之外,有效地创建一个全局变量)但您不能sem_init在文件范围内调用函数(如).必须在功能范围内调用它们(例如内部main())

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有