任何人都可以打扰我,因为我不确定什么地方出了错我想我在Makefile中做错了什么,因为无法运行它我得到了错误
程序:drevoProcesov.c`
#include <sys/types.h>`
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>`
void izpis()
{
printf("PID: %d PPID: %d \n", getpid(), getppid());
}
int main(int argc, char *argv[])
{
/*levo*/
if(fork()==0)
{
if(fork()==0)
{
if(fork()==0)
{
izpis();
exit(0);
}
else
{
wait(0);
izpis();
}
exit(0);
}
else
{
wait(0);
wait(0);
wait(0);
izpis();
}
}
/*desno*/
else
{
wait(0);
if(fork()==0)
{
if(fork()==0)
{
izpis();
exit(0);
}
else
{
wait(0);
if(fork()==0)
{
izpis();
exit(0);
}
else
{
wait(0);
if(fork()==0)
{
izpis();
exit(0);
}
else
{
wait(0);
izpis();
}
}
}
exit(0);
}
else
{
wait(0);
izpis();
}
}
return 0;
}
制作文件
CC=gcc
LDFLAGS=-lm -g3 -lpthread -Wall
TARGET=drevoProcesov
all: $(TARGET)
clean:
rm -rf $(TARGET)
rm -rf *.o
这是我得到的错误:drevoProcesov.c
./drevoProcesov.c: line 7: syntax error near unexpected token `('
./drevoProcesov.c: line 7: `void izpis()'
计划2 vsotast.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int *vsota;
int main(int argc,char *argv[]) {
if (argc != 2) {
printf("Napaka v podajanju argumentov!\nPrimer: ./vsotast 5\n");
return -1;
}
int n = atoi(argv[1]);
vsota = (int *)malloc(sizeof(int));
*vsota = 0;
int ret;
for (int i=0; i<n; i++)
{
ret = fork();
if (ret== 0) {
*vsota = (*vsota + (i+1));
//printf("VSOTA: %d; I+1: %d\n",*vsota, i+1);
/*if (i == n-1)
printf("Vsota, ki so jo izračunali sinovi: %d\n", *vsota);*/
exit(0);
} else {
wait(&ret);
}
}
int sum = ((n*(1+n))/(2));
printf("Vsota, ki so jo izračunali sinovi: %d\n", *vsota);
printf("Vsota, ki jo izračunal oce: %d\n",sum);
free(vsota);
return 0;
}
制作文件2
CC = gcc
LDFLAGS = -lm -g3 -lpthread -Wall
CFLAGS = -g
TARGET = vsotast
all: $(TARGET)
clean:
rm -rf $(TARGET)
rm -rf *.o
这是我得到的错误:vsotast.c
gcc -g -lm -g3 -lpthread -Wall vsotast.c -o vsotast
vsotast.c: In function ‘main’:
vsotast.c:22:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
for (int i=0; i<n; i++)
^
vsotast.c:22:4: note: use option -std=c99 or -std=gnu99 to compile your code
最佳答案
vsotast.c
错误是由于以下事实造成的:在C99之前的for
循环表达式中不允许声明,因此您需要启用C99模式或将声明移出for
表达式:
int i;
for (i = 0; i < n; i++)