По-рано зададох въпрос относно C функции, които приемат неопределен брой параметри напр. void foo() { /* code here */ }
и който може да бъде извикан с неопределен брой аргументи от неопределен тип.
Когато попитах дали е възможно функция като void foo() { /* code here */ }
да получи параметрите, с които е извикана, напр. foo(42, "random")
някой каза, че:
Единственото, което можете да направите, е да използвате конвенциите за извикване и знанията за архитектурата, на която работите, и да получите параметри директно от стека. източник
Въпросът ми е:
Ако имам тази функция
void foo()
{
// get the parameters here
};
И аз го наричам: foo("dummy1", "dummy2")
възможно ли е да получите 2-та параметъра във функцията foo
директно от стека?
Ако да, как? Възможно ли е да имате достъп до пълния стек? Например, ако извикам функция рекурсивно, възможно ли е да имам достъп до всяко състояние на функция по някакъв начин?
Ако не, какъв е смисълът от функциите с неопределен брой параметри? Това грешка в езика за програмиране C ли е? В кои случаи някой би искал foo("dummy1", "dummy2")
да компилира и работи добре за функция, чиято заглавка е void foo()
?
void foo() {}
не приема никакви аргументи.void foo();
(само декларация, не е свързана с дефиницията) от друга страна не казва какво вземаfoo
. Така че и в двата ви примера не можете да подадете нищо на foo. - person Mat   schedule 02.03.2014