【问题标题】:Error when compiling C program编译C程序时出错
【发布时间】:2010-10-13 09:47:11
【问题描述】:

我正在尝试完成一个涉及使用信号量的学校项目。我已经包含了正确的头文件(加上一个用于 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 中定义的。我在使用 gcc 的 Ubuntu 下使用 Code::Blocks 编译它。即使从命令行编译也会出现此错误。

提前感谢您的帮助。

【问题讨论】:

    标签: c compiler-errors pthreads


    【解决方案1】:

    我认为您的问题可能与scoping有关。

    “我已经在 main() 函数”

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

    尝试将调用移至sem_init 内的main

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

    【讨论】:

    • 这可能就是答案。您不能将函数调用放在文件范围内 - 它们需要在另一个函数中。
    • 别忘了链接到正确的库... -lrt here
    • @Andrew:好电话;我已经修改了我的答案以包含您评论的各个方面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多