В чем разница между "область" и "область применения программы "
переменная, объявленная глобально, называется имеющей область действия программы
Переменная, объявленная глобально со статическим ключевым словом, как говорят, имеет область файла.
например:
int x = 0; // **program scope**
static int y = 0; // **file scope**
static float z = 0.0; // **file scope**
int main()
{
int i; /* block scope */
/* .
.
.
*/
return 0;
}
в чем разница между этими двумя?
4 ответов
в C99 нет ничего под названием "область действия программы". В вашем примере переменная x
имеет область файла, которая завершается в конце единицы перевода. Переменные y
и z
заявленные static
также имеют область файла, но с внутренней связью.
C99 (6.2.2/3) Если объявление идентификатора области файла для объекта или функция содержит спецификатор класса хранения static, идентификатор имеет внутренний связь
кроме того, переменная x
имеет внешнюю связь, что означает имя x
can доступен для других единиц перевода или по всей программе.
С99 (6.2.2/5) Если объявление идентификатора для объекта область файла и нет спецификатора класса хранения, его связь является внешней.
переменные, объявленные как static
невозможно получить прямой доступ из других файлов. Напротив, не-static
к ним можно получить доступ из других файлов, если они объявлены как extern
в тех других файлах.
пример:
фу.c
int foodata;
static int foodata_private;
void foo()
{
foodata = 1;
foodata_private = 2;
}
фу.h
void foo();
main.c
#include "foo.h"
#include <stdio.h>
int main()
{
extern int foodata; /* OK */
extern int foodata_private; /* error, won't compile */
foo();
printf("%d\n", foodata); /* OK */
return 0;
}
как правило, следует избегать глобальных переменных. Тем не менее, в реальных приложениях они часто полезны. Это общее, чтобы переместить extern int foo;
декларации в общий файл заголовка (foo.в Примере з).
C программы могут быть записаны в нескольких файлах, которые объединяются компоновщиком в окончательное выполнение. Если вся ваша программа находится в одном файле,то разницы нет. Но в реальном сложном программном обеспечении, которое включает использование библиотек функций в разных файлах, разница существенна.
переменной с областью файла видна только от точки объявления до конца файла. Файл ссылается на файл программы, содержащий исходный код. В большой программе может быть несколько программных файлов. Переменные с областью действия программы видны во всех файлах (не только в файле, в котором она определена), функциях и других блоках всей программы. Для получения дополнительной информации. проверьте это : область и классы хранения в C.