Цитата(Aesthete Animus @ May 27 2008, 17:48)

Подскажите, как задать в AVR GCC функцию, которая будет вызываться по соглашению cdecl?
А нельзя ли всё-таки узнать - что за безумная мысль?
Ну интересно.
А я взамен скажу как
Стандарт вроде бы ни к чему не обязывает и stdarg.h уже не макросы содержит, а объявления встроенных функций компилятора.
Но переменное число параметров как минимум проще реализовать через стек не используя регистры вообще. По способу использования va_start - последний "нормальный" аргумент перед эллипсисом тоже надо на стеке держать. Всё, что перед ним - в принципе можно и на регистрах.
Но оказывается, что avr-gcc - по крайней мере и 3.4.6 (WinAVR-20060421) и прочие до 4.2.2 (WinAVR-20071221) и 4.3.0 - на всех уровнях оптимизации для функций с переменным числом аргументов ВСЕ аргументы передаёт через стек.
Итого опишите функцию, добавив после необходимых аргументов троеточие
Код
int foo(unsigned char a, unsigned b, signed char c, ...)
{
return a+b+c;
}
И спокойно вызывайте, ничего не посылая на три точки.
Код
int moo(void)
{
return foo(0, 1, 2);
}