Dalam banyak C++ IDE's dan kompiler, ketika itu menghasilkan fungsi utama untuk anda, itu tampak seperti ini:
int main(int argc, char *argv[])
Ketika saya kode C++ tanpa IDE, hanya dengan command line compiler, saya ketik:
int main()
tanpa parameter apapun. Apa artinya ini, dan itu penting untuk program saya?
argv
dan argc
adalah bagaimana argumen baris perintah yang lulus untuk main()
dalam C dan C++.
argc
akan menjadi jumlah string yang ditunjukkan oleh argv
. Ini akan (dalam praktek) menjadi 1 ditambah jumlah argumen, karena hampir semua implementasi akan tambahkan nama program untuk array.
Variabel-variabel yang bernama argc
(argumen count) dan argv
(vektor argumen) oleh konvensi, tetapi mereka dapat diberikan valid identifier: int main(int num_args, char** arg_strings)
adalah sama-sama sah.
Mereka juga dapat dihilangkan sepenuhnya, menghasilkan int main()
, jika anda tidak berniat untuk proses argumen baris perintah.
Cobalah program berikut ini:
#include <iostream>
int main(int argc, char** argv) {
std::cout << "Have " << argc << " arguments:" << std::endl;
for (int i = 0; i < argc; ++i) {
std::cout << argv[i] << std::endl;
}
}
Berjalan dengan ./tes a1 b2 c3
akan output
Have 4 arguments:
./test
a1
b2
c3
argc
adalah jumlah dari argumen-argumen yang dilewatkan ke program anda dari baris perintah dan argv
adalah array argumen.
Anda dapat loop melalui argumen-argumen yang mengetahui jumlah mereka seperti:
for(int i = 0; i < argc; i++)
{
// argv[i] is the argument at index i
}
Misalkan anda menjalankan program anda sehingga (menggunakan sh
sintaks):
myprog arg1 arg2 'arg 3'
Jika anda dinyatakan utama anda sebagai int main(int argc, char *argv[])
, maka (dalam kebanyakan lingkungan), anda main()
akan disebut seolah-olah seperti:
p = { "myprog", "arg1", "arg2", "arg 3", NULL };
exit(main(4, p));
Namun, jika anda dinyatakan utama anda sebagai int main()
, itu akan disebut sesuatu seperti
exit(main());
dan anda don't mendapatkan argumen berlalu.
Dua hal tambahan yang perlu diperhatikan:
main
. Jika platform tertentu menerima tambahan argumen atau berbeda jenis kembali, maka itu's perpanjangan dan tidak boleh diandalkan dalam program portable.*argv[]
dan **argv
yang persis sama, sehingga anda dapat menulis int main(int argc, char *argv[])
sebagai int main(int argc, char **argv)
.Parameter untuk main
mewakili parameter baris perintah yang disediakan untuk program ini ketika itu dimulai. The argc
parameter merupakan jumlah argumen baris perintah, dan `char *argv [] adalah array dari string (karakter pointer) yang mewakili individu argumen yang diberikan pada baris perintah.
int main();
Ini adalah pernyataan sederhana. Tidak mengambil apapun argumen baris perintah.
int main(int argc, char* argv[]);
Deklarasi ini digunakan ketika program anda harus mengambil argumen command-line. Ketika menjalankan seperti:
myprogram arg1 arg2 arg3
argc
, atau Argumen Menghitung, akan ditetapkan 4 (empat argumen), dan argv
, atau Argumen Vektor, akan diisi dengan string pointer ke "myprogram", "arg1", "arg2", dan "arg3". Program doa (aplikasiku
) termasuk dalam argumen!
Sebagai alternatif, anda bisa menggunakan:
int main(int argc, char** argv);
Hal ini juga berlaku.
Ada parameter lain yang dapat anda tambahkan:
int main (int argc, char *argv[], char *envp[])
The envp
parameter juga mengandung variabel lingkungan. Setiap entri berikut ini format:
VARIABLENAME=VariableValue
seperti ini:
SHELL=/bin/bash
Variabel lingkungan adalah daftar null-terminated.
PENTING: JANGAN menggunakan argv
atau envp
nilai-nilai secara langsung dalam panggilan ke sistem ()
! Ini adalah besar lubang keamanan sebagai pengguna yang jahat bisa mengatur variabel lingkungan untuk baris perintah perintah dan (berpotensi) menimbulkan kerusakan besar. Secara umum, hanya don't menggunakan sistem ()
. Ada hampir selalu solusi yang lebih baik dilaksanakan melalui perpustakaan C.
Main
fungsi dapat memiliki dua parameter, argc
dan argv
. argc
adalah bilangan bulat (int
) parameter, dan itu adalah jumlah dari argumen-argumen yang dilewatkan ke program.
Nama program adalah selalu argumen pertama, jadi akan ada setidaknya satu argumen untuk sebuah program dan nilai minimum dari argc
akan menjadi salah satu. Tapi jika program itu sendiri telah dua argumen nilai argc
akan menjadi tiga.
Parameter argv
menunjuk ke array string dan disebut vektor argumen. Ini adalah salah satu dimensi array string argumen fungsi.
Kedua
int main(int argc, char *argv[]);
int main();
ini adalah definisi hukum dari entry point untuk C atau C++ program. Stroustrup: C++ Style dan Teknik FAQ rincian beberapa variasi yang mungkin atau hukum untuk fungsi utama anda.