Sobes.tech
Junior

C++та глобал жана жергиликтүү өзгөрмөлөр качан жана канчага чейин бар болот?

sobes.tech AI

AIден жооп

Глобалдык өзгөрмөлөр

  • Өмүрүнүн узактыгы: Программа ишке киргизилгенден баштап аяктай турганга чейин.
  • Сактоо жери: Адатта, статикалык эс тутум аймагында (.data же .bss бөлүмдөрүндө).
  • Инициализация:
    • Файл деңгээлиндеги статикалык эмес глобалдык өзгөрмөлөр, татаал конструкторлору менен, main() чакырылуудан мурун инициализацияланат.
    • Нөлгө инициализацияланган глобалдык өзгөрмөлөр (мисалы, int i = 0;) да main()-ден мурун инициализацияланат.
    • const менен белгиленген же статикалык мөөнөтү бар өзгөрмөлөр программаны жүктөө учурунда инициализацияланат.
  • Жеткиликтүүлүк: Бардык функцияларда көрүнөт, көрүнүш аймагында.

Жергиликтүү өзгөрмөлөр

  • Өмүрүнүн узактыгы: Өзгөрмө аныкталган блоктун (функция, цикл, шарттык оператор ж.б.) ичинде аныкталган учурдан баштап, ошол блоктон чыгуу менен аяктайт.
  • Сактоо жери: Адатта, стекте (автоматтык өзгөрмөлөр үчүн). Статикалык жергиликтүү өзгөрмөлөр статикалык эс тутумда сакталат.
  • Инициализация:
    • Автоматтык жергиликтүү өзгөрмөлөр алдын ала инициализацияланбайт ("мусор" камтыйт). Ачык инициализация талап кылынат.
    • Статикалык жергиликтүү өзгөрмөлөр биринчи жеткенде бир жолу инициализацияланат.
  • Жеткиликтүүлүк: Тек ошол аныкталган блоктун ичинде көрүнөт.

Мисалдар

// Глобалдык өзгөрмө
int global_variable = 10;

void some_function() {
    // Жергиликтүү өзгөрмө (автомат)
    int local_variable_1; // Инициализацияланбаган

    // Жергиликтүү өзгөрмө (автомат) жана инициализацияланган
    int local_variable_2 = 20;

    // Статикалык жергиликтүү өзгөрмө
    static int static_local_variable = 30; // Бир жолу инициализацияланат

    // Глобалдык өзгөрмөгө жетүү
    global_variable++;

    // Жергиликтүү өзгөрмөлөргө жетүү
    local_variable_1 = global_variable;
    static_local_variable++;
}

int main() {
    some_function();
    some_function(); // static_local_variable маанисин сактап калды
    // Глобалдык өзгөрмө бул жерде жеткиликтүү
    // local_variable_1 жана local_variable_2 жеткиликтүү эмес

    return 0;
}

салыштырма таблица

Өзгөчөлүк Глобалдык өзгөрмөлөр Жергиликтүү өзгөрмөлөр (автоматтык) Статикалык жергиликтүү өзгөрмөлөр
Өмүрүнүн узактыгы Программа ишке киргизилгенден аяктай турганга чейин Өзгөрмө аныкталган учурдан чыгуу менен аяктайт Биринчи жеткенден программаны аяктаганга чейин
Сактоо жери Статикалык эс тутум аймагы (.data, .bss) Стек Статикалык эс тутум аймагы (.data, .bss)
Инициализация main() чакырылгандан мурун же программа жүктөлгөндө Алдын ала инициализацияланбайт. Ачык инициализация талап кылынат Бир жолу биринчи жеткенде инициализацияланат
Жеткиликтүүлүк Файлдын бардык функцияларында көрүнөт Тек ошол блоктун ичинде гана көрүнөт Тек ошол блоктун ичинде гана көрүнөт