Wie ich es verstehe, wenn wir ein Array wie const char argv[SIZE];
definieren "SIZE" muss eine Zahl sein, die zur Kompilierzeit bekannt ist.define Array mit unsicherer Größe
Aber vor kurzem las ich AOSP Code, und fanden diese: 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()];
...
Es scheint, dass const char* argv[argsList.size()];
eine Größe verwendet, die erst zur Laufzeit bekannt ist. Liegt das daran, dass dieses Array in einer Funktion definiert ist, die das Array im Stack zuweist, oder weil der Compiler herausfinden kann, wie groß die Größe zur Kompilierzeit ist?
Einige Compiler unterstützen (als Erweiterung) Arrays auf dem Stack mit einer Größe, die nur zur Laufzeit bekannt ist. – BoBTFish
Der Autor erwartet eine nicht standardmäßige Funktion (variable length arrays, VLAs), die von dem C++ - Compiler unterstützt wird, der diesen Code erstellt. – WhozCraig
Eine 'std :: list', die verwendet wird, um varargs zu akkumulieren, wird dann verwendet, um ein VLA zu erstellen und alles dort zu kopieren? Wer zum Teufel hat diesen Müll geschrieben? Ich möchte dieses Telefon nicht mehr benutzen ... –