Header dan Library

Kali ini, yang akan kita pelajari adalah header. Header merupakan file yang berisi deklarasi variabel, function, tipe data, dll. Semua function standar dalam Bahasa C ada dalam header. Karena itu, sebuah program dalam Bahasa C minimal menggunakan 1 header seperti "stdio.h" supaya bisa menggunakan fungsi-fungsi standar dalam bahasa C.  

Sebelumnya, kita sering menggunakan #include dan header. #include digunakan untuk menambahkan / menyisipkan isi file "Header" ke dalam kode program saat program dicompile.

Untuk menggunakan Header standar kita mengapit nama header dengan "<" dan ">" bersama dengan pernyataan #include. Salah satu header standar yang bisa kita gunakan adalah "stdio.h" yang berguna untuk menampilkan input dan output. Kita bisa menggunakan fungsi printf untuk membuat program "Hello world".
#include <stdio.h>

int main(){
     printf("Hello, World!\n");
     return 0;
}
Program diatas mencetak "Hello, world!" dengan function printf. Function printf merupakan function dalam header "stdio.h". 
Kalian bisa menggunakan beberapa header dan library standar yang ada dalam Bahasa C. Beberapa di antara header standar tersebut, yaitu :
  1. stdlib.h
  2. stdio.h
  3. math.h
  4. string.h
Selain header standar ada beberapa header lainnya yang cukup penting yang biasanya disertakan saat instalasi compiler, misalnya "conio.h", "io.h", dll.

Membuat header sendiri
Selain header standar dari bahasa C, kita juga bisa membuat header kita sendiri. Header tersebut bisa kita letakkan di folder yang sama dengan file berisi kode program dalam bahasa C. Untuk menggunakan header di dalam folder yang sama dengan kode program kita, kita bisa menuliskan nama header dalam tanda kutip. Misalnya :
#include <iostream>
#include "headerku.h"

int main(){
     std::cout << PI;//variabel atau konstanta ini ada di dalam "headerku.h"
     return 0;
}
Kalau kalian ingin menggunakan kode program di atas, kalian harus meletakkan file "headerku.h" di dalam folder yang sama dengan file kode program tersebut. Header tersebut harus berisi variabel atau konstanta dengan dengan nama "PI".

Untuk lebih jelasnya, projectnya bisa didownload di sini.

Header dan Library Eksternal
Header lain tidak selalu harus kita buat sendiri. Beberapa situs juga menyediakan header eksternal.

Ada yang menganggap bahasa C hanya untuk membuat program dari console. Tapi, itu tidak benar. Jika kalian menggunakan windows, kalian bisa menggunakan "#include <windows.h>" untuk membuat program dengan tampilan yang berisi tombol-tombol dan tampilan menarik lain. Selain itu, kalian juga bisa menggunakan library eksternal. Beberapa library eksternal yang bisa kalian gunakan dalam bahasa C, misalnya :
  1. SDL
  2. GTK
  3. FLTK
  4. OpenGL
  5. Sqlite
  6. Glut
  7. Glew
  8. QT library
  9. dll.
Dalam bahasa C, function dalam library eksternal dihubungkan dengan kode program menggunakan header dan file library (.a atau .lib). Selain itu, untuk menjalankan program kita butuh runtime library (.dll untuk windows atau .so untuk linux). Library berisi sekumpulan function terpisah yang bisa digabungkan dengan program yang akan kita buat. Header biasanya hanya berisi prototype dan deklarasi variabel jika function sudah disimpan dalam library.

Untuk menggunakan header eksternal yang terdiri dari banyak file, kalian perlu mengatur posisinya lewat setting di IDE atau compiler. Setelah letak foldernya diatur lewat setting, header eksternal bisa digunakan dengan cara yang hampir sama dengan header standar.

Berikut ini contoh kode program sederhana untuk SDL2.
#include <SDL2/SDL.h>
#include <stdio.h>

int main( int argc, char* args[] ){
    SDL_Window* window = NULL;
    SDL_Surface* layar = NULL;

    if( SDL_Init( SDL_INIT_VIDEO ) < 0 ){
        printf( "gagal : %s\n", SDL_GetError() );
    }
    else{
        window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 640, SDL_WINDOW_SHOWN );
        if( window == NULL ){
            printf( "gagal : %s\n", SDL_GetError() );
        }
        else{
            layar = SDL_GetWindowSurface( window );
            SDL_FillRect( layar, NULL, SDL_MapRGB( layar->format, 0xFF, 0xFF, 0x00 ) );
            SDL_UpdateWindowSurface( window );
            SDL_Delay( 5000 );
        }
    }

    SDL_DestroyWindow( window );
    SDL_Quit();
    return 0;
}
Contoh di atas menyertakan SDL.h yang harus kita tentukan letaknya dalam pengaturan atau saat meng-compile kode program. Selain itu kita juga harus menyertakan pengaturan lain.

Membuat Library Sendiri
Selain menggunakan library yang sudah ada, kita bisa juga membuat library sendiri dengan bahasa C.

Kita bisa menggunakan IDE seperti code block atau IDE lain yang sudah menyediakan project untuk membuat library.

Library bisa kita gunakan untuk kode program yang dibuat dengan bahasa pemrograman yang sama. Untuk menggunakan library kita bisa melakukan pengaturan lewat setting dalam IDE. Library biasanya menyertakan header yang berisi nama function dalam library tersebut.

Dalam OS Linux, ada dua tipe library yang bisa kita buat dengan bahasa C atau bahasa pemrograman lainnya. Jenis-jenis library tersebut, yaitu :
  1. Static libraries (.a): Library yang menjadi bagian dari program atau aplikasi setelah kode program dicompile.
  2. Dynamically linked shared object libraries (.so): Jenis library ini bisa digunakan dengan melalui setting operasi atau dimuat saat program dijalankan.
Kali ini, kita akan coba membuat static library. Static library bisa berisi beberapa function yang tersimpan dalam static library tersebut sehingga kita bisa menggunakannya tanpa kode program dari library tersebut saat kita akan membuat program baru. Library akan "menyatu" dengan program yang kita buat saat suatu program dicompile.

Untuk membuat static library, klik File => New => Project. Kemudian, pilih static library, dan klik Go. Pilih folder dan bahasa pemrograman yang akan kita gunakan setelahnya dengan menekan tombol Next beberapa kali hingga Finish.
Ganti kode program yang sudah ada di file "main.c" atau file utama yang tersedia di project dengan kode program di bawah ini, lalu compile atau build!
#include <stdio.h>

int Tambah(int i1, int i2){
    return i1 + i2;
}

int Kurang(int i1, int i2){
    return i1 - i2;
}

void Tampilkan(int i1, int i2){
    printf("A: %d", i1);
    printf("B: %d", i2);

    printf("A+B: %d", i1-i2);
    printf("B-B: %d", i1+i2);
}
Setelah kalian berhasil mengcompile, kalian bisa mendapatkan hasilnya di folder "bin/Release" atau "bin/Debug" di dalam folder Project kalian. Static library adalah file dengan ekstensi "*.a" atau "*.lib". Kalian bisa menggunakan static library berulang-ulang dalam project lain yang kalian buat.

Cara Menggunakan Static Library
Untuk menggunakan static library, kita bisa membuat project baru berupa program console atau GUI. Sekarang kita akan menggunakan program console untuk menggunakan static library. Buat project baru dengan bahasa C dan ketik kode program di bawah ini setelah kalian membuat project baru.
#include <stdio.h>
#include <stdlib.h>

int Tambah(int i1, int i2);//Prototype Function tambah
int Kurang(int i1, int i2);//Prototype Function kurang

int main(){
    printf("%d\n", Tambah(3, 1));
    printf("%d\n", Kurang(3, 1));
    return 0;
}
Kalau kalian menggunakan bahasa C++, programnya mungkin tidak akan bisa dicompile karena static library dibuat dalam bahasa C. Kalian bisa menggunakan extern "C" untuk mengatasi error karena perbedaan bahasa pemrograman. Kode program untuk bahasa C++ yang menggunakan library dari bahasa C bisa kalian lihat di bawah ini.
#include <stdio.h>
#include <stdlib.h>

extern "C"{
    int Tambah(int i1, int i2);//Prototype Function tambah
    int Kurang(int i1, int i2);//Prototype Function kurang
}

int main(){
    printf("%d\n", Tambah(3, 1));
    printf("%d\n", Kurang(3, 1));
    return 0;
}
Untuk menggunakan function yang terdapat dalam library, kalian perlu menambahkan prototype dari function yang akan kalian gunakan dalam kode program yang memerlukannya. Kalian bisa meletakkan prototype dan variabel yang kalian butuhkan dalam program utama maupun header. Berikut ini adalah cara pengaturannya.
  1. Sebelum meng-compile dan menjalankan program tersebut tambahkan librarynya melalui menu "Project => Properties". 
  2. Setelah masuk ke pengaturan melalui menunya, klik "Project's build options".
  3. Masuk ke tab Linker settings, dan klik add untuk menambahkan library sebagai bagian dari program.
Kalau masih bingung, coba cari submenu di menu project yang membuka pilihan seperti yang saya tampilkan. Sekarang kalian seharusnya bisa meng-compile dan menjalankan kode programnya kalau pengaturannya sudah benar. Kalau kalian mau, kalian bisa coba memisahkan deklarasi variabel dan prototype-nya ke dalam header.
Untuk yang malas mengetik download "source code untuk membuat static library" di sini.