2015-03-08 3 views
0

Я следующий код C, который я бегу в 16-битном режиме, используя ОЦК:Ошибка компиляции в коде C

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 

Как его удалить?

+2

Итак, где же линии 6 и 25, пожалуйста? * вздох * – alk

+0

@alk Извините ... см. правки – sarthak

+1

@sarthak, в следующий раз, пожалуйста, также добавьте комментарий в источник, чтобы отметить номера строк. Не ожидайте, что мы можем рассчитывать;) – wimh

ответ

4

Возможно, вы используете компилятор pre C99. Или вы, по крайней мере, говорите, что ваш компилятор ведет себя так, предоставляя опцию -ansi, которая может заставить компилятор придерживаться стандарта C89.

В стандарте C89 не допускаются определения переменных где-то еще, а в начале блока.

Чтобы обойти эту проблему за 1 ошибки изменить это:

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); 
    ... 

Для 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; 
    } 
} 
Смежные вопросы