व्यावहारिक उदाहरण
एक logging function
व्यावहारिक उदाहरण, CoddyKit पर C Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
लॉगिंग फ़ंक्शन
लॉगर वैरिएडिक के वास्तविक दुनिया के उपयोग का बेहतरीन उदाहरण है। हम log_msg("user %s scored %d", name, score) को printf की तरह कॉल करना चाहते हैं।
यह पाठ एक छोटी, उपयोगी लॉगिंग उपयोगिता बनाता है।
#include <stdio.h>
#include <stdarg.h>
void log_msg(const char *fmt, ...) {
va_list a; va_start(a, fmt);
vprintf(fmt, a);
va_end(a);
printf("\n");
}
int main(void) {
log_msg("user %s scored %d", "Ann", 90);
return 0;
}गंभीरता स्तर जोड़ना
वास्तविक लॉगर संदेशों को INFO या ERROR जैसे स्तर से चिह्नित करते हैं। स्तर के लिए फ़ॉर्मैट स्ट्रिंग से पहले एक निश्चित पैरामीटर जोड़ें।
#include <stdio.h>
#include <stdarg.h>
void logf(const char *level, const char *fmt, ...) {
printf("[%s] ", level);
va_list a; va_start(a, fmt);
vprintf(fmt, a);
va_end(a);
printf("\n");
}
int main(void) {
logf("INFO", "started with %d workers", 4);
return 0;
}संदेशों में समय-चिह्न जोड़ना
फ़ॉर्मैट आगे भेजने से पहले हर पंक्ति में अतिरिक्त संदर्भ जोड़ा जा सकता है। यहाँ समय-चिह्न के स्थान पर एक नकली काउंटर पहले जोड़ा गया है।
#include <stdio.h>
#include <stdarg.h>
static int line_no = 0;
void logf(const char *fmt, ...) {
printf("#%d ", ++line_no);
va_list a; va_start(a, fmt);
vprintf(fmt, a);
va_end(a);
printf("\n");
}
int main(void) {
logf("first %s", "event");
logf("value %d", 7);
return 0;
}stderr में लॉग करना
त्रुटियाँ और निदान-संबंधी संदेश सामान्यतः stderr में भेजे जाते हैं। vfprintf(stderr, fmt, args) का उपयोग करें ताकि लॉग आउटपुट सामान्य प्रोग्राम आउटपुट में न मिले।
#include <stdio.h>
#include <stdarg.h>
void err(const char *fmt, ...) {
fprintf(stderr, "ERROR: ");
va_list a; va_start(a, fmt);
vfprintf(stderr, fmt, a);
va_end(a);
fprintf(stderr, "\n");
}
int main(void) {
err("failed to open %s", "data.txt");
return 0;
}सशर्त लॉगिंग
वर्बोसिटी सीमा कम प्राथमिकता वाले संदेशों को शांत करने देती है। प्रिंट करने से पहले संदेश के स्तर की तुलना कॉन्फ़िगर की गई न्यूनतम सीमा से करें।
#include <stdio.h>
#include <stdarg.h>
static int min_level = 2;
void logf(int level, const char *fmt, ...) {
if (level < min_level) return;
va_list a; va_start(a, fmt);
vprintf(fmt, a);
va_end(a);
printf("\n");
}
int main(void) {
logf(1, "debug hidden");
logf(3, "important %d", 42);
return 0;
}संदेश स्ट्रिंग बनाना
कभी-कभी आप फ़ॉर्मैट किया हुआ पाठ प्रिंट करने के बजाय बफ़र में चाहते हैं। इसे तैयार करने के लिए vsnprintf का उपयोग करें, फिर तय करें कि उसके साथ क्या करना है।
#include <stdio.h>
#include <stdarg.h>
void capture(const char *fmt, ...) {
char buf[128];
va_list a; va_start(a, fmt);
vsnprintf(buf, sizeof(buf), fmt, a);
va_end(a);
printf("captured: %s\n", buf);
}
int main(void) {
capture("id=%d name=%s", 5, "box");
return 0;
}वैरिएडिक अधिकतम फ़ंक्शन
वैरिएडिक गणितीय सहायक फ़ंक्शन के लिए भी उपयोगी हैं। यहाँ एक फ़ंक्शन है जो गिनती वाले पैरामीटर का उपयोग करके कई पूर्णांकों में से सबसे बड़ा लौटाता है।
#include <stdio.h>
#include <stdarg.h>
int max_of(int count, ...) {
va_list a; va_start(a, count);
int best = va_arg(a, int);
for (int i = 1; i < count; i++) {
int v = va_arg(a, int);
if (v > best) best = v;
}
va_end(a);
return best;
}
int main(void) {
printf("%d\n", max_of(4, 3, 9, 2, 7));
return 0;
}स्ट्रिंग जोड़ना
NULL सेंटिनल का उपयोग करके, हम किसी भी संख्या में स्ट्रिंग को एक बफ़र में जोड़ सकते हैं।
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
void join(char *out, const char *first, ...) {
out[0] = '\0';
va_list a; va_start(a, first);
const char *s = first;
while (s) { strcat(out, s); s = va_arg(a, const char *); }
va_end(a);
}
int main(void) {
char buf[64];
join(buf, "a", "b", "c", (char *)NULL);
printf("%s\n", buf);
return 0;
}वैरिएडिक int की गिनती करना
सेंटिनल-आधारित काउंटर दिखाता है कि यह तरीका कितना लचीला है। हम मानों की गिनती तब तक करते हैं जब तक समाप्ति वाला 0 न मिल जाए।
#include <stdio.h>
#include <stdarg.h>
int count_until_zero(int first, ...) {
va_list a; va_start(a, first);
int n = 0, v = first;
while (v != 0) { n++; v = va_arg(a, int); }
va_end(a);
return n;
}
int main(void) {
printf("%d\n", count_until_zero(5, 6, 7, 0));
return 0;
}इसे मैक्रो के रूप में रैप करना
एक सामान्य उपाय ऐसा मैक्रो बनाना है जो स्तर अपने-आप भर दे, ताकि कॉल करने वाले को कम लिखना पड़े। मैक्रो वास्तविक वैरिएडिक फ़ंक्शन को कॉल आगे भेजता है।
#include <stdio.h>
#include <stdarg.h>
void real_log(const char *lvl, const char *fmt, ...) {
printf("[%s] ", lvl);
va_list a; va_start(a, fmt);
vprintf(fmt, a);
va_end(a);
printf("\n");
}
#define LOG_INFO(...) real_log("INFO", __VA_ARGS__)
int main(void) {
LOG_INFO("ready in %d ms", 50);
return 0;
}लॉगर का उपयोग करना
यह स्तर और समय-काउंटर को मिलाने वाला एक पूरा छोटा लॉगर है, जिसे सीधे किसी प्रोग्राम में जोड़ा जा सकता है।
#include <stdio.h>
#include <stdarg.h>
static int seq = 0;
void mylog(const char *lvl, const char *fmt, ...) {
printf("%04d [%s] ", ++seq, lvl);
va_list a; va_start(a, fmt);
vprintf(fmt, a);
va_end(a);
printf("\n");
}
int main(void) {
mylog("INFO", "boot ok");
mylog("WARN", "low memory: %d MB", 64);
return 0;
}त्वरित जाँच
वैरिएडिक लॉगिंग डिज़ाइन के बारे में अपनी समझ जाँचें।
पुनरावलोकन
आपने व्यावहारिक वैरिएडिक उपकरण बनाए:
- एक लॉगर, जो अपना फ़ॉर्मैट
vprintf/vfprintfको आगे भेजता है। - स्तर, काउंटर, stderr आउटपुट और सशर्त फ़िल्टरिंग जोड़ी।
- संदेशों को बफ़र में सुरक्षित रखने के लिए
vsnprintfका उपयोग किया। - सेंटिनल-आधारित सहायक फ़ंक्शन और सुविधा देने वाला मैक्रो रैपर देखा।
एआई शिक्षक के साथ C सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 39
- पाठ
- 144
अक्सर पूछे जाने वाले प्रश्न
क्या “व्यावहारिक उदाहरण” पाठ निःशुल्क है?
हाँ—“व्यावहारिक उदाहरण” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“व्यावहारिक उदाहरण” में मैं क्या सीखूँगा?
एक logging function आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“व्यावहारिक उदाहरण” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- stdarg Macros
- printf-जैसे Functions लिखना
- Type Safety से जुड़ी चिंताएँ
- व्यावहारिक उदाहरण