Serial Tutorial C (3) : Menggabungkan beberapa file saat kompilasi

Sebuah program dapat dipecah menjadi beberapa file. Hal ini membuat sebuah program lebih gampang diedit dan lebih mudah dipahami, apalagi jika programnya adalah sebuah program besar. Hal itu juga memungkinkan setiap bagian program di kompile secara terpisah.
Misalnya saya punya baris-baris program seperti berikut :

#include
int
 main (void)
 {
 printf ("Hello, world!\n");
 return 0;
 }

Dalam contoh berikut kita akan membagi program Hello World menjadi tiga file : ‘main.c’, ‘hello_fn.c’ dan file header ‘hello.h’. Program main.c ditulis seperti berikut :

#include "hello.h"
int
 main (void)
 {
 hello ("world");
 return 0;
 }

Perhatikan bahwa printf di baris program sebelumnya kita ganti dengan hello. hello disini kita sebut fungsi eksternal. Kita akan mendefinisikan fungsi hello ini dalam file bernama hello_fn.c, yang isi baris-barisnya adalah seperti berikut :

#include <stdio.h>
 #include "hello.h"
void
 hello (const char * name)
 {
 printf ("Hello, %s!\n", name);
 }

Fungsi tersebut menampilkan pesan “Hello, name!” menggunakan argumen yang diberikan pada “name”
Program main.c  dan hello_fn.c diatas juga mendeklarasikan file hello.h dengan direktif #include “hello.h”. File hello.h ini berisi deklarasi fungsi hello. Deklarasi digunakan untuk memastikan bahwa tipe argumen dan nilai yang diperoleh cocok dengan pemanggilan fungsi dan definisi fungsi. Kita tidak perlu memasukkan file header sistem “stdio.h” di file “main.c” untuk mendeklarasikan fungsi printf, karena file “main.c” tidak memanggil fungsi printf secara langsung.
Isi dari file hello.h adalah sebagai berikut :

void hello (const char * name);

Kita dapat mengkompilasi file-file tersebut dengan perintah :

$ gcc -Wall main.c hello_fn.c -o newhello

File ini akan mengeluarkan input newhello. Kita tidak perlu memasukkan file hello.h, karena direktif #include hello.h akan secara otomatis menyertakan file tersebut dalam proses kompilasi yang kita lakukan.
Bersambung

Be the first to comment

Leave a Reply

Your email address will not be published.


*