Sobes.tech
Junior

C++ da noma'lum nomlar bo'shligidan foydalanishning foydasi nima?

sobes.tech AI

AIdan javob

Nomsiz nomli bo'sh joy nomlar (o'zgaruvchilar, funksiyalar, sinflar) hozirgi tarjima birligi (masalan, .cpp fayl) doirasida ko'rinishini cheklash uchun usul taqdim etadi. Bu C tilida static kalit so'zining global darajadagi foydalanishiga teng va bog'lashda nomlar muammosini oldini oladi.

Asosiy afzalliklar:

  • Nomi muammolarini oldini olish: Nomi, nomsiz nomlar bo'sh joyda e'lon qilingan, boshqa tarjima birliklari uchun ko'rinmaydi, bu esa nomlar to'qnashuvining oldini oladi.
  • Mahalliy ko'rinish: Bu element faqat ushbu faylda ichki foydalanish uchun mo'ljallanganligini aniq ko'rsatishga imkon beradi.
  • static ga alternativ: C++ da nomsiz bo'sh joy, global o'zgaruvchilar va funksiyalar uchun static ga nisbatan ichki bog'lanishni ta'minlash uchun afzal qilingan usuldir.
  • Kod tuzilishini yaxshilash: Bu dasturchining niyatini yanada aniqroq qiladi – ba'zi ob'ektlar faylga xususiydir.

Misol:

// file1.cpp

namespace
{
    int internal_counter = 0; // Faqat file1.cpp da ko'rinadi

    void internal_increment() // Faqat file1.cpp da ko'rinadi
    {
        internal_counter++;
    }
}

void public_function()
{
    internal_increment(); // file1.cpp da public_function dan chaqirilishi mumkin
}

// file2.cpp (boshqa faylda)

// internal_counter yoki internal_increment ga to'g'ridan-to'g'ri murojaat qilish mumkin emas
// Kompilyatsiya vaqti xatosi: 'internal_counter' bu scope da e'lon qilinmagan
// Kompilyatsiya vaqti xatosi: 'internal_increment' bu scope da e'lon qilinmagan
// int value = internal_counter;
// internal_increment();

// Ammo, agar u header faylga e'lon qilingan bo'lsa va mavjud bo'lsa, public_function chaqirilishi mumkin
extern void public_function();
void another_function()
{
    public_function();
}