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