Jak rozumiem, kiedy definiujemy tablicę taką jak const char argv[SIZE];
"ROZMIAR" musi być liczbą znaną w czasie kompilacji.zdefiniować tablicę z niepewnym rozmiarem
Ale ostatnio czytałem kod AOSP, i znalazłem to: 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()];
...
Wydaje się, że const char* argv[argsList.size()];
używa rozmiaru, który jest znany tylko w czasie wykonywania. Czy to dlatego, że ta tablica jest zdefiniowana w funkcji, która przydzieli tablicę w stosie lub ponieważ kompilator może dowiedzieć się, jaki jest rozmiar w czasie kompilacji?
Niektóre kompilatory obsługują (jako rozszerzenie) tablice na stosie o rozmiarze znanym tylko w środowisku wykonawczym. – BoBTFish
Autor oczekuje, że niestandardowy element (tablice o zmiennej długości, VLA) będzie obsługiwany przez dowolny kompilator C++ budujący ten kod. – WhozCraig
"Std :: list" używane do gromadzenia varargs następnie używane do tworzenia VLA i skopiować wszystko tam? Kto do cholery napisał te śmieci? Nie chcę już używać tego telefonu ... –