Sistem bir C yazılımını
main işlevini çağırarak başlatır. Bu aslında sizin yazdığınız, ismi
main olan bir işlevdir; bu işlevi yazmamışsanız, yazılımınızı hatasız derlemeniz mümkün olamaz.
ISO C'ye göre main işlevini ya argümansız ya da yazılımın komut satırı argümanlarını ifade eden iki argümanla bu örnekteki gibi tanımlayabilirsiniz:
int main (int argc, char *argv[])
Komut satırı argümanları kabukta yazılımı çağırırken kullanılan boşluklarla ayrılmış bir takım sözcüklerdir; örneğin,
cat foo bar gibi bir komut satırında
foo ve
bar argümanlardır. Bir yazılımın komut satırı argümanlarına bakabileceğiniz tek yer
main işlevidir ve bunu işlevin argümanları sağlar. Eğer
main işlevini argümansız olarak tanımlamışsanız, komut satırı argümanlarını elde edemezsiniz.
argc argümanının değeri komut satırı argümanlarının sayısıdır. argv argümanı ise bir C dizgeleri vektörüdür; yani elemanları komut satırı argüman dizgeleri olan bir dizidir. Yazılımın dosya ismi de bu vektör içinde vektörün ilk elemanı olarak yer alır; argc ise bu dizideki elemanların sayısıdır. Son eleman daima bir boş göstericidir: argv[argc] bir boş göstericidir.
cat foo bar komutu için, argc argümanının değeri 3'tür ve argv, elemanları "cat", "foo" ve "bar" olan bir dizidir.
Unix sistemlerinde main işlevini üç argüman kullanılan üçüncü bir yöntemle tanımlayabilirsiniz:
int main (int argc, char *argv[], char *envp[])
İlk iki argüman aynıdır. Üçüncü argüman olan
envp yazılımın ortamını verir;
environ değeri ile aynıdır. Bkz.
Ortam Değişkenleri. POSIX.1 bu üçüncü argümana izin vermez, dolayısıyla taşınabilirlik açısından en iyisi
main işlevini iki argümanlı olarak yazmak ve
environ değerini kullanmaktır.