Скачиваний:
17
Добавлен:
09.09.2020
Размер:
164.83 Кб
Скачать

Хостинг систем управления версиями

SourceForge (Subversion, Git, Mercurial,

Bazaar, CVS)

Google Code (Subversion, Git и

Mercurial)

GitHub (Git)

Codebase

Tigris.org

11

Компилятор

Компилятор

–Программа, переводящая текст программы на языке высокого уровня в эквивалентную программу на машинном языке.

Компиляция

–трансляция программы на язык, близкий к машинному, и последующая её компоновка.

–трансляция программы, составленной на исходном языке, в объектный модуль (осуществляется компилятором) и последующая её компоновка в готовый к использованию программный модуль.

12

Процесс преобразования исходных кодов в машинные кода из исходного

prog1.c

prog1.i

prog1.o

препроцессорная

компиляция и

обработка

компоновка

progN.c

progN.i

progN.o

Редактирова ние связей (linking)

program

(исполняемый

(бинарный) файл) ….

03 30 01 03 20 02

01

03 10 02

02

03 02 40

……

13

Советы по устранению синтаксических ошибок

Внимательно читайте сообщения, выводимые компилятором!

14

Советы по устранению синтаксических ошибок

#iclude <stdio.h> int main()

{

int x;

...

$ gcc -o error1 error1.c

error1.c:1: error: invalid preprocessing directive #iclude

error1.c: In function ‘main’: error1.c: In function ‘main’:

error1.c:6: warning: incompatible implicit declaration of built-in function ‘scanf’

error1.c:10: warning: incompatible implicit declaration of built-in function ‘printf’

15

Советы по устранению синтаксических ошибок

Не полагайтесь на номера строк в сообщениях компилятора.

компилятор Си является однопроходным. Он читает программу сверху вниз и никогда не возвращается назад.

Поэтому иногда он обнаруживает ошибку в строке, располагающейся после той, что действительно содержит ошибку.

•Если компилятор сообщил о загадочной синтаксической ошибке, изучите фрагменты, расположенные прямо перед ошибкой.

•Обнаружив истинный дефект попробуйте определить почему компилятор указал не на ту команду. Понимание особенностей компилятора поможет находить дефекты в

будущем.

16

Советы по устранению синтаксических ошибок

Не доверяйте второму сообщению об ошибке

Некоторые компиляторы обнаружив множественную ошибку выводят десятки бессмысленных сообщений о других ошибках

17

Советы по устранению

синтаксических ошибок

Не доверяйте второму сообщению об ошибке

#include <stdio.h> int main()

{

int x, y; if(y == 0) x = 10;

}

scanf("%d",&x); if( x > 5 )

x = 5;

printf("x = %d", x);

}

18

Советы по устранению синтаксических

ошибок

Не доверяйте второму сообщению об ошибке

$ gcc -o error2 error2.c

error2.c:10: error: expected declaration specifiers or ‘...’ before string constant

error2.c:10: error: expected declaration specifiers or ‘...’ before ‘&’ token

error2.c:10: warning: data definition has no type or storage class error2.c:10: error: conflicting types for ‘scanf’

error2.c:10: note: a parameter list with an ellipsis can’t match an empty parameter name list declaration

error2.c:11: error: expected identifier or ‘(’ before ‘if’ error2.c:15: error: expected declaration specifiers or ‘...’ before string constant

error2.c:15: error: expected declaration specifiers or ‘...’ before ‘x’

error2.c:15: warning: data definition has no type or storage class error2.c:15: error: conflicting types for ‘printf’

error2.c:15: note: a parameter list with an ellipsis can’t match an empty parameter name list declaration

error2.c:16: error: expected identifier or ‘(’ before ‘}’ token

19

Советы по устранению синтаксических ошибок

#include <stdio.h> int main()

{

int x, y; //if(y == 0)

//x = 10;

//}

scanf("%d",&x); if( x > 5 )

x = 5;

printf("x = %d", x);

}

Разделение программы на части особенно эффективно при поиске синтаксических ошибок.

Если вы столкнулись с неуловимой синтаксической ошибкой — закомментируйте часть кода и перекомпилируйте программу.

Если ошибка исчезнет — ее нужно искать в этой части кода

20