Kelas Penyimpanan di C: Auto, Extern, Static, Register (Contoh)

⚡ Ringkasan Cerdas

Kelas penyimpanan dalam bahasa C mendefinisikan cakupan, masa hidup, nilai default, dan lokasi memori setiap variabel, menggunakan empat penentu — auto, register, static, dan extern — untuk mengontrol di mana data berada dan berapa lama data tersebut bertahan selama eksekusi.

  • ️ Empat kelas penyimpanan: C menyediakan penentu auto, register, static, dan extern untuk mendeskripsikan setiap variabel.
  • 🏠 Auto: Kelas lokal default, terbatas pada bloknya dan menyimpan nilai sampah sampai ditetapkan.
  • ⚡ Daftar: Meminta penyimpanan register CPU untuk akses lebih cepat ke variabel yang sering digunakan seperti penghitung.
  • ♻️ Statis: Mempertahankan nilai variabel di antara panggilan fungsi dan secara default bernilai nol pada penggunaan pertama.
  • 🌐 Luar: Membagikan variabel atau fungsi global di beberapa file sumber tanpa mendefinisikannya ulang.
  • 📊 Cakupan dan masa berlaku: Setiap kelas menentukan di mana sebuah variabel terlihat dan berapa lama variabel tersebut berlaku.

Kelas Penyimpanan di C

Apa itu Kelas Penyimpanan di C?

Kelas penyimpanan mewakili visibilitas dan lokasi variabel. Kelas ini memberi tahu bagian kode mana yang dapat kita akses ke variabel tersebut. Kelas penyimpanan dalam C digunakan untuk menjelaskan hal-hal berikut:

  • Ruang lingkup variabel.
  • Lokasi dimana variabel akan disimpan.
  • Nilai inisialisasi suatu variabel.
  • Variabel seumur hidup.
  • Siapa yang dapat mengakses variabel?

Jadi kelas penyimpanan digunakan untuk mewakili informasi tentang suatu variabel.

CATATAN: Suatu variabel tidak hanya terkait dengan sebuah tipe data, nilainya tetapi juga kelas penyimpanan.

Apa Jenis Kelas Penyimpanan di C?

Ada total empat jenis kelas penyimpanan standar. Tabel di bawah mewakili kelas penyimpanan di C.

Kelas penyimpanan Tujuan
mobil Ini adalah kelas penyimpanan default.
luar Ini adalah variabel global.
statis Ini adalah variabel lokal yang mampu mengembalikan nilai bahkan ketika kontrol ditransfer ke pemanggilan fungsi.
daftar Ini adalah variabel yang disimpan di dalam Register.

Kelas Penyimpanan Otomatis di C

Variabel yang didefinisikan menggunakan kelas penyimpanan otomatis disebut sebagai variabel lokal. Otomatis adalah singkatan dari kelas penyimpanan otomatis. Variabel berada di kelas penyimpanan otomatis secara default jika tidak ditentukan secara eksplisit.

Cakupan variabel otomatis dibatasi pada blok tertentu saja. Setelah kontrol keluar dari blok, akses dimusnahkan. Ini berarti hanya blok dimana variabel auto dideklarasikan yang dapat mengaksesnya.

Kata kunci auto digunakan untuk mendefinisikan kelas penyimpanan otomatis. Secara default, variabel auto berisi nilai sampah.

Example, auto int age;

Program di bawah ini mendefinisikan suatu fungsi dengan dua variabel lokal

int add(void) {
   int a=13;
   auto int b=48;
return a+b;}

Kami mengambil program lain yang menunjukkan tingkat visibilitas “tingkat visibilitas” untuk variabel otomatis di setiap kode blok yang independen satu sama lain:

#include <stdio.h>
int main( )
{
  auto int j = 1;
  {
    auto int j= 2;
    {
      auto int j = 3;
      printf ( " %d ", j);
    }
    printf ( "\t %d ",j);
  }
  printf( "%d\n", j);}

Keluaran:

 3 2 1

Kelas Penyimpanan Eksternal di C

Extern adalah singkatan dari kelas penyimpanan eksternal. Kelas penyimpanan eksternal digunakan ketika kita memiliki fungsi atau variabel global yang dibagi antara dua file atau lebih.

Kata kunci extern digunakan untuk mendeklarasikan variabel atau fungsi global di file lain untuk memberikan referensi ke variabel atau fungsi yang telah didefinisikan di file asli.

Variabel yang didefinisikan menggunakan kata kunci eksternal disebut sebagai variabel global. Variabel-variabel ini dapat diakses di seluruh program. Perhatikan bahwa variabel eksternal tidak dapat diinisialisasi karena sudah ditentukan dalam file asli.

Example, extern void display();

File Pertama: main.c

#include <stdio.h>
extern i;
main() {
   printf("value of the external integer is = %d\n", i);
   return 0;}

File Kedua: asli.c

#include <stdio.h>
i=48;

Hasil:

 value of the external integer is = 48

Untuk mengkompilasi dan menjalankan kode di atas, ikuti langkah-langkah di bawah ini

Langkah 1) Buat proyek baru,

  • Pilih Aplikasi Konsol
  • Klik Pergi

Buat proyek baru di Code Blok

Langkah 2) Pilih C dan klik Berikutnya

Pilih bahasa C

Langkah 3) Klik Berikutnya

Klik Berikutnya

Langkah 4) Masukkan detail dan klik Berikutnya

Masukkan detail proyek

Langkah 5) Klik Selesai

Klik Selesai

Langkah 6) Masukkan kode utama seperti yang ditunjukkan pada program sebelumnya ke dalam file main.c dan simpan.

Tambahkan kode ke main.c

Langkah 7) Buat file C baru [File -> baru -> File Kosong, simpan (sebagai original.c) dan tambahkan ke proyek saat ini dengan mengklik “OK” di kotak dialog.

Buat file original.c

Langkah 8) Masukkan dan simpan kode C dari file .c asli yang ditunjukkan pada contoh sebelumnya tanpa fungsi main().

Tambahkan kode ke original.c

Langkah 9) Bangun dan jalankan proyek Anda. Hasilnya ditunjukkan pada gambar berikutnya.

Keluaran program

Kelas Penyimpanan Statis di C

Variabel statis digunakan dalam fungsi/file sebagai variabel statis lokal. Mereka juga dapat digunakan sebagai variabel global

  • Variabel lokal statis adalah variabel lokal yang mempertahankan dan menyimpan nilainya di antara pemanggilan fungsi atau blok dan tetap terlihat hanya oleh fungsi atau blok yang mendefinisikannya.
  • Variabel global statis adalah variabel global yang hanya terlihat oleh file tempat variabel tersebut dideklarasikan.
Example: static int count = 10;

Perlu diingat bahwa variabel statis memiliki nilai awal default nol dan diinisialisasi hanya sekali seumur hidupnya.

#include <stdio.h> /* function declaration */
void next(void);
static int counter = 7; /* global variable */
main() {
 while(counter<10) {
      next();
      counter++;   }
return 0;}
void next( void ) {    /* function definition */
   static int iteration = 13; /* local static variable */
   iteration ++;
   printf("iteration=%d and counter= %d\n", iteration, counter);}

Hasil:

iteration=14 and counter= 7
iteration=15 and counter= 8
iteration=16 and counter= 9

Variabel global dapat diakses di seluruh file sedangkan variabel statis hanya dapat diakses pada bagian tertentu dari suatu kode.

Umur variabel statis ada di seluruh kode program. Variabel yang dideklarasikan atau diinisialisasi menggunakan kata kunci statis selalu berisi nol sebagai nilai default.

Daftarkan Kelas Penyimpanan di C

Anda dapat menggunakan kelas penyimpanan register ketika Anda ingin menyimpan variabel lokal di dalam fungsi atau blok di register CPU RAM untuk memiliki akses cepat ke variabel-variabel ini. Misalnya, “counter” adalah kandidat yang baik untuk disimpan dalam register.

Example: register int age;

Kata kunci `register` digunakan untuk mendeklarasikan kelas penyimpanan register. Variabel yang dideklarasikan menggunakan kelas penyimpanan register memiliki masa berlaku sepanjang program.

Ini mirip dengan kelas penyimpanan otomatis. Variabelnya terbatas pada blok tertentu. Satu-satunya perbedaan adalah variabel yang dideklarasikan menggunakan kelas penyimpanan register disimpan di dalam register CPU, bukan di memori. Register mempunyai akses yang lebih cepat dibandingkan dengan memori utama.

Variabel yang dideklarasikan menggunakan kelas penyimpanan register tidak memiliki nilai default. Variabel-variabel ini sering kali dideklarasikan pada awal program.

#include <stdio.h> /* function declaration */
main() {
{register int  weight;
int *ptr=&weight ;/*it produces an error when the compilation occurs ,we cannot get a memory location when dealing with CPU register*/}
}

Keluaran:

error: address of register variable 'weight' requested

Tabel berikutnya merangkum fitur utama setiap kelas penyimpanan yang umum digunakan dalam pemrograman C

Kelas Penyimpanan Pernyataan Storage Nilai Awal Default Cakupan Lifetime
mobil Di dalam fungsi/blok Memori Unpredictable Di dalam fungsi/blok Di dalam fungsi/blok
daftar Di dalam fungsi/blok Register CPU Sampah Di dalam fungsi/blok Di dalam fungsi/blok
luar Di luar semua fungsi Memori                 Nol Seluruh file dan file lain yang variabelnya dideklarasikan sebagai eksternal waktu berjalan program
Statis (lokal) Di dalam fungsi/blok Memori                 Nol Di dalam fungsi/blok waktu berjalan program
Statis (global) Di luar semua fungsi Memori                 Nol Aksi waktu berjalan program

Pertanyaan Umum Demo Slot

Cakupan (scope) menentukan di mana sebuah variabel terlihat dalam kode, sedangkan masa hidup (lifetime) menentukan berapa lama variabel tersebut berada di memori. Sebuah variabel dapat memiliki cakupan blok (block scope) namun memiliki masa hidup sepanjang program (program-long lifetime).

Keduanya membuat variabel lokal dengan cakupan blok, tetapi `auto` menyimpannya di memori dengan nilai default yang tidak valid, sementara `register` meminta penyimpanan register CPU yang lebih cepat dan melarang pengambilan alamat variabel.

Tidak. `register` hanyalah sebuah permintaan; kompiler dapat mengabaikannya ketika tidak ada register yang kosong. Kompiler modern secara otomatis mengoptimalkan penggunaan register, sehingga kata kunci ini sekarang jarang dibutuhkan.

Variabel statis dan eksternal berada di segmen memori yang diinisialisasi dengan nol selama keseluruhan program, sehingga nilainya dimulai dari nol. Variabel otomatis menggunakan kembali memori tumpukan, menjagaping nilai apa pun yang tertinggal.

Deklarasi `extern` hanya mengumumkan variabel yang didefinisikan di tempat lain dan tidak dapat diinisialisasi. Definisi sebenarnya, dalam satu file, mengalokasikan penyimpanan, dan penautan menghubungkan setiap referensi ke variabel tersebut.

Sebagian besar, tetapi tidak sepenuhnya. C++ Kata kunci `register` sudah usang dan `auto` digunakan kembali untuk inferensi tipe. `static` dan `extern` berperilaku serupa. C++ menambahkan aturan penyimpanan thread_local dan class-member.

Ya. Asisten AI menjelaskan tentang auto, register, static, dan extern, menyarankan penentu yang tepat untuk setiap variabel, dan menandai penyalahgunaan seperti mengambil alamat variabel register.

Kopilot GitHub Melengkapi secara otomatis penghitung statis, deklarasi eksternal antar file, dan petunjuk register, lalu menjelaskan cakupan dan masa pakai secara langsung saat Anda mengetik.

Ringkaslah postingan ini dengan: