Якщо у мене є файл C, як показано нижче, в чому різниця між iі j?
#include <stdio.h>
#include <stdlib.h>
static int i;
int j;
int main ()
{
//Some implementation
}
Якщо у мене є файл C, як показано нижче, в чому різниця між iі j?
#include <stdio.h>
#include <stdlib.h>
static int i;
int j;
int main ()
{
//Some implementation
}
Відповіді:
iмає внутрішнє зв’язування, тому ви не можете використовувати ім’я iв інших вихідних файлах (строго одиницях перекладу) для посилання на той самий об’єкт.
jмає зовнішню зв'язок, тому ви можете використовувати jдля посилання на цей об'єкт, якщо заявляєте про це externв іншій одиниці перекладу.
iне видно за межами модуля; jдоступна у всьому світі.
Тобто інший модуль, який зв’язаний з ним, може зробити
extern int j;
а потім мати можливість читати та записувати значення в j. Той самий інший модуль не може отримати доступ i, але може оголосити свій власний екземпляр, навіть глобальний - який не видно першому модулю.
externгарантовано не викликає проблем, якщо один модуль має символ як не- externі громадськості (що виділяє його). Ранні реалізації Unix об’єднували символи з однойменною назвою - майже як Фортран, - тому externне вимагалося.
iматиме статичну зв'язок , тобто змінна доступна лише у поточному файлі.
jслід визначати як extern, тобто
extern int j;
в іншому файлі заголовка ( .h), і тоді він матиме зовнішнє зв’язування , і до нього можна отримати доступ через файли.
Область дії статичної змінної / функції знаходиться в одному файлі, незважаючи на те, що ви включили файл як частину іншого вихідного файлу.
Сфера дії глобальної змінної знаходиться у всіх файлах, до яких вона включена. Щоб включити змінну в інший вихідний файл, ми використовуємо externперед оголошенням змінної. У цьому випадку для змінної знову не виділяється пам’ять.
externвикористовується для оголошення змінної C без її визначення. externКлючове слово розширює видимість змінних C та функцій C. Оскільки функції за замовчуванням видно через програму, використання externв декларації / визначенні функції не потрібне. Його використання зайве.