Использование оператора безусловного перехода goto в практике программирования на языке С-51 настоятельно не рекомендуется, т. к. затрудняет понимание программ и возможность их модификаций. В то же самое время алгоритм любой степени сложности может быть построен при использовании оператора условного перехода if и операторов циклов while и do-while. Оператор безусловного перехода goto может быть использован только в случае крайней необходимости.
Формат этого оператора записывается в следующем виде:
"goto"
...
Имя метки':'
Оператор goto передает управление на оператор, помеченный меткой имя метки. Помеченный оператор должен находиться в той же функции, что и goto, а используемая метка должна быть уникальной, т. е. одно имя метки не может быть использовано для разных операторов программы, имя метки — это идентификатор.
Любой оператор в составном операторе может иметь свою метку. Используя goto, можно передавать управление внутрь составного оператора. Но нужно быть осторожным при входе в составной оператор, содержащий объявления переменных с инициализацией, т. к. объявления располагаются перед выполняемыми операторами и значения объявленных переменных при таком переходе будут не определены.
Определение и вызов функций
Мощность языка С-51 во многом определяется легкостью и гибкостью в определении и использовании функций, написанных на языке программирования С-51. В нем не существует отдельного ключевого слова для подпрограмм-процедур. Подпрограмма-процедура и подпрограмма-функция объявляются подобным образом.
Функция — это совокупность операторов и объявлений локальных переменных, обычно предназначенная для решения определенной задачи.
Каждая функция должна иметь имя, которое используется для ее объявления, определения и вызова. В любой программе, написанной на языке программирования С-51, должна быть функция с именем main (главная функция), именно с нее, в каком бы месте программы она не находилась, начинается выполнение программы.
При вызове функции ей при помощи аргументов (формальных параметров) могут быть переданы некоторые значения (фактические параметры), используемые во время ее выполнения. Функция может возвращать значение (одно!). Это возвращаемое значение и является результатом выполнения функции, который после выполнение программы заносится в переменную, стоящую в левой части выражения приравнивая, в правой части которого происходит вызов функции. Допускается также использовать функции, не имеющие аргументов, и функции, не возвращающие никаких значений (подпрограммы-процедуры).
С использованием функций в языке программирования С-51 связаны три понятия: определение функции (описание действий, выполняемых функцией в виде операторов), объявление функции (задание формы обращения к функции) и вызов функции.
Определение функции задает тип возвращаемого значения, имя функции, типы и число формальных параметров, а также объявления локальных переменных и операторы, называемые телом функции, и определяющие выполняемые ею действия. В определении функции также может быть задан класс памяти.
Пример определения подпрограммы-функции:
int rus (unsigned char r)
{if (r>='A' && c<=' ')
return 1;
else
return 0;
}
В данном примере определена функция с именем
В языке программирования С-51 требуется, чтобы определение функции обязательно предшествовало ее вызову. Определения используемых функций могут находиться перед определением функции main в одном с нею файле или в другом файле.
Если же по каким-либо причинам требуется вызвать функцию раньше ее фактического определения или функцию, определение которой находится в другом файле, то до вызова нужно поместить объявление (прототип) вызываемой функции. Это позволит компилятору проверить соответствия типов передаваемых фактических параметров типам формальных параметров функции.
Объявление функции имеет такой же вид, что и определение, с той лишь разницей, что тело функции (исполняемые операторы) отсутствует, а имена формальных параметров могут быть опущены. Для функции, определенной в последнем примере, прототип может быть представлен в виде:
int rus (unsigned char r);
или
int rus (unsigned char);
В программах, написанных на языке программирования С-51, широко используются так называемые библиотечные функции, т. е. функции, предварительно разработанные и записанные в библиотеки. Прототипы библиотечных функций находятся в специальных заголовочных файлах, поставляемых вместе с библиотеками в составе систем программирования, и включаются в программу с помощью директивы #include.