首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:,预期

错误:,预期
EN

Stack Overflow用户
提问于 2011-03-08 08:49:48
回答 2查看 155关注 0票数 0

一段时间以来,我一直在试图找出这段代码的问题所在,但没有成功:

代码语言:javascript
复制
#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;
 }

//下面有更多行

它在定义函数"CrearProces“的第16行给出了一个编译错误",expected”。我尝试将函数的定义移到任何其他行,但错误只是“跟随”它。

提前谢谢。

编辑: tPCB定义如下:

代码语言:javascript
复制
    typedef struct
{
 LONG IdProces;
 WORD Estat;
 LONG SS_SP;
 WORD Quantum;
 WORD Prioritat;
 WORD Flags;
 WORD CS;
 WORD IP;
 WORD Pila[MIDA_PILA];
} tPCB;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-08 09:01:38

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

“新的”基于原型的风格

代码语言:javascript
复制
void foo(int a, short b, double c)
{
  ...

和“老”的K&R风格

代码语言:javascript
复制
void foo(a, b, c)
int a;
short b;
double c;
{
  ...

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

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

这显然不是你的本意。

那么,什么是tcpb呢?当你的程序中没有这样的类型时,为什么要使用它作为类型名呢?

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

票数 3
EN

Stack Overflow用户

发布于 2011-03-08 08:54:54

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5227101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档