Статический и глобальный
Если у меня есть C файл, как показано ниже, в чем разница между i
и j
?
#include <stdio.h>
#include <stdlib.h>
static int i;
int j;
int main ()
{
//Some implementation
}
Ответы
Ответ 1
i
имеет внутреннюю связь, поэтому вы не можете использовать имя i
в других исходных файлах (строго единицы перевода), чтобы ссылаться на один и тот же объект.
j
имеет внешнюю связь, поэтому вы можете использовать j
для ссылки на этот объект, если вы объявите его extern
в другой единицы перевода.
Ответ 2
i
не отображается вне модуля; j
доступен по всему миру.
То есть другой модуль, который связан с ним, может выполнять
extern int j;
а затем сможете читать и записывать значение в j
. Тот же другой модуль не может получить доступ к i
, но может объявить свой собственный экземпляр, даже глобальный, который не отображается для первого модуля.
Ответ 3
Разница в том, что i
имеет внутреннюю связь, а j
имеет внешнюю связь. Это означает, что вы можете получить доступ к j
из других файлов, с которыми вы связываетесь, тогда как i
доступен только в файле, где он объявлен.
Ответ 4
i
будет иметь статическую связь, т.е. переменная доступна только в текущем файле.
j
следует определить как extern
, то есть
extern int j;
в другом файле заголовка (.h
), а затем он будет иметь внешнюю привязку и может быть доступен через файлы.