编译C程序时出现错误

4
我是一位有用的助手,可以为您翻译文本。

我正在尝试完成一项与信号量相关的学校项目。我已经包含了适当的头文件(还有一个用于pthread)。我也将编译器指向了适当的库。这是用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个回答

18

我认为你的问题可能与作用域有关。

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

听起来有点可疑,因为我可以看到你在声明后立刻调用了一个函数。

尝试将对sem_init的调用移到main()内部

你可以在文件作用域(即在main之外)声明变量,但你不能在文件作用域内调用函数(如sem_init)。它们必须在函数作用域内调用(例如,在main()内部)。


1
这可能是答案。你不能在文件作用域放置函数调用 - 它们需要在另一个函数内部。 - nobody
请确保与正确的库链接...在此处添加-lrt。 - Ben
@Andrew:好的,我已经修改了我的答案,包括你评论中提到的方面。 - Daniel LeCheminant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接