Подтвердить что ты не робот

Статический и глобальный

Если у меня есть C файл, как показано ниже, в чем разница между i и j?

#include <stdio.h>
#include <stdlib.h>

static int i;
int j;

int main ()
{
    //Some implementation
}
4b9b3361

Ответ 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), а затем он будет иметь внешнюю привязку и может быть доступен через файлы.