任何人都可以告诉我因为我不确定有什么问题我认为我在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;
}
MAKEFILE
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()'
PROGRAM 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;
}
MAKEFILE 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
答案 0 :(得分:1)
vsotast.c
错误是由于在C99之前的for
循环表达式中不允许声明,因此您需要启用C99模式或将声明移出{{ 1}}表达式:
for
答案 1 :(得分:0)
不是一个完整的答案,只是(更长)的想法:
Makefile
。这对他们来说至关重要。Makefile
,问题在你的代码中:)在这种特殊情况下,有问题的字符串是
for (int i=0; i<n; i++)
它是C,而不是C ++,并且你不能在for语句中声明循环变量,除非你将-std=c99
标志传递给编译器(在CFLAGS
中使用Makefile
为此<) / p>