Кроме стандартных заголовочных файлов мы можем подключать и свои. C. Например, в нашем в файле main c
Скачать 20.47 Kb.
|
Кроме стандартных заголовочных файлов мы можем подключать и свои файлы. Например, в той же папке, где находиться главный файл программы, определим еще один файл, который назовем main.c. Определим в нем следующий код:
Здесь просто определена одна переменная. Теперь подключим этот файл в программу:
При подключении своих файлов их имя указывается в кавычках. И несмотря на то, что в программе не определена переменная number, она будет браться из подключенного файла main.c. Но опять же отмечу, важно, что в данном случае файл main.c располагается в одной папке с главным файлов программы. В то же время данный способ прекрасно работает в GCC. Но для разных сред программирования способ подключения файлов может отличаться. Например, в Visual Studio мы получим ошибку. И более правильный подход будет состоять в том, что определить объявление объекта (переменной/константы) или функции в дополнительном заголовочном файле, а определение объекта или функции поместить в стандартный файл с расширением .c. Например, в нашем в файле main.c уже есть определение переменной number. Теперь в ту же папку добавим новый файл main.h - файл с тем же названием, но другим расширением. И определим в main.h следующий код:
Ключевое слово extern указывает, что данный объект является внешним. И в этом случае мы могули бы его подключить в файл исходного кода:
Этот пример также будет работать в GCC, однако как уже было рассмотрено выше, подключение файла main.h для GCC необязательно. Если разработка ведется в Visual Studio, то определение объекта не надо подключать исходный файл:
Несмотря на то, что здесь явным образом не подключается файл main.c, но при трансляции Visual Studio через заголовочный файл main.h сможет подключить находящийся в той же папке файл main.c. Директива #define определяет идентификатор и последовательность символов, которые будут подставляться вместо идентификатора каждый раз, когда он встретится в исходном файле. Формальное определение директивы:
Используем директиву #define:
Здесь определены три идентификатора BEGIN, END, N. Как правило, идентификаторы имеют имена в верхнем регистре, хотя это необязательно, можно определять имена и строчными символами. В итоге все вхождения последовательности символов "BEGIN" будут заменяться на открывающую фигурную скобку, а "END" - на закрывающую, а символ "N" на число 23. Таким образом, после обработки препроцессора программа приобретет следующий вид:
Для идентификатора необязательно определять последовательность символов, можно ограничиться одним идентификаторов:
Особенно удобно использовать директиву #define для определения размеров массивов:
В данном случае если мы захотим глобально поменять размер массива, то достаточно изменить значение N в директиве define. Следует учитывать, что директива препроцессор не заменяет последовательности символов в двойных и одинарных кавычках и в комментариях:
Причем если идентификатор должен представлять одно слово, то его последовательность символов может состоять из нескольких слов или символов, разделенных пробелами:
Директива #undef В процессе работы мы можем многократно определять новое значение для одного идентификатора:
Но некоторые компиляторы, в частности, gcc, могут выдавать предупреждения при повторном определении идентификатора, и чтобы выйти из этой ситуации, мы можем использовать директиву #undef для отмены действия макроса. Эта директива имеет следующее определение:
Например:
|