आप तर्क सूची के अंत को चिह्नित करने के लिए इच्छित मूल्य का उपयोग कर सकते हैं, बशर्ते आप तर्क सूची से इसे प्राप्त करने के बारे में पर्याप्त जानकारी दें। संकलक सामान्य रूप से जांच नहीं करेगा कि आपके द्वारा चुने गए मान को वास्तव में पारित किया जाता है जब फ़ंक्शन कहा जाता है, इसलिए आपको इसकी देखभाल करने की आवश्यकता होगी।
अनिवार्य रूप से आप सामान्य तरीके से एक भिन्न कार्य बनाते हैं, और फ़ंक्शन के अंदर आप अपने प्रेषण से मेल खाने वाले किसी व्यक्ति को पढ़ते समय तर्क पढ़ना बंद कर देते हैं - विशेष रूप से कुछ भी करने के लिए विशेष नहीं है, लेकिन आपको यह जानने की आवश्यकता है कि किस प्रकार के पढ़ने के लिए तर्क।
उदाहरण के लिए:
#include <stdarg.h>
/* Count arguments up to the number 5 */
int countArgsTilFive(int first, ...)
{
int res = 1;
va_list ap;
if (first == 5) return 0;
va_start(ap,first);
while (va_arg(ap,int) != 5) res++;
va_end(ap);
return res;
}
... अपने सभी तर्क है कि 5
से पहले होने की गणना होती है। यदि आप सूची में कहीं भी 5
पास नहीं करते हैं, या यदि आप इसे तर्क देते हैं जो int
नहीं हैं तो खराब चीजें हो सकती हैं।
संकेत दिए गए है, जहां एक प्रहरी नोड पिछले, तर्क के रूप में पहले के रूप में पारित हो जाता है, और फिर से साथ एक और उदाहरण:
/* Count arguments, excluding the first, until the first occurs again */
int countPtrs(void *sentinel, ...)
{
int res = 0;
va_list ap;
va_start(ap,sentinel);
while (va_arg(ap,void *) != sentinel) res++;
va_end(ap);
return res;
}
जहां तक कोई फ़ंक्शन बनाते हैं, स्पष्ट रूप से आप इसे _can_ करते हैं। मुझे यह जांचने के लिए किसी भी जीएनयू सीमाओं के बारे में पता नहीं है कि तर्क मनमानी varargs योजनाओं के लिए सही हैं। उनके पास पैरामीटर को "गिनती" के रूप में चिह्नित करने के लिए एक विशेषता भी नहीं है कि कितने तर्क दिए गए थे ताकि संकलक जांच सके कि उन्हें सही मिला है या नहीं। –