Alt Seçeneklerin Çözümlenmesi
Kimi zaman tek seviyeli seçenekler yetersiz olur. Ya çok fazla seçenek olur ya da birbiriyle ilişkili seçenekler olur.
Bu durumda yazılımlar alt seçenekler kullanır. Bu tür yazılımlara bilinen en iyi örnek mount(8)'dur. -o seçeneği, virgül ayraçlı seçenek listesi olarak tek bir argüman alır. Böyle bir kodun geliştirilmesini kolaylaştırmak için getsubopt işlevi vardır.
const char* const *isimler,
altseçenekler parametresi işlenecek dizgenin adresini içeren bir gösterici olmalıdır. İşlev, bir alt seçeneği çözümledikten sonra sonraki alt seçeneğin adresini, tüm altseçenekler işlenmişse sonlandırıcı boş karakterin (\0) adresini bu argümana yerleştirir.
isimler parametresi bilinen altseçenek isimlerini içeren bir dizge dizisidir. Tüm dizgeler boş karakterle, dizge dizisi ise boş gösterici ile sonlandırılmalıdır. İşlev, geçerli altseçeneği bulmak için isimler dizisindeki altseçenek isimleriyle karşılaştırma yapar ve bulduğu ismin dizideki indisi ile döner.
Altseçeneğin = karakteri ile bir değerle ilişkilendirlmesi durumunda, değerin göstericisi değerler içinde döndürülür. Değer boş karakter sonlandırmalıdır. Bir değer belirtilmemişse boş gösterici kullanılır. Böylece çağrıcı gerekli değerin verilip verilmediğini ya da umulmadık bir değer mi verildi acaba diye sınama yapabilir.
Bir altseçeneğin isimler dizisinde olmaması durumunda, alt seçeneğin başlangıç adresi olası değerini de içererek değerler argümanına konur ve işlev -1 değeriyle döner.
Argp Örnekleri Başlangıç Alt Seçenek Çözümleme Örneği