Статические функции в языке программирования Си

Staticeskie Funkcii V Azyke Programmirovania Si



«static» — это зарезервированное слово в компьютерном языке C. Это спецификатор класса хранения, который можно использовать с функциями. Программа на C может иметь более одного файла. Только один из файлов должен иметь функцию C main(). В этой статье рассматриваются только два файла: файл с функцией C main(), который называется mainFile.c, и другой файл без функции main, который называется otherFile.c.

Глобальная функция

Глобальная функция — это функция, определенная в файле C перед функцией main(). Даже функция main() является глобальной функцией, но в этой статье мы не рассматриваем функцию main(). В языке C определяемые программистом функции обычно являются глобальными функциями и называются просто функциями.

Глобальную функцию можно вызывать в любой области видимости в ее файле. Чтобы глобальная функция была видна в другом файле, ее прототип должен быть объявлен в этом другом файле (см. ниже). Чтобы функция, определенная в одном файле, не отображалась в другом файле, перед определением следует указать зарезервированное слово, статический. При этом статическая функция будет глобальной функцией только в своем собственном файле и не будет видна в другом файле.







Таким образом, глобальную функцию, определенную в otherFile.c, можно увидеть в любом месте otherFile.c. Чтобы его можно было увидеть в mainFile.c, его прототип должен быть объявлен в mainFile.c (см. ниже). Его определению в otherFile.c не должно предшествовать слово «static». Чтобы он не был виден в mainFile.c, его определение в otherFile.c должно быть сделано статическим, убрав запятую, поставив перед ним слово static.



Эта статья иллюстрирует статическую функцию на языке программирования C, начиная со значения прототипа функции и его использования в программе C из двух или более файлов.



Компиляцию файлов mainFile.c и otherFile.c можно выполнить с помощью следующей команды терминала Bash:





основной файл gcc. с другой файл. с - эта темп. исполняемый файл

temp.exe — это имя результирующего единственного исполняемого файла.

Содержание статьи



– Введение – см. выше

- Прототип функции C

– Глобальная функция

- Статическая функция Собственно

- Вывод

Прототип функции C

Рассмотрим определение глобальной функции:

уголь * фн1 ( уголь * Стри ) {
возвращаться Стри ;
}

Прототип этой функции:

уголь * фн1 ( уголь * Стри ) ;

Это подпись функции, заканчивающаяся точкой с запятой.

Теперь пусть содержимое otherFile.c будет:

уголь * фн1 ( уголь * Стри ) {

возвращаться Стри ;

}

Предположим, что файл otherFile.c содержит только определение глобальной функции fn1(). Теперь пусть содержимое файла mainFile.c будет таким:

#include

уголь * фн1 ( уголь * Стри ) ;

инт главный ( )
{
уголь * ул знак равно фн1 ( 'видимый' ) ;
printf ( '%s \n ' , ул ) ;

возвращаться 0 ;
}

Он начинается с включения заголовка (библиотеки) . Затем следует объявление прототипа функции fn() другого файла.

В этом основном файле нет определения какой-либо глобальной функции, кроме функции main() по умолчанию. В основной функции первый оператор вызывает функцию fn1(), определенную в другом файле. Этот вызов не был бы эффективным, если бы прототип fn1() не был объявлен в этом файле, mainFile.c.

Если читатель закодировал два вышеуказанных файла, то он может скомпилировать программу в один исполняемый файл с помощью следующей команды:

основной файл gcc. с другой файл. с - эта темп. исполняемый файл

нажав клавишу Enter в конце строки. Вывод должен быть «виден».

Глобальная функция

Файл mainFile.c можно изменить следующим образом:

#include

уголь * фн1 ( уголь * Стри ) ;

уголь * фн ( уголь * ул. ) {
возвращаться ул. ;
}

инт главный ( )
{
уголь * стр1 знак равно фн1 ( 'видимый' ) ;
printf ( '%s \n ' , стр1 ) ;
уголь * стр2 знак равно фн ( 'Глобал просматривается в своем файле'. ) ;
printf ( '%s \n ' , стр2 ) ;
возвращаться 0 ;
}

Теперь в файле mainFile.c есть две глобальные функции. Имена функций — fn() и main(). dfn() — глобальная функция. Это было замечено в локальной области видимости функции main() вызовом. В языке C глобальная функция в глобальной области видимости, такая как fn(), называется просто функцией. Кроме того, глобальная функция fn1() в файле otherFile.c просто упоминается как функция.

Если два файла перекомпилировать в temp.exe, то результат будет таким:

видимый

Глобал видел в своем файле.

Примечание: определение функции fn() также можно сделать видимым в другом файле, otherFile.c. Для этого необходимо создать объявление прототипа в otherFile.c следующим образом:

уголь * фн ( уголь * ул. ) ;

заканчивается точкой с запятой. Это упражнение оставлено читателю в качестве упражнения.

Статическая функция

Из приведенного выше обсуждения функцию можно увидеть в любой области (в любом месте) в ее файле. Его также можно увидеть в другом файле, для той же программы, если там объявлен ее прототип. Чтобы определение файла не отображалось в другом файле, сделайте определение статическим, поставив перед ним зарезервированное слово static. Даже если его прототип объявлен в другом файле, он все равно не будет виден в другом файле. Файлы программы даже не компилируются. Чтобы проиллюстрировать это, пусть содержимое файла otherFile.c будет таким:

статический уголь * фн1 ( уголь * Стри ) {

возвращаться Стри ;

}

Это то же самое содержимое в файле otherFile.c, что и раньше, но с предшествующим зарезервированным словом static. Содержимое файла mainFile.c остается прежним. Если предпринята попытка скомпилировать файлы программы с помощью команды,

основной файл gcc. с другой файл. с - эта темп. исполняемый файл

компилятор выдаст сообщение об ошибке, означающее, что программа не скомпилирована. Даже если объявлению прототипа в другом файле также предшествует static, файлы программы все равно не скомпилируются.

Вывод

Определение функции на языке C является глобальной функцией. Эта функция может быть вызвана (увидена) в любой области видимости в ее файле. Чтобы эту функцию можно было увидеть в другом файле, например в основном файле, ее объявление прототипа должно быть напечатано в этом другом файле. Чтобы эту функцию нельзя было увидеть в другом файле, сделайте ее определение статическим, поставив перед ним зарезервированное слово static.