Ошибка: ожидается - PullRequest
       9

Ошибка: ожидается

0 голосов
/ 08 марта 2011

Я некоторое время пытался выяснить, что не так с этим кодом, но безуспешно:

#include"ec.h"
#include"pantalla.h"
#include"so.h"

#define NPROC 20

WORD flags;
void (*rsi_ck)();
char idproces = 'a';

tPCB *pRUN, *pRDY;
tPCB pcbs[NPROC];

char arterisc[]="|/-\\";

void crearProces (tcpb *pcb,PTR funcio)
{
 pcb->IdProces = (int) idproces;
 a=a+1;
 pcb->Estat = RDY;
 pcb->Flags = flags;
 pcb->CS = Segment(funcio);
 pcb->IP = Desplacament(funcio);
 pcb->SS_SP =(long)(&(pcb->Pila[MIDA_PILA-12]));
 pcb->Pila[MIDA_PILA-11]=Segment(&pRUN);
 pcb->Pila[MIDA_PILA-1]=512;
 pcb->Pila[MIDA_PILA-2]=pcb->CS;
 pcb->Pila[MIDA_PILA-3]=pcb->IP;
 }

// больше строк ниже

Это дает мне ошибку компиляции ", ожидается "в строке 16, где определена функция" CrearProces ".Я попытался переместить определение функции в любую другую строку, и ошибка просто «следует» за ней.

Заранее спасибо.

Редактировать: tPCB определяется следующим образом:

    typedef struct
{
 LONG IdProces;
 WORD Estat;
 LONG SS_SP;
 WORD Quantum;
 WORD Prioritat;
 WORD Flags;
 WORD CS;
 WORD IP;
 WORD Pila[MIDA_PILA];
} tPCB;

Ответы [ 2 ]

4 голосов
/ 08 марта 2011

Что такое "tcpb" в void crearProces (tcpb *pcb,PTR funcio)? Должно ли это быть tPCB?

3 голосов
/ 08 марта 2011

По историческим причинам язык C поддерживает два стиля объявлений функций (и определений).

«Новый» прототип на основе стиля

void foo(int a, short b, double c)
{
  ...

И "старый" стиль K & R

void foo(a, b, c)
int a;
short b;
double c;
{
  ...

Когда компилятор видит, что первый идентификатор в () является известным именем типа, он предполагает, что функция определена с прототипом. Когда компилятор видит, что первый идентификатор в () является , а не известным именем типа, он предполагает, что функция определена в старом стиле K & R. В последнем случае каждый идентификатор должен быть отделен от следующего ,.

В вашем случае определение функции имеет tcpb в качестве первого идентификатора в (). Очевидно, в вашей программе нет такого типа, что заставляет компилятор предполагать, что это не имя типа, а имя параметра в определении стиля K & R. Как таковое оно должно сопровождаться ,.

Это явно не ваше намерение.

Итак, что такое tcpb? Почему вы используете его как имя типа, если в вашей программе такого типа нет?

P.S. Разные компиляторы могут использовать разные подходы для распознавания неверного кода. По этой причине они могут по-разному обнаруживать одну и ту же ошибку и выдавать разные диагностические сообщения. Очевидно, ваш конкретный компилятор использует логику, описанную выше. Отсюда и сообщение об ошибке о запятой. Другой компилятор может сообщить об ошибке по-другому.

...