Второй способ заключается и применении директивы #include
. Если одна функция содержится в файле с именем file1.с, а вторая и файле file2.c, поместите эту директиву в файл filel.c:#include "file2.c"
Дополнительная информация о директиве #include
находится в гл. 11. Другие возможные способы являются в большей степени системнозависимыми. Вот некоторые из них:OC UNIX
Предположим, file1.с
и file2.c - два файла, содержащие программные тексты, соответствующие функциям языка Си. В результате выполнения командыбудет осуществлена компиляция функций, содержащихся в обоих файлах, и получен файл выполняемого кода с именем a.out
. Кроме того, будут созданы два файла с "объектным" кодом - file1.0 и file2.0. Если позже вы измените текст, содержащийся в файле с именем filel.с, а второй файл оставите без изменений, то сможете осуществить компиляцию первого файла, а затем объединить полученный объектный код с объектным кодом, соответствующим второму файлу, при помощи командыКомпиляторыLattice C иMICROSOFT C
Выполните раздельную компиляцию функции, содержащихся в файлах filel.c
и file2.c; в результате будут получены два файла с объектным кодом - file1.obj и file2.obj. Используйте системный редактор связей для объединения их друг с другом и со стандартным объектным модулем с.obj:Системы, построенные на основе трансляции в ассемблерный код
Некоторые из таких систем позволяют компилировать функции, содержащиеся в нескольких файлах, сразу так же, как в ОС UNIX с помощью команды:
или какого-то ее эквивалента. В некоторых случаях вы можете получить отдельные модули с кодом ассемблера, а затем объединить их, используя процесс ассемблирования.
РЕЗЮМЕ
Для создания больших программ вы должны использовать функции в качестве "строительных блоков". Каждая функция должна выполнять одну вполне определенную задачу. Используйте аргументы для передачи значений функции и ключевое слово return
для передачи результирующего значения в вызывающую программу. Если возвращаемое функцией значение не принадлежит типу int, вы должны указать тип функции в ее определении и в разделе описаний вызывающей программы. Если вы хотите, чтобы при выполнении функции происходило изменение значении переменных в вызывающей программе, вы должны пользоваться адресами и указателями.ЧТО ВЫ ДОЛЖНЫ БЫЛИ УЗНАТЬ В ЭТОЙ ГЛАВЕ
Как определять функцию.
Как передавать функции информацию: при помощи аргументов.
Различие между формальным и фактическим аргументами: первый является переменной, используемой функцией, а второй - значением, поступающим из вызывающей функции.
Где необходимо описывать аргументы: после имени функции и перед первой фигурной скобкой.
Где необходимо описывать остальные локальные переменные: после первой фигурной скобки.
Когда и как использовать оператор return
.Когда и как использовать адреса и указатели для доступа к объектам.
ВОПРОСЫ И ОТВЕТЫ
Вопросы
1. Напишите функцию, возвращающую сумму двух целых чисел.
2. Какие изменения должны были бы произойти с функцией из вопроса 1, если вместо целых складывались бы два числа типа float
?3. Напишите функцию alter( )
, которая берет две переменные х и у типа int и заменяет соответственно на их сумму и разность.4. Проверьте, все ли правильно в определении функции, приведенной ниже?
Ответы
1.
2.
Необходимо также привести описание функции float sum( )
и вызывающей программе.3. Поскольку мы хотим изменить две переменные в вызывающей программе, можно воспользоваться адресами и указателями. Обращение к функции будет выглядеть так: alter(&x,&y)
. Возможное решение имеет следующий вид:4. Нет; переменная num
должна быть описана перед первой фигурной скобкой, а не после нее. Кроме того, выражение num++ необходимо заменить на count++.УПРАЖНЕНИЯ
1. Напишите функцию mах(х, у)
, возвращающую большее из двух значении.