Options को Parse करना
Flags संभालना
Options को Parse करना, CoddyKit पर C Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
विकल्प और स्थितीय आर्ग्युमेंट
कमांड-लाइन आर्ग्युमेंट दो प्रकार के होते हैं। स्थितीय आर्ग्युमेंट फ़ाइल-नाम जैसे मान होते हैं। विकल्प (जिन्हें फ्लैग भी कहा जाता है) डैश से शुरू होते हैं, जैसे -v या --help।
इस पाठ में बताया गया है कि फ्लैग को मैन्युअल रूप से कैसे पहचाना और सँभाला जाता है।
#include <stdio.h>
int main(int argc, char *argv[]) {
for (int i = 1; i < argc; i++) {
if (argv[i][0] == '-')
printf("option: %s\n", argv[i]);
else
printf("value: %s\n", argv[i]);
}
return 0;
}फ्लैग पहचानना
किसी विशेष फ्लैग की जाँच करने के लिए प्रत्येक आर्ग्युमेंट की तुलना strcmp से करें।
यहाँ -v मिलने पर विस्तृत मोड के लिए एक बूलियन मान सेट किया गया है।
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
int verbose = 0;
for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "-v") == 0)
verbose = 1;
}
printf("verbose = %d\n", verbose);
return 0;
}लंबे विकल्पों का समर्थन करना
कई टूल छोटे रूप (-h) और लंबे रूप (--help) दोनों स्वीकार करते हैं।
|| से जोड़ी गई दो तुलनाओं द्वारा दोनों में से किसी भी लिखावट की जाँच करें।
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "-h") == 0 ||
strcmp(argv[i], "--help") == 0) {
printf("Usage: prog [options]\n");
return 0;
}
}
printf("No help requested\n");
return 0;
}मान लेने वाले विकल्प
कुछ फ्लैग को -o output.txt जैसे आर्ग्युमेंट की आवश्यकता होती है। ऐसा फ्लैग मिलने पर argv का अगला तत्व उसका मान होता है।
लूप इंडेक्स बढ़ाएँ और जाँचें कि आप अंत से आगे तो नहीं निकल गए हैं।
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
const char *output = "default.txt";
for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "-o") == 0 && i + 1 < argc) {
output = argv[++i];
}
}
printf("Output file: %s\n", output);
return 0;
}अनुपस्थित मान सँभालना
यदि -o अंतिम आर्ग्युमेंट है, तो उसके बाद कोई मान नहीं है। argv[i+1] पढ़ना सीमा से बाहर पहुँचने जैसा होगा।
अगला टोकन लेने से पहले हमेशा i + 1 < argc की जाँच करें और अन्यथा त्रुटि की सूचना दें।
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "-n") == 0) {
if (i + 1 >= argc) {
printf("Error: -n needs a value\n");
return 1;
}
printf("n = %s\n", argv[++i]);
}
}
return 0;
}बूलियन फ्लैग और मानों को साथ सँभालना
एक वास्तविक पार्सर एक साथ कई फ्लैग सँभालता है: कुछ बूलियन होते हैं और कुछ के साथ मान होते हैं। प्रत्येक सेटिंग के लिए अलग-अलग वेरिएबल का उपयोग करें।
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
int verbose = 0;
const char *name = "world";
for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "-v") == 0) verbose = 1;
else if (strcmp(argv[i], "-name") == 0 && i+1 < argc) name = argv[++i];
}
if (verbose) printf("verbose mode\n");
printf("Hello, %s\n", name);
return 0;
}विकल्पों का अंत पहचानना
परंपरा के अनुसार, अकेला -- विकल्पों के अंत को दर्शाता है। उसके बाद की हर चीज़ को स्थितीय आर्ग्युमेंट माना जाता है, भले ही वह डैश से शुरू हो।
इससे उपयोगकर्ता - से शुरू होने वाले फ़ाइल-नाम दे सकते हैं।
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
int opts_done = 0;
for (int i = 1; i < argc; i++) {
if (!opts_done && strcmp(argv[i], "--") == 0) {
opts_done = 1;
continue;
}
printf("%s: %s\n", opts_done ? "value" : "token", argv[i]);
}
return 0;
}स्थितीय आर्ग्युमेंट एकत्र करना
अक्सर आपको फ्लैग के साथ फ़ाइलों की सूची भी चाहिए होती है। पहचाने गए विकल्पों को छोड़ दें और बाकी को स्थितीय आर्ग्युमेंट के रूप में संग्रहित करें।
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
for (int i = 1; i < argc; i++) {
if (argv[i][0] == '-') continue;
printf("file: %s\n", argv[i]);
}
return 0;
}अज्ञात विकल्पों को सँभालना
एक अच्छा टूल अज्ञात फ्लैग को चुपचाप अनदेखा करने के बजाय उनकी सूचना देता है। अपने ज्ञात विकल्पों से तुलना करें और अन्यथा चेतावनी दें।
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
for (int i = 1; i < argc; i++) {
if (argv[i][0] != '-') continue;
if (strcmp(argv[i], "-v") != 0)
printf("Unknown option: %s\n", argv[i]);
}
return 0;
}विकल्पों के मान बदलना
विकल्पों के मान स्ट्रिंग के रूप में मिलते हैं। संख्यात्मक मानों को strtol से बदलें; यह अंत वाले पॉइंटर के माध्यम से पार्स करने की त्रुटियों की भी सूचना देता है।
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
int count = 1;
for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "-c") == 0 && i+1 < argc)
count = (int) strtol(argv[++i], NULL, 10);
}
printf("count = %d\n", count);
return 0;
}वास्तविक पार्सर क्यों उपयोगी है
मैन्युअल पार्सिंग काम करती है, लेकिन संयुक्त छोटे फ्लैग (-vf), = लिखावट (--name=foo) और क्रम संबंधी नियमों के साथ उलझने लगती है।
अगले भाग में बताया गया मानक getopt फ़ंक्शन इन परंपराओं को आपके लिए सँभालता है।
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Parsed %d tokens manually\n", argc - 1);
return 0;
}त्वरित जाँच
विकल्पों की पार्सिंग से जुड़ी समस्याओं की अपनी समझ जाँचें।
पुनरावलोकन
आपने मैन्युअल विकल्प पार्सिंग सीखी:
- फ्लैग
-से शुरू होते हैं; उनकी तुलनाstrcmpसे करें। ||से छोटे और लंबे दोनों रूपों का समर्थन करें।- मान लेने वाले विकल्प अगले टोकन को लेते हैं —
i + 1 < argcसे सुरक्षा-जाँच करें। --विकल्प पार्सिंग समाप्त करता है; अज्ञात फ्लैग की सूचना दें; संख्यात्मक मानों कोstrtolसे बदलें।
एआई शिक्षक के साथ C सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 39
- पाठ
- 144
अक्सर पूछे जाने वाले प्रश्न
क्या “Options को Parse करना” पाठ निःशुल्क है?
हाँ—“Options को Parse करना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Options को Parse करना” में मैं क्या सीखूँगा?
Flags संभालना आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“Options को Parse करना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- argc और argv
- Options को Parse करना
- getopt
- CLI Tool बनाना