我正在使用信号量,但我一直遇到未定义的参考警告,从而导致我的代码无法工作.我从文本中提取了示例代码,但是他们遇到了一些语法问题,所以我去了POSIX的信号量教程并改变了它们的语法,结果我现在得到了这些引用错误.
我可能只是忽略了一些东西,但我找不到它.
错误:
Producers_Consumers.c:52: warning: return type of ‘main’ is not ‘int’
/tmp/cceeOM6F.o: In function `producer':
Producers_Consumers.c:(.text+0x1e): undefined reference to `sem_init'
Producers_Consumers.c:(.text+0x3a): undefined reference to `sem_init'
Producers_Consumers.c:(.text+0x46): undefined reference to `sem_wait'
Producers_Consumers.c:(.text+0x52): undefined reference to `sem_wait'
Producers_Consumers.c:(.text+0x5e): undefined reference to `sem_post'
Producers_Consumers.c:(.text+0x6a): undefined reference to `sem_post'
/tmp/cceeOM6F.o: In function `consumer':
Producers_Consumers.c:(.text+0x7e): undefined reference to `sem_wait'
Producers_Consumers.c:(.text+0x8a): undefined reference to `sem_wait'
Producers_Consumers.c:(.text+0x96): undefined reference to `sem_post'
Producers_Consumers.c:(.text+0xa2): undefined reference to `sem_post'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我有什么(由于我从旧方法中评论出来的方式,它可能看起来有点难看)我也知道我的添加方法不起作用,但是当我修复语法问题时我会做到这一点:
#include <stdio.h>
#include …
Run Code Online (Sandbox Code Playgroud) 因此,我是整个Bash脚本编制领域的新手,但是我正在开发一个脚本,用于编译目录中的所有.c文件,并通过以下操作成功完成了该操作:
for F in *.c; do
gcc -c -Wall -o ${F%.c} $F
done
Run Code Online (Sandbox Code Playgroud)
一切正常,但我希望输出看起来像:
ex1.c Errors
ex2.c OK
ex3.c Warnings
Run Code Online (Sandbox Code Playgroud)
因此,基本上我想对“ Ok”设置退出状态为0(一切正常),对“ Warnings”设置退出状态为1(警告,但没有错误),对“ Errors”设置退出状态2(未编译)。
我很难弄清楚该怎么做。我到处搜寻,找不到任何有用的资讯。我完全可以忽略一些东西。
编辑:无论如何都会说:如果gcc -Wall file.c有错误,则只说Error而不是完整的GCC错误处理消息?与警告相同并且可以完美编译吗?
我有一段时间没有碰过Java,所以我对一些细节有点生疏.
我试图从一个充满数字的文件中读取所有自己的行.文件中的第一个数字告诉我文件中有多少其他数字,所以我可以适当调整我的数组大小.我试图获取这些数字,并将它们放在一个int数组中,但我在return语句中不断收到"错误:可变数据可能尚未初始化".我知道这必须是简单的事情,但我不能为我的生活找出我做错的简单事情.
public static int[] numbers(String filename)
{
int[] data;
try
{
FileReader input = new FileReader(filename);
BufferedReader buffer = new BufferedReader(input);
int arraySize = Integer.parseInt(buffer.readLine());
data = new int[arraySize];
for (int x = 0; x < arraySize; x++)
{
data[x] = Integer.parseInt(buffer.readLine());
}
buffer.close();
}
catch(Exception e)
{
System.out.println("Error reading: "+e.getMessage());
}
return data;
}
Run Code Online (Sandbox Code Playgroud)