Как известно, в языке C управлять областью видимости глобальных переменных и функций следует с помощью ключевого слова static - если они объявлены как static, то область их видимости ограничивается c-файлом, в котором они определены, в противном же случае они могут быть доступны во всех c-файлах, в которых объявлены с помощью ключевого слова extern (не путать объявление с определением).
Допустим, что изначально у меня имеются такие c-файлы:
Файл a.c:
Файл b.c:
Файл a.c:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Файл b.c:
|
Компилирую исходники и запускаю результирующий файл на исполнение:
bush@mycomp:~/training/c/c89/mytests$ gcc a.c b.c -o d.out
bush@mycomp:~/training/c/c89/mytests$ ./d.out
Message: Hello World
I like C lang.
bush@mycomp:~/training/c/c89/mytests$
Как видим - всё отработало нужным образом. Давайте теперь изменим файлы исходного кода...
В файл a.c - добавим определение некоторой структуры customer, а в файл b.c добавим функцию, которая должна работать с объектом этой структуры.
Для того, чтобы в файле b.c можно было использовать структуру, объявленную в др. файле, этот файл должен быть файлом заголовка. Т.о. нам следует переименовать файл a.c в файл a.h, не забыв при этом подключить его через #include к файлу b.c, а так же не забыв удалить из кода файла b.c присутствовавшие в нём ранее объявления для глобальной переменной ch, и для функции mymsg - они более не нужны, т.к. искомые объекты теперь находятся не в c-файле, а в подключенном h-файле.
Итак, теперь наши файлы будут иметь такое содержимое:
Файл a.h:
Файл b.c:
Файл a.h:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Файл b.c:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Компилирую исходники и запускаю результирующий файл на исполнение:
bush@mycomp:~/training/c/c89/mytests$ gcc b.c -o d.out
bush@mycomp:~/training/c/c89/mytests$ ./d.out
Message: Hello World
I like C lang.
Andrey, 33
bush@mycomp:~/training/c/c89/mytests$
Как видим - код работает так, как мы и ожидаем.
Комментариев нет:
Отправить комментарий