C代码中的编译错误

标签 c compiler-errors

我有以下 C 代码,我使用 bcc 在 16 位模式下运行:

int div(int num, int den);
int mod(int num, int den);

void readSector(char* buffer, int sector)
{
 int rel_sec = mod(sector,18) + 1;
 int head = div(sector,18);
 head = mod(head,2);
 int track = div(sector,36); 
 interrupt(0x13,0x201,buffer,track*0x100+rel_sec,head*0x100);
}

int div(int num, int den)
{
 int i = 0;
 while(num - den*i >= 0)
   i++;
 i--;
 return i;
}

int mod(int num, int den)
{
 int i = 0;
 while(num -den*i >= 0)
   i++;
 i--;
 int x = num - den*i;
 return x;
}

当我使用以下命令编译它时:

bcc -ansi -c -o readSector.o readSector.c

我收到以下错误:

readSector.c:9.4: error: bad expression
readSector.c:9.10: error: need ';'
readSector.c:9.12: error: track undeclared
readSector.c:28.4: error: bad expression
readSector.c:28.6: error: need ';'
readSector.c:28.8: error: x undeclared

我怎样才能删除这些?

最佳答案

您可能正在使用 C99 之前的编译器。或者你至少告诉你的编译器像这样提供选项 -ansi,这可能会使编译器坚持 C89 标准。

C89 标准不允许在 block 开头以外的其他地方定义变量。

要解决第一个错误,请修改:

void readSector(char* buffer, int sector)
{
  int rel_sec = mod(sector,18) + 1;
  int head = div(sector,18);
  head = mod(head,2);
  int track = div(sector,36); 
  ...

看起来像这样:

void readSector(char* buffer, int sector)
{
  int rel_sec = mod(sector,18) + 1;
  int head = div(sector,18);
  int track = div(sector,36); 
  head = mod(head,2);
  ...

对于第二次错误更改:

int mod(int num, int den) 
{
  int i = 0;
  while(num -den*i >= 0)
    i++;
  i--;
  int x = num - den*i;
  return x;
}

例如像这样:

int mod(int num, int den) 
{
  int i = 0;
  while(num -den*i >= 0)
    i++;
  i--;

  {
    int x = num - den*i;
    return x;
  }
}

关于C代码中的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28926134/

相关文章:

c - 套接字编程将多个客户端连接到一台服务器并列出它们 C

java - Java程序无法编译: missing return statement

c - 加载时初始化、运行时初始化、编译时初始化

.net - 在 VS .NET 2003 中使用 pthread

c - C中的套接字编程

c - 8051c 中断

c++ - 如果我不给它一点额外的空间,弦就会发疯。谁能解释这里发生了什么?

c++ - “virtual memory exhausted: Cannot allocate memory”仅在使用调试标志进行编译时

vb.net - VB.NET错误-使用结果时,在运行时可能会出现Null引用异常

java - 有没有办法修复这个无效的模块名称错误?