Jumat, 21 Oktober 2016

Mengapa Fungsi Main Memiliki Bentuk Berbeda-beda ?


Ada banyak cara untuk mengawali menulis kode pertama.

int main(int argc, char **argv){
    ...
}

void main(int argc, char **argv){
    ...
}

int main(){
    ...
}
void main(){
    ...
}
Bahkan mungkin dengan cara yang lain lagi.

Mengapa demikian, dan mengapa program dapat di-build dengan normal?
Tidak  seperti fungsi lain, fungsi main adalah fungsi spesial dalam sebuah struktur program. Fungsi main menjadi titik awal dari sebuah program untuk melakukan kerjanya.

Sebagai titik awal, tentu saja fungsi ini harus memiliki wewenang untuk mengatur subfungsi dibawahnya. Tapi juga harus bertanggung jawab menginterpretasikan kemauan pengguna dalam menjalankan program.

Model eksekusi program klasik melalui terminal sudah mulai banyak ditinggalkan, namun kompatibilitasnya tetap terjaga. Meski program tidak dijalankan dari terminal/command line, program akan sellu menerima perintah eksekusi dalam bentuk command line. Perintah ini adalah argv yang ada di fungsi main umum program C. Secara otomatis, sistem operasi akan mengarahkan command dan argumen dari terminal ke sini. Ketika program dijalankan tanpa melalui terminal, biasanya command akan berisi path dan nama program, tanpa argumen.

Struktur fungsi main sebenarnya tidak ada standar yang mengatur. Sehingga beda lingkungan pemrograman, beda pula bentuknya. Tapi secara umum, bentuknya tidak jauh dari bentuk berikut.

int main(int argc, char **argv){
    ...
}

Misalnya saja pada pemrograman GUI Windows, bentuk fungsi main seperti berikut ini.

int WINAPI WinMain(
    HINSTANCE   hInstance,
    HINSTANCE   hPrevInstance,
    PWSTR       lpCmdLine,
    int         nCmdShow
    );

Ini karena Windows melakukan kerja yang berbeda untuk program console dan GUI. Namun di Linux, baik GUI ataupun console, bentuknya sama saja. Jadi, pada dasarnya, bentuk fungsi main ditentukan oleh bagaimana sistem operasi mengirimkan parameter ke program kita.

Bagaimanapun, kita dapat mengabaikan argumen-argumen tersebut, dan bahkan tidak mengembalikan return value, bila anda ingin demikian.

void main(){
    ...
}

Tidak masalah, program anda akan berjalan normal. Ini karena fungsi main istimewa. Compiler sudah mempertimbangkan dari awal, karena setiap lingkungan pemrograman akan memiliki model penyampaian argumen berbeda. Sehingga kita diberi kebebasan untuk memilih bentuk fungsi main. Semua argumen fungsi secara opsional dapat diolah ataupun diabaikan.
Load disqus comments

0 comments