के साथ सरणी को परिभाषित करें जैसा कि मैं इसे समझता हूं, जब हम const char argv[SIZE];
"SIZE" जैसे किसी सरणी को परिभाषित करते हैं तो संकलन समय पर जाना जाता है।असुरक्षित आकार
लेकिन हाल ही में मैं AOSP कोड को पढ़ने के लिए, और इस पाया: http://androidxref.com/5.1.1_r6/xref/system/netd/server/NetdConstants.cpp#70
static int execIptables(IptablesTarget target, bool silent, va_list args) {
/* Read arguments from incoming va_list; we expect the list to be NULL terminated. */
std::list<const char*> argsList;
argsList.push_back(NULL);
const char* arg;
do {
arg = va_arg(args, const char *);
argsList.push_back(arg);
} while (arg);
int i = 0;
const char* argv[argsList.size()];
...
ऐसा लगता है कि const char* argv[argsList.size()];
एक आकार जो केवल कार्यावधि में जाना जाता है का उपयोग करता है। ऐसा इसलिए है क्योंकि इस सरणी को एक फ़ंक्शन में परिभाषित किया गया है जो सरणी में सरणी आवंटित करेगा या क्योंकि संकलक यह समझ सकता है कि आकार संकलित समय पर क्या है?
कुछ कंपाइलर्स स्टैक पर एक एक्सटेंशन के रूप में समर्थन (एक विस्तार के रूप में) सरणी जो केवल रनटाइम पर जाना जाता है। – BoBTFish
लेखक इस कोड का निर्माण कर रहे किसी भी सी ++ कंपाइलर द्वारा समर्थित होने के लिए एक गैर मानक फीचर (परिवर्तनीय लंबाई सरणी, वीएलए) की उम्मीद कर रहा है। – WhozCraig
एक 'std :: list' varargs जमा करने के लिए प्रयुक्त होता है, फिर वीएलए बनाने के लिए उपयोग किया जाता है और वहां सबकुछ कॉपी करता है? इस कचरे को किसने लिखा है? मैं अब इस फोन का उपयोग नहीं करना चाहता ... –