Передача переменных аргументов в C - PullRequest
2 голосов
/ 31 марта 2011

Кто-нибудь знает, как переменные аргументы передаются в классическом C?Сегодня я провел некоторую отладку, и большинство обычных аргументов передаются через стек.Однако, похоже, что это не относится к переменным аргументам.Эти параметры хранятся где-то еще как строки констант?

Заранее спасибо!

Ответы [ 4 ]

3 голосов
/ 31 марта 2011

Это зависит от платформы. /usr/include/stdarg.h - это место, где можно начать поиск деталей.

2 голосов
/ 31 марта 2011

Они очень часто передаются в стек.То, что вы ищете, это спецификации ABI для используемой вами платформы.

Для платформы AMD64 посмотрите, например, здесь .

1 голос
/ 31 марта 2011
0 голосов
/ 27 ноября 2011

Вот забавный трюк

void func(type* values) {
    while(*values) {
        x = *values++;
        /* do whatever with x */
    }
}

func((type[]){val1,val2,val3,val4,0});
...