C 错误:,应为

C 错误:,应为,c,compiler-errors,definition,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) {

一段时间以来,我一直试图找出这段代码的错误:

#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;

什么是无效的tcpb crearProces tcpb*pcb,PTR功能?是否应该是tPCB?

由于历史原因,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?当程序中没有这样的类型时,为什么要使用它作为类型名


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

tpc是一种结构,我在问题上添加了它的定义tcpb和tPCB是不同的标识符,我想这是Erik的观点。还有,什么是拼写和大写与tPCBOuch不相同的tcpb,我将继续讨论。谢谢你们两个。@Hallucynogenyc不要自杀,学着像电脑一样思考吧。这意味着在这种情况下,不要浏览代码——特别是在试图查找bug时——而是要注意确切的字符。你知道你所说的tcpb是什么意思,但这并不重要——它必须是完全正确的。