Internal dan Eksternal Linkage Bahasa C Beserta Fungsinya
- Scope: scope dari identifier adalah bagian dari program dimana identifier dapat diakses secara langsung. Pada bahasa c, semua identifier adalah scope lexical (atau static).
- Linkage: linkage mendenskripsikan bagaimana nama dapat mengacu entitas yang sama terhadap seluruh program atau unit translasi tunggal. Pengertian tersebut terdengar sama seperti scope, namun definisi tersebut berbeda. Untuk memahami maksud dari definisi tersebut, dapat dipahami dari pengertian proses kompilasi program.
- Unit translasi: sebuah translasi unit adalah sebuah file yang mengandung kode program, file header, dan dependencies. Semua sumber kode program tersebut dikelompokkan bersama dalam sebuah file agar dapat digunakan untuk menghasilkan object eksekusi tunggal. Adalah suatu hal yang penting untuk menghubungkan sumber program yang berarti secara bersamaan. Contohnya, kompilator harus mengetahui definisi printf terhadap file header dalam stdio.
Pada bahasa C dan C++, sebuah program yang terdiri dari banyak file kode program dikompilasi dalam saat yang bersamaan. Hingga tahapan kompilasi, sebuah variabel akan dideskripsikan oleh scope-nya. Hal ini dilakukan ketika proses linking dimulai, dan properti linkage dijalankan. Jadi, scope adalah properti yang menangani compiler, dimana linkage adalah properti yang menangani linker-nya.
Linker menghubungkan kode program secara bersamaan dalam stage linking dari proses kompilasi. Linker program mengambil multi file kode mesin sebagai input, dan menghasilkan eksekusi kode object yang memberikan simbol dan pengaturan object dalam ruang alamat.
Linkage adalah sebuah properti yang mendeskripsikan bagaimana variabel harusnya dihubungkan oleh linker. Apakah sebuah variabel tersedia untuk file lain yang digunakan? Atau apakah sebuah file hanya digunakan untuk deklarasi file? Keduanya ditentukan menggunakan linkage. Linkage memungkinkan beberapa pasang nama diletakkan pada file basis yang ditentukan berdasarkan scope-nya.
satu, Internal Linkage: identifier menerapkan internal linkage untuk tidak dapat diakses dari luar unit translasi yang telah di deklarasikan pada bagian dalam. Setiap identifier yang bersama dengan unit dapat mengakses identifier yang memiliki internal linkage. Hal ini diterapkan dengan menggunakan keyword static. Internal linkage identifier disimpan dalam bagian inisialisasi dan uninisialisasi dari RAM.
Catatan: static juga memiliki makna dalam referensi scope, tetapi tidak dibahas pada materi ini.
Contoh: Animals.cpp
// Ilustrasi link internal
// pada bahasa C
#include <stdio.h>
static int animals = 8;
const int i = 5;
int call_me(void)
{
printf("%d %d", i, animals);
}
// Ilustrasi link internal
// pada bahasa C
#include <stdio.h>
int main()
{
call_me();
animals = 2;
printf("%d", animals);
return 0;
}
Baca Juga:
Contoh: Wash.cpp
// Ilustrasi link internal
// pada bahasa C
#include <stdio.h>
#include "animal.cpp"
// catatan: animal.cpp
// di include dari file lain
int main()
{
call_me();
printf("\n selamat mencuci baju!");
animals = 10;
printf("%d\n", animals);
return 0;
}
having fun washing! 10
Terdapat tiga unit translasi (Animals, Feed, Wash) yang ketiganya menggunakan kode animals. Hal ini mengarahkan pada kesimpulan bahwa translasi unit mengakses copy-nya sendiri dari animals. Inilah kenapa didapatkan hasil animals = 8 Animals.cpp, animals = 2 untuk Feed.cpp dan animals = 10 untuk Wash.cpp file. Proses tersebut akan meningkatkan aktifitas memori dan mengurangi kemampuan performa komputer.
Properti lain dari internal linkage adalah hanya jika diimplementasikan ketika variabel memiliki global scope, dan semua konstanta secara otomatis dihubungkan secara internal.
Kegunaan: Seperti yang diketahui, variabel internal link dilewatkan melalui copy. Jadi, Jika sebuah header file memiliki sebuah fungsi fun1() dan kode program tersebut juga mengandung fun1() tetapi dengan sebuah definisi berbeda, maka dua fungsi tidak akan bertabrakan satu sama lain. Jadi, pada umumnya kegunaan dari internal linkage adalah untuk menyembunyikan fungsi unit lokal translasi yang mengandung method untuk membaca input dari user. Kedua fungsi adalah independen dari setiap fungsi ketika dihubungkan.
dua, Eksternal linkage: sebuah identifier mengimplementasikan eksternal linkage visible terhadap setiap unit translasi. Identifier eskternal linkage dibagi antara unit translasi dan dianggap berada ditingkat terluar program. Dalam praktiknya, hal ini bermakna bahwa harus dilakukan pendefinisian identifier dalam sebuah tempat yang visible terhadap semua, untuk hal tersebut hanya dapat dilakukan dengan hanya satu definisi visible. Hal ini merupakan linkage default untuk variabel dan fungsi scope global. Jadi, semua instance dari sebuah identifier khusus dengan linkage eksternal mengacu pada identifier sama dalam suatu program. Keyword extern berfungsi untuk mengimplementasikan eksternal linkage. Ketika keyword extern digunakan, maka linker akan diberitahu untuk melihat definisi dibagian manapun. Jadi, deklarasi dari identifier eksternal linked tidak mengambil ruang apapun dari identifier extern yang secara umum disimpan dalam inisialisasi dan uninisialisasi atau teks segmen dari RAM.
Sangat mungkin menggunakan variabel extern pada variabel scope lokal. Berikut ini akan dipahami lebih jauh perbedaan antara linkage dan scope.
// Ilustrasi link eksternal
// pada bahasa C
#include <stdio.h>
void foo()
{
int a;
extern int b; // baris 1
}
void bar()
{
int c;
c = b; // error
}
int main()
{
foo();
bar();
}
Penjelasan: variabel b memiliki scope lokal dalam fungsi foo, meskipun variabel b adalah variabel extern. Perlu dicatat bahwa kompilasi dilakukan sebelum proses linking atau penghubungan; dengan kata lain scope adalah konsep yang digunakan hanya selama fase kompilasi. Setelah program selesai dikompilasi sudah tidak terdapat lagi konsep variabel scope.
Selama proses kompilasi, kompilator yang sama akan melalui fungsi bar() dan mencoba untuk menemukan variabel b. Ketika variabel b telah dideklarasikan extern, maka tidak akan dialokasikan memori oleh compiler, atau dengan kata lain variabel tersebut tidak ada. Kompilator akan membiarkan linker menemukan definisi dari b pada unit translasi, dan linker akan menandai b dengan nilai spesifik dalam definisi. Hanya dengan cara demikian variabel b akan dapat mengalokasikan memori. Namun demikian, karena tidak terdapat deklarasi yang diberikan pada waktu kompilasi program pada scope dari bar(), atau pada global scope, maka kompilator akan memberikan pesan error.
Adalah tugas dari kompilator untuk memastikan semua variabel digunakan pada scope-nya masing-masing. Program yang telah dideklarasikan sebelumnya dapat dikoreksi sebagai berikut.
// Ilustrasi link eksternal
// pada bahasa C
#include <stdio.h>
int x = 10;
int z = 5;
int main()
{
extern int y; // baris 2
extern int z;
printf("%d %d %d", x, y, z);
}
int y = 2;
- Variabel Dua Pilihan pada Bahasa C Menggunakan Bool
- Integer Promotion Bahasa C dan Fungsinya
- Perbandingan Nilai Float Bahasa C Terhadap Nilai Lainnya
- Tipe Data Long Bahasa C Beserta Fungsi dan Perbedaan Kebutuhannya
- Tipe Data size_t pada Bahasa C dan Fungsinya
- Tipe Data dan Modifier Bahasa C Beserta Fungsinya
- Tipe Data Float dan Double Bahasa C Beserta Fungsinya
5 komentar untuk "Internal dan Eksternal Linkage Bahasa C Beserta Fungsinya"
Hubungi admin melalui Wa : +62-896-2414-6106
Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.
Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.
- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -
Terima kasih akhirnya menemukan blog belajar pemrograman dengan menggunakan bahasa indonesia yang gampang dipahami,,
BalasHapusApa fungsi linkage pada bahasa pemrograman C?
BalasHapusDalam bahasa pemrograman, terutama pada bahasa pemrograman yang dikompilasi dengan bahsa C, C++, dan D, linkage digunakan untuk menjelaskan bagaimana 'nama' dapat atau tidak dapat digunakan untuk merujuk ke suatu entitas yang sama pada seluruh program atau pada satu unit penerjemahan tunggal.
Hapusada berapa tipe linkage atau tautan pada bahasa C?
BalasHapusAda tiga jenis linkage pada bahasa C, yaitu: Linkage eksternal, linkage internal, dan no linkage.
Hapus