错误:,预期

时间:2011-03-08 00:49:48

标签: c compiler-errors definition

我一直试图弄清楚这段代码有什么问题而没有成功一段时间:

#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 个答案:

答案 0 :(得分:4)

void crearProces (tcpb *pcb,PTR funcio)中的“tcpb”是什么?它应该是tPCB吗?

答案 1 :(得分:3)

由于历史原因,C语言支持两种函数声明(和定义)。

“新的”基于原型的风格

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

和“旧的”K& R风格

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

当编译器发现()中的第一个标识符是已知类型名称时,它假定该函数是使用prototype定义的。当编译器发现()中的第一个标识符是已知的类型名称时,它假定该函数是用旧的K& R样式定义的。在后一种情况下,每个标识符必须通过,与下一个标识符分开。

在您的情况下,函数定义tcpb作为()中的第一个标识符。显然,程序中没有这样的类型,这使得编译器假设这不是类型名称,而是K& R样式定义中的参数名称。因此,必须跟随,

这显然不是你的意图。

那么,tcpb是什么?当程序中没有这种类型时,为什么要将它用作类型名称?

P.S。不同的编译器可以使用不同的方法来识别无效代码。因此,他们可以不同地检测相同的错误并发出不同的诊断消息。显然,您的特定编译器正在使用我上面描述的逻辑。因此有关逗号的错误消息。另一个编译器可能会以不同方式报告相同的错误。